--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/bwins/alfwidgetutilsu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,36 @@
+EXPORTS
+ ??0AlfAttributeException@osncore@@QAE@H@Z @ 1 NONAME ; osncore::AlfAttributeException::AlfAttributeException(int)
+ ??0AlfAttributeException@osncore@@QAE@HPBD0@Z @ 2 NONAME ; osncore::AlfAttributeException::AlfAttributeException(int, char const *, char const *)
+ ??0AlfDataException@osncore@@QAE@H@Z @ 3 NONAME ; osncore::AlfDataException::AlfDataException(int)
+ ??0AlfDataException@osncore@@QAE@HPBD0@Z @ 4 NONAME ; osncore::AlfDataException::AlfDataException(int, char const *, char const *)
+ ??0AlfElementException@osncore@@QAE@H@Z @ 5 NONAME ; osncore::AlfElementException::AlfElementException(int)
+ ??0AlfElementException@osncore@@QAE@HPBD0@Z @ 6 NONAME ; osncore::AlfElementException::AlfElementException(int, char const *, char const *)
+ ??0AlfException@osncore@@QAE@H@Z @ 7 NONAME ; osncore::AlfException::AlfException(int)
+ ??0AlfException@osncore@@QAE@HPBD0@Z @ 8 NONAME ; osncore::AlfException::AlfException(int, char const *, char const *)
+ ??0AlfException@osncore@@QAE@HPBD@Z @ 9 NONAME ; osncore::AlfException::AlfException(int, char const *)
+ ??0AlfFactoryPluginLoader@Alf@@QAE@XZ @ 10 NONAME ; Alf::AlfFactoryPluginLoader::AlfFactoryPluginLoader(void)
+ ??0AlfVisualException@osncore@@QAE@H@Z @ 11 NONAME ; osncore::AlfVisualException::AlfVisualException(int)
+ ??0AlfVisualException@osncore@@QAE@HPBD0@Z @ 12 NONAME ; osncore::AlfVisualException::AlfVisualException(int, char const *, char const *)
+ ??0AlfWidgetException@osncore@@QAE@H@Z @ 13 NONAME ; osncore::AlfWidgetException::AlfWidgetException(int)
+ ??0AlfWidgetException@osncore@@QAE@HPBD0@Z @ 14 NONAME ; osncore::AlfWidgetException::AlfWidgetException(int, char const *, char const *)
+ ??0AlfWidgetFactoryLoader@Alf@@QAE@XZ @ 15 NONAME ; Alf::AlfWidgetFactoryLoader::AlfWidgetFactoryLoader(void)
+ ??1AlfAttributeException@osncore@@UAE@XZ @ 16 NONAME ; osncore::AlfAttributeException::~AlfAttributeException(void)
+ ??1AlfDataException@osncore@@UAE@XZ @ 17 NONAME ; osncore::AlfDataException::~AlfDataException(void)
+ ??1AlfElementException@osncore@@UAE@XZ @ 18 NONAME ; osncore::AlfElementException::~AlfElementException(void)
+ ??1AlfException@osncore@@UAE@XZ @ 19 NONAME ; osncore::AlfException::~AlfException(void)
+ ??1AlfFactoryPluginLoader@Alf@@UAE@XZ @ 20 NONAME ; Alf::AlfFactoryPluginLoader::~AlfFactoryPluginLoader(void)
+ ??1AlfVisualException@osncore@@UAE@XZ @ 21 NONAME ; osncore::AlfVisualException::~AlfVisualException(void)
+ ??1AlfWidgetException@osncore@@UAE@XZ @ 22 NONAME ; osncore::AlfWidgetException::~AlfWidgetException(void)
+ ??1AlfWidgetFactoryLoader@Alf@@UAE@XZ @ 23 NONAME ; Alf::AlfWidgetFactoryLoader::~AlfWidgetFactoryLoader(void)
+ ?errorCode@AlfException@osncore@@UBEHXZ @ 24 NONAME ; int osncore::AlfException::errorCode(void) const
+ ?fileAndLine@AlfException@osncore@@QBEPBDXZ @ 25 NONAME ; char const * osncore::AlfException::fileAndLine(void) const
+ ?info@AlfException@osncore@@UBEPBDXZ @ 26 NONAME ; char const * osncore::AlfException::info(void) const
+ ?loadFactoryPlugin@AlfFactoryPluginLoader@Alf@@QAEPAVIAlfFactoryPlugin@2@PBD@Z @ 27 NONAME ; class Alf::IAlfFactoryPlugin * Alf::AlfFactoryPluginLoader::loadFactoryPlugin(char const *)
+ ?loadWidgetFactory@AlfWidgetFactoryLoader@Alf@@QAEPAVIAlfWidgetFactory@2@AAVCAlfEnv@@@Z @ 28 NONAME ; class Alf::IAlfWidgetFactory * Alf::AlfWidgetFactoryLoader::loadWidgetFactory(class CAlfEnv &)
+ ?what@AlfAttributeException@osncore@@UBEPBDXZ @ 29 NONAME ; char const * osncore::AlfAttributeException::what(void) const
+ ?what@AlfDataException@osncore@@UBEPBDXZ @ 30 NONAME ; char const * osncore::AlfDataException::what(void) const
+ ?what@AlfElementException@osncore@@UBEPBDXZ @ 31 NONAME ; char const * osncore::AlfElementException::what(void) const
+ ?what@AlfException@osncore@@UBEPBDXZ @ 32 NONAME ; char const * osncore::AlfException::what(void) const
+ ?what@AlfVisualException@osncore@@UBEPBDXZ @ 33 NONAME ; char const * osncore::AlfVisualException::what(void) const
+ ?what@AlfWidgetException@osncore@@UBEPBDXZ @ 34 NONAME ; char const * osncore::AlfWidgetException::what(void) const
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/eabi/alfwidgetutilsu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,87 @@
+EXPORTS
+ _ZN3Alf22AlfFactoryPluginLoader17loadFactoryPluginEPKc @ 1 NONAME
+ _ZN3Alf22AlfFactoryPluginLoaderC1Ev @ 2 NONAME
+ _ZN3Alf22AlfFactoryPluginLoaderC2Ev @ 3 NONAME
+ _ZN3Alf22AlfFactoryPluginLoaderD0Ev @ 4 NONAME
+ _ZN3Alf22AlfFactoryPluginLoaderD1Ev @ 5 NONAME
+ _ZN3Alf22AlfFactoryPluginLoaderD2Ev @ 6 NONAME
+ _ZN3Alf22AlfWidgetFactoryLoader17loadWidgetFactoryER7CAlfEnv @ 7 NONAME
+ _ZN3Alf22AlfWidgetFactoryLoaderC1Ev @ 8 NONAME
+ _ZN3Alf22AlfWidgetFactoryLoaderC2Ev @ 9 NONAME
+ _ZN3Alf22AlfWidgetFactoryLoaderD0Ev @ 10 NONAME
+ _ZN3Alf22AlfWidgetFactoryLoaderD1Ev @ 11 NONAME
+ _ZN3Alf22AlfWidgetFactoryLoaderD2Ev @ 12 NONAME
+ _ZN7osncore12AlfExceptionC1Ei @ 13 NONAME
+ _ZN7osncore12AlfExceptionC1EiPKc @ 14 NONAME
+ _ZN7osncore12AlfExceptionC1EiPKcS2_ @ 15 NONAME
+ _ZN7osncore12AlfExceptionC2Ei @ 16 NONAME
+ _ZN7osncore12AlfExceptionC2EiPKc @ 17 NONAME
+ _ZN7osncore12AlfExceptionC2EiPKcS2_ @ 18 NONAME
+ _ZN7osncore12AlfExceptionD0Ev @ 19 NONAME
+ _ZN7osncore12AlfExceptionD1Ev @ 20 NONAME
+ _ZN7osncore12AlfExceptionD2Ev @ 21 NONAME
+ _ZN7osncore16AlfDataExceptionC1Ei @ 22 NONAME
+ _ZN7osncore16AlfDataExceptionC1EiPKcS2_ @ 23 NONAME
+ _ZN7osncore16AlfDataExceptionC2Ei @ 24 NONAME
+ _ZN7osncore16AlfDataExceptionC2EiPKcS2_ @ 25 NONAME
+ _ZN7osncore16AlfDataExceptionD0Ev @ 26 NONAME
+ _ZN7osncore16AlfDataExceptionD1Ev @ 27 NONAME
+ _ZN7osncore16AlfDataExceptionD2Ev @ 28 NONAME
+ _ZN7osncore18AlfVisualExceptionC1Ei @ 29 NONAME
+ _ZN7osncore18AlfVisualExceptionC1EiPKcS2_ @ 30 NONAME
+ _ZN7osncore18AlfVisualExceptionC2Ei @ 31 NONAME
+ _ZN7osncore18AlfVisualExceptionC2EiPKcS2_ @ 32 NONAME
+ _ZN7osncore18AlfVisualExceptionD0Ev @ 33 NONAME
+ _ZN7osncore18AlfVisualExceptionD1Ev @ 34 NONAME
+ _ZN7osncore18AlfVisualExceptionD2Ev @ 35 NONAME
+ _ZN7osncore18AlfWidgetExceptionC1Ei @ 36 NONAME
+ _ZN7osncore18AlfWidgetExceptionC1EiPKcS2_ @ 37 NONAME
+ _ZN7osncore18AlfWidgetExceptionC2Ei @ 38 NONAME
+ _ZN7osncore18AlfWidgetExceptionC2EiPKcS2_ @ 39 NONAME
+ _ZN7osncore18AlfWidgetExceptionD0Ev @ 40 NONAME
+ _ZN7osncore18AlfWidgetExceptionD1Ev @ 41 NONAME
+ _ZN7osncore18AlfWidgetExceptionD2Ev @ 42 NONAME
+ _ZN7osncore19AlfElementExceptionC1Ei @ 43 NONAME
+ _ZN7osncore19AlfElementExceptionC1EiPKcS2_ @ 44 NONAME
+ _ZN7osncore19AlfElementExceptionC2Ei @ 45 NONAME
+ _ZN7osncore19AlfElementExceptionC2EiPKcS2_ @ 46 NONAME
+ _ZN7osncore19AlfElementExceptionD0Ev @ 47 NONAME
+ _ZN7osncore19AlfElementExceptionD1Ev @ 48 NONAME
+ _ZN7osncore19AlfElementExceptionD2Ev @ 49 NONAME
+ _ZN7osncore21AlfAttributeExceptionC1Ei @ 50 NONAME
+ _ZN7osncore21AlfAttributeExceptionC1EiPKcS2_ @ 51 NONAME
+ _ZN7osncore21AlfAttributeExceptionC2Ei @ 52 NONAME
+ _ZN7osncore21AlfAttributeExceptionC2EiPKcS2_ @ 53 NONAME
+ _ZN7osncore21AlfAttributeExceptionD0Ev @ 54 NONAME
+ _ZN7osncore21AlfAttributeExceptionD1Ev @ 55 NONAME
+ _ZN7osncore21AlfAttributeExceptionD2Ev @ 56 NONAME
+ _ZNK7osncore12AlfException11fileAndLineEv @ 57 NONAME
+ _ZNK7osncore12AlfException4infoEv @ 58 NONAME
+ _ZNK7osncore12AlfException4whatEv @ 59 NONAME
+ _ZNK7osncore12AlfException9errorCodeEv @ 60 NONAME
+ _ZNK7osncore16AlfDataException4whatEv @ 61 NONAME
+ _ZNK7osncore18AlfVisualException4whatEv @ 62 NONAME
+ _ZNK7osncore18AlfWidgetException4whatEv @ 63 NONAME
+ _ZNK7osncore19AlfElementException4whatEv @ 64 NONAME
+ _ZNK7osncore21AlfAttributeException4whatEv @ 65 NONAME
+ _ZTIN3Alf22AlfFactoryPluginLoaderE @ 66 NONAME ; #<TI>#
+ _ZTIN3Alf22AlfWidgetFactoryLoaderE @ 67 NONAME ; #<TI>#
+ _ZTIN3Alf26AlfFactoryPluginLoaderImplE @ 68 NONAME ; #<TI>#
+ _ZTIN3Alf26AlfWidgetFactoryLoaderImplE @ 69 NONAME ; #<TI>#
+ _ZTIN7osncore12AlfExceptionE @ 70 NONAME ; #<TI>#
+ _ZTIN7osncore16AlfDataExceptionE @ 71 NONAME ; #<TI>#
+ _ZTIN7osncore18AlfVisualExceptionE @ 72 NONAME ; #<TI>#
+ _ZTIN7osncore18AlfWidgetExceptionE @ 73 NONAME ; #<TI>#
+ _ZTIN7osncore19AlfElementExceptionE @ 74 NONAME ; #<TI>#
+ _ZTIN7osncore21AlfAttributeExceptionE @ 75 NONAME ; #<TI>#
+ _ZTVN3Alf22AlfFactoryPluginLoaderE @ 76 NONAME ; #<VT>#
+ _ZTVN3Alf22AlfWidgetFactoryLoaderE @ 77 NONAME ; #<VT>#
+ _ZTVN3Alf26AlfFactoryPluginLoaderImplE @ 78 NONAME ; #<VT>#
+ _ZTVN3Alf26AlfWidgetFactoryLoaderImplE @ 79 NONAME ; #<VT>#
+ _ZTVN7osncore12AlfExceptionE @ 80 NONAME ; #<VT>#
+ _ZTVN7osncore16AlfDataExceptionE @ 81 NONAME ; #<VT>#
+ _ZTVN7osncore18AlfVisualExceptionE @ 82 NONAME ; #<VT>#
+ _ZTVN7osncore18AlfWidgetExceptionE @ 83 NONAME ; #<VT>#
+ _ZTVN7osncore19AlfElementExceptionE @ 84 NONAME ; #<VT>#
+ _ZTVN7osncore21AlfAttributeExceptionE @ 85 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/group/alfwidgetutils.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2007 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: mmp file
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET alfwidgetutils.dll
+TARGETTYPE DLL
+
+
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+
+SOURCEPATH ../src
+
+SOURCE alffactorypluginloader.cpp
+SOURCE alffactorypluginloaderimpl.cpp
+SOURCE alfwidgetfactoryloader.cpp
+SOURCE alfwidgetfactoryloaderimpl.cpp
+
+SOURCE alfexception.cpp
+SOURCE alfattributeexception.cpp
+SOURCE alfvisualexception.cpp
+SOURCE alfelementexception.cpp
+SOURCE alfdataexception.cpp
+SOURCE alfwidgetexception.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../../inc
+
+
+MW_LAYER_SYSTEMINCLUDE
+
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+LIBRARY osncore.lib
+LIBRARY libstdcpp.lib
+
+#define ALF_LINK_STDCPP_DLL
+// following include must be after definition
+
+LIBRARY libpthread.lib
+LIBRARY libc.lib
+LANG SC
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2007 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: Builds alfwidgetutils.
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+alfwidgetutils.mmp
+
+PRJ_TESTMMPFILES
+
+PRJ_TESTEXPORTS
+
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/inc/alfexceptionstrings.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2007 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: error codes and descrptions for erros
+*
+*/
+
+
+
+#ifndef ALFEXCEPTIONSTRINGS_H
+#define ALFEXCEPTIONSTRINGS_H
+
+namespace osncore
+ {
+static const char* const KErrorUndefinedException
+ = "Undefined Exception";
+static const char* const KErrorInvalidAttribute
+ = "Invalid Attribute";
+static const char* const KErrorInvalidAttributeValue
+ = "Invalid Attribute Value";
+static const char* const KErrorIncompleteAttributeValues
+ = "Incomplete Attribute Values";
+static const char* const KErrorInvalidVisual
+ = "Invalid Visual";
+static const char* const KErrorCanNotCreateVisual
+ = "Can Not Create Visual";
+static const char* const KErrorInvalidVisualValue
+ = "Invalid Visual Value";
+static const char* const KErrorInvalidElement
+ = "Invalid Element";
+
+//Data Type Exception Strings
+static const char* const KErrorInvalidVariantDataType
+ = "Invalid Variant Data Type";
+static const char* const KErrorInvalidArrayIndex
+ = "Invalid Array Index";
+static const char* const KErrorInvalidContainerOperation
+ = "Invalid Conatiner Operation";
+static const char* const KErrorInvalidMapOperation
+ = "Invalid Map Operation";
+static const char* const KErrorInvalidBranchOperation
+ = "Invalid Branch Operation";
+static const char* const KErrorInvalidModelOperation
+ = "Invalid Model Operation";
+static const char* const KErrorInvalidWidget
+ = "Invalid Widget";
+
+ } //namespace
+
+#endif //ALFEXCEPTIONSTRINGS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/inc/alffactorypluginloaderimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2007 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: Factory plugin loader implementation
+*
+*/
+
+
+
+#ifndef ALFFACTORYPLUGINLOADERIMPL_H
+#define ALFFACTORYPLUGINLOADERIMPL_H
+
+#include <osn/alfptrvector.h>
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+class IAlfFactoryPlugin;
+class AlfFactoryPluginMap;
+
+
+/**
+ * @class AlfFactoryPluginLoaderImpl AlfFactoryPluginLoaderImpl.h "alf/alffactorypluginloaderimpl.h"
+ *
+ * Factory plugin loader loads factory plugins.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfFactoryPluginLoaderImpl
+ {
+public: // Constructors and destructor
+
+ /**
+ * Constructor
+ */
+ AlfFactoryPluginLoaderImpl();
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfFactoryPluginLoaderImpl();
+
+public:
+
+ /**
+ * Load a factory plugin.
+ *
+ * @param aLoadId Factory plugin identifier
+ * @since S60 5.0
+ * @return Pointer to IAlfFactoryPlugin or NULL.
+ * Ownership is transferred to caller.
+ */
+ IAlfFactoryPlugin* load(const char* aLoadId);
+
+private:
+ /**
+ * Owned factory plugins.
+ */
+ AlfPtrVector<AlfFactoryPluginMap> mFactoryPluginList;
+
+ };
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/inc/alfwidgetfactoryloaderimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2007 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: Widget factory plugin loader implementation
+*
+*/
+
+
+
+#ifndef ALFWIDGETFACTORYLOADERIMPL_H
+#define ALFWIDGETFACTORYLOADERIMPL_H
+
+
+
+class CAlfEnv;
+
+namespace Alf
+ {
+class IAlfFactoryPlugin;
+class IAlfWidgetFactory;
+
+
+/**
+ *
+ * @class AlfWidgetFactoryLoaderImpl AlfWidgetFactoryLoaderImpl.h "alf/alfwidgetfactoryloaderimpl.h"
+ *
+ * Factory plugin loader loads factory plugins.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfWidgetFactoryLoaderImpl
+ {
+public: // Constructors and destructor
+
+ /**
+ * Constructor
+ */
+ AlfWidgetFactoryLoaderImpl();
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfWidgetFactoryLoaderImpl();
+
+public:
+
+ /**
+ * Loads a widget factory plugin.
+ *
+ * @since S60 5.0
+ * @return Pointer to IAlfWidgetFactory or NULL.
+ * Ownership is not transferred to caller.
+ */
+ IAlfWidgetFactory* load(CAlfEnv& aEnv);
+
+private:
+ IAlfFactoryPlugin* mFactoryPlugin;
+ IAlfWidgetFactory* mWidgetFactory;
+ int mDtorKey;
+
+ };
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/src/alfattributeexception.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2007 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: The implementation for attribute exception class.
+*
+*/
+
+
+
+#include <alf/alfattributeexception.h>
+#include "alfexceptionstrings.h"
+
+using namespace osncore;
+
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeException::AlfAttributeException( int aErrorCode ) throw() :
+ AlfException( aErrorCode )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeException::AlfAttributeException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw() :
+ AlfException( aErrorCode, aInfo, aFileAndLine )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeException::~AlfAttributeException() throw()
+ {
+// nothing to do!
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the error information in c-string style.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfAttributeException::what() const throw()
+ {
+ switch ( errorCode() )
+ {
+ case EInvalidAttribute:
+ return KErrorInvalidAttribute;
+ case EInvalidAttributeValue:
+ return KErrorInvalidAttributeValue;
+ case EIncompleteAttributeValues:
+ return KErrorIncompleteAttributeValues;
+ default:
+ return KErrorUndefinedException;
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/src/alfdataexception.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2007 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: element exception class.
+*
+*/
+
+
+
+#include <alf/alfdataexception.h>
+#include "alfexceptionstrings.h"
+
+using namespace osncore;
+
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfDataException::AlfDataException( int aErrorCode ) throw() :
+ AlfException( aErrorCode )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfDataException::AlfDataException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw() :
+ AlfException( aErrorCode, aInfo, aFileAndLine )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfDataException::~AlfDataException() throw()
+ {
+// nothing to do!
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the error information in c-string style.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfDataException::what() const throw()
+ {
+ switch ( errorCode() )
+ {
+ case EInvalidVariantDataType:
+ return KErrorInvalidVariantDataType;
+
+ case EInvalidArrayIndex:
+ return KErrorInvalidArrayIndex;
+
+ case EInvalidContainerOperation:
+ return KErrorInvalidContainerOperation;
+
+ case EInvalidMapOperation:
+ return KErrorInvalidMapOperation;
+
+ case EInvalidBranchOperation:
+ return KErrorInvalidBranchOperation;
+
+ case EInvalidModelOperation:
+ return KErrorInvalidModelOperation;
+
+ default:
+ return KErrorUndefinedException;
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/src/alfelementexception.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2007 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: element exception class.
+*
+*/
+
+
+
+#include <alf/alfelementexception.h>
+#include "alfexceptionstrings.h"
+
+using namespace osncore;
+
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfElementException::AlfElementException( int aErrorCode ) throw() :
+ AlfException( aErrorCode )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfElementException::AlfElementException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw() :
+ AlfException( aErrorCode, aInfo, aFileAndLine )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfElementException::~AlfElementException() throw()
+ {
+// nothing to do!
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the error information in c-string style.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfElementException::what() const throw()
+ {
+ switch ( errorCode() )
+ {
+ case EInvalidElement:
+ return KErrorInvalidElement;
+ default:
+ return KErrorUndefinedException;
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/src/alfexception.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2007 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: The basic implementation for presentation elements.
+*
+*/
+
+
+
+#include <alf/alfexception.h>
+
+using namespace std;
+using namespace osncore;
+
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfException::AlfException( const int aErrorCode ) throw()
+ {
+ mErrorCode = aErrorCode;
+ mInfo = 0;
+ mFileAndLine = 0;
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfException::AlfException(
+ int aErrorCode, const char* aInfo ) throw()
+ {
+ mErrorCode = aErrorCode;
+ mInfo = aInfo;
+ mFileAndLine = 0;
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfException::AlfException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw()
+ {
+ mErrorCode = aErrorCode;
+ mInfo = aInfo;
+ mFileAndLine = aFileAndLine;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfException::~AlfException() throw()
+ {
+ // nothing to do!
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the error information in c-string style.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfException::what() const throw()
+ {
+ return "";
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the error information in integer type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfException::errorCode() const throw()
+ {
+ return mErrorCode;
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the error information in integer type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfException::info() const throw()
+ {
+ if ( mInfo )
+ {
+ return mInfo;
+ }
+ return "";
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the file and line information
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfException::fileAndLine() const throw()
+ {
+ if ( mFileAndLine )
+ {
+ return mFileAndLine;
+ }
+ return "";
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/src/alffactorypluginloader.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2007 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: Encapsulates factory plugin loading mechanism
+*
+*/
+
+#include <osn/osnnew.h>
+#include <alf/alffactorypluginloader.h>
+#include "alffactorypluginloaderimpl.h"
+
+namespace Alf
+ {
+
+
+OSN_EXPORT AlfFactoryPluginLoader::AlfFactoryPluginLoader():
+ mImpl(new (EMM)AlfFactoryPluginLoaderImpl())
+ {
+
+ }
+
+OSN_EXPORT AlfFactoryPluginLoader::~AlfFactoryPluginLoader()
+ {
+
+ }
+
+OSN_EXPORT IAlfFactoryPlugin* AlfFactoryPluginLoader::loadFactoryPlugin(
+ const char* aLoadId)
+ {
+ return mImpl->load(aLoadId);
+ }
+
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/src/alffactorypluginloaderimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2007 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: Encapsulates factory plugin loading mechanism
+*
+*/
+
+
+
+#include <ecom/ecom.h>
+//#include <alf/alfecompluginfactoryuid.rh>
+#include <alf/ialffactoryplugin.h>
+#include <string.h>
+#include <memory>
+#include <osn/osnnew.h>
+#include <stdexcept>
+
+#include "alf/alfecompluginfactoryuid.rh"
+#include "alffactorypluginloaderimpl.h"
+
+using namespace std;
+
+namespace Alf
+ {
+
+
+
+class AlfFactoryPluginMap
+ {
+public:
+ AlfFactoryPluginMap();
+ ~AlfFactoryPluginMap();
+
+ /**
+ * Owned factory plugin.
+ */
+ IAlfFactoryPlugin* mFactoryPlugin;
+ /**
+ * ECom destructor handle.
+ */
+ int mDtorKey;
+ };
+
+static bool loadPluginIntoMap(
+ AlfFactoryPluginMap*& aMap,
+ const char* aProduct)
+ {
+ TEComResolverParams resolverParams;
+ resolverParams.SetDataType(TPtrC8((TUint8*)aProduct));
+ resolverParams.SetWildcardMatch(ETrue);
+
+ TAny* plugin = NULL;
+ TUid tmpDtor;
+
+ TRAPD(err,plugin = REComSession::CreateImplementationL(
+ TUid::Uid(KFactoryPluginUid),
+ tmpDtor,resolverParams))
+
+
+ if (!err)
+ {
+ aMap->mDtorKey = tmpDtor.iUid;
+ aMap->mFactoryPlugin = reinterpret_cast<IAlfFactoryPlugin*>(
+ plugin);
+ return true;
+ }
+
+ return false;
+ }
+
+AlfFactoryPluginMap::AlfFactoryPluginMap()
+ :mFactoryPlugin(0),mDtorKey(0)
+ {
+
+ }
+
+AlfFactoryPluginMap::~AlfFactoryPluginMap()
+ {
+ if (mFactoryPlugin)
+ {
+ REComSession::DestroyedImplementation(TUid::Uid(mDtorKey));
+ delete mFactoryPlugin;
+ }
+ }
+
+AlfFactoryPluginLoaderImpl::AlfFactoryPluginLoaderImpl()
+ {
+
+ }
+
+AlfFactoryPluginLoaderImpl::~AlfFactoryPluginLoaderImpl()
+ {
+ mFactoryPluginList.clear();
+
+ }
+
+IAlfFactoryPlugin* AlfFactoryPluginLoaderImpl::load(
+ const char* aLoadId)
+ {
+ IAlfFactoryPlugin* ret(0);
+ IAlfFactoryPlugin* tmp(0);
+ // Do we have it already?
+ unsigned int itemCount(mFactoryPluginList.count());
+
+ for (int i=0;i<itemCount && !ret;i++)
+ {
+ tmp = mFactoryPluginList.at(i)->mFactoryPlugin;
+ int productCount = tmp->productCount();
+ for (int j=0;j<productCount && !ret;j++)
+ {
+ if (!strcmp(tmp->productInfo(j),aLoadId ))
+ {
+ ret = tmp;
+ }
+ }
+ }
+ if (!ret)
+ {
+ auto_ptr<AlfFactoryPluginMap> mapPtr(new(EMM)AlfFactoryPluginMap());
+ AlfFactoryPluginMap* map = mapPtr.get();
+
+ if (loadPluginIntoMap(map,aLoadId))
+ {
+ ret = mapPtr->mFactoryPlugin;
+ mFactoryPluginList.resize(itemCount+1);
+ mFactoryPluginList.insert(itemCount,map);
+
+ mapPtr.release();
+
+ }
+
+ }
+
+ return ret;
+
+ }
+
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/src/alfvisualexception.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2007 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: The implementation for presentation elements.
+*
+*/
+
+
+
+#include <alf/alfvisualexception.h>
+#include "alfexceptionstrings.h"
+
+using namespace osncore;
+
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfVisualException::AlfVisualException( int aErrorCode ) throw() :
+ AlfException( aErrorCode )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfVisualException::AlfVisualException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw() :
+ AlfException( aErrorCode, aInfo, aFileAndLine )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfVisualException::~AlfVisualException() throw()
+ {
+// nothing to do!
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the error information in c-string style.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfVisualException::what() const throw()
+ {
+ switch ( errorCode() )
+ {
+ case EInvalidVisual:
+ return KErrorInvalidVisual;
+ case EInvalidVisualValue:
+ return KErrorInvalidVisualValue;
+ default:
+ return KErrorUndefinedException;
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/src/alfwidgetexception.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2007 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: The implementation for widget exception class.
+*
+*/
+
+
+
+#include <alf/alfwidgetexception.h>
+#include "alfexceptionstrings.h"
+
+using namespace osncore;
+
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfWidgetException::AlfWidgetException( int aErrorCode ) throw() :
+ AlfException( aErrorCode )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfWidgetException::AlfWidgetException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw() :
+ AlfException( aErrorCode, aInfo, aFileAndLine )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfWidgetException::~AlfWidgetException() throw()
+ {
+// nothing to do!
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the error information in c-string style.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfWidgetException::what() const throw()
+ {
+ switch ( errorCode() )
+ {
+ case EInvalidWidget:
+ return KErrorInvalidWidget;
+ default:
+ return KErrorUndefinedException;
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/src/alfwidgetfactoryloader.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2007 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: Encapsulates widget factory plugin loading mechanism
+*
+*/
+
+#include <osn/osnnew.h>
+#include <alf/alfwidgetfactoryloader.h>
+#include "alfwidgetfactoryloaderimpl.h"
+
+namespace Alf
+ {
+
+OSN_EXPORT AlfWidgetFactoryLoader::AlfWidgetFactoryLoader():
+ mImpl(new (EMM)AlfWidgetFactoryLoaderImpl())
+ {
+
+ }
+
+OSN_EXPORT AlfWidgetFactoryLoader::~AlfWidgetFactoryLoader()
+ {
+
+ }
+
+OSN_EXPORT IAlfWidgetFactory* AlfWidgetFactoryLoader::loadWidgetFactory(
+ CAlfEnv& aEnv)
+ {
+ return mImpl->load(aEnv);
+ }
+
+ }
+
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alfwidgetutils/src/alfwidgetfactoryloaderimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2007 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: Encapsulates factory plugin loading mechanism
+*
+*/
+
+
+
+#include <ecom/ecom.h>
+//#include <alf/alfecompluginfactoryuid.rh>
+#include <alf/ialfwidgetfactory.h>
+#include <alf/ialffactoryplugin.h>
+#include <osn/osnnew.h>
+
+#include "alf/alfecompluginfactoryuid.rh"
+#include "alfwidgetfactoryloaderimpl.h"
+
+using namespace std;
+
+namespace Alf
+ {
+
+static const char* const KWidgetFactory ="alfwidgetfactory";
+const int KPluginIuid = 0x11201113;
+
+AlfWidgetFactoryLoaderImpl::AlfWidgetFactoryLoaderImpl():
+ mFactoryPlugin(0),
+ mWidgetFactory(0),
+ mDtorKey(0)
+ {
+
+ }
+
+AlfWidgetFactoryLoaderImpl::~AlfWidgetFactoryLoaderImpl()
+ {
+ delete mWidgetFactory;
+ if (mFactoryPlugin)
+ {
+ delete mFactoryPlugin;
+ REComSession::DestroyedImplementation(TUid::Uid(mDtorKey));
+ }
+
+ }
+
+IAlfWidgetFactory* AlfWidgetFactoryLoaderImpl::load(CAlfEnv& aEnv)
+ {
+ if (!mWidgetFactory)
+ {
+ TEComResolverParams resolverParams;
+ resolverParams.SetDataType(TPtrC8((TUint8*)KWidgetFactory));
+ resolverParams.SetWildcardMatch(ETrue);
+
+ TAny* plugin = NULL;
+
+ TUid tmpDtor;
+
+ TRAPD(err,plugin = REComSession::CreateImplementationL(
+ TUid::Uid(KPluginIuid),tmpDtor,
+ resolverParams))
+
+
+ if (!err)
+ {
+ mDtorKey = tmpDtor.iUid;
+ mFactoryPlugin = reinterpret_cast<IAlfFactoryPlugin*>(plugin);
+ IAlfInterfaceBase* tmp(0);
+ tmp = mFactoryPlugin->createProduct(KWidgetFactory,&aEnv);
+ mWidgetFactory =
+ IAlfInterfaceBase::makeInterface<IAlfWidgetFactory>(tmp);
+ }
+ }
+
+ return mWidgetFactory;
+ }
+
+ }
+
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2006 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: Build information file for UI Accelerator Architetecture Domain
+*
+*/
+
+#include <platform_paths.hrh>
+// notice, that the build order is important.
+
+#include "../mmuifw_plat/group/bld.inf"
+
+#include "../osncore/group/bld.inf"
+#include "../alfwidgetutils/group/bld.inf"
+#include "../resourcepool/group/bld.inf"
+#include "../widgetmodel/group/bld.inf"
+
+#include "../mulwidgets/group/bld.inf"
+
+
+
+
+PRJ_EXPORTS
+
+../rom/alfcollect.iby CORE_MW_LAYER_IBY_EXPORT_PATH(alfcollect.iby)
+../rom/alfwidgets.iby CORE_MW_LAYER_IBY_EXPORT_PATH(alfwidgets.iby)
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfanchorlayoutattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2007 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: Anchor layout attribute setter header.
+*
+*/
+
+
+#ifndef ALFANCHORLAYOUTATTRIBUTESETTER_H
+#define ALFANCHORLAYOUTATTRIBUTESETTER_H
+
+//includes
+
+//widget model includes
+#include "alf/alfcommonlayoutattributesetter.h"
+
+//osn includes
+#include <osn/osndefines.h>
+
+
+namespace Alf
+ {
+
+/**
+ * @class AlfAnchorLayoutAttributeSetter alfanchorlayoutattributesetter.h "alf/alfanchorlayoutattributesetter.h"
+ * The implementation of the attribute setter for setting anchor layout attributes.
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+class AlfAnchorLayoutAttributeSetter : public AlfCommonLayoutAttributeSetter
+ {
+
+public:
+
+ /**
+ * Constructor.
+ *
+ */
+ OSN_IMPORT AlfAnchorLayoutAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfAnchorLayoutAttributeSetter();
+
+ /**
+ * Sets the attribute values to the target visual.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if aVisual is not
+ * an anchor layout.
+ * @exception osncore::AlfVisualException Thrown with Symbian error code if anchor point attachment fails.
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the value of the attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT virtual void setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Depracated! Do not use!
+ * Creates a command to change the value of an attribute in the target visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute. Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The container
+ * can hold new values for multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+
+protected:
+ /**
+ * Sets an dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ */
+ void handleDynamicAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets an value for static attribute in the target visual immediately without a transition using data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData
+ */
+ void handleStaticDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+ /**
+ * Sets an value for dynamic attribute value in the target visual using transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData
+ */
+ void handleDynamicDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+ /**
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData
+ */
+ void handleStaticAttribute( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+private:
+
+ /**
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data. if not NULL, attribute value is fetched from the map.
+ * Ownership of the object is not transferred.
+ */
+ bool doHandleStaticAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // C_ALFANCHORLAYOUTATTRIBUTESETTER_H
+// End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfattribute.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,461 @@
+/*
+* Copyright (c) 2007 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: A class for attribute.
+*
+*/
+
+
+#ifndef ALFATTRIBUTE_H
+#define ALFATTRIBUTE_H
+
+//INCLUDES
+#include <osn/osndefines.h>
+#include <memory>
+#include <osn/osntypes.h>
+#include <alf/alfmetric.h>
+#include <alf/alftimedvalue.h>
+#include "alf/alfattributevaluetype.h"
+
+using namespace osncore;
+
+// FORWARD DECLARATIONS
+
+namespace osncore
+ {
+class UString;
+ }
+using std::auto_ptr;
+
+namespace Alf
+ {
+
+class AlfAttributeImpl;
+class AlfAttributeValueType;
+
+/**
+ * @class AlfAttribute alfattribute.h "alf/alfattribute.h"
+ * Class for holding attributes.
+ * AlfAttribute is a receptacle for holding data that can be applied to
+ * visuals/visual templates via the attribute setters.
+ * They can also be used hold data for properties of widgets or widget parts
+ * implement the IAlfAttributeOwner interface.
+ * An attribute can have one or more attribute value types.
+ * Attributes can be bunched together in attribute containers.
+ * @see IAlfAttributeSetter
+ * @see IAlfAttributeOwner
+ * @see AlfAttributeValueType
+ * @see AlfAtributeContainer
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfAttribute
+ {
+public:
+
+ /* See Declarative Hitchcock language specification
+ for more detail of attribute categories */
+ enum attributecategory
+ {
+ EStatic, /* static attribute */
+ EDynamic, /* dynamic attribute */
+ EStaticData, /* static dataattribute */
+ EDynamicData /* dynamic dataattribute */
+ };
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfAttribute();
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ *
+ * @param aName Attribute name. Makes a copy of the name.
+ * @param aCategory Attribute category.
+ * @return New object.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfAttribute(const char* aName, attributecategory aCategory);
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ *
+ * @param aName Attribute name. Makes a copy of the name.
+ * @param aTargetValue The target value of the child attribute.
+ * @param aUnit Unit of the value.
+ * @param aCategory Attribute category.
+ * @return New object.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfAttribute(const char* aName, int aTargetValue,
+ TAlfUnit aUnit = EAlfUnitPixel,
+ attributecategory aCategory = EStatic);
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ *
+ * @param aName Attribute name. Makes a copy of the name.
+ * @param aTargetValue The target value of the child attribute.
+ * @param aUnit Unit of the value.
+ * @param aCategory Attribute category.
+ * @return New object.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfAttribute(const char* aName, float aTargetValue,
+ TAlfUnit aUnit = EAlfUnitNormalized,
+ attributecategory aCategory = EStatic);
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ *
+ * @param aName Attribute name. Makes a copy of the name.
+ * @param aTargetValue The target value of the child attribute. Makes a copy of the value.
+ * @param aCategory Attribute category.
+ * @return New object.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfAttribute(const char* aName, const UString& aTargetValue,
+ attributecategory aCategory = EStatic);
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfAttribute();
+
+ /**
+ * Assignment operation. Assigns all the member variables
+ * to the values in the reference attribute.
+ * @exception std::bad_alloc
+ *
+ * @param aAttribute The source attribute.
+ * @return Reference to the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfAttribute& operator=(const AlfAttribute& aAttribute);
+
+ /**
+ * Clones the attribute.
+ * @exception std::bad_alloc
+ *
+ * @return The cloned attribute. Ownership is transferred to the caller.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfAttribute* clone();
+
+ /**
+ * Gets the name of the attribute.
+ *
+ * @return The name of the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT const char* name() const;
+
+ /**
+ * Gets the category of the attribute.
+ *
+ * @return The category of the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT attributecategory category() const;
+
+ /**
+ * Gets the type of the attribute.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ *
+ * @return The type of the attribute target value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfAttributeValueType::Type type(unsigned int aIndex = 0) const;
+
+ /**
+ * Gets the int target value. Use this method only if the attribute type is EInt.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ * @param aIndex The index of the attribute value.
+ * @return The integer value of the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT int intValue(unsigned int aIndex = 0) const;
+
+ /**
+ * Gets the real target value. Use this method only if the attribute type is EFloat.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ *
+ * @param aIndex The index of the attribute value.
+ * @return The float value of the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT float realValue(unsigned int aIndex = 0) const;
+
+ /**
+ * Gets the string target value. Use this method only if the attribute type is EString.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ *
+ * @param aIndex The index of the attribute value.
+ * @return The string value of the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT const UString& stringValue(unsigned int aIndex = 0) const;
+
+ /**
+ * Returns true if the attribute value is set.
+ *
+ * @return The value state.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT bool isValueSet() const;
+
+ /**
+ * Gets the unit of the value.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ *
+ * @param aIndex The index of the attribute value.
+ * @return The unit.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT virtual TAlfUnit unit(unsigned int aIndex = 0) const;
+
+ /**
+ * Adds a new target value to the attribute.
+ *
+ * @param aValue New value to be added.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void addTargetValue(AlfAttributeValueType* aValue);
+
+ /**
+ * Gets target value count.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ *
+ * @return Value count.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT unsigned int getTargetValueCount() const;
+
+ /**
+ * Sets the target value of the attribute.
+ *
+ * @param aIndex The index of the attribute value.
+ * @param aValue The target value of the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void setTargetValue(AlfAttributeValueType* aValue,
+ unsigned int aIndex = 0);
+
+ /**
+ * Gets the target value of the attribute.
+ *
+ * @param aIndex The index of the attribute value.
+ * @return The target value of the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfAttributeValueType* getTargetValue(
+ unsigned int aIndex = 0) const;
+
+ /**
+ * Removes the target value of the attribute.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ *
+ * @param aIndex The index of the attribute value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void removeTargetValue(unsigned int aIndex = 0);
+
+ /**
+ * Adds a new source value to the attribute.
+ *
+ * @param aValue New value to be added.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void addSourceValue(AlfAttributeValueType* aValue);
+
+ /**
+ * Gets source value count.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ *
+ * @return The source value count.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT unsigned int getSourceValueCount() const;
+
+ /**
+ * Sets the source value of the attribute.
+ *
+ * @param aIndex The index of the attribute value.
+ * @param aValue The source value of the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void setSourceValue(AlfAttributeValueType* aValue,
+ unsigned int aIndex = 0);
+
+ /**
+ * Gets the source value of the attribute.
+ *
+ * @param aIndex The index of the attribute value.
+ * @return The source value of the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfAttributeValueType* getSourceValue(
+ unsigned int aIndex = 0) const;
+
+ /**
+ * Removes the source value of the attribute.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ *
+ * @param aIndex The index of the attribute value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void removeSourceValue(unsigned int aIndex = 0);
+
+ /**
+ * Sets the interpolation style of the attribute.
+ *
+ * @param aInterpolationStyle The interpolation style.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void setInterpolationStyle(TAlfInterpolationStyle aInterpolationStyle);
+
+ /**
+ * Gets the interpolation style of the attribute.
+ *
+ * @return The interpolation style of the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT TAlfInterpolationStyle getInterpolationStyle() const;
+
+ /**
+ * Sets the transition time for the attribute.
+ *
+ * @param aTime The transition time for the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void setTime(int aTime);
+
+ /**
+ * Gets the transition time for the attribute.
+ *
+ * @return The transition time for the attribute.
+ */
+ OSN_IMPORT int getTime() const;
+
+ /**
+ * Sets the mapping function id for the attribute.
+ *
+ * @param aId The mapping function id for the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void setMappingFunctionId(int aId);
+
+ /**
+ * Gets the mapping function id for the attribute.
+ *
+ * @return The mapping function id for the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT int getMappingFunctionId() const;
+
+ /**
+ * Sets the datafield for the attribute.
+ *
+ * @param aDataField The datafield for the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void setDataField(const char* aDataField);
+
+ /**
+ * Gets the datafield for the attribute.
+ *
+ * @return The datafield for the attribute.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT const char* getDataField() const;
+
+ /**
+ * Sets the delay before the transition.
+ *
+ * @param aDelay The delay before the transition.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void setDelay(int aDelay);
+
+ /**
+ * Gets the delay before the transition.
+ *
+ * @return The delay before the transition.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT int getDelay() const;
+
+ /**
+ * Gets the dirty information
+ *
+ * @return whether dirty or not
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT bool isDirty( ) const;
+
+ /**
+ * Sets the dirty information
+ *
+ * @param flag indicates whether remove or set dirtiness
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void setDirty(bool aFlag );
+
+private:
+
+ /**
+ * Resets the data.
+ *
+ * @param aName Attribute name.
+ * @param aValue The value of the attribute.
+ * @param aCategory Attribute category.
+ * @since S60 ?S60_version
+ */
+ void reset(const char* aName, AlfAttributeValueType* aValue,
+ attributecategory aCategory);
+
+ /**
+ * Declaring private copy construction to prevent usage.
+ *
+ * @param aAttribute The attribute.
+ * @since S60 ?S60_version
+ */
+ AlfAttribute(const AlfAttribute& attribute);
+
+ /**
+ * Helper function for cloning value type.
+ * @exception std::bad_alloc
+ *
+ * @param aValue The source attribute value.
+ * @since S60 ?S60_version
+ */
+ AlfAttributeValueType* cloneValueType(AlfAttributeValueType* aValue) const;
+
+private: // data
+
+ // Implementation data
+ auto_ptr<AlfAttributeImpl> mData;
+ };
+
+ } // namespace Alf
+
+#endif //ALFATTRIBUTE_H
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfattributecontainer.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2007 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: Attribute container.
+*
+*/
+
+
+#ifndef ALFATTRIBUTECONTAINER_H
+#define ALFATTRIBUTECONTAINER_H
+
+#include <osn/osndefines.h>
+#include <memory>
+
+namespace Alf
+ {
+
+class AlfAttribute;
+class AlfAttributeContainerImpl;
+
+/**
+ * @class AlfAttributeContainer alfattributecontainer.h "alf/alfattributecontainer.h"
+ * AlfAttributeContainer is a collection of attributes. It is used to bunch up a set
+ * of attributes. Attribute setters and implementations of the IAlfAttributeOwner interface
+ * can work with attribute containers.
+ * @see IAlfAttributeSetter
+ * @see IAlfAttributeOwner
+ * @see AlfAttribute
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfAttributeContainer
+ {
+public:
+
+ /** Type enumeration. */
+ enum Type
+ {
+ EAlfCommonAttributeContainer = 0,
+
+ EAlfSetFlagAttributeContainer,
+ EAlfClearFlagAttributeContainer,
+
+ EAlfOpacityAttributeContainer,
+ EAlfXPosAttributeContainer,
+ EAlfYPosAttributeContainer,
+ EAlfWidthAttributeContainer,
+ EAlfHeightAttributeContainer,
+ EAlfDepthOffsetAttributeContainer,
+ EAlfScrollAttributeContainer, //not used yet
+ EAlfExpandAttributeContainer,
+ EAlfRowsAttributeContainer,
+ EAlfColumnsAttributeContainer,
+ EAlfAnchorPointAttributeContainer,
+ EAlfScalingAttributeContainer,
+ EAlfImageSecondaryAlphaAttributeContainer,
+
+ EAlfPositionAttributeContainer,
+ EAlfSizeAttributeContainer,
+ EAlfScrollOffsetAttributeContainer,
+ EAlfTranslationAttributeContainer,//not implemented still
+ EAlfRotationXYZAAttributeContainer,//not implemented still
+
+ EAlfPrimaryImageAttributeContainer,
+ EAlfSecondaryImageAttributeContainer,
+ EAlfTextAttributeContainer,
+
+ EAlfViewportSizeAttributeContainer,
+ EAlfViewportVirtualSizeAttributeContainer,
+ EAlfViewportPosAttributeContainer,
+ EAlfSkinImageIDAttributeContainer,
+ EAlfSkinTextColorAttributeContainer,
+ };
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ *
+ * @param aType a type of container.
+ */
+ OSN_IMPORT AlfAttributeContainer(Type aType = EAlfCommonAttributeContainer);
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT ~AlfAttributeContainer();
+
+ /**
+ * Gets the type of the container.
+ *
+ * @return The type of the container.
+ */
+ OSN_IMPORT Type type() const;
+
+ /**
+ * Adds a new attribute to the container.
+ * @exception std::bad_alloc
+ *
+ * @param aAttribute The new attribute, takes ownership.
+ */
+ OSN_IMPORT void addAttribute( AlfAttribute* aAttribute);
+
+ /**
+ * Returns the attribute count.
+ *
+ * @return the attribute count.
+ */
+ OSN_IMPORT unsigned int attributeCount() const;
+
+ /**
+ * Returns reference to the attribute.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ *
+ * @param aIndex index of the attribute.
+ * @return The attribute. Throws CAlfDataException if index is invalid.
+ * Ownership is not transferred.
+ */
+ OSN_IMPORT AlfAttribute& getAttribute(unsigned int aIndex) const;
+
+ /**
+ * Returns the attribute.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttribute if aName is not found among attributes contained in the container.
+ *
+ * @param aName name of the attribute.
+ * @return the attribute. Throws CAlfDataException if attribute is not found.
+ * Ownership is not transferred.
+ */
+ OSN_IMPORT AlfAttribute& getAttributeByName(const char* aName) const;
+
+ /**
+ * Removes the attribute. Throws CAlfDataException if index is invalid.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttribute if aIndex is invalid.
+ *
+ * @param aIndex index of the attribute.
+ */
+ OSN_IMPORT void removeAttribute(unsigned int aIndex);
+
+ /**
+ * Sets the animation time of the attribute container.
+ *
+ * @param The time value (milliseconds).
+ */
+ OSN_IMPORT void setTime(unsigned int aTime);
+
+ /**
+ * Returns the animation time of the attribute container.
+ *
+ * @return The time value (milliseconds).
+ */
+ OSN_IMPORT unsigned int getTime() const;
+
+private:
+
+ /**
+ * Copy construction, not implemented.
+ */
+ AlfAttributeContainer(const AlfAttributeContainer&);
+
+ /**
+ * Assigment operation, not implemented.
+ */
+ AlfAttributeContainer& operator=(const AlfAttributeContainer&);
+
+private:
+
+ // Implementation data
+ std::auto_ptr<AlfAttributeContainerImpl> mData;
+ };
+
+ } // namespace Alf
+
+#endif // ALFATTRIBUTECONTAINER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfattributevaluetype.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 2007 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: attribute value type header.
+*
+*/
+
+
+#ifndef ALFATTRIBUTEVALUETYPE_H
+#define ALFATTRIBUTEVALUETYPE_H
+
+#include <osn/osndefines.h>
+#include <memory>
+#include <alf/alfmetric.h>
+
+namespace osncore
+ {
+class UString;
+ }
+using namespace osncore;
+using std::auto_ptr;
+
+namespace Alf
+ {
+
+class AlfAttributeValueTypeImpl;
+
+/**
+ * @class AlfAttributeValueType alfattributevaluetype.h "alf/alfattributevaluetype.h"
+ * A class for attribute value type. Attributes are constructed using
+ * AlfAttributeValueType objects. AlfAttributeValueType can store integer,float,string,
+ * enum and RGB data.
+ * @see AlfAttribute
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfAttributeValueType
+ {
+
+public:
+
+ /** Type enumeration. */
+ enum Type
+ {
+ EInt, EFloat, EString
+ };
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ *
+ * @param aValue The value of the attribute.
+ * @param aUnit Unit of the value.
+ */
+ OSN_IMPORT AlfAttributeValueType(int aValue,
+ TAlfUnit aUnit = EAlfUnitPixel);
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ *
+ * @param aValue The value of the attribute.
+ * @param aUnit Unit of the value.
+ */
+ OSN_IMPORT AlfAttributeValueType(float aValue,
+ TAlfUnit aUnit = EAlfUnitNormalized);
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ *
+ * @param aValue The value of the attribute. Takes a copy of the object.
+ */
+ OSN_IMPORT AlfAttributeValueType(const UString& aValue);
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfAttributeValueType();
+
+ /**
+ * Gets the enum value.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttributeValue
+ * if the attribute value type is not of enum type.
+ *
+ * @return The integer value.
+ */
+ OSN_IMPORT virtual int enumValue() const;
+
+ /**
+ * Gets the string value.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttributeValue
+ * if the attribute value type is not of string type.
+ *
+ * @return The string value.
+ */
+ OSN_IMPORT virtual const UString& stringValue() const;
+
+ /**
+ * Gets the integer value.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttributeValue
+ * if the attribute value type is not of integer type.
+ *
+ * @return The integer value.
+ */
+ OSN_IMPORT virtual int intValue() const;
+
+ /**
+ * Gets the real value.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttributeValue
+ * if the attribute value type is not of float type.
+ *
+ * @return The real value.
+ */
+ OSN_IMPORT virtual float realValue() const;
+
+ /**
+ * Gets the RGB value.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttributeValue
+ * if the attribute value type is not of float type.
+ *
+ * @return The RGB value.
+ */
+ OSN_IMPORT virtual float rgbValue() const;
+
+ /**
+ * Gets the type of the attribute value.
+ *
+ * @return The type of the attribute value.
+ */
+ OSN_IMPORT virtual Type type() const;
+
+ /**
+ * Gets the unit of the value.
+ *
+ * @return The unit of the value.
+ */
+ OSN_IMPORT virtual TAlfUnit unit() const;
+
+protected:
+
+ /**
+ * Constructor.
+ */
+ AlfAttributeValueType();
+
+private: // data
+
+ auto_ptr<AlfAttributeValueTypeImpl> mData;
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFATTRIBUTEVALUETYPE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfcommonattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2007 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: attribute setter base implementation header.
+*
+*/
+
+
+#ifndef ALFCOMMONATTRIBUTESETTER_H
+#define ALFCOMMONATTRIBUTESETTER_H
+
+#include "alf/ialfattributesetter.h"
+
+namespace Alf
+ {
+
+/**
+ * @class AlfCommonAttributeSetter alfcommonattributesetter.h "alf/alfcommonattributesetter.h"
+ * Base implementation for attribute setters.
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+class AlfCommonAttributeSetter : public IAlfAttributeSetter
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfCommonAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfCommonAttributeSetter();
+
+ // from base class IAlfAttributeSetter
+
+ /**
+ * Returns the type of the attribute setter.
+ *
+ * @return The type of the attribute setter.
+ */
+ OSN_IMPORT virtual SetterType setterType();
+
+ /**
+ * Sets an attribute value in the target visual immediately without a transition.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if aContainer is invalid.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ */
+ OSN_IMPORT virtual void setAttributeValue(
+ CAlfVisual &aVisual, AlfAttributeContainer* aContainer, IAlfMap* aData);
+
+ /**
+ * Creates a command to change the value of an attribute in the target visual
+ * gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value
+ * of the attribute is defined by adding the value specific by aContainer
+ * to the corresponding attribute value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand(
+ CAlfVisual& aVisual, AlfAttributeContainer* aContainer, IAlfMap* aData,
+ int aTransitionTime = 0, CAlfVisual* aRefVisual = NULL);
+
+ /**
+ * Creates commands to change the given attribute values in the target visual
+ * gradually with a transition.Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The container
+ * can hold new values for multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value
+ * of the attribute is defined by adding the value specific by aContainer
+ * to the corresponding attribute value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands(CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer, CAlfVisual* aRefVisual = NULL);
+
+// from base class IAlfInterfaceBase
+
+ /**
+ * From IAlfInterfaceBase.
+ * Getter for interfaces provided by the element classes.
+ * Derived classes should always call the base class method
+ * from the overridden makeInterface.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ OSN_IMPORT IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+ /**
+ * Converts text between Unicode (UCS-2) and the Unicode transformation format UTF-8.
+ *
+ * @param aSrc The source string.
+ * @return Converted string.
+ */
+ HBufC* convertToUnicodeFromUtf8(const TPtrC8& aSrc) const;
+
+ /**
+ * Sets Dirty check flag.
+ *
+ * @param aCheck whether dirty check should be enabled or not.
+ */
+ OSN_IMPORT void enableDirtyCheck(bool aCheck);
+protected:
+
+ /**
+ * Sets a value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ */
+ virtual void handleStaticAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets a dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ */
+ virtual void handleDynamicAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets a value for static data attribute in the target visual
+ * immediately without a transition using data in map.
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ * @param aData Contains data. Ownership not passed.
+ */
+ virtual void handleStaticDataAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * Sets a value for dynamic data attribute value in the target visual using transitions and data in map.
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ * @param aData Contains data. Ownership not passed.
+ */
+ virtual void handleDynamicDataAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+private: // data
+ bool mDoDirtycheck;
+ };
+
+ } // namespace Alf
+
+#endif // ALFCOMMONATTRIBUTESETTER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfcommonlayoutattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2007 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: layout attribute setters base implementation header.
+*
+*/
+
+
+#ifndef ALFCOMMONLAYOUTATTRIBUTESETTER_H
+#define ALFCOMMONLAYOUTATTRIBUTESETTER_H
+
+#include <osn/osndefines.h>
+#include <memory>
+#include <osn/ustring.h>
+#include "alf/alfcommonvisualattributesetter.h"
+
+using namespace osncore;
+
+using std::auto_ptr;
+
+namespace Alf
+ {
+
+/**
+ * @class AlfCommonLayoutAttributeSetter alfcommonlayoutattributesetter.h "alf/alfcommonlayoutattributesetter.h"
+ * Base implementation for layout attribute setters. Attribute setters for custom layouts can derive from this
+ * class.
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+class AlfCommonLayoutAttributeSetter : public AlfCommonVisualAttributeSetter
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfCommonLayoutAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfCommonLayoutAttributeSetter();
+
+ /**
+ * Sets the attribute values to the target visual.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if aVisual is not
+ * a layout.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the value of the attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT virtual void setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Creates a command to change the value of an attribute in the target visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute. Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The container
+ * can hold new values for multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+
+
+protected:
+
+ /**
+ * From AlfCommonVisualAttributeSetter
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ */
+ void handleStaticAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * From AlfCommonVisualAttributeSetter
+ * Sets an dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ */
+ void handleDynamicAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * From AlfCommonVisualAttributeSetter
+ * Sets an value for static attribute in the target visual immediately without a transition using data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ void handleStaticDataAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * From AlfCommonVisualAttributeSetter
+ * Sets an value for dynamic attribute value in the target visual using transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ void handleDynamicDataAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+ };
+
+ } // namespace Alf
+
+#endif // ALFCOMMONLAYOUTATTRIBUTESETTER_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfcommonvisualattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,265 @@
+/*
+* Copyright (c) 2007 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: attributesetter for common visual attributes
+*
+*/
+
+
+#ifndef ALFCOMMONVISUALATTRIBUTESETTER_H
+#define ALFCOMMONVISUALATTRIBUTESETTER_H
+
+#include <osn/osndefines.h>
+#include <memory>
+#include <osn/ustring.h>
+#include "alf/alfcommonattributesetter.h"
+
+using namespace osncore;
+
+using std::auto_ptr;
+
+namespace Alf
+ {
+
+/**
+ * @class AlfCommonVisualAttributeSetter alfcommonvisualattributesetter.h "alf/alfcommonvisualattributesetter.h"
+ * Base implementation for visual attribute setters. Attribute setters for custom visuals can derive from this
+ * class.
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+class AlfCommonVisualAttributeSetter : public AlfCommonAttributeSetter
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ */
+ OSN_IMPORT AlfCommonVisualAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfCommonVisualAttributeSetter();
+
+ /**
+ * Creates a command to change the value of an attribute
+ * in the target visual gradually with a transition.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL,
+ * the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding
+ * attribute value in the reference visual.
+ * @return The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values
+ * in the target visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred.
+ * The container can hold new values for multiple different
+ * attributes, in which case several commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL,
+ * the target value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute value
+ * in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+protected:
+
+ /**
+ * From AlfCommonAttributeSetter
+ * Sets a value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ */
+ virtual void handleStaticAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * From AlfCommonAttributeSetter
+ * Sets a dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ */
+ virtual void handleDynamicAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * From AlfCommonAttributeSetter
+ * Sets a value for static data attribute in the target visual
+ * immediately without a transition using data in map.
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ * @param aData Contains data. Ownership not passed.
+ */
+ virtual void handleStaticDataAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * From AlfCommonAttributeSetter
+ * Sets a value for dynamic data attribute value in the target visual using transitions and data in map.
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ * @param aData Contains data. Ownership not passed.
+ */
+ virtual void handleDynamicDataAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+private:
+
+ /**
+ * Sets an dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ * @param aImmediate if true, the change is immediate and time value of the attribute is not used.
+ * @return true, if attribute was handled, false otherwise.
+ */
+ bool doHandleDynamicAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, bool aImmediate = false);
+
+ /**
+ * Sets an value for dynamic attribute value in the target visual using transitions and data in map.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ * @param aImmediate if true, the change is immediate and time value of the attribute is not used.
+ */
+ bool doHandleDynamicDataAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData, bool aImmediate = false);
+
+ /**
+ * Creates commands to change the given attribute values in the target visual gradually with a transition.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred.
+ * @param aAttr main attribute, from which the command is created.
+ The function can also use other attributes found in the aContainer.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ */
+ void sendCommandsForAttribute(CAlfVisual& aVisual,
+ AlfAttributeContainer& aContainer, AlfAttribute& aAttr,
+ CAlfVisual* aRefVisual);
+
+ /**
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ void setPadding(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* aData);
+ /**
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ void setMinSize(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* aData);
+ /**
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ void setMaxSize(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* aData);
+
+ /**
+ * Sets an dynamic attribute value in the target visual using transitions defined in attributes.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+
+ void setPos(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* aData,bool aImmediate);
+ /**
+ * Sets an dynamic attribute value in the target visual using transitions defined in attributes.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+
+ void setSize(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* aData,bool aImmediate);
+ /**
+ * Sets an dynamic attribute value in the target visual using transitions defined in attributes.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+
+ void setRect(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* aData,bool aImmediate);
+
+ void setTactileFeedback(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* aData);
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // ALFCOMMONVISUALATTRIBUTESETTER_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfcurvepathlayoutattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,218 @@
+/*
+* Copyright (c) 2007 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: curve path layout attribute setter header.
+*
+*/
+
+
+#ifndef ALFCURVEPATHLAYOUTATTRIBUTESETTER_H
+#define ALFCURVEPATHLAYOUTATTRIBUTESETTER_H
+
+//includes
+
+//widget model includes
+#include "alf/alfcommonlayoutattributesetter.h"
+
+//osn includes
+#include <osn/osndefines.h>
+
+
+namespace Alf
+ {
+
+/**
+ * @class AlfCurvePathLayoutAttributeSetter alfcurvepathlayoutattributesetter.h "alf/alfcurvepathlayoutattributesetter.h"
+ * The implementation of the attribute setter for setting curve path layout attributes.
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+class AlfCurvePathLayoutAttributeSetter : public AlfCommonLayoutAttributeSetter
+ {
+
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfCurvePathLayoutAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfCurvePathLayoutAttributeSetter();
+
+ /**
+ * Sets an attribute value in the target visual immediately without
+ * a transition.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if aVisual
+ * is not a curvepath layout.
+ * @exception osncore::AlfDataException Thrown with error code osncore::ECommonError if the data field
+ * for data attributes is 0.
+ * @exception osncore::AlfDataException Thrown with error code osncore::ECommonError if aData
+ * for data attributes is 0.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if an
+ * attempt is made to set a line attribute to a curvepath layout
+ * with incomplete data. See language specification on how to
+ * create this attribute.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if an
+ * attempt is made to set an arc attribute to a curvepath layout
+ * with incomplete data. See language specification on how to
+ * create this attribute.
+ * @exception osncore::AlfDataException Thrown with error code osncore::ECommonError if the attribute
+ * (or aData in case of data attributes) contains invalid data types
+ * while setting a line or arc to a curvepath layout.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ */
+ OSN_IMPORT virtual void setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Deprecated! Do not use!
+ * Creates a command to change the value of an attribute in the target
+ * visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the
+ * attribute.Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target
+ * visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding attribute value(s)
+ * used by the attribute setter. Ownership is not
+ * transferred. The container can hold new values for
+ * multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual
+ */
+ OSN_IMPORT virtual void createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+
+protected:
+ /**
+ * Sets an dynamic attribute value in the target visual using transitions
+ * defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ */
+ virtual void handleDynamicAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets an value for static attribute in the target visual immediately
+ * without a transition using data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object
+ * is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute ( CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Sets an value for dynamic attribute value in the target visual using transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute ( CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ */
+ virtual void handleStaticAttribute ( CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * Check if data in the attribute is int or float.
+ * Return the value as a float value
+ *
+ * @param aAttr The attribute containing the value
+ * @param aIndex The index of the value to be checked
+ * return Content of the attribute
+ */
+ float floatOrInt(const AlfAttribute& aAttr, int aIndex);
+
+ /**
+ * Check if data in the attribute is int or float.
+ * Return the value as a float value
+ *
+ * @param aData The variant type containing the value
+ * return Content of the variant type
+ */
+ float floatOrIntFromData(IAlfVariantType* aData);
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // ALFCURVEPATHLAYOUTATTRIBUTESETTER_H
+// End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfdecklayoutattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2007 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: Deck layout attribute setter Header.
+*
+*/
+
+
+#ifndef ALFDECKLAYOUTATTRIBUTESETTER_H
+#define ALFDECKLAYOUTATTRIBUTESETTER_H
+
+//includes
+
+//widget model includes
+#include "alf/alfcommonlayoutattributesetter.h"
+
+//osn includes
+#include <osn/osndefines.h>
+
+
+namespace Alf
+ {
+
+/**
+ * @class AlfDeckLayoutAttributeSetter alfdecklayoutattributesetter.h "alf/alfdecklayoutattributesetter.h"
+ * The implementation of the attribute setter for setting curve path layout attributes.
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+ class AlfDeckLayoutAttributeSetter : public AlfCommonLayoutAttributeSetter
+ {
+
+public:
+
+ /**
+ * Constructor.
+ */
+ OSN_IMPORT AlfDeckLayoutAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfDeckLayoutAttributeSetter();
+
+
+ /**
+ * Sets an attribute value in the target visual immediately without a transition.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if aVisual
+ * is not a deck layout.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT virtual void setAttributeValue (CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer, IAlfMap* aData );
+
+ /**
+ * Depracated! Do not use!
+ * Creates a command to change the value of an attribute in the target visual
+ * gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand (CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer, IAlfMap* aData,
+ int aTransitionTime = 0, CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target
+ * visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred.
+ * The container can hold new values for multiple different
+ * attributes, in which case several commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+protected:
+
+ /**
+ * Sets a value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ */
+ virtual void handleStaticAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets a dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ */
+ virtual void handleDynamicAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets a value for static data attribute in the target visual
+ * immediately without a transition using data in map.
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ * @param aData Contains data. Ownership not passed.
+ */
+ virtual void handleStaticDataAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * Sets a value for dynamic data attribute value in the target visual using transitions and data in map.
+ *
+ * @param aVisual The target visual. Ownership not passed.
+ * @param aAttr The attribute to process. Ownership not passed.
+ * @param aContainer The container holding attributes. Ownership not passed.
+ * @param aData Contains data. Ownership not passed.
+ */
+ virtual void handleDynamicDataAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+private:// data
+ };
+
+ }// namespace Alf
+
+#endif // ALFDECKLAYOUTATTRIBUTESETTER_H
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfecompluginfactory.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2002-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: Ecom plugin Factory header.
+*
+*/
+
+
+#ifndef C_ALFECOMPLUGINFACTORY_H
+#define C_ALFECOMPLUGINFACTORY_H
+
+#include <e32base.h>
+#include <ecom/implementationinformation.h> // for typedeffed RImplInfoPtrArray
+#include <alf/ialfinterfacebase.h>
+
+namespace Alf
+ {
+
+/**
+ * @class CAlfEComPluginFactory alfecompluginfactory.h "alf/alfecompluginfactory.h"
+ * Base class for Ecom plugins. Takes care of ecom housekeeping.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class CAlfEComPluginFactory : public CBase, public IAlfInterfaceBase
+ {
+public: // Constructors and destructor
+
+ /**
+ * Factory method to create plugin for given interface
+ * @param aInterfaceUid UID of interface being queried/created.
+ * @param aImplKey Implementation Key
+ * @return An ecom plugin factory.
+ */
+ IMPORT_C static CAlfEComPluginFactory* createPluginFactory(
+ TUid aInterfaceUid,const char* aImplKey);
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C virtual ~CAlfEComPluginFactory();
+
+public:
+ /**
+ * List available interface implementations.
+ * @since Series 60 3.2
+ * @param aInterfaceUid: Interface Uid
+ * @param aImplInfoArray: Place holder which gets populated
+ * after function call
+ */
+ IMPORT_C static void getImplementationsL(
+ TUid aInterfaceUid,
+ RImplInfoPtrArray& aImplInfoArray);
+
+ /**
+ * List available interface implementations.
+ * @since Series 60 3.2
+ * @param aInterfaceUid: Interface Uid
+ * @param aImplKey Implementation Key
+ * @param aImplInfoArray: Place holder which gets populated after
+ * function call
+ */
+ IMPORT_C static void getImplementationsL(TUid aInterfaceUid,
+ const char* aImplKey,
+ RImplInfoPtrArray& aImplInfoArray);
+
+protected:
+
+ /**
+ * C++ default constructor.
+ */
+ IMPORT_C CAlfEComPluginFactory();
+
+private: // Data
+ // Ecom instance release key
+ TUid mDtorKey;
+ };
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfecompluginfactoryuid.rh Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 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: Ecom Plugin factory UID
+*
+*/
+
+
+#ifndef RH_ALFECOMPLUGINFACTORY_H
+#define RH_ALFECOMPLUGINFACTORY_H
+
+#define KFactoryPluginUid 0x10201112
+//#define KWidgetFactoryUid 0x11201113
+//#define KCustomWidgetFactoryUid 0x11112222
+
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfelement.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,423 @@
+/*
+* Copyright (c) 2007 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: The interface and the basic implementation for presentation elements.
+*
+*/
+
+
+#ifndef ALFELEMENT_H
+#define ALFELEMENT_H
+
+#include <osn/osndefines.h>
+#include <memory>
+#include <alf/ialfelement.h>
+#include <osn/alfptrvector.h>
+
+using osncore::AlfPtrVector;
+using std::auto_ptr;
+
+class CAlfVisual;
+class CAlfLayout;
+
+namespace Alf
+ {
+class CAlfWidgetControl;
+class IAlfVariantType;
+class AlfReferenceToVisual;
+class IAlfVisualTemplate;
+class AlfElementImpl;
+class IfId;
+
+/** @class AlfElement alfelement.h "alf/alfelement.h"
+ * The implementation of a generic element. Elements can be used,
+ * e.g., from declaration, to describe a specific part of
+ * the presentation of a component. The presentation may
+ * be predefined, or it may depend on the component data.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeOwner, IAlfElement
+ * @attributes duiuimodel::tactileattributes::KEventInput\n
+ * duiuimodel::tactileattributes::KFeedbackType\n
+ * duiuimodel::commonvisualattributes::KOpacity\n
+ * duiuimodel::layoutattributes::KPositionX\n
+ * duiuimodel::layoutattributes::KPositionY\n
+ * duiuimodel::layoutattributes::KWidth\n
+ * duiuimodel::layoutattributes::KHeight\n
+ * duiuimodel::layoutattributes::KMaxWidth\n
+ * duiuimodel::layoutattributes::KMaxHeight\n
+ * duiuimodel::layoutattributes::KMinWidth\n
+ * duiuimodel::layoutattributes::KMinHeight
+ */
+class AlfElement : public IAlfElement
+ {
+public:
+
+
+ /**
+ * Static cnstructor. The new element is left on the cleanup stack.
+ *
+ * @since S60 ?S60_version
+ * @param aControl The owner control.
+ * @param aName The name of the element.
+ * @return New object. Should be added to the control.
+ */
+ OSN_IMPORT AlfElement(CAlfWidgetControl& aControl, const char* aName);
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfElement();
+
+ /**
+ * Returns name of element set via Constructor.
+ *
+ * @since S60 ?S60_version
+ * @return name of element.
+ */
+ OSN_IMPORT const char* name() const;
+
+ /**
+ * Creates a visual tree in given element.
+ *
+ * @since S60 ?S60_version
+ * @param aElement Element for which visual tree will be created
+ * @param aChildData Data for visual tree to be created
+ * @param aData Data for parent visual tree
+ * @param aIndex Position in parent layout at which new visual tree will be added
+ * @param aDataID Parent visual tree's data id
+ */
+ OSN_IMPORT virtual void createChildVisualTree( IAlfElement* aElement,
+ IAlfVariantType& aChildData,
+ IAlfBranch& aData,
+ int aIndex, uint aDataID );
+
+ /**
+ * Creates a visual tree with the data given for visuals.
+ *
+ * @exception osncore::AlfElementException Thrown with the error code osncore::EInvalidElement\n
+ * when creation of visual tree fails.
+ * @since S60 ?S60_version
+ * @param aChildData Data for visual tree to be created
+ * @param aParentData Data for parent visual tree
+ * @param aIndex Position in parent layout at which new visual tree will be added
+ * @param aParentDataID Parent visual tree's data id
+ * @param aParentLayout Parent layout to which newly created visual tree will be added
+ * @param aLayoutIndex Position in parent layout at which new visual tree will be added
+ */
+ OSN_IMPORT virtual CAlfVisual* createVisualTree(
+ IAlfVariantType& aChildData, IAlfBranch& aParentData, int aIndex,
+ uint aParentDataID, CAlfLayout* aParentLayout, int aLayoutIndex );
+
+ /**
+ * Creates a visual tree with the data given for visuals.
+ *
+ * @exception std::bad_alloc
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::ECanNotCreateVisual\n
+ * when creation of visual fails.
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidElement\n
+ * when wrond data id is supplied.
+ * @exception std::bad_alloc
+ * @since S60 ?S60_version
+ * @param aData Data for visual tree to be created
+ * @param aDataID Parent visual tree's data id
+ * @param aParentLayout Parent layout to which newly created visual tree will be added
+ * @param aLayoutIndex Position in parent layout at which new visual tree will be added
+ */
+ OSN_IMPORT virtual CAlfVisual* createVisualTree(
+ IAlfVariantType& aData, uint aDataID,
+ CAlfLayout* aParentLayout, int aLayoutIndex );
+
+ /**
+ * Removes visual tree from given element.
+ *
+ * @since S60 ?S60_version
+ * @param aElement Element from which visual tree is to be removed
+ * @param aData
+ * @param aIndex
+ * @param aDataID
+ */
+ OSN_IMPORT virtual void removeChildVisualTree( IAlfElement* aElement,
+ IAlfBranch& aData,
+ int aIndex, uint aDataID );
+
+ /**
+ * Removes visual tree.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidElement\n
+ * when removal of visual tree fails.
+ * @since S60 ?S60_version
+ * @param aParentData
+ * @param aIndex
+ * @param aParentDataID
+ */
+ OSN_IMPORT virtual void removeVisualTree( IAlfBranch& aParentData,
+ int aIndex, uint aParentDataID );
+
+ /**
+ * Removes visual tree.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidElement\n
+ * when removal of visual tree fails.
+ * @since S60 ?S60_version
+ * @param aData
+ * @param aDataID
+ */
+ OSN_IMPORT virtual void removeVisualTree( IAlfVariantType& aData,
+ uint aDataID );
+
+ /**
+ * Updates the visual tree.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidElement\n
+ * when a visual can not be created.
+ * @since S60 ?S60_version
+ * @param aNewData
+ * @param aOldData
+ * @param aDataID
+ */
+ OSN_IMPORT virtual void updateVisualTree( IAlfVariantType& aNewData,
+ IAlfVariantType& aOldData,
+ uint aDataID );
+
+ /**
+ * Replaces the visual tree.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidElement\n
+ * when old data id is wrong.
+ * @since S60 ?S60_version
+ * @param aData
+ * @param aDataID
+ * @param aOldDataID
+ */
+ OSN_IMPORT void replaceVisualTree( IAlfVariantType& aData,
+ uint aDataID, uint aOldDataID );
+
+ /**
+ * Add a new visual tree to the element.
+ * Used by derived classes.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidElement\n
+ * when either the visual is NULL or data id is wrong.
+ * @exception std::bad_alloc
+ * @since S60 ?S60_version
+ * @param aVisualTree visual to be appended.
+ * @param aDataID data id of the visual.
+ */
+ OSN_IMPORT void addVisualTree(CAlfVisual* aVisualTree, uint aDataID);
+
+ /**
+ * Updates the Data ids in an the element.
+ *
+ * @since S60 ?S60_version
+ * @param aParentBranch Data in which IDs to be updated
+ * @param aStartIndex Index from which IDs to be updated
+ * @param aOffset Amount by which IDs are increased/decreased
+ * @param aOldParentDataId Not used.
+ * @param aParentDataID Parent data id of the element
+ */
+ OSN_IMPORT void updateDataIDs( IAlfBranch& aParentBranch, int aStartIndex,
+ int aOffset, uint aOldParentDataId, uint aParentDataID );
+
+ /**
+ * Returns the default parent layout of visual tree in an element.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidVisual\n
+ * when wrong data id is supplied.
+ * @since S60 ?S60_version
+ * @param aParentDataIS
+ * @return Parent layout
+ */
+ OSN_IMPORT CAlfLayout* defaultParentLayout(uint aParentDataID);
+
+ /**
+ * Set reference to the default parent layout.
+ *
+ * @since S60 ?S60_version
+ * @param aReference The reference to the default parent layout.
+ */
+ OSN_IMPORT void setDefaultParentLayout(AlfReferenceToVisual* aReference);
+
+ /**
+ * Finds visual with the given name and id in visual tree of element.
+ *
+ * @since S60 ?S60_version
+ * @param aName Name of the visual
+ * @param aDataID Data id of the visual
+ * @return Visual.Returns NULL if no matching visual is found.
+ */
+ OSN_IMPORT CAlfVisual* findVisual(const char* aName, uint aDataID);
+
+ /**
+ * Get visual from the data id.
+ *
+ * @since S60 ?S60_version
+ * @param aDataID data id of the visual.
+ */
+ OSN_IMPORT CAlfVisual* findVisual(uint aDataID);
+
+ /**
+ * Returns the data id of given visual.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual Reference to visual whose data id is needed.
+ * @return Data id of the visual
+ */
+ OSN_IMPORT uint dataID(const CAlfVisual& aVisual) const;
+
+ /**
+ * Returns parent element of the element.
+ *
+ * @since S60 ?S60_version
+ * @return Parent element. NULL, if there is no parent element.
+ */
+ OSN_IMPORT const IAlfElement* parentElement() const;
+
+ /**
+ * Makes the element child of given element.
+ *
+ * @since S60 ?S60_version
+ * @param aParent Parent element.
+ */
+ OSN_IMPORT void setParentElement(IAlfElement& aParent);
+
+ /**
+ * Sets the visual template for the element. This element
+ * will acquire ownership of the visual template hierarchy
+ * under the given visual template.
+ * Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ * @param aTemplate Root of the visual template hierarchy to be set
+ * into the widget element.
+ */
+ OSN_IMPORT void setVisualTemplate(IAlfVisualTemplate& aTemplate) throw();
+
+ /**
+ * Returns the root visual template of the visual template hierarchy
+ * owned by this element. Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ OSN_IMPORT IAlfVisualTemplate* getVisualTemplate() const throw();
+
+ /**
+ * Destroyes the visual template object assigned to this element and the whole
+ * visual template hierarchy under it.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void destroyVisualTemplate() throw();
+
+ /**
+ * Removes the visual template from this element. Returns pointer to the removed visual
+ * template object. The ownership of the visual template object is transferred to the
+ * caller. Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfVisualTemplate* removeVisualTemplate() throw();
+
+ /**
+ * Getter for the type identifier of this class.
+ *
+ * @since S60 ?S60_version
+ * @return A descriptor to identify the type of this class.
+ */
+
+ /**
+ * Template getter for interfaces provided by the element classes.
+ * The type of the queried interface is specified by the
+ * template parameter.
+ *
+ * @since S60 ?S60_version
+ * @param aElement The element to get the interface for.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ template <class T>
+ static T* makeInterface( AlfElement* aElement );
+
+// from base class IAlfInterfaceBase
+
+ /**
+ * From IAlfInterfaceBase.
+ * Getter for interfaces provided by the element classes.
+ * Derived classes should always call the base class method
+ * from the overridden MakeInterface.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ OSN_IMPORT virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+ /**
+ * removes and destroys all the visuals in the element.
+ *
+ * @since S60 ?S60_version
+ * @param aTimeMilliseconds the animation time for remove.
+ */
+ OSN_IMPORT void removeAndDestroyVisuals( int aTimeMilliseconds );
+
+ /**
+ * from IAlfElement
+ */
+ OSN_IMPORT bool contains(CAlfVisual& aVisual) const;
+
+protected:
+
+ /**
+ * The protected constructor.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfElement();
+
+ /**
+ * The second phase constructor.
+ * The element is added to the control.
+ *
+ * @exception std::bad_alloc
+ * @since S60 ?S60_version
+ * @param aControl The owner control.
+ * @param aName The name of the element.
+ */
+ OSN_IMPORT void construct( CAlfWidgetControl& aControl, const char* aName );
+
+ /**
+ * APi to get the control containing the element.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT CAlfWidgetControl& control();
+
+private:
+
+ int findFromArray( uint aDataID ) const;
+
+private: // data
+
+ auto_ptr<AlfElementImpl> mData;
+ };
+
+#include "alf/alfelement.inl"
+
+ } // namespace Alf
+#endif // ALFELEMENT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfflowlayoutattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2007 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: Flow Layout attribute setter Header.
+*
+*/
+
+
+#ifndef ALFFLOWLAYOUTATTRIBUTESETTER_H
+#define ALFFLOWLAYOUTATTRIBUTESETTER_H
+
+#include <osn/osndefines.h>
+#include "alf/alfcommonlayoutattributesetter.h"
+
+
+namespace Alf
+ {
+
+/** @class AlfFlowLayoutAttributeSetter alfflowlayoutattributesetter.h
+ * "alf/alfflowlayoutattributesetter.h"
+ * The implementation of the attribute setter.
+ *
+ * @interfaces IAlfAttributeSetter
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfFlowLayoutAttributeSetter : public AlfCommonLayoutAttributeSetter
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfFlowLayoutAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfFlowLayoutAttributeSetter();
+
+ /**
+ * Sets the attribute values to the target visual.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code
+ * osncore::EInvalidVisual when supplied visual is not a
+ * flow layout visual.
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the value of the attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT virtual void setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Depracated! Do not use!
+ * Creates a command to change the value of an attribute in the target
+ * visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual.
+ *
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target
+ * visual gradually with a transition.Then sends the commands via the
+ * ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The
+ * container can hold new values for multiple different attributes, in
+ * which case several commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+protected:
+
+ /**
+ * AlfCommonLayoutAttributeSetter
+ * Sets an dynamic attribute value in the target visual using transitions
+ * defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicAttribute(
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * AlfCommonLayoutAttributeSetter
+ * Sets an value for static attribute in the target visual immediately
+ * without a transition using data in map.
+ *
+ * @exception osncore::AlfDataException Thrown with the error code
+ * osncore::EInvalidVariantDataType when no data is supplied.
+ * @exception osncore::AlfDataException Thrown with the error code
+ * osncore::EInvalidAttribute when empty attribute is supplied.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * AlfCommonLayoutAttributeSetter
+ * Sets an value for dynamic attribute value in the target visual using
+ * transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * AlfCommonLayoutAttributeSetter
+ * Sets an value of a static attribute to target visual immediately
+ * without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ */
+ virtual void handleStaticAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // ALFFLOWLAYOUTATTRIBUTESETTER_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfgridlayoutattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2007 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: Grid layout attribute setter Header.
+*
+*/
+
+
+#ifndef ALFGRIDLAYOUTATTRIBUTESETTER_H
+#define ALFGRIDLAYOUTATTRIBUTESETTER_H
+
+//includes
+
+//widget model includes
+#include "alf/alfcommonlayoutattributesetter.h"
+
+//osn includes
+#include <osn/osndefines.h>
+
+namespace Alf
+ {
+
+/** @class AlfGridLayoutAttributeSetter alfgridlayoutattributesetter.h "alf/alfgridlayoutattributesetter.h"
+ * The implementation of the grid attribute setter.
+ *
+ * @interfaces IAlfAttributeSetter
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+
+class AlfGridLayoutAttributeSetter : public AlfCommonLayoutAttributeSetter
+ {
+
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfGridLayoutAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfGridLayoutAttributeSetter();
+
+
+ /**
+ * Sets the attribute values to the target visual.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidVisual\n
+ * when supplied visual is not a grid layout visual.
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the value of the attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT virtual void setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Creates a command to change the value of an attribute in the target visual gradually with a transition.
+ *
+ * @deprecated use createAndSendCommands instead.
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute. Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ * @return The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = 0);
+
+ /**
+ * Creates commands to change the given attribute values in the target visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The container
+ * can hold new values for multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If valid pointer, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = 0);
+
+protected:
+ /**
+ * From AlfCommonLayoutAttributeSetter
+ * Sets an dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+ /**
+ * From AlfCommonLayoutAttributeSetter
+ * Sets an value for static attribute in the target visual immediately without a transition using data in map.
+ *
+ * @exception osncore::AlfDataException Thrown with the error code osncore::ECommonError\n
+ * when invalid data is supplied for grid layout.
+ * @exception osncore::AlfException Thrown with the error code osncore::ECommonError\n
+ * when there is an exception in setting attributes for grid layout.
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+ /**
+ * From AlfCommonLayoutAttributeSetter
+ * Sets an value for dynamic attribute value in the target visual using transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+ /**
+ * From AlfCommonLayoutAttributeSetter
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @exception osncore::AlfException Thrown with the error code osncore::ECommonError\n
+ * when there is an exception in setting attributes for grid layout.
+ * @exception osncore::AlfAttributeException Thrown with the error code osncore::EInvalidAttribute\n
+ * when invalid attributes are supplied for grid layout.
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // ALFGRIDLAYOUTATTRIBUTESETTER_H
+// End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfimagevisualattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2007 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: Image visual attribute setter Header.
+*
+*/
+
+
+#ifndef ALFIMAGEVISUALATTRIBUTESETTER_H
+#define ALFIMAGEVISUALATTRIBUTESETTER_H
+
+#include <osn/osndefines.h>
+#include "alf/alfcommonvisualattributesetter.h"
+
+class CAlfImageVisual;
+
+namespace Alf
+ {
+class AlfImageVisualAttributeSetterImpl;
+class IAlfVariantType;
+class ResourcePool;
+
+/**
+ * @class AlfImageVisualAttributeSetter alfimagevisualattributesetter.h "alf/alfimagevisualattributesetter.h"
+ * The implementation of the attribute setter for setting image visual attributes.
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+class AlfImageVisualAttributeSetter : public AlfCommonVisualAttributeSetter
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfImageVisualAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfImageVisualAttributeSetter();
+
+ /**
+ * Sets the attribute values to the target visual.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if aVisual
+ * is not an image visual.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttribute if the data field
+ * for data attributes is 0.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aData
+ * for data attributes is 0.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EIncompleteAttributeValues if an
+ * attempt is made to set a color attribute with insufficient data.
+ * See language specification on how to create this attribute.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttribute if an
+ * attempt is made to set a color attribute with incompatible data types.
+ * See language specification on how to create this attribute.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttribute if an
+ * attempt is made to set a drop shadow attribute with incompatible data.
+ * See language specification on how to create this attribute.
+ * @exception osncore::AlfDataException Thrown with Symbian error code if the skin animation ID cannot be retreived
+ * while setting an animated skin image.
+ * @exception osncore::AlfDataException Thrown with Symbian error code if the skin frame ID cannot be retreived
+ * while setting an skin frame image.
+ * @exception osncore::ThemeException Thrown when skinid is not found.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership.
+ * @param aContainer The container holding the value of the attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT virtual void setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Creates a command to change the value of an attribute in the target visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute. Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The container
+ * can hold new values for multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+protected:
+
+ /**
+ * From AlfCommonVisualAttributeSetter
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+ /**
+ * From AlfCommonVisualAttributeSetter
+ * Sets an dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+ /**
+ * From AlfCommonVisualAttributeSetter
+ * Sets an value for static attribute in the target visual immediately without a transition using data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * From AlfCommonVisualAttributeSetter
+ * Sets an value for dynamic attribute value in the target visual using transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+private:
+ /**
+ * Sets FrameImage for aVisual using the frame skin id stored in aAttr
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aSkinFrameImage LogicalName for the frame image. Ownership of the object is not transferred
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData datamap used in staticdata case. Ownership of the object is not transferred.
+ *
+ * @exception osncore::ThemeException Thrown when SkinId is not found.
+ */
+ void setFrameImage(CAlfVisual& aVisual,const Utf8* aSkinFrameID, const AlfAttributeContainer& aContainer,IAlfMap* aData=NULL);
+ /**
+ * Gets the attribute value based on whether attribute type is static or staticdata.
+ *
+ * @param aAttr The attribute to process. Doesn't take ownership.
+ * @param aData datamap used in staticdata case. Doesn't take ownership
+ *
+ * @return returns the attributeValue..
+ */
+ int getValueFromAttribute(const AlfAttribute& aAttr,IAlfMap* aData) const;
+
+ void HandleImagePathAttribute(
+ const TPtrC8& aStringValue,
+ CAlfImageVisual* aImageVisual,
+ bool aPrimary );
+
+private: // data
+ auto_ptr<AlfImageVisualAttributeSetterImpl> mImpl;
+ };
+
+ } // namespace Alf
+
+#endif // ALFIMAGEVISUALATTRIBUTESETTER_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alflctanchorlayoutattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2007 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: Lct anchor layout attribute setter Header
+*
+*/
+
+
+#ifndef ALFLCTANCHORLAYOUTATTRIBUTESETTER_H
+#define ALFLCTANCHORLAYOUTATTRIBUTESETTER_H
+
+//includes
+
+//widget model includes
+#include "alf/alfanchorlayoutattributesetter.h"
+
+//osn includes
+#include <osn/osndefines.h>
+
+
+namespace Alf
+ {
+
+/**
+ * @class AlfLCTAnchorLayoutAttributeSetter alflctanchorlayoutattributesetter.h "alf/alflctanchorlayoutattributesetter.h"
+ * The implementation of the attribute setter for setting lct anchor layout attributes.
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+class AlfLCTAnchorLayoutAttributeSetter : public AlfAnchorLayoutAttributeSetter
+ {
+
+public:
+
+ /**
+ * Constructor.
+ *
+ */
+ OSN_IMPORT AlfLCTAnchorLayoutAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfLCTAnchorLayoutAttributeSetter();
+
+ /**
+ * Sets an attribute value in the target visual immediately without a transition.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if aVisual is not
+ * an lct anchor layout.
+ * @exception osncore::AlfVisualException Thrown with Symbian error code if anchor point attachment fails.
+ * @exception std::bad_alloc
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ OSN_IMPORT virtual void setAttributeValue (CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer, IAlfMap* aData );
+
+ /**
+ * Depracated! Do not use!
+ * Creates a command to change the value of an attribute in the target
+ * visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the
+ * value specific by aContainer to the corresponding
+ * attribute value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand (CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer, IAlfMap* aData,
+ int aTransitionTime = 0, CAlfVisual* aRefVisual = 0 );
+
+ /**
+ * Creates commands to change the given attribute values in the target
+ * visual gradually with a transition. Then sends the commands via the
+ * ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not
+ * transferred. The container can hold new values for
+ * multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands (CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer, CAlfVisual* aRefVisual = 0 );
+
+
+protected:
+ /**
+ * Sets a dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ */
+ virtual void handleDynamicAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets an value for static attribute in the target visual immediately
+ * without a transition using data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+ /**
+ * Sets an value for dynamic attribute value in the target visual using
+ * transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+ /**
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ */
+ virtual void handleStaticAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // ALFLCTANCHORLAYOUTATTRIBUTESETTER_H
+// End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alflctgridlayoutattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,160 @@
+/*
+* Copyright (c) 2007 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: LCT grid layout attribute setter header.
+*
+*/
+
+
+#ifndef ALFLCTGRIDLAYOUTATTRIBUTESETTER_H
+#define ALFLCTGRIDLAYOUTATTRIBUTESETTER_H
+
+//includes
+
+//widget model includes
+#include "alf/alfgridlayoutattributesetter.h"
+
+//osn includes
+#include <osn/osndefines.h>
+
+
+namespace Alf
+ {
+
+
+
+/**
+ * @class AlfLCTGridLayoutAttributeSetter alflctgridlayoutattributesetter.h "alf/alflctgridlayoutattributesetter.h"
+ * The implementation of the attribute setter for setting lct grid layout attributes.
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+class AlfLCTGridLayoutAttributeSetter : public AlfGridLayoutAttributeSetter
+ {
+
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfLCTGridLayoutAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfLCTGridLayoutAttributeSetter();
+
+ /**
+ * Sets the attribute values to the target visual.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if aVisual is not
+ * an lct grid layout.
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the value of the attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT void setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Depracated! Do not use!
+ * Creates a command to change the value of an attribute in the target visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute. Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The container
+ * can hold new values for multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+
+protected:
+ /**
+ * Sets an dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets an value for static attribute in the target visual immediately without a transition using data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+ /**
+ * Sets an value for dynamic attribute value in the target visual using transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+ /**
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ */
+ virtual void handleStaticAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer );
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // ALFLCTGRIDLAYOUTATTRIBUTESETTER_H
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alflctimagevisualattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2007 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: Lct image Visual attribute setter Header.
+*
+*/
+
+
+#ifndef ALFLCTIMAGEVISUALATTRIBUTESETTER_H
+#define ALFLCTIMAGEVISUALATTRIBUTESETTER_H
+
+#include "alf/alfimagevisualattributesetter.h"
+
+namespace Alf
+ {
+
+/** @class AlfLctImageVisualAttributeSetter alflctimagevisualattributesetter.h "alf/alflctimagevisualattributesetter.h"
+ * The implementation of the attribute setter.
+ *
+ * @interfaces IAlfAttributeSetter
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfLctImageVisualAttributeSetter : public AlfImageVisualAttributeSetter
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfLctImageVisualAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfLctImageVisualAttributeSetter();
+
+// from base class MAlfAttributeSetter
+
+ /**
+ * Creates a command to change the value of an attribute in the target visual
+ * gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value
+ * of the attribute is defined by adding the value specific by aContainer
+ * to the corresponding attribute value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand(
+ CAlfVisual& aVisual, AlfAttributeContainer* aContainer, IAlfMap* aData,
+ int aTransitionTime = 0, CAlfVisual* aRefVisual = NULL);
+
+ /**
+ * Creates commands to change the given attribute values in the target visual
+ * gradually with a transition.Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The container
+ * can hold new values for multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value
+ * of the attribute is defined by adding the value specific by aContainer
+ * to the corresponding attribute value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands(CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer, CAlfVisual* aRefVisual = NULL);
+
+protected:
+
+ /**
+ * Sets an dynamic attribute value in the target visual
+ * using transitions defined in attributes.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets an value for static attribute in the target visual immediately
+ * without a transition using data in map.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * Sets an value for dynamic attribute value in the target visual
+ * using transitions and data in map.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * Sets an value of a static attribute to target visual immediately
+ * without a transition.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ */
+ virtual void handleStaticAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // ALFLCTIMAGEVISUALATTRIBUTESETTER_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alflcttextvisualattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2007 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: Text visual attribute setter header.
+*
+*/
+
+
+#ifndef ALFLCTTEXTVISUALATTRIBUTESETTER_H
+#define ALFLCTTEXTVISUALATTRIBUTESETTER_H
+
+#include "alf/alftextvisualattributesetter.h"
+
+namespace Alf
+ {
+
+/** @class AlfLctTextVisualAttributeSetter alflcttextvisualattributesetter.h "alf/alflcttextvisualattributesetter.h"
+ * The implementation of the attribute setter.
+ *
+ * @interfaces IAlfAttributeSetter
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfLctTextVisualAttributeSetter : public AlfTextVisualAttributeSetter
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfLctTextVisualAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfLctTextVisualAttributeSetter();
+
+
+// from base class MAlfAttributeSetter
+
+ /**
+ * Sets the attribute values to the target visual.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidVisual\n
+ * when supplied visual is not a lct text visual.
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the value of the attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT void setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Creates a command to change the value of an attribute in the target visual
+ * gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value
+ * of the attribute is defined by adding the value specific by aContainer
+ * to the corresponding attribute value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand(
+ CAlfVisual& aVisual, AlfAttributeContainer* aContainer, IAlfMap* aData,
+ int aTransitionTime = 0, CAlfVisual* aRefVisual = NULL);
+
+ /**
+ * Creates commands to change the given attribute values in the target visual
+ * gradually with a transition.Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The container
+ * can hold new values for multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value
+ * of the attribute is defined by adding the value specific by aContainer
+ * to the corresponding attribute value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands(CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer, CAlfVisual* aRefVisual = NULL);
+
+protected:
+
+ /**
+ * Sets an dynamic attribute value in the target visual
+ * using transitions defined in attributes.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets an value for static attribute in the target visual immediately
+ * without a transition using data in map.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * Sets an value for dynamic attribute value in the target visual
+ * using transitions and data in map.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * Sets an value of a static attribute to target visual immediately
+ * without a transition.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes.
+ * Ownership of the object is not transferred.
+ */
+ virtual void handleStaticAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // ALFLCTTEXTVISUALATTRIBUTESETTER_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alflinevisualattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,267 @@
+/*
+* Copyright (c) 2007 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: Line visual attribute setter Header.
+*
+*/
+
+
+#ifndef ALFLINEVISUALATTRIBUTESETTER_H
+#define ALFLINEVISUALATTRIBUTESETTER_H
+
+#include <osn/osndefines.h>
+#include "alf/alfcommonvisualattributesetter.h"
+
+class CAlfCurvePath;
+class CAlfLineVisual;
+
+namespace Alf
+ {
+
+class AlfLineVisualAttributeSetterImpl;
+
+/** @class AlfLineVisualAttributeSetter alflinevisualattributesetter.h
+ * "alf/alflinevisualattributesetter.h"
+ * The implementation of the attribute setter.
+ *
+ * @interfaces IAlfAttributeSetter
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfLineVisualAttributeSetter : public AlfCommonVisualAttributeSetter
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @exception std::bad_alloc
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfLineVisualAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfLineVisualAttributeSetter();
+
+ /**
+ * Sets an attribute value in the target visual immediately without
+ * a transition.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code
+ * osncore::EInvalidVisual when supplied visual is not a line visual.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ */
+ OSN_IMPORT virtual void setAttributeValue(
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData);
+
+ /**
+ * Deprecated! Do not use!
+ * Creates a command to change the value of an attribute in the target
+ * visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the
+ * attribute.Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target
+ * visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding attribute value(s)
+ * used by the attribute setter. Ownership is not
+ * transferred. The container can hold new values for
+ * multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value specific by
+ * aContainer to the corresponding attribute value in the reference
+ * visual
+ */
+ OSN_IMPORT virtual void createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+protected:
+ /**
+ * Sets an dynamic attribute value in the target visual using transitions
+ * defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ */
+ virtual void handleDynamicAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets a value for static attribute in the target visual immediately
+ * without any transition using data in map.
+ *
+ * @exception osncore::AlfDataException Thrown with the error code
+ * osncore::ECommonError when empty attribute for line visual
+ * is supplied .
+ * @exception osncore::AlfAttributeException Thrown with the error code
+ * osncore::EInvalidAttribute when wrong attribute for line visual
+ * is supplied .
+ * @exception osncore::AlfAttributeException Thrown with the error code
+ * osncore::EIncompleteAttributeValues when all values of an attribute
+ * for line visual are not supplied .
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute ( CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Sets a value for dynamic attribute value in the target visual using
+ * transitions and data in map.
+ *
+ * @exception osncore::AlfDataException Thrown with the error code
+ * osncore::ECommonError when empty attribute for line visual
+ * is supplied .
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Sets a value of a static attribute to target visual immediately without
+ * any transition.
+ *
+ * @exception osncore::AlfAttributeException Thrown with the error code
+ * osncore::EInvalidAttribute when wrong attribute data for line visual
+ * is supplied .
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ */
+ virtual void handleStaticAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+private:
+
+ /**
+ * Creates and returns a toolkit defined mappping function based on the
+ * attribute content.
+ * The int value-mapping function mapping is the following:
+ * 0 - KConstMappingFunction
+ * 1 - KLinearMappingFunction
+ * 2 - KSineMappingFunction
+ * 3 - KCosineMappingFunction
+ * @param aAttribute Attribute containing the deciding int value and data
+ * required for construction of the mapping function.
+ * @param aEnv Environment
+ * @result The mapping function pointer
+ */
+ MAlfMappingFunction* getMappingFunction(
+ AlfAttribute& aAttribute ,
+ CAlfEnv& aEnv);
+
+ /**
+ * Creates and returns a toolkit defined mappping function based on the
+ * container content.
+ * The int value-mapping function mapping is the following:
+ * 0 - KConstMappingFunction
+ * 1 - KLinearMappingFunction
+ * 2 - KSineMappingFunction
+ * 3 - KCosineMappingFunction
+ * @param aContainer Container containing the deciding int value and data
+ * required for construction of the mapping function.
+ * @param aEnv Environment
+ * @result The mapping function pointer
+ */
+ MAlfMappingFunction* getMappingFunctionFromContainer(
+ IAlfContainer* aContainer,
+ CAlfEnv& aEnv);
+
+
+ /**
+ * Gets the path from the line visual or creates it if does not exist
+ * @param aLineVisual Line Visual
+ * @result The curvepath
+ */
+ CAlfCurvePath* getCurvePath(CAlfLineVisual* aLineVisual);
+
+ /**
+ * Check if data in the attribute is int or float.
+ * Return the value as a float value
+ *
+ * @param aAttr The attribute containing the value
+ * @param aIndex The index of the value to be checked
+ * return Content of the attribute
+ */
+ float floatOrInt(const AlfAttribute& aAttr, int aIndex);
+
+ /**
+ * Check if data in the variant type is int or float.
+ * Return the value as a float value
+ *
+ * @param aData The variant type containing the value
+ * return Content of the variant type
+ */
+ float floatOrIntFromData(IAlfVariantType* aData);
+
+
+
+private: // data
+ auto_ptr<AlfLineVisualAttributeSetterImpl> mImpl;
+ };
+
+ } // namespace Alf
+
+#endif // ALFLINEVISUALATTRIBUTESETTER_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfmeshvisualattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,239 @@
+/*
+* Copyright (c) 2007 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: Mesh visual attribute setter header.
+*
+*/
+
+
+#ifndef ALFMESHVISUALATTRIBUTESETTER_H
+#define ALFMESHVISUALATTRIBUTESETTER_H
+
+#include <osn/osndefines.h>
+#include "alf/alfcommonvisualattributesetter.h"
+
+class CAlfMeshVisual;
+
+namespace Alf
+ {
+class AlfMeshVisualAttributeSetterImpl;
+class AlfAttribute;
+
+/** @class AlfMeshVisualAttributeSetter alfmeshvisualattributesetter.h "alf/alfmeshvisualattributesetter.h"
+ * The implementation of the attribute setter.
+ *
+ * @interfaces IAlfAttributeSetter
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfMeshVisualAttributeSetter : public AlfCommonVisualAttributeSetter
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @exception std::bad_alloc
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfMeshVisualAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfMeshVisualAttributeSetter();
+
+ /**
+ * Sets an attribute value in the target visual .
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidVisual\n
+ * when supplied visual is not a Mesh visual.
+ * @exception osncore::AlfDataException Thrown with the error code osncore::EInvalidVariantDataType\n
+ * when no data for line visual is supplied.
+ * @exception osncore::AlfDataException Thrown with the error code osncore::EInvalidAttribute\n
+ * when wrong data for line visual is supplied.
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT virtual void setAttributeValue(
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData);
+
+ /**
+ * Creates a command to change the value of an attribute in the target
+ * visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target
+ * visual gradually with a transition.Then sends the commands via the
+ * ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute
+ * value(s) used by the attribute setter. Ownership
+ * is not transferred. The container can hold new values
+ * for multiple different attributes, in which case
+ * several commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+protected:
+
+ /**
+ * Sets an dynamic attribute value in the target visual using transitions
+ * defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ */
+ virtual void handleDynamicAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets an value for static attribute in the target visual immediately
+ * without a transition using data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * Sets an value for dynamic attribute value in the target visual using
+ * transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ */
+ virtual void handleStaticAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+private:
+
+ /**
+ * Sets an dynamic attribute value in the target visual using transitions
+ * defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aImmediate if true, the change is immediate and time value of
+ * the attribute is not used.
+ */
+ bool doHandleDynamicAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, bool aImmediate = false);
+
+
+ /**
+ * Sets an value for dynamic attribute value in the target visual using
+ * transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ * @param aImmediate if true, the change is immediate and time value of
+ * the attribute is not used.
+ */
+ bool doHandleDynamicDataAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData, bool aImmediate = false);
+
+ /**
+ * Gets the data from map pointed by attribute's field name.
+ *
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aData Contains data.Ownership of the object is not transferred.
+ *
+ * @return pointer to the data from map pointed by attribute's field name.
+ */
+ IAlfVariantType* getData(AlfAttribute& aAttr, IAlfMap* aData);
+
+ /**
+ * gets the time from attribute safely.
+ *
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aImmediate if true, returns 0 else the time set for the attribute
+ */
+ int getTime(const AlfAttribute& aAttr, bool aImmediate = false);
+
+ enum imageCategory
+ {
+ primary,
+ secondary,
+ specular
+ };
+
+ void HandleImagePathAttribute(
+ const TPtrC8& aStringValue,
+ CAlfMeshVisual* aImageVisual,
+ imageCategory aImageCategory );
+
+private: // data
+ auto_ptr<AlfMeshVisualAttributeSetterImpl> mImpl;
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFMESHVISUALATTRIBUTESETTER_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfmodeloperation.h Wed Sep 01 12:23:18 2010 +0100
@@ -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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfrecyclinggridelement.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2007 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: The implementation for presentation elements.
+*
+*/
+
+
+#ifndef ALF_RECYCLINGGRIDELEMENT_H
+#define ALF_RECYCLINGGRIDELEMENT_H
+
+
+//INCLUDES
+#include <e32cmn.h> // TPoint
+#include <osn/osndefines.h>
+#include "alf/alfelement.h"
+#include <alf/ialfwidgeteventhandler.h>
+
+class CAlfControl;
+
+
+namespace Alf
+ {
+class CAlfWidgetControl;
+class AlfRecyclingGridElementImpl;
+
+namespace alfrecyclinggridelement
+ {
+static const IfId Ident=
+ {
+ 0,"alfrecyclinggridelement"
+ };
+ }
+
+/** @class AlfRecyclingGridElement alfrecyclinggridelement.h "alf/alfrecyclinggridelement.h"
+ * The implementation of a generic element with a functionality
+ * for recyclign the created visual trees. This is commonly used
+ * in scrolling list-like components, where only few of the items
+ * are visible at the same time. Scrolling is supported in both
+ * dimensions (rows / columns).
+ *
+ * @interfaces IAlfElement
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfRecyclingGridElement : public AlfElement, public IAlfWidgetEventHandler
+ {
+public:
+ static inline const IfId& type()
+ {
+ return alfrecyclinggridelement::Ident;
+ }
+ /**
+ * Enumerations of the Fill Style
+ */
+ OSN_IMPORT enum FillStyle{EColumnsFirst, ERowsFirst};
+
+
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ * @param aControl - Widget Control
+ * @param aName - Name of the Recycling grid element
+ * @param aNumColumns - Number of Columns
+ * @param aNumRows - Number of Rows
+ * @since S60 ?S60_version
+ * @return New object. The widgets are owned by Alfred. The objects is pushed on to the cleanup stack
+ */
+ OSN_IMPORT AlfRecyclingGridElement(CAlfWidgetControl& aControl, const char* aName, int aNumColumns, int aNumRows);
+
+
+ /** Class Destructor estructor.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT virtual ~AlfRecyclingGridElement();
+
+ /**
+ * Constructor.
+ * @param aFillStyle - style to be used to fill the grid
+ * @param aFillStyleParam -
+ * @since S60 ?S60_version
+ * @return New object. The widgets are owned by Alfred. The objects is pushed on to the cleanup stack
+ */
+ OSN_IMPORT void setFillStyle(FillStyle aFillStyle, int aFillStyleParam);
+ /*
+ * Sets the animation times for diferent visual changes
+ * @param aScrollingTime - animation time while scrolling
+ * @param aFadeInTime - amination time for fading in
+ * @param aFadeinDelay - a delay time after which fade in starts
+ * @param aFadeOutTime - animation time for fading out
+ * @param aFadeOutDelay - a delay time after which fade out will start
+ */
+
+ OSN_IMPORT void setAnimationTimes( int aScrollingTime,
+ int aFadeInTime, int aFadeInDelay,
+ int aFadeOutTime, int aFadeOutDelay );
+
+ /**
+ * Creates a visual tree with the data given for visuals.
+ *
+ * @exception std::bad_alloc
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::ECanNotCreateVisual\n
+ * when creation of visual fails.
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidElement\n
+ * when wrond data id is supplied.
+ * @exception std::bad_alloc
+ * @since S60 ?S60_version
+ * @param aData Data for visual tree to be created
+ * @param aDataID Parent visual tree's data id
+ * @param aParentLayout Parent layout to which newly created visual tree will be added
+ * @param aLayoutIndex Position in parent layout at which new visual tree will be added
+ */
+
+ OSN_IMPORT virtual CAlfVisual* createVisualTree(
+ IAlfVariantType& aData, uint aDataID,
+ CAlfLayout* aParentLayout, int aLayoutIndex );
+
+ //Implementation of IAlfWidgetEventHandler
+
+ /**
+ * Used to identify event handlers that are capable of handling
+ * a specified key or custom event. Pointer event handlers cannot be
+ * identified directly, since they are dependent on the presentation.
+ * Therefore, pointer event handlers should be associated with
+ * a custom event ID that can be used to simulate the actual pointer event.
+ *
+ * @since S60 ?S60_version
+ * @param aEvent The event.
+ * @return <code>ETrue</code> if the event can be processed. Otherwise <code>EFalse</code>.
+ */
+ OSN_IMPORT virtual bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;
+
+ /**
+ * Called when an input event is being offered to this event handler.
+ * The return value is used to indicate if the event was processed.
+ * Processed events may not be offered to other event handlers.
+ *
+ * @since S60 ?S60_version
+ * @param aControl The parent control of this event handler.
+ * @param aEvent The event.
+ * @return Result of event processing. See AlfEventStatus.
+ */
+ OSN_IMPORT AlfEventStatus offerEvent( CAlfWidgetControl& aControl,const TAlfEvent& aEvent );
+
+ /**
+ * @see MAlfWidgetEventHandler
+ */
+ OSN_IMPORT void setActiveStates( unsigned int aStates );
+
+ /**
+ * Sets AlfWidgetEventHandlerInitData to event handler.
+ *
+ * @param aData A data structure which contains for example id of the event
+ * handler.
+ */
+ OSN_IMPORT void setEventHandlerData( const AlfWidgetEventHandlerInitData& aData );
+
+ /**
+ * Returns AlfWidgetEventHandlerInitData.
+ *
+ * @return A pointer to AlfWidgetEventHandlerInitData structure which contains
+ * for example id of the event handler.
+ */
+ OSN_IMPORT AlfWidgetEventHandlerInitData* eventHandlerData();
+
+ /**
+ * Returns the type of EventHandler.
+ * @see IAlfWidgetEventHandler::AlfEventHandlerType
+ *
+ * @return The type of event handler.
+ */
+ IAlfWidgetEventHandler::AlfEventHandlerType eventHandlerType();
+
+ /**
+ * Returns information about the phase in the event handling cycle in
+ * which the event hadler will be executed.
+ * @see IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase
+ *
+ * @return Event handler execution phase.
+ */
+ IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase eventExecutionPhase();
+
+ /**
+ * From @see MAlfInterfaceBase.
+ * @since S60 ?S60_version
+ * @param aType The type of interface requested.
+ * @return Returns the new Interface
+ */
+ OSN_IMPORT virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+
+ /**
+ * Creates a visual tree with the data given for visuals.
+ *
+ * @exception std::bad_alloc
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::ECanNotCreateVisual\n
+ * when creation of visual fails.
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidElement\n
+ * when wrond data id is supplied.
+ * @exception std::bad_alloc
+ * @since S60 ?S60_version
+ * @param aData Data for visual tree to be created
+ * @param aDataID Parent visual tree's data id
+ * @param aParentLayout Parent layout to which newly created visual tree will be added
+ * @param aLayoutIndex Position in parent layout at which new visual tree will be added
+ */
+ OSN_IMPORT virtual void createChildVisualTree( IAlfElement* aElement,
+ IAlfVariantType& aChildData,
+ IAlfBranch& aData,
+ int aIndex, uint aDataID );
+ /**
+ * Removes visual tree from given element.
+ *
+ * @since S60 ?S60_version
+ * @param aElement Element from which visual tree is to be removed
+ * @param aData
+ * @param aIndex
+ * @param aDataID
+ */
+ OSN_IMPORT virtual void removeChildVisualTree( IAlfElement* aElement, IAlfBranch& aData, int aIndex, uint aDataID );
+
+ /**
+ * removes and destroys all the visuals.
+ *
+ * @param aTimeMilliseconds animation time for remove.
+ */
+ OSN_IMPORT void removeAndDestroyVisuals( int aTimeMilliseconds );
+
+private:
+ friend class AlfRecyclingGridElementImpl;
+ auto_ptr<AlfRecyclingGridElementImpl> mImpl;
+ };
+
+ } // namespace
+
+#endif // ALF_RECYCLINGGRIDELEMENT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfreferencetovisual.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,116 @@
+/*
+* Copyright (c) 2007 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: Visual class for alfred widget model.
+ This class queries the visual by name and ID.
+*
+*/
+
+
+#ifndef ALFREFERENCETOVISUAL_H
+#define ALFREFERENCETOVISUAL_H
+
+//INCLUDES
+#include <osn/osndefines.h>
+#include <osn/ustring.h>
+// FORWARD DECLARATIONS
+class CAlfControl;
+class CAlfVisual;
+
+
+using namespace osncore;
+
+namespace Alf
+ {
+class CAlfWidgetControl;
+
+/** @class AlfReferenceToVisual alfreferencetovisual.h "alf/alfreferencetovisual.h"
+ * A class for finding a specific visual according to
+ * the name of the visual, name of the parent element,
+ * and the associated data ID. The number of visual
+ * trees created by an element may depend on the data.
+ * Therefore, the visual structure is not always known
+ * beforehand. CAlfControl::FindElement() and MAlfElement::FindVisual
+ * can be used to find elements and visuals even in dynamic
+ * conditions.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfReferenceToVisual
+ {
+public:
+
+ /**
+ * constructor.
+ *
+ * @exception std::bad_alloc
+ * @since S60 ?S60_version
+ * @param aElementName The name of the element that is responsible
+ * for creating the visual.
+ * @param aVisualName The name of the visual.
+ * @param aUseDataID Deprecated and not used. The given data ID is always
+ * used when resolving the visual. Only if the visual is not found with
+ * the given data ID, then the data ID zero is tested for global visuals.
+ * @return New object.
+ */
+ OSN_IMPORT static AlfReferenceToVisual* create(
+ const char* aElementName,const char* aVisualName, bool aUseDataID);
+
+ /** Destructor. No derived classes, therefore not virtual. */
+ OSN_IMPORT ~AlfReferenceToVisual();
+
+
+ /**
+ * Find the referenced visual according to the given data ID.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code osncore::ECommonError\n
+ * when some operation performed on visual fails.
+ * @since S60 ?S60_version
+ * @param aControl The control containing the associated element.
+ * @param aDataID The data ID used to create the visual. The caller
+ * is responsible for determining what data ID
+ * is related to this reference. If the visual is not found with
+ * the given data ID, then the data ID zero is tried for global visuals.
+ * @return The resolved visual.
+ */
+ OSN_IMPORT CAlfVisual* resolve(CAlfWidgetControl& aControl, unsigned int aDataID);
+
+ /**
+ * Finds the referenced visual according to given pointer to visual
+ *
+ * @since S60 ?S60_version
+ * @param aControl The control containing the associated element.
+ * @param aSourceVisual Pointer to visual that needs to be queried.
+ */
+ OSN_IMPORT CAlfVisual* resolve(CAlfWidgetControl &aControl, CAlfVisual* aSourceVisual);
+private:
+ /**
+ * constructor
+ */
+ AlfReferenceToVisual(const char* aElementName,const char* aVisualName, bool aUseDataID);
+
+private:
+ // The element name. Owned.
+ UString mElementName;
+ // The visual name. Owned.
+ UString mVisualName;
+ // The associated data ID.
+ bool mUseDataID;
+ };
+
+ } // namespace Alf
+
+#endif //ALFREFERENCETOVISUAL_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfsettertype.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2007 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: Setter type Header.
+*
+*/
+
+
+#ifndef ALFSETTERTYPE_H
+#define ALFSETTERTYPE_H
+
+#include <e32def.h>
+
+enum SetterType
+ {
+ ECommandAttributeSetter,
+ EVisualAttributeSetter,
+ ELayoutAttributeSetter,
+ EWidgetAttributeSetter,
+ ECustomAttributeSetter
+ };
+
+#endif // ALFSETTERTYPE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alftextvisualattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,201 @@
+/*
+* Copyright (c) 2007 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: Text visual attribute setter Header.
+*
+*/
+
+
+#ifndef ALFTEXTVISUALATTRIBUTESETTER_H
+#define ALFTEXTVISUALATTRIBUTESETTER_H
+
+//includes
+
+//widget model includes
+#include "alf/alfcommonvisualattributesetter.h"
+
+//osn includes
+#include <osn/osndefines.h>
+
+namespace Alf
+ {
+
+/**
+ * @class AlfTextVisualAttributeSetter alftextvisualattributesetter.h "alf/alftextvisualattributesetter.h"
+ * The implementation of the attribute setter for setting text visual attributes.
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+class AlfTextVisualAttributeSetter : public AlfCommonVisualAttributeSetter
+ {
+
+public:
+
+ /**
+ * Constructor.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if aVisual is not
+ * a text visual.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidAttribute if the data field
+ * for data attributes is 0.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aData
+ * for data attributes is 0.
+ * @exception osncore::AlfDataException Thrown with error code osncore::ECommonError if setting of text color
+ * from skin fails.
+ * @exception osncore::AlfAttributeException Thrown with error code osncore::EInvalidAttribute if there are
+ * invalid number or type of attributes while attempting to set text color.
+ * See language specification on how to create these attributes.
+ * @exception osncore::AlfDataException Thrown with error code osncore::ECommonError if setting text to the
+ * text visual fails.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aData
+ * for data attributes is 0.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT AlfTextVisualAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfTextVisualAttributeSetter();
+
+ /**
+ * Sets the attribute values to the target visual.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the value of the attributes.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT virtual void setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Depracated! Do not use!
+ * Creates a command to change the value of an attribute in the target visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute. Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The container
+ * can hold new values for multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+protected:
+
+ /**
+ * From CAlfCommonVisualAttributeSetter
+ * Sets an value of a static attribute to target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+ /**
+ * From CAlfCommonVisualAttributeSetter
+ * Sets an dynamic attribute value in the target visual using transitions defined in attributes
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer);
+
+ /**
+ * From CAlfCommonVisualAttributeSetter
+ * Sets an value for static attribute in the target visual immediately without a transition using data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+ /**
+ * From CAlfCommonVisualAttributeSetter
+ * Sets an value for dynamic attribute value in the target visual using transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+private: // data
+
+ /**
+ * Localisation attribute setter helper method. Helper Method.
+ *
+ * @aLocId localisationid defined in .loc files.
+ * @aLang Required language for the text.
+ *
+ */
+
+ void setLocalisedText(CAlfVisual& aVisual,const char* aLocId,AlfAttribute* aLangAttr,AlfAttribute* aVarArgsAttr);
+
+ /**
+ * Helper method to set Text Visual color.
+ *
+ * @aTextVisual TextVisual to which Color has to be set.
+ * @aColorTable Logicalname for colortable.
+ * @aColorIndex Color Index for the colortable.
+ *
+ * @exception osncore::ThemeException Thrown when skinID is not found.
+ *
+ */
+ void setTextSkinColor(CAlfTextVisual& aTextVisual, const Utf8* aColorTable,
+ const char* aColorIndex=NULL);
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFIMAGEVISUALATTRIBUTESETTER_H
+// End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfviewportlayoutattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2007 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: Viewport layout attribute setter header.
+*
+*/
+
+
+#ifndef ALFVIEWPORTLAYOUTATTRIBUTESETTER_H
+#define ALFVIEWPORTLAYOUTATTRIBUTESETTER_H
+
+//includes
+
+//widget model includes
+#include "alf/alfcommonlayoutattributesetter.h"
+
+//osn includes
+#include <osn/osndefines.h>
+
+
+namespace Alf
+ {
+
+/**
+ * @class AlfViewportLayoutAttributeSetter alfviewportlayoutattributesetter.h
+ * "alf/alfviewportlayoutattributesetter.h"
+ *
+ * The implementation of the attribute setter for setting viewport
+ * layout attributes.
+ *
+ * @see IAlfAttributeSetter
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfAttributeSetter
+ */
+class AlfViewportLayoutAttributeSetter : public AlfCommonLayoutAttributeSetter
+ {
+
+public:
+
+ /**
+ * Constructor.
+ */
+ OSN_IMPORT AlfViewportLayoutAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfViewportLayoutAttributeSetter();
+
+
+ /**
+ * Sets an attribute value in the target visual immediately without a transition.
+ * @exception osncore::AlfVisualException Thrown with error code
+ * osncore::EInvalidVisual if aVisual is not viewport layout.
+ * @exception osncore::AlfDataException Thrown with error code
+ * osncore::EInvalidVariantDataType if aData for data attributes is 0.
+ * @exception osncore::AlfDataException Thrown with error code
+ * osncore::EIncompleteAttributeValues if the aContainer contains an
+ * incomplete set of attributes. See language specification on creating
+ * attributes for viewport layout.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Used with data attributes to fetch the data.
+ */
+ OSN_IMPORT virtual void setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ /**
+ * Depracated! Do not use!
+ * Creates a command to change the value of an attribute in the target
+ * visual gradually with a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value
+ * specific by aContainer to the corresponding attribute
+ * value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ OSN_IMPORT virtual TAlfCommand* createCommand (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL );
+
+ /**
+ * Creates commands to change the given attribute values in the target
+ * visual gradually with a transition. Then sends the commands via the
+ * ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred.The
+ * container can hold new values for multiple different attributes, in
+ * which case several commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target
+ * value of the attribute is defined by adding the value specific by
+ * aContainer to the corresponding attribute value in the reference
+ * visual.
+ */
+ OSN_IMPORT virtual void createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL );
+
+
+protected:
+
+ /**
+ * Sets a dynamic attribute value in the target visual using transitions
+ * defined in attributes
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ */
+ virtual void handleDynamicAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ /**
+ * Sets a value for static attribute in the target visual immediately
+ * without a transition using data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticDataAttribute (
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData );
+
+ /**
+ * Sets a value for dynamic attribute value in the target visual using
+ * transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleDynamicDataAttribute (
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData);
+
+ /**
+ * Sets a value of a static attribute to target visual immediately without
+ * a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ */
+ virtual void handleStaticAttribute (
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+private:
+
+ /**
+ * Sets a dynamic attribute value in the target visual using transitions
+ * defined in attributes
+ *
+ * @since S60 ?S60_version
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aImmediate if true, the change is immediate and time value of
+ * the attribute is not used.
+ */
+ bool doHandleDynamicAttribute (
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, bool aImmediate = false);
+
+ /**
+ * Sets a value for dynamic attribute value in the target visual using
+ * transitions and data in map.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aContainer The container holding attributes. Ownership of the
+ * object is not transferred.
+ * @param aData Contains data.Ownership of the object is not transferred.
+ * @param aImmediate if true, the change is immediate and time value of
+ * the attribute is not used.
+ */
+ bool doHandleDynamicDataAttribute (
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData,
+ bool aImmediate = false);
+
+ /**
+ * Gets the data from map pointed by attribute's field name.
+ *
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aData Contains data.Ownership of the object is not transferred.
+ *
+ * @return pointer to the data from map pointed by attribute's field name.
+ */
+ IAlfVariantType* getData(AlfAttribute& aAttr, IAlfMap* aData);
+
+ /**
+ * gets the time from attribute safely.
+ *
+ * @param aAttr The attribute to process. Doesn't take ownership
+ * @param aImmediate if true, returns 0 else the time set for the attribute
+ */
+ int getTime(const AlfAttribute& aAttr, bool aImmediate = false);
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // ALFVIEWPORTLAYOUTATTRIBUTESETTER_H
+// End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfvisualtemplate.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,651 @@
+/*
+* Copyright (c) 2007 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: Visual template class for alfred widget model.
+* This class creates and updates visual tree.
+*
+*/
+
+
+#ifndef ALF_VISUALTEMPLATE_H
+#define ALF_VISUALTEMPLATE_H
+
+#include <osn/osndefines.h>
+#include <alf/alflayout.h>
+#include "alf/ialfvisualtemplate.h"
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+#include <alf/ialfinterfacebase.h>
+#include <vector>
+
+class CAlfControl;
+class CAlfBrush;
+class CAlfVisual;
+
+using namespace osncore;
+
+namespace Alf
+ {
+// FORWARD DECLARATIONS
+class IAlfMap;
+class IAlfAttributeSetter;
+class AlfAttributeContainer;
+
+/**
+ * @class AlfVisualTemplate alfvisualtemplate.h "alf/alfvisualtemplate.h"
+ * A generic visual template for creating or updating a visual tree.
+ * The visual templates may form a tree structure that matches
+ * the visual tree to be created or updated. Each template is
+ * responsible for creating and initializing a single visual.
+ * Visual templates contain a number of attribute setters
+ * to initialize or update the visuals. Attribute setters use values
+ * from the corresponding attribute containers.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfVisualTemplate
+ */
+class AlfVisualTemplate : public IAlfVisualTemplate
+ {
+public:
+
+ /**
+ * Constructor for a template for creating a visual.
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aType The type of the visual to create.
+ */
+ OSN_IMPORT static AlfVisualTemplate* create(TAlfVisualType aType);
+
+ /**
+ * Constructor for a template for creating a layout.
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aType The type of the layout to create.
+ */
+ OSN_IMPORT static AlfVisualTemplate* create(TAlfLayoutType aType);
+
+ /**
+ * Constructor for an empty template.
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ *
+ */
+ OSN_IMPORT static AlfVisualTemplate* create();
+
+ // Destructor.
+ OSN_IMPORT virtual ~AlfVisualTemplate();
+
+ //From IAlfVisualTemplate
+
+ /**
+ * Sets the owner element. User should not call this method directly. It will
+ * be called implicitly by Alf::IAlfElement::setVisualTemplate() method.
+ * Call to this method cannot throw an exception.
+ *
+ * @see Alf::IAlfElement::setVisualTemplate()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aOwner Element that owns this root visual template.
+ */
+ OSN_IMPORT void setOwner(IAlfElement* aElement) throw();
+
+ /**
+ * Returns the owner element. Call to this method cannot
+ * throw an exception.
+ *
+ * @see Alf::IAlfElement::setVisualTemplate()
+ *
+ * @since S60 ?S60_version
+ *
+ * @return The owner element of a visual template, if this visual template is owned
+ * by an element. NULL if visual template is not owned by an element.
+ */
+ OSN_IMPORT IAlfElement* owner() const throw();
+
+ /**
+ * Set name of the visual. This name is used when creating
+ * concrete visual trees. Name is assigned to each of the produced concrete
+ * visuals as a tag. Note thus that all concrete visual
+ * trees produced from this visual template share the same tag.
+ *
+ * @see name()
+ *
+ * @exception std::bad_alloc thrown if heap memory allocation fails.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aName The name of the visual.
+ */
+ OSN_IMPORT void setName(const char* aName);
+
+ /**
+ * Returns the name of the visual. Call to this method
+ * cannot throw an exception.
+ *
+ * @see setName()
+ *
+ * @since S60 ?S60_version
+ *
+ * @return aName The name of the visual.
+ */
+ OSN_IMPORT const char* name() const throw();
+
+ /**
+ * Get the number of child visual templates.
+ * This returns the number of child visual templates directly
+ * under this visual template in the visual template
+ * hierarchy. Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @return The number of direct child visual templates
+ * under this visual template in the visual template hierarchy.
+ */
+ OSN_IMPORT int numChildTemplates() const throw();
+
+ /**
+ * Returns a child visual template at a given index.
+ *
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidArrayIndex if
+ * the index is out of bounds.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aIndex The index of the child visual template.
+ *
+ * @return Reference to the child visual template object.
+ */
+ OSN_IMPORT IAlfVisualTemplate& childTemplate(int aIndex) const;
+
+ /**
+ * Add a child visual template. The visual templates may form
+ * a tree structure to create and update a visual tree. The visuals
+ * created by children are added to the layout created by this
+ * visual template. This visual template acquires the ownership for the
+ * child visual template passed as an argument.
+ *
+ * If a visual template added as a child to this visual template is owned
+ * by an Alf::IAlfElement the connection between the child visual template
+ * and its owner element is implicitly removed in this call when a
+ * parent-child connection is created. Effectively having a parent visual
+ * template or being owned by an element are mutually exclusive properties
+ * for a visual template. Elements can own only root visual templates and
+ * if an owned root visual template becomes a child of another visual
+ * template the visual template will be removed from the associated owner
+ * element.
+ *
+ * @see insertChildTemplate()
+ *
+ * @exception std::bad_alloc Thrown if memory allocation fails in appending the child
+ * visual template to child array of this visual template.
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidHierarchy if
+ * the call to this method would result in an invalid visual template hierarchy.
+ * This can occur if a child is added to a non-layout visual template or if a
+ * call would result in a parent becoming a descendant of it's child (a recursive
+ * tree).
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aChild Child visual template to be appended to the children of this visual template.
+ */
+ OSN_IMPORT void addChildTemplate(IAlfVisualTemplate& aChild);
+
+ /**
+ * Inserts a child visual template at given index. The visual templates may form
+ * a tree structure to create and update a concrete visual tree. The concrete visuals
+ * created by children are added to the layout created by this
+ * visual template. This visual template acquires the ownership of the inserted
+ * child visual template.
+ *
+ * @see addChildTemplate()
+ *
+ * @exception std::bad_alloc thrown if memory allocation fails in inserting the child visual
+ * template to the child list of this visual template.
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidArrayIndex when
+ * index supplied is out of range for array of visual templates.
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidHierarchy if
+ * the call to this method would result in an invalid visual template hierarchy.
+ * This can occur if a child is added to a non-layout visual template or if a
+ * call would result in a parent becoming a descendant of it's child (a recursive
+ * tree) or if the same child visual template is added to the hierarchy twice.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aChild The child visual template.
+ * @param aIndex Position at which child template is to be added.
+ */
+ OSN_IMPORT void insertChildTemplate(IAlfVisualTemplate& aChild, int aIndex);
+
+ /**
+ * Removes and destroyes a child visual template from an index in the child list
+ * of this visual template. This will recursively also destroy all child visual templates
+ * in the hierarchy below the destroyed child visual template. This call is silently
+ * ignored if the index is out of bounds. Call to this method cannot throw an
+ * exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aIndex Position from which child visual template is to be removed.
+ */
+ OSN_IMPORT void destroyChildTemplate(int aIndex) throw();
+
+ /**
+ * Destroyes a child visual template with the given name and removes it from the children
+ * of this visual template. This will recursively also destroy all child visual templates
+ * in the hierarchy below the destroyed child visual template. This call is silently
+ * ignored if a child visual template with the given name is not found. Call
+ * to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aName Name of child visual template to be destroyed.
+ */
+ OSN_IMPORT void destroyChildTemplate(const char* aName) throw();
+
+ /**
+ * Add a new attribute setter and associated attribute container to set visual attributes
+ * of the concrete visual hierarchies created or updated with this visual template hierarchy.
+ * This visual template object acquires ownership of both the passed attribute setter as well
+ * as the attribute container. Attribute containers in a visual template are iterated through
+ * whenever concrete visual trees are created or updated. Concrete visual tree attributes
+ * are set from the data passed in through the createVisualTree() and updateVisualTree() methods
+ * using the attribute setters and containers added into the visual template using this method.
+ *
+ * @see createVisualTree()
+ * @see updateVisualTree()
+ *
+ * @exception std::bad_alloc thrown if heap memory allocation fails.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aSetter Attribute setter that will be used to set the attributes in the passed in
+ * container to concrete visuals.
+ * @param aContainer Container holding the attribute value used by the attribute setter.
+ */
+ OSN_IMPORT void addAttributeSetter(IAlfAttributeSetter* aSetter,
+ AlfAttributeContainer* aContainer);
+
+ /**
+ * Get the number of the attribute setters and the corresponding attribute containers.
+ * Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @return The number of the attribute setters and containers.
+ */
+ OSN_IMPORT int numAttributeSetters() const throw();
+
+ /**
+ * Returns an attribute setter maintained in this visual template from the given index.
+ *
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidArrayIndex if
+ * the given index is out of bounds.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aIndex The index of the visual attribute setter.
+ * @return Reference to the attribute setter object.
+ */
+ OSN_IMPORT IAlfAttributeSetter& attributeSetter( int aIndex ) const;
+
+ /**
+ * Returns an attribute container maintained in this visual template from the given index.
+ *
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidArrayIndex if
+ * the given index is out of bounds.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aIndex The index of the visual attribute container.
+ * @return Reference to the attribute container object.
+ */
+ OSN_IMPORT AlfAttributeContainer& attributeContainer( int aIndex ) const;
+
+ /**
+ * Update an existing concrete visual tree with new values. The existing visual tree
+ * should be produced from this visual template hierarchy using the createVisualTree() -
+ * method.
+ *
+ * @see createVisualTree()
+ * @see setSelectChildMode()
+ * @see addAttributeSetter()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aData A map containing new data for the visuals.
+ * @param aOldData Old data, that will be replaced. This is used to for instance tear down
+ * the old selected child branch before creating a new branch in the selected
+ * child mode.
+ * @param aVisual The root of the concrete visual tree that will be updated. This root visual
+ * needs to match this visual template and should have been created using this
+ * visual template.
+ * @return Root visual of the updated concrete visual tree.
+ */
+ OSN_IMPORT CAlfVisual* updateVisualTree(IAlfMap* aData,
+ IAlfMap* aOldData, CAlfVisual& aVisual);
+
+ /**
+ * Creates a new concrete visual tree from this visual template hierarchy and initializes the visuals.
+ * Created visual tree matches the visual template hierarchy under this visual template.
+ *
+ * @see updateVisualTree()
+ * @see setSelectChildMode()
+ * @see addAttributeSetter()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aControl The owner control of the new concrete visual hierarchy.
+ * @param aData A map containing data for the visuals. This is used to set the attributes of the
+ * produced concrete visuals using the attribute containers and attribute setters
+ * added through the addAttributeSetter() - method.
+ * @param aParentLayout Concrete layout visual to insert the created concrete visual tree into.
+ * Parent layout for a created visual.
+ * @param aLayoutIndex Ordinal index, into where the created visual should be placed in the parent layout.
+ *
+ * @return Pointer to the root visual object of the concrete visual hierarchy that was constructed.
+ */
+ OSN_IMPORT CAlfVisual* createVisualTree(CAlfControl& aControl,
+ IAlfMap* aData, CAlfLayout* aParentLayout, int aLayoutIndex);
+
+ /**
+ * Set the visual type. Every visual template maps to
+ * one concrete visual or layout type. Each visual template
+ * node in the visual template hierarchy can produce
+ * only visuals that match its type. Container nodes
+ * in the visual template hierarchy map to layouts
+ * and leaf visual template nodes map to visuals.
+ *
+ * Call to this method will make this visual template
+ * a visual type. The type can thus change from layout
+ * type to a visual type.
+ *
+ * @see setLayoutType()
+ * @see visualType()
+ * @see layoutType()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aType Type of visual
+ */
+ OSN_IMPORT void setVisualType(TAlfVisualType aType);
+
+ /**
+ * Get the visual type
+ *
+ * @since S60 ?S60_version
+ *
+ * @return aType Type of visual
+ */
+ OSN_IMPORT int visualType() const throw();
+
+ /**
+ * Set the layout type. Every visual template maps to
+ * one concrete visual or layout type. Each visual template
+ * node in the visual template hierarchy can produce
+ * only visuals that match its type. Container nodes
+ * in the visual template hierarchy map to layouts
+ * and leaf visual template nodes map to visuals.
+ *
+ * Call to this method will make this visual template
+ * a layout type. The type can thus change from visual
+ * producer to a layout producer.
+ *
+ * @see setVisualType()
+ * @see visualType()
+ * @see layoutType()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aType Type of layout
+ */
+ OSN_IMPORT void setLayoutType(TAlfLayoutType aType);
+
+ /**
+ * Get the layout type or a negative integer
+ * if this visual template is of visual type.
+ * Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @return Type of layout that this visual template produces
+ * or a negative integer if this visual template
+ * produces visuals.
+ */
+ OSN_IMPORT int layoutType() const throw();
+
+ /**
+ * Adds brush to the brush array.
+ *
+ * All brushes added to a visual template will be applied to
+ * the produced concrete visual when one is produced. The same
+ * brush array is shared across all concrete visual instancies
+ * created from same visual template.
+ *
+ * @see brush()
+ * @see numBrushes()
+ *
+ * @exception std::bad_alloc thrown if a heap memory allocation fails.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aBrush Brush to be added
+ */
+ OSN_IMPORT void addBrush(CAlfBrush& aBrush);
+
+ /**
+ * Get the munber of brushes
+ *
+ * @since S60 ?S60_version
+ *
+ * @return The number of brushes
+ */
+ OSN_IMPORT int numBrushes() const;
+
+ /**
+ * Returns a brush instance from the array of brushes.
+ *
+ * @see addBrush()
+ * @see numBrushes()
+ *
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidArrayIndex if
+ * the given index is out of bounds.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aIndex The index into the array of brushes.
+ *
+ * @return Reference to the brush object instance at the given array index.
+ */
+ OSN_IMPORT CAlfBrush& brush(int aIndex) const;
+
+ /**
+ * Enables or disables selected child mode. By default
+ * this is disabled and thus visual template creates or updates
+ * all its children when createVisualTree() or updateVisualTree()
+ * is called. If selected child mode is enabled the visual template
+ * will create or update only the selected child. The child which
+ * is affected in selected child mode is determined in the data passed
+ * in the createVisualTree() or updateVisualTree() method. In the
+ * passed data map a search is done to match the child index
+ * field name with the keys in the map. If an entry is found its value
+ * is used as an index to determine the child branch that is to be
+ * created or updated.
+ *
+ * @see createVisualTree()
+ * @see updateVisualTree()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aSelectChild Set to true to enable the child mode or false to disable the child mode.
+ * @param aChildIndFieldName Key in data map, from which entry the index of
+ * the selected child is fetched.
+ */
+ OSN_IMPORT void setSelectChildMode(bool aSelectChild,
+ const UString& aChildIndFieldName );
+
+ //From IAlfInterfaceBase
+ /**
+ * From IAlfInterfaceBase.
+ * Getter for interfaces provided by the visual template.
+ * Derived classes should always call the base class method
+ * from the overridden makeInterface.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ OSN_IMPORT virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+ /**
+ * Removes the given child visual template from this visual template.
+ * Call to this method is silently ignored if the given visual template
+ * is not found from children. The parent template of the removed child
+ * is set to null. Ownership of the removed child visual template is
+ * transferred to the caller of this method. Call to this method cannot
+ * throw an exception.
+ *
+ * @see setParent()
+ * @see parent()
+ *
+ * @param aChild Reference to the child visual template that is located
+ * and removed from this visual template.
+ */
+ void removeChildTemplate(IAlfVisualTemplate& aChild) throw();
+
+ /**
+ * Retrieves pointer to the parent visual template.
+ * Returns NULL if this is a root visual template of a visual template
+ * hierarchy. Call to this method cannot throw an exception.
+ *
+ * @see addChildTemplate()
+ * @see insertChildTemplate()
+ * @see Alf::IAlfElement::setVisualTemplate()
+ *
+ * @return Pointer to a Alf::IAlfVisualTemplate object that this visual template
+ * is a child of.
+ */
+ OSN_IMPORT IAlfVisualTemplate* parent() const throw();
+
+ /**
+ * Sets the parent visual template.
+ *
+ * User should not call this method directly. It will be called implicitly
+ * by addChildTemplate() or insertChildTemplate() methods of
+ * the parent visual template into which this visual template is
+ * added to.
+ *
+ * Parent visual template and owner element are mutually exclusive.
+ * If a visual template is added under another visual template
+ * in a visual template hierarchy the connection to owner element
+ * is implicitly removed. Alf::IAlfElement objects can thus own only
+ * roots of visual template hierarchies.
+ *
+ * Call to this method cannot throw an exception.
+ *
+ * @see addChildTemplate()
+ * @see insertChildTemplate()
+ * @see parent()
+ * @see Alf::IAlfElement::setVisualTemplate()
+ *
+ * @param aParent Pointer to a parent visual template under which this
+ * visual template is located in in the visual template
+ * hierarchy or null, if the visual template is removed from
+ * a visual template hierarchy.
+ */
+ OSN_IMPORT void setParent(IAlfVisualTemplate* aParent) throw();
+
+protected:
+ /**
+ * c++-constructor for a template for creating a visual.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aType The type of the visual to create.
+ */
+ OSN_IMPORT AlfVisualTemplate(TAlfVisualType aType);
+
+ /**
+ * c++-constructor for a template for creating a layout.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aType The type of the layout to create.
+ */
+ OSN_IMPORT AlfVisualTemplate(TAlfLayoutType aType);
+
+ /**
+ * c++-constructor for an empty template.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfVisualTemplate();
+
+private:
+ /**
+ * returns the index to child, that should be created. The index is
+ * fetched from the data.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aData data-map, where the index is fetched.
+ * @return index to child, that should be created.
+ */
+ int selectedChildInd(IAlfMap* aData);
+
+private:
+
+ // Type of the visual to create.
+ // Negative values are layout types, positive values visual types.
+ int mVisualType;
+
+ // The array containing child visual templates. Owned.
+ std::vector<IAlfVisualTemplate*> mChildren;
+
+ // The tag of the visual to create.
+ UString mVisualName;
+
+ // The array containing visual attribute setters. Owned.
+ AlfPtrVector<IAlfAttributeSetter> mAttributeArray;
+
+ // The array containing attribute containers.
+ AlfPtrVector<AlfAttributeContainer> mContainerArray;
+
+ //The array containing brushes. Owned.
+ AlfPtrVector<CAlfBrush> mBrushArray;
+
+ //if true, creates only one child visual tree.
+ bool mSelectOneChild;
+
+ //field name in data where child index is read.
+ //if iSelectOneChild is true, index points to child in childarray, to create.
+ UString mChildIndFieldName;
+
+ // Owner element of this visual template. Not owned.
+ IAlfElement* mOwner;
+
+ // Pointer to the parent visual template.
+ IAlfVisualTemplate* mParent;
+ };
+
+ } // namespace Alf
+
+#endif //ALF_VISUALTEMPLATE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,332 @@
+/*
+* Copyright (c) 2007 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: The base class for all widgets.
+*
+*/
+
+
+#ifndef ALFWIDGET_H
+#define ALFWIDGET_H
+
+#include <osn/osndefines.h>
+#include <alf/ialfwidget.h>
+#include <memory>
+#include <osn/ustring.h>
+#include "alf/ialfcontainerwidget.h"
+#include <alf/alfwidgetcontrol.h>
+
+#include <vector>
+
+
+class CAlfEnv;
+class CAlfDisplay;
+
+namespace osncore
+ {
+template <class T> class AlfPtrVector;
+ }
+
+using namespace std;
+using namespace osncore;
+
+
+namespace Alf
+ {
+
+//class CAlfWidgetControl;
+class IAlfModel;
+class IAlfWidgetFactory;
+class AlfWidgetImpl;
+
+
+/**
+ * @class AlfWidget alfwidget.h "alf/alfwidget.h"
+ * The base class for widgets.
+ * @see IAlfWidget IAlfContainerWidget IAlfHostApi
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfWidget,IAlfAttributeOwner,IAlfContainerWidget,IAlfWidgetControl,IAlfHostAPI,
+ * All interfaces returned by the elements associated with the widget's control,
+ * All interfaces returned by the layout manager associated widget control ,
+ * All interfaces returned by the model assoiated with the widget.
+ */
+class AlfWidget : public IAlfContainerWidget
+ {
+public:
+ /**
+ * Constructor.
+ *
+ * This will create a default control to the widget to enable the widget
+ * containment hierarchy from the beginning. User can replace the default
+ * control with custom control by calling the setControl() - method.
+ * @exception std::bad_alloc
+ *
+ * @see setControl()
+ *
+ * @param aWidgetName The name of the widget.
+ * @param aContainer Container widget that will contain this widget.
+ * @param aEnv Toolkit environment object that will be used to create the
+ * default control.
+ */
+ OSN_IMPORT AlfWidget(const char* aWidgetName, IAlfContainerWidget& aContainer, CAlfEnv& aEnv);
+
+ /**
+ * Constructor to be used only by view widget.
+ * All the other widgets should use the other public constructor to ensure
+ * widget hierarchy consistency from start.
+ * @exception std::bad_alloc
+ *
+ * @see AlfWidget(const char*, IAlfContainerWidget&, CAlfEnv&)
+ *
+ * @param aWidgetName The name of the widget.
+ */
+ OSN_IMPORT AlfWidget(const char* aWidgetName);
+
+ /**
+ * Destructor.
+ *
+ * It also takes care that all the child widgets contained by this widget
+ * are destroyed correctly, provided that they have been instantiated correctly
+ * (e.g. through widget factory) and thus added to the ALF environment (CAlfEnv).
+ *
+ * In other words, client code does not need to take care of destroying the child
+ * widgets contained by a container widget.
+ */
+ OSN_IMPORT virtual ~AlfWidget();
+
+ /**
+ * Constructor. The new widget is left on the cleanup stack.
+ *
+ * @since S60 ?S60_version
+ * @param aWidgetName The name of the widget.
+ * @return New object. The widgets are owned by Alfred.
+ */
+ OSN_IMPORT CAlfWidgetControl* control() const;
+
+ /**
+ * Getter for the parent container. The ownership is not passed.
+ *
+ * @return the parent container or 0 if the widget is the root-widget.
+ */
+ OSN_IMPORT IAlfContainerWidget* parent() const;
+
+ /**
+ * Sets new widget control to this widget.
+ * @exception osncore::AlfException Thrown with error code osncore::EInvalidArgument if aControl is
+ * alreasy associated with another widget.
+ * @see IAlfWidget::setControl()
+ *
+ * @since S60 ?S60_version
+ * @param aControl Control to be set to the widget.
+ * @param aDeletePreviousControl If true, the previous widget control is destroyed.
+ */
+ OSN_IMPORT void setControl(CAlfWidgetControl* aControl, bool aDeletePreviousControl = true);
+
+ /**
+ * Constructor. The new widget is left on the cleanup stack.
+ *
+ * @since S60 ?S60_version
+ * @param aWidgetName The name of the widget.
+ * @return New object. The widgets are owned by Alfred.
+ */
+ OSN_IMPORT IAlfModel* model();
+
+ /**
+ * Sets the model for the Widget.
+ *
+ * @since S60 ?S60_version
+ * @param aModel Model to be set to this widget.
+ * @param aTakeOwnership Whether takes ownership or not.
+ */
+ OSN_IMPORT void setModel( IAlfModel* aModel,bool aTakeOwnerShip=true );
+
+ /**
+ * Constructor. The new widget is left on the cleanup stack.
+ *
+ * @since S60 ?S60_version
+ * @param aWidgetName The name of the widget.
+ * @return New object. The widgets are owned by Alfred.
+ */
+ OSN_IMPORT const char* widgetName() const;
+
+ //From IAlfInterfaceBase
+ /**
+ * Getter for interfaces provided by the widget, the control,
+ * or the model.
+ *
+ * @since S60 ?S60_version
+ * @param aWidget The widget to get the interface for.
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ OSN_IMPORT static IAlfInterfaceBase* makeInterface( AlfWidget* aWidget, const IfId& aType );
+
+ /**
+ * Template getter for interfaces provided by the widget, the control,
+ * or the model. The type of the queried interface is specified by the
+ * template parameter.
+ *
+ * @since S60 ?S60_version
+ * @param aWidget The widget to get the interface for.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ template <class T>
+ static T* makeInterface( AlfWidget* aWidget );
+
+ // from base class IAlfInterfaceBase
+
+ /**
+ * From IAlfInterfaceBase.
+ * Getter for interfaces provided by the widget classes.
+ * Derived classes should always call the base class method
+ * from the overridden MakeInterface.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ OSN_IMPORT virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+ // from base class IAlfContainerWidget
+
+ /**
+ * Returns total number of widgets contained by this container.
+ *
+ * @return int Total number of widgets.
+ */
+ OSN_IMPORT int widgetCount() const;
+
+ /**
+ * Adds a child widget to the container.
+ *
+ * @param aWidget Child widget to be added to container.
+ * return void
+ */
+ OSN_IMPORT void addWidget(IAlfWidget& aWidget);
+
+ /**
+ * Returns child widget at given index.If index is not found return null.
+ *
+ * @param aIndex Index of widget to be returned.
+ * @return Widget at given index
+ */
+ OSN_IMPORT IAlfWidget* getWidget(int aIndex) const;
+
+ /**
+ * Returns the child index, when given the child widget.
+ *
+ * @param aWidget child widget, which index is returned
+ * @return the index of the child widget, or -1, if widget is not child of this container.
+ */
+ OSN_IMPORT int getWidgetIndex(IAlfWidget& aWidget) const;
+
+ /**
+ * Removes the child widget from given index.
+ *
+ * @param aIndex Index from which widget has to be removed.
+ * return void
+ */
+ void removeWidget(int aIndex);
+
+ /**
+ * Sets the base layout of container widget.
+ *
+ * @param aLayout New base layout of container widget.
+ * return void
+ */
+ OSN_IMPORT void applyLayout(IAlfLayoutManager& aLayout);
+
+ //from IAlfWidget
+
+ /**
+ * Sets/Releases the Focus from child widget of container.
+ * Does not set the actual focused status in roster.
+ *
+ * @since S60 ?S60_version
+ * @param aFocus boolean value for focused status
+ * return void
+ */
+ OSN_IMPORT void setChildFocus(bool aFocus);
+
+ /**
+ * Removes the given widget from this widget's child widget
+ * array. Does not modify control connections or control
+ * group containment.
+ *
+ * Does nothing if the given widget is not found from
+ * widget array.
+ *
+ * @param aWidget Reference to a widget that is searched
+ * from the widget array of this widget and removed
+ * of found.
+ */
+ OSN_IMPORT void removeWidget(IAlfWidget& aWidget);
+
+ /**
+ * Sets the presentation for the widget using presentation XML file.
+ * Destroys any existing presentation.
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @exception AlfWidgetException if no visualization node available
+ * in Presentation XML or if no control
+ * is associated with the widget.
+ * @exception bad_alloc
+ * @since S60 ?S60_version
+ * @return void.
+ */
+ OSN_IMPORT void setPresentation(const char* aFilePath);
+
+protected:
+
+ /**
+ * The protected constructor.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfWidget();
+
+private:
+
+ /**
+ * Adds the Common Properties for the widget
+ *
+ * @since S60 ?S60_version
+ */
+ void addCommonWidgetProperties();
+
+ /**
+ * Removes reference from this widget's control to this
+ * widget.
+ */
+ void removeReferenceFromControl();
+
+private: // data
+
+ auto_ptr<AlfWidgetImpl> mImpl;
+ };
+
+using namespace osncore;
+
+#include "alf/alfwidget.inl"
+
+ } // namespace Alf
+
+#endif // ALFWIDGET_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfwidgetmodeldefines.hrh Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2007 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: Defines flags to enable debug macros
+*
+*/
+
+
+#ifndef ALFWIDGETMODELDEFINES_HRH
+#define ALFWIDGETMODELDEFINES_HRH
+
+//Enable description in errors thrown
+#define ALF_DEBUG_EXCEPTIONS
+
+//Enable performance logs
+//#define ALF_DEBUG_PERFORMANCE
+
+
+#endif //ALFWIDGETMODELDEFINES_HRH
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/ialfattributeowner.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2007 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: An interface for querying and setting attributes.
+*
+*/
+
+
+#ifndef I_ALFATTRIBUTEOWNER_H
+#define I_ALFATTRIBUTEOWNER_H
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+
+namespace osncore
+ {
+class UString;
+ }
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+class AlfAttribute;
+class AlfAttributeValueType;
+class AlfAttributeContainer;
+
+namespace alfattributeowner
+ {
+static const IfId ident =
+ {
+ 0, "alfattributeowner"
+ };
+ }
+
+/**
+ * An interface for querying and setting attributes.
+ * The interface defines a generic functionality for setting
+ * any attributes of the implementing class. It can be used
+ * also to query the available set of attributes.
+ *
+ * The interface should by implemented by all widget classes.
+ * It can be also used by element classes.
+ * Widget attributes have often corresponding data fields in the
+ * model. In this case, setting new values should also update
+ * the model. If an attribute is related to the presentation of
+ * the widget, the presentation is updated when a new value is set
+ * for the attribute.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfAttributeOwner : public IAlfInterfaceBase
+ {
+public:
+ /**
+ * Virtual destructor.
+ */
+ virtual ~IAlfAttributeOwner() {}
+
+ /**
+ * Get the number of available attributes.
+ *
+ * @return The number of attributes.
+ */
+ virtual int attributeCount() const = 0;
+
+ /**
+ * Gets the attribute with the given name.
+ * The returned attribute instance is owned by the widget and
+ * should not be deleted.
+ * Also the returned attribute instance should not be modified.
+ * Use SetAttribute for that.
+ *
+ * @param aAttribName The name of the attribute.
+ * @return The attribute, or 0 if the attribute was not found.
+ */
+ virtual const AlfAttribute* getAttribute( const UString& aAttribName ) const = 0;
+
+ /**
+ * Set a value of an attribute.
+ *
+ * If no value is present in passed attribute parameter,
+ * an AlfAttributeException-exception
+ * is thrown with EInvalidAttribute error code.
+ *
+ * @param aAttribute Reference attribute, the data is copied from it.
+ * The ownership is not transferred.
+ * @return True if the attribute was supported, false if not.
+ * Attribute is added to container even if it not supported.
+ */
+ virtual bool setAttribute( const AlfAttribute& aAttribute ) = 0;
+
+ /**
+ * Set a value of an attribute.
+ * This SetAttribute variant is for simple non animated attributes
+ * that only have name and value.
+ *
+ * If no value is present in passed attributevalue parameter,
+ * an AlfAttributeException-exception
+ * is thrown with EInvalidAttribute error code.
+ *
+ * @param aAttribName Name of the attribute.
+ * @param aValue Value of the attribute. Ownership is transferred
+ * @return True if the attribute was supported, false if not.
+ * Attribute is added to container even if it not supported.
+ */
+ virtual bool setAttribute( const UString& aAttribName,
+ AlfAttributeValueType* aValue ) = 0;
+ /**
+ * Sets values of each attribute in given container
+ *
+ * If no value is present in an attribute in the container,
+ * an AlfAttributeException-exception
+ * is thrown with EInvalidAttribute error code.
+ *
+ * @param aAttributeContainer Reference attributeContainer, All attributes
+ * in the container are handled. The ownership is not transferred.
+ * @return True if all attributes were supported, false if at least 1 attribute was not supported
+ */
+ virtual bool setAttributeContainer( AlfAttributeContainer& aAttributeContainer ) = 0;
+
+ /**
+ * Sets a value of an attribute to a specific target.
+ * The target is identified by using aTargetId parameter.
+ *
+ * If no value is present in passed attribute parameter,
+ * an AlfAttributeException-exception
+ * is thrown with EInvalidAttribute error code.
+ *
+ * @param aTargetId Name of the target widget part, e.g element class tag.
+ * @param aAttribute Reference attribute, the data is copied from it.
+ * The ownership is not transferred.
+ * @return True if the attribute was supported, false if not.
+ */
+ virtual bool setAttribute( const UString& aTargetId ,
+ AlfAttribute& aAttribute ) = 0;
+
+
+
+ /**
+ * Sets a value of an static attribute.
+ * This SetAttribute variant is for simple non animated attributes
+ * that only have name and value.
+ *
+ * If no value is present in passed attributevalue parameter,
+ * an AlfAttributeException-exception
+ * is thrown with EInvalidAttribute error code.
+ *
+ * @param aTargetId The name of the target widget part, e.g. element class
+ * @param aAttribName Name of the attribute.
+ * @param aValue Value of the attribute. Ownership is transferred
+ * @return True if the attribute was supported, false if not.
+ */
+ virtual bool setAttribute( const UString& aTargetId,
+ const UString& aAttribName,
+ AlfAttributeValueType* aValue ) = 0;
+
+ /**
+ * Sets values of each attribute in given container to a specific target.
+ * The target is identified by using aTargetId parameter.
+ *
+ * If no value is present in an attribute in the container,
+ * an AlfAttributeException-exception
+ * is thrown with EInvalidAttribute error code.
+ *
+ * @param aTargetId Name of the target widget part, e.g element class tag.
+ * @param aAttributeContainer Reference attributeContainer, All attributes
+ * in the container are handled. The ownership is not transferred.
+ * @return True if all attributes were supported, false if at least 1 attribute was not supported
+ */
+ virtual bool setAttributeContainer( const UString& aTargetId ,
+ AlfAttributeContainer& aAttributeContainer ) = 0;
+
+ /**
+ * Gets the attribute with the given name from specific target.
+ * The returned attribute instance is owned by the widget and
+ * should not be deleted.
+ * Also the returned attribute instance should not be modified.
+ * Use SetAttribute for that.
+ *
+ * @param aTargetId The name of the target widget part, e.g. element class
+ * @param aAttribName The name of the attribute.
+ * @return A pointer to the attribute, or 0 if the attribute was not found.
+ */
+ virtual const AlfAttribute* getAttribute( const UString& aTargetId ,
+ const UString& aAttribName ) const = 0;
+
+
+
+ /**
+ * Getter for the type identifier of this interface.
+ *
+ * @since S60 ?S60_versio
+ * @return Identifier of this interface.
+ */
+ static inline const IfId& type()
+ {
+ return alfattributeowner::ident;
+ }
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFATTRIBUTEOWNER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/ialfattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2007 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: Attribute setter Interface header.
+*
+*/
+
+
+#ifndef I_ALFATTRIBUTESETTER_H
+#define I_ALFATTRIBUTESETTER_H
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+#include "alf/alfsettertype.h"
+#include <alf/alfvisual.h>
+#include <alf/alfvarianttype.h>
+#include <alf/alfcommand.h>
+#include <osn/osntypes.h>
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class AlfAttribute;
+class AlfAttributeContainer;
+namespace alfattributesetter
+ {
+static const IfId ident =
+ {
+ 0, "alfattributesetter"
+ };
+ }
+/**
+ * The interface for attribute setters used by widget controls.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfAttributeSetter : public IAlfInterfaceBase
+ {
+public:
+
+ static inline const IfId& type()
+ {
+ return alfattributesetter::ident;
+ }
+
+ virtual inline ~IAlfAttributeSetter() {}
+
+ /**
+ * Returns the type of the attribute setter.
+ *
+ * @return The type of the attribute setter.
+ */
+ virtual SetterType setterType() = 0;
+
+ /**
+ * Sets an attribute value in the target visual immediately without a transition.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute. Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ */
+ virtual void setAttributeValue(
+ CAlfVisual& aVisual, AlfAttributeContainer* aContainer, IAlfMap* aData ) = 0;
+
+ /**
+ * Creates a command to change the value of an attribute in the target visual gradually with a transition.
+ *
+ * @deprecated USE CREATEANDSENDCOMMANDS INSTEAD!!!
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The container holding the new value of the attribute. Ownership of the object is not transferred.
+ * @param aData Not used currently.
+ * @param aTransitionTime Time used for the transition.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ * @ret The command to gradually change the attribute in the target visual.
+ */
+ virtual TAlfCommand* createCommand(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData,
+ int aTransitionTime = 0,
+ CAlfVisual* aRefVisual = NULL ) = 0;
+
+ /**
+ * Creates commands to change the given attribute values in the target visual gradually with a transition.
+ * Then sends the commands via the ALF environment.
+ *
+ * @param aVisual The target visual. Doesn't take ownership
+ * @param aContainer The attribute container holding the attribute value(s)
+ * used by the attribute setter. Ownership is not transferred. The container
+ * can hold new values for multiple different attributes, in which case several
+ * commands are executed.
+ * @param aRefVisual Optional reference visual. If not NULL, the target value of the attribute is defined by adding
+ * the value specific by aContainer to the corresponding attribute value in the reference visual.
+ */
+ virtual void createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual = NULL ) = 0;
+
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFATTRIBUTESETTER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/ialfcontainerwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2007 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: Base interface for all container widgets
+*
+*/
+
+
+#ifndef I_ALFCONTAINERWIDGET_H
+#define I_ALFCONTAINERWIDGET_H
+
+#include <alf/ialfwidget.h>
+class CAlfLayout;
+
+namespace Alf
+ {
+class IAlfLayoutManager;
+
+namespace ialfcontainerwidget
+ {
+static const IfId ident =
+ {
+ 0, "container"
+ };
+ }
+
+/**
+ * The interface for container widget.
+ *
+ * Container widget maintains it's own control group. When a widget control is set to container
+ * widget throught the IAlfWidget::setControl() - method the control is automatically appended to the
+ * container widget's control group. If the control that is being set to the container widget is
+ * already part of another control group it will be removed from the previous control group and appended
+ * to the container widget's control group.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfContainerWidget : public IAlfWidget
+ {
+public:
+
+ static inline const IfId& type()
+ {
+ return ialfcontainerwidget::ident;
+ }
+
+ virtual ~IAlfContainerWidget() {}
+
+ /**
+ * Returns total number of widgets contained by this container.
+ *
+ * @return int Total number of widgets.
+ */
+ virtual int widgetCount() const = 0;
+
+ /**
+ * Adds a child widget to the container.
+ *
+ * This will throw an osncore::AlfException exception with error code
+ * osncore::EInvalidArgument if the aWidget is the same widget that the container
+ * widget itself or if user tries to add a view widget into a container
+ * widget.
+ *
+ * Adding a widget instance that is already added will be silently
+ * ignored.
+ *
+ * @exception osncore::AlfException with error code osncore::EInvalidArgument if the
+ * aWidget is the same widget as the container widget or when
+ * a view widget is attempted to be added to a container.
+ *
+ * @param aWidget Child widget to be added to container.
+ */
+ virtual void addWidget(IAlfWidget& aWidget) = 0;
+
+ /**
+ * Returns child widget at given index. If index is not found return null.
+ *
+ * @param aIndex Index of widget to be returned.
+ * @return Widget at given index or null if the widget is not found.
+ */
+ virtual IAlfWidget* getWidget(int aIndex) const = 0;
+
+ /**
+ * Returns the child index, when given the child widget.
+ *
+ * @param aWidget child widget, which index is returned
+ * @return the index of the child widget, or -1, if widget is not child of this container.
+ */
+ virtual int getWidgetIndex(IAlfWidget& aWidget) const = 0;
+
+ /**
+ * Removes the child widget from given index.
+ *
+ * If widget for the given index is not found then the call
+ * is silently ignored.
+ *
+ * @param aIndex Index from which widget has to be removed.
+ */
+ virtual void removeWidget(int aIndex) = 0;
+
+ /**
+ * Sets the base layout of container widget. Ownership of the
+ * layout manager is transferred to container widget.
+ *
+ * @param aLayout New base layout of container widget.
+ */
+ virtual void applyLayout(IAlfLayoutManager& aLayout) = 0;
+
+
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFCONTAINERWIDGET_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/ialfvisualtemplate.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,614 @@
+/*
+* Copyright (c) 2007 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: Visual template class for alfred widget model.
+* This class creates and updates visual tree.
+*
+*/
+
+
+#ifndef I_ALFVISUALTEMPLATE_H
+#define I_ALFVISUALTEMPLATE_H
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+#include <osn/ustring.h>
+#include <alf/alflayout.h>
+
+class CAlfVisual;
+class CAlfControl;
+class CAlfBrush;
+class CAlfLayout;
+
+namespace duiuimodel
+ {
+ //FORWARD DECLARATIONS
+ class DuiNode;
+ }
+using namespace duiuimodel;
+using namespace osncore;
+
+namespace Alf
+ {
+// FORWARD DECLARATIONS
+class IAlfMap;
+class IAlfAttributeSetter;
+class IAlfElement;
+class AlfAttributeContainer;
+class AlfCustomInitDataBase;
+
+namespace alfvisualtemplate
+ {
+static const IfId ident =
+ {
+ 0, "alfvisualtemplate"
+ };
+ }
+
+//INTERFACE DECLARATIONS
+
+/**
+ * An interface for visual templates.
+ *
+ * A visual template hierarchy can be formed using visual template objects. From a visual template
+ * hierarchy a concrete visual tree can be constructed that composes of toolkit visuals.
+ * Produced concrete visual tree will match the visual template hierarchy constructed by
+ * adding visual templates as children of each other. User can create any number of identical
+ * visual trees from one visual template hierarchy. Each visual template object creates
+ * one visual in the produced concrete visual tree.
+ *
+ * A visual template can be owned by a widget element (Alf::IAlfElement).
+ * Only root visual templates of a visual template hierarchy can be owned by an element.
+ * As a consequence of this an owner element of a visual template and a parent visual template
+ * are mutually exclusive properties. That is, if a visual template is a child of
+ * another visual template it cannot be owned by an element. Also if an element
+ * owns a visual template it cannot be a child of another visual template.
+ *
+ * If a child visual template is set to an element the connection between child visual template
+ * and its parent is removed thus making the visual template a root of the visual template hierarchy
+ * below it. Similarly if a visual template owned by an element is set as a child to a visual template
+ * the ownership of that visual template by its element is removed leaving the element with no visual
+ * template.
+ *
+ * Concrete visual trees can be produced using createVisualTree() method. Existing concrete visual
+ * trees can be updated using the updateVisualTree() method. Attributes of the produced concrete
+ * visuals can be manipulated through attribute setters and containers assigned to visual template
+ * using method addAttributeSetter(). Data that is passed to the createVisualTree() and updateVisualTree()
+ * methods contain the attribute values that are set to the concrete visuals giving users a
+ * possibility to customize the produced concrete visual trees.
+ *
+ * @see Alf::IAlfElement
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfVisualTemplate : public IAlfInterfaceBase
+ {
+public:
+ /**
+ * Getter for the type identifier of this interface.
+ *
+ * @since S60 ?S60_version
+ * @return Identifier of this interface.
+ */
+ static inline const IfId& type()
+ {
+ return alfvisualtemplate::ident;
+ }
+
+ /** Virtual destructor. */
+ virtual ~IAlfVisualTemplate() {}
+
+ /**
+ * Sets the owner element. User should not call this method directly. It will
+ * be called implicitly by Alf::IAlfElement::setVisualTemplate() method.
+ * Call to this method cannot throw an exception.
+ *
+ * @see Alf::IAlfElement::setVisualTemplate()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aOwner Element that owns this root visual template.
+ */
+ virtual void setOwner(IAlfElement* aElement) throw() = 0;
+
+ /**
+ * Returns the owner element. Call to this method cannot
+ * throw an exception.
+ *
+ * @see Alf::IAlfElement::setVisualTemplate()
+ *
+ * @since S60 ?S60_version
+ *
+ * @return The owner element of a visual template, if this visual template is owned
+ * by an element. NULL if visual template is not owned by an element.
+ */
+ virtual IAlfElement* owner() const throw() = 0;
+
+ /**
+ * Set name of the visual. This name is used when creating
+ * concrete visual trees. Name is assigned to each of the produced concrete
+ * visuals as a tag. Note thus that all concrete visual
+ * trees produced from this visual template share the same tag.
+ *
+ * @see name()
+ *
+ * @exception std::bad_alloc thrown if heap memory allocation fails.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aName The name of the visual.
+ */
+ virtual void setName(const char* aName) = 0;
+
+ /**
+ * Returns the name of the visual. Call to this method
+ * cannot throw an exception.
+ *
+ * @see setName()
+ *
+ * @since S60 ?S60_version
+ *
+ * @return aName The name of the visual.
+ */
+ virtual const char* name() const throw() = 0;
+
+ /**
+ * Get the number of child visual templates.
+ * This returns the number of child visual templates directly
+ * under this visual template in the visual template
+ * hierarchy. Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @return The number of direct child visual templates
+ * under this visual template in the visual template hierarchy.
+ */
+ virtual int numChildTemplates() const throw() = 0;
+
+ /**
+ * Returns a child visual template at a given index.
+ *
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidArrayIndex if
+ * the index is out of bounds.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aIndex The index of the child visual template.
+ *
+ * @return Reference to the child visual template object.
+ */
+ virtual IAlfVisualTemplate& childTemplate(int aIndex) const = 0;
+
+ /**
+ * Set the visual type. Every visual template maps to
+ * one concrete visual or layout type. Each visual template
+ * node in the visual template hierarchy can produce
+ * only visuals that match its type. Container nodes
+ * in the visual template hierarchy map to layouts
+ * and leaf visual template nodes map to visuals.
+ *
+ * Call to this method will make this visual template
+ * a visual type. The type can thus change from layout
+ * type to a visual type.
+ *
+ * @see setLayoutType()
+ * @see visualType()
+ * @see layoutType()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aType Type of visual
+ */
+ virtual void setVisualType(TAlfVisualType aType) = 0;
+
+ /**
+ * Get the visual type or a negative integer
+ * if this visual template is of layout type.
+ * Call to this method cannot throw an exception.
+ *
+ * @see setVisualType()
+ *
+ * @since S60 ?S60_version
+ *
+ * @return Type of visual that this visual template produces
+ * or a negative integer if this visual template
+ * produces layouts.
+ */
+ virtual int visualType() const throw() = 0;
+
+ /**
+ * Set the layout type. Every visual template maps to
+ * one concrete visual or layout type. Each visual template
+ * node in the visual template hierarchy can produce
+ * only visuals that match its type. Container nodes
+ * in the visual template hierarchy map to layouts
+ * and leaf visual template nodes map to visuals.
+ *
+ * Call to this method will make this visual template
+ * a layout type. The type can thus change from visual
+ * producer to a layout producer.
+ *
+ * @see setVisualType()
+ * @see visualType()
+ * @see layoutType()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aType Type of layout
+ */
+ virtual void setLayoutType(TAlfLayoutType aType) = 0;
+
+ /**
+ * Get the layout type or a negative integer
+ * if this visual template is of visual type.
+ * Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @return Type of layout that this visual template produces
+ * or a negative integer if this visual template
+ * produces visuals.
+ */
+ virtual int layoutType() const throw() = 0;
+
+ /**
+ * Adds brush to the brush array.
+ *
+ * All brushes added to a visual template will be applied to
+ * the produced concrete visual when one is produced. The same
+ * brush array is shared across all concrete visual instancies
+ * created from same visual template.
+ *
+ * @see brush()
+ * @see numBrushes()
+ *
+ * @exception std::bad_alloc thrown if a heap memory allocation fails.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aBrush Brush to be added
+ */
+ virtual void addBrush(CAlfBrush& aBrush) = 0;
+
+ /**
+ * Returns the number of brushes in the brush array.
+ *
+ * @since S60 ?S60_version
+ *
+ * @return The number of brushes
+ */
+ virtual int numBrushes() const = 0;
+
+ /**
+ * Returns a brush instance from the array of brushes.
+ *
+ * @see addBrush()
+ * @see numBrushes()
+ *
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidArrayIndex if
+ * the given index is out of bounds.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aIndex The index into the array of brushes.
+ *
+ * @return Reference to the brush object instance at the given array index.
+ */
+ virtual CAlfBrush& brush(int aIndex) const = 0;
+
+ /**
+ * Enables or disables selected child mode. By default
+ * this is disabled and thus visual template creates or updates
+ * all its children when createVisualTree() or updateVisualTree()
+ * is called. If selected child mode is enabled the visual template
+ * will create or update only the selected child. The child which
+ * is affected in selected child mode is determined in the data passed
+ * in the createVisualTree() or updateVisualTree() method. In the
+ * passed data map a search is done to match the child index
+ * field name with the keys in the map. If an entry is found its value
+ * is used as an index to determine the child branch that is to be
+ * created or updated.
+ *
+ * @see createVisualTree()
+ * @see updateVisualTree()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aSelectChild Set to true to enable the child mode or false to disable the child mode.
+ * @param aChildIndFieldName Key in data map, from which entry the index of
+ * the selected child is fetched.
+ */
+ virtual void setSelectChildMode(bool aSelectChild, const UString& aChildIndFieldName) = 0;
+
+ /**
+ * Add a child visual template. The visual templates may form
+ * a tree structure to create and update a visual tree. The visuals
+ * created by children are added to the layout created by this
+ * visual template. This visual template acquires the ownership for the
+ * child visual template passed as an argument.
+ *
+ * If a visual template added as a child to this visual template is owned
+ * by an Alf::IAlfElement the connection between the child visual template
+ * and its owner element is implicitly removed in this call when a
+ * parent-child connection is created. Effectively having a parent visual
+ * template or being owned by an element are mutually exclusive properties
+ * for a visual template. Elements can own only root visual templates and
+ * if an owned root visual template becomes a child of another visual
+ * template the visual template will be removed from the associated owner
+ * element.
+ *
+ * @see insertChildTemplate()
+ *
+ * @exception std::bad_alloc Thrown if memory allocation fails in appending the child
+ * visual template to child array of this visual template.
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidHierarchy if
+ * the call to this method would result in an invalid visual template hierarchy.
+ * This can occur if a child is added to a non-layout visual template or if a
+ * call would result in a parent becoming a descendant of it's child (a recursive
+ * tree).
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aChild Child visual template to be appended to the children of this visual template.
+ */
+ virtual void addChildTemplate(IAlfVisualTemplate& aChild) = 0;
+
+ /**
+ * Inserts a child visual template at given index. The visual templates may form
+ * a tree structure to create and update a concrete visual tree. The concrete visuals
+ * created by children are added to the layout created by this
+ * visual template. This visual template acquires the ownership of the inserted
+ * child visual template.
+ *
+ * @see addChildTemplate()
+ *
+ * @exception std::bad_alloc thrown if memory allocation fails in inserting the child visual
+ * template to the child list of this visual template.
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidArrayIndex when
+ * index supplied is out of range for array of visual templates.
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidHierarchy if
+ * the call to this method would result in an invalid visual template hierarchy.
+ * This can occur if a child is added to a non-layout visual template or if a
+ * call would result in a parent becoming a descendant of it's child (a recursive
+ * tree) or if the same child visual template is added to the hierarchy twice.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aChild The child visual template.
+ * @param aIndex Position at which child template is to be added.
+ */
+ virtual void insertChildTemplate(IAlfVisualTemplate& aChild, int aIndex) = 0;
+
+ /**
+ * Removes and destroyes a child visual template from an index in the child list
+ * of this visual template. This will recursively also destroy all child visual templates
+ * in the hierarchy below the destroyed child visual template. This call is silently
+ * ignored if the index is out of bounds. Call to this method cannot throw an
+ * exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aIndex Position from which child visual template is to be removed.
+ */
+ virtual void destroyChildTemplate(int aIndex) throw() = 0;
+
+ /**
+ * Destroyes a child visual template with the given name and removes it from the children
+ * of this visual template. This will recursively also destroy all child visual templates
+ * in the hierarchy below the destroyed child visual template. This call is silently
+ * ignored if a child visual template with the given name is not found. Call
+ * to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aName Name of child visual template to be destroyed.
+ */
+ virtual void destroyChildTemplate(const char* aName) throw() = 0;
+
+ /**
+ * Update an existing concrete visual tree with new values. The existing visual tree
+ * should be produced from this visual template hierarchy using the createVisualTree() -
+ * method.
+ *
+ * @see createVisualTree()
+ * @see setSelectChildMode()
+ * @see addAttributeSetter()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aData A map containing new data for the visuals.
+ * @param aOldData Old data, that will be replaced. This is used to for instance tear down
+ * the old selected child branch before creating a new branch in the selected
+ * child mode.
+ * @param aVisual The root of the concrete visual tree that will be updated. This root visual
+ * needs to match this visual template and should have been created using this
+ * visual template.
+ * @return Root visual of the updated concrete visual tree.
+ */
+ virtual CAlfVisual* updateVisualTree(IAlfMap* aData, IAlfMap* aOldData, CAlfVisual& aVisual) = 0;
+
+ /**
+ * Creates a new concrete visual tree from this visual template hierarchy and initializes the visuals.
+ * Created visual tree matches the visual template hierarchy under this visual template.
+ *
+ * @see updateVisualTree()
+ * @see setSelectChildMode()
+ * @see addAttributeSetter()
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aControl The owner control of the new concrete visual hierarchy.
+ * @param aData A map containing data for the visuals. This is used to set the attributes of the
+ * produced concrete visuals using the attribute containers and attribute setters
+ * added through the addAttributeSetter() - method.
+ * @param aParentLayout Concrete layout visual to insert the created concrete visual tree into.
+ * Parent layout for a created visual.
+ * @param aLayoutIndex Ordinal index, into where the created visual should be placed in the parent layout.
+ *
+ * @return Pointer to the root visual object of the concrete visual hierarchy that was constructed.
+ */
+ virtual CAlfVisual* createVisualTree(CAlfControl& aControl,
+ IAlfMap* aData, CAlfLayout* aParentLayout, int aLayoutIndex) = 0;
+
+ /**
+ * Add a new attribute setter and associated attribute container to set visual attributes
+ * of the concrete visual hierarchies created or updated with this visual template hierarchy.
+ * This visual template object acquires ownership of both the passed attribute setter as well
+ * as the attribute container. Attribute containers in a visual template are iterated through
+ * whenever concrete visual trees are created or updated. Concrete visual tree attributes
+ * are set from the data passed in through the createVisualTree() and updateVisualTree() methods
+ * using the attribute setters and containers added into the visual template using this method.
+ *
+ * @see createVisualTree()
+ * @see updateVisualTree()
+ *
+ * @exception std::bad_alloc thrown if heap memory allocation fails.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aSetter Attribute setter that will be used to set the attributes in the passed in
+ * container to concrete visuals.
+ * @param aContainer Container holding the attribute value used by the attribute setter.
+ */
+ virtual void addAttributeSetter(IAlfAttributeSetter* aSetter, AlfAttributeContainer* aContainer) = 0;
+
+ /**
+ * Get the number of the attribute setters and the corresponding attribute containers.
+ * Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @return The number of the attribute setters and containers.
+ */
+ virtual int numAttributeSetters() const throw() = 0;
+
+ /**
+ * Returns an attribute setter maintained in this visual template from the given index.
+ *
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidArrayIndex if
+ * the given index is out of bounds.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aIndex The index of the visual attribute setter.
+ * @return Reference to the attribute setter object.
+ */
+ virtual IAlfAttributeSetter& attributeSetter(int aIndex) const = 0;
+
+ /**
+ * Returns an attribute container maintained in this visual template from the given index.
+ *
+ * @exception osncore::AlfException thrown with error code osncore::EInvalidArrayIndex if
+ * the given index is out of bounds.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aIndex The index of the visual attribute container.
+ * @return Reference to the attribute container object.
+ */
+ virtual AlfAttributeContainer& attributeContainer(int aIndex) const = 0;
+
+ /**
+ * Retrieves pointer to the parent visual template.
+ * Returns NULL if this is a root visual template of a visual template
+ * hierarchy. Call to this method cannot throw an exception.
+ *
+ * @see addChildTemplate()
+ * @see insertChildTemplate()
+ * @see Alf::IAlfElement::setVisualTemplate()
+ *
+ * @return Pointer to a Alf::IAlfVisualTemplate object that this visual template
+ * is a child of.
+ */
+ virtual IAlfVisualTemplate* parent() const throw() = 0;
+
+ /**
+ * Removes the given child visual template from this visual template.
+ * Call to this method is silently ignored if the given visual template
+ * is not found from children. The parent template of the removed child
+ * is set to null. Ownership of the removed child visual template is
+ * transferred to the caller of this method. Call to this method cannot
+ * throw an exception.
+ *
+ * @see setParent()
+ * @see parent()
+ *
+ * @param aChild Reference to the child visual template that is located
+ * and removed from this visual template.
+ */
+ virtual void removeChildTemplate(IAlfVisualTemplate& aChild) throw() = 0;
+
+ /**
+ * Sets the parent visual template.
+ *
+ * User should not call this method directly. It will be called implicitly
+ * by addChildTemplate() or insertChildTemplate() methods of
+ * the parent visual template into which this visual template is
+ * added to.
+ *
+ * Parent visual template and owner element are mutually exclusive.
+ * If a visual template is added under another visual template
+ * in a visual template hierarchy the connection to owner element
+ * is implicitly removed. Alf::IAlfElement objects can thus own only
+ * roots of visual template hierarchies.
+ *
+ * Call to this method cannot throw an exception.
+ *
+ * @see addChildTemplate()
+ * @see insertChildTemplate()
+ * @see parent()
+ * @see Alf::IAlfElement::setVisualTemplate()
+ *
+ * @param aParent Pointer to a parent visual template under which this
+ * visual template is located in in the visual template
+ * hierarchy or null, if the visual template is removed from
+ * a visual template hierarchy.
+ */
+ virtual void setParent(IAlfVisualTemplate* aParent) throw() = 0;
+
+ };
+
+/**
+ * Placeholder for information required to instantiate a visual template
+ * via the widget factory mechanism.
+ * A pointer to this structure is casted to a void pointer and sent to the
+ * factory plugin.
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+struct AlfVisualTemplateInitData
+ {
+ /**
+ * Visual template instance ID.This uniquely identifies every visual template instance
+ */
+ char* mVisualTemplateId;
+
+ /**
+ * Pointer to node in declaration containing information for the widget.
+ */
+ DuiNode* mNode;
+
+ /**
+ * Pointer to custom data passed via factory mechanism
+ * Not Owned.
+ */
+ AlfCustomInitDataBase* mCustomData;
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFVISUALTEMPLATE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/mul/imulmodelaccessor.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,207 @@
+/*
+* 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: Interface for model accessor
+ *
+*/
+
+
+#ifndef I_MULMODELACCESSOR_H
+#define I_MULMODELACCESSOR_H
+
+//Includes
+#include <alf/ialfmodel.h>
+#include <mul/imulwidgetdef.h>
+#include <mul/imulwidget.h>
+
+#include <vector>
+
+namespace osncore
+ {
+ class UString;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+
+ /* Forward declarations*/
+ class MulVisualItem;
+ class IMulModelObserver;
+
+ /**
+ * An interface for accessing data model. Widgets use this interface to interact with Model.
+ * Data model implements this interface.
+ * @lib
+ */
+ class IMulModelAccessor : public IAlfModel
+ {
+ public:
+
+ /**
+ * The function to set a particular item as highlighted.
+ *
+ * @param aIndex Index of the item to be highlighted.
+ * @throws Invalid_argument Throws this exception if index is not a valid index.
+ */
+ virtual void SetHighlight( int aItemIndex ) = 0;
+
+ /**
+ * Scroll Window to mention item index
+ * it will check that data window needs to be updated or not
+ * and if required it update data window
+ *
+ * @aItemIndex item index
+ * @throws invaid_argument exception
+ */
+ virtual void ScrollWindow( int aItemIndex ) = 0;
+
+ /**
+ * Function to get the highlighted item index.
+ *
+ * @return Index of the highlighted index.
+ */
+ virtual int Highlight() = 0;
+
+ /**
+ * Function to get the count of items currently present in the model.
+ * This includes hidden items.
+ *
+ * @return Count of items existing in the model.
+ */
+ virtual int CurrentItemCount() = 0;
+
+ /**
+ * Set visible data window for model.
+ *
+ * @param aVisibleWindow No of visuals that widget can display at a time on screen.
+ */
+ virtual void SetVisibleWindow( int aWindowSize, int aPageTopIndex = -1 ) = 0;
+
+ /**
+ * Returns relative index from absolute index.
+ *
+ * @param aAbsoluteIndex Abosulte index
+ * @return Returns relative index from absolute index.
+ */
+ virtual int RelativeIndex( int aAbsoluteIndex ) const = 0;
+
+ /**
+ * Return visible window top offset
+ *
+ * @return Current window top offset
+ */
+ virtual int TopWindowOffset() const= 0;
+
+ /**
+ * Return visible window bottom offset
+ *
+ * @return Current window bottom offset
+ */
+ virtual int BottomWindowOffset() const = 0;
+
+ /**
+ * Return visible window top offset
+ *
+ * @return Current window top offset
+ */
+ virtual int TopOffset() const= 0;
+
+ /**
+ * Return visible window bottom offset
+ *
+ * @return Current window bottom offset
+ */
+ virtual int BottomOffset() const = 0;
+
+ /**
+ * Return rear buffer top offset
+ *
+ * @return Current window top offset
+ */
+ virtual int RearTopOffset() const = 0;
+
+ /**
+ * Return rear buffer bottom offset
+ *
+ * @return Current window top offset
+ */
+ virtual int RearBottomOffset() const = 0;
+
+ /**
+ * Check weather item at specified index is marked or not.
+ *
+ * @param aIndex Absolute index of item
+ * @return true if seleccted else otherwise
+ */
+ virtual bool IsItemMarked( int aIndex ) = 0;
+
+ /**
+ * 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.
+ */
+ virtual void SetMarkedIndex( MulWidgetDef::TMulWidgetMarkingType aType, int aIndex ) = 0;
+
+ /**
+ * Returns the visual item at the specified absolute index
+ *
+ * @param aIndex Absolute index of item
+ */
+ virtual const MulVisualItem& Item( int aAbsoluteIndex ) = 0;
+
+ /**
+ * Returns Absolute index from relative index
+ *
+ * @param aRelativeIndex Relative index
+ * @return Absolute index
+ */
+ virtual int AbsoluteIndex( int aRelativeIndex ) = 0;
+
+ /**
+ * Return whather currently looping is on or not
+ *
+ * @return true if looping is on false otherwise
+ */
+ virtual bool IsLoopingOn() = 0;
+
+ /**
+ * Add model state change observer.
+ *
+ * @param aObserver Observer- ownserhip is not transferred
+ */
+ virtual void AddModelObserver( IMulModelObserver* aObserver ) = 0;
+
+ /**
+ * Eemove model state change observer.
+ *
+ * @param aObserver Observer- ownserhip is not transferred
+ */
+ virtual void RemoveModelObserver( IMulModelObserver* aObserver )= 0;
+
+ /**
+ * Return default template
+ *
+ * @return Default template
+ */
+ virtual mulwidget::TLogicalTemplate Template( ) = 0;
+
+ };
+
+
+ } // namespace Alf
+
+#endif // I_MULMODELACCESSOR_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/mul/mulmodelutility.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,152 @@
+/*
+* 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: Utility class for data model
+*
+*/
+
+
+#ifndef MULMODELUTILITY_H_
+#define MULMODELUTILITY_H_
+
+#include <alf/alfvarianttype.h>
+#include <osn/osndefines.h>
+#include <e32cmn.h>
+#include <osn/ustring.h>
+
+#include "mul/imulwidget.h"
+
+namespace osncore
+ {
+ class UString;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+
+//Forward Declaration
+class MulVisualItem;
+class MulModelUtility
+ {
+public:
+
+ /**
+ * Create new Variant data from existing variant data.
+ *
+ * @param aValue Existing variant data;
+ *
+ * @reutrn new variant data, Ownership is transferred
+ */
+ OSN_IMPORT static IAlfVariantType* CreateVariantType( IAlfVariantType& aValue );
+
+ /**
+ * Convert map of visual item to map of alf map.
+ * Ite create new Map and while returning new map owner ship of map is transfered
+ *
+ * @param aVisualItem Map of visual item
+ * @return Map
+ */
+ OSN_IMPORT static std::auto_ptr<IAlfMap> ConvertVisualItemToMap( MulVisualItem& aVisualItem );
+
+ /**
+ *
+ * Convert AlfMap to visual item
+ *
+ * @param aMap IAlfMAP
+ * @return MulVisualItem ownership is trsnaferred
+ */
+ OSN_IMPORT static std::auto_ptr<MulVisualItem> ConvertMapToVisualItem( IAlfMap& aMap );
+
+ /**
+ * Check the prefix of the name to see whether they can be added in alfmodel
+ *
+ * @param aName Name whose prefix is to be checked
+ */
+ static bool CheckNamePrefix( UString aName ) ;
+
+ /**
+ * Convert UString to CAlfString
+ *
+ * @param aUString UString instance to convert to CAlfSTring
+
+ * @return Converted CAlfString
+ */
+ OSN_IMPORT static UString UStringToAlfString(const UString& aUString);
+
+ /**
+ * Convsert CAlfString to UString
+ *
+ * @param aUString CAlfSTring instance to convert to UString
+
+ * @return Converted UString
+ */
+ OSN_IMPORT static UString AlfStringToUString(const UString& aAlfString);
+
+ /**
+ * Covert integer to AlfString
+ *
+ * @param aNumber number to convert
+ * @return AlfString
+ */
+ OSN_IMPORT static UString IntToUString( int aNumber );
+
+ /**
+ * Convert TDes to UString
+ *
+ * @param aDes a TDes type string to be converted
+ * @param aString the converted Ustring
+ */
+ OSN_IMPORT static void ConvertTDesToUString (const TDesC& aDes, UString& aString);
+
+ /**
+ * Convert TDes8 to UString
+ *
+ * @param aDes a TDes8 type string to be converted
+ * @param aString the converted Ustring
+ */
+ OSN_IMPORT static void ConvertTDes8ToUString (const TDesC8& aDes, UString& aString);
+
+ /**
+ * Convert UString to TDes
+ *
+ * @param aString a UString type string to be converted
+ * @param aDes the TDes type converted string
+ */
+ OSN_IMPORT static void ConvertUStringToTDes (const UString& aString, TDes& aDes);
+
+ /**
+ * Convert UString to TDes8
+ *
+ * @param aString a UString type string to be converted
+ * @param aDes the TDes8 type converted string
+ */
+ OSN_IMPORT static void ConvertUStringToTDes8 (const UString& aString, TDes8& aDes);
+
+ /**
+ * Create a visualitem and set its default template
+ *
+ * @param aDefaultTemplate defaultTemplate for that visual item
+ */
+ OSN_IMPORT static std::auto_ptr<MulVisualItem> CreateVisualItem( mulwidget::TLogicalTemplate aDefaultTemplate );
+
+
+ };
+
+ } //namespace Alf
+
+#endif /*MULMODELUTILITY_H_*/
+
+//End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/layers.sysdef.xml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+ <!ENTITY layer_real_source_path "sf/mw/mmuifw" >
+]>
+
+<SystemDefinition name="mmuifw" schema="1.4.0">
+ <systemModel>
+ <layer name="mw_layer">
+ <module name="mmuifw">
+ <unit unitID="uxdo.mmuifw" mrp="" bldFile="&layer_real_source_path;/group" name="mmuifw" />
+ </module>
+ </layer>
+ </systemModel>
+</SystemDefinition>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_containerwidget_api/alf_containerwidget_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="0ff82d657909a3953b9d3b79f9001310" dataversion="1.0">
+<name>alf containerwidget api</name>
+<description>API for AlfContainerWidget</description>
+<type>c++</type>
+<subsystem>alfcontainerwidget</subsystem>
+<libs></libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_containerwidget_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2007 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: File that exports the files belonging to
+: ALF container widget API.
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../inc/alf/ialfcontainerwidget.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfcontainerwidget.h)
+../inc/alf/alfcontainerwidgetexception.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfcontainerwidgetexception.h)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_containerwidget_api/inc/alf/alfcontainerwidgetexception.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2007 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: Container widget exception class.
+*
+*/
+
+
+#ifndef ALFCONTAINERWIDGETEXCEPTION_H
+#define ALFCONTAINERWIDGETEXCEPTION_H
+
+// INCLUDES
+#include <alf/alfexception.h>
+#include <osn/ustring.h>
+
+namespace Alf
+ {
+
+/**
+ * Error codes used with AlfContainerWidgetException.
+ *
+ * There is an offset in AlfContainerWidgetException error codes, so that
+ * AlfContainerWidget specific exceptions can be separated from
+ * osncore::AlfException base exceptions and exceptions of other widgets.
+ */
+enum TAlfContainerWidgetErrorCode
+ {
+ /**
+ * Error occured in construction or initialization of the container
+ * widget.
+ */
+ EInitializationError = 500
+ };
+
+/**
+ * AlfContainerWidgetException is a base class for all container widget
+ * exceptions.
+ *
+ */
+class AlfContainerWidgetException : public osncore::AlfException
+ {
+public:
+ // Constructors and destructor
+
+ /**
+ * Constructor with AlfContainerWidget specific error code.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfContainerWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ */
+ AlfContainerWidgetException(int aError) throw();
+
+ /**
+ * Constructor with AlfContainerWidget specific error code
+ * and additional information.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfContainerWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ * @param aInfo Optional additional information or NULL.
+ */
+ AlfContainerWidgetException(int aError, const char* aInfo) throw();
+
+ /**
+ * Constructor with AlfContainerWidget specific error code,
+ * additional information, source file and line of code.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfContainerWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ * @param aInfo Optional additional information or NULL.
+ * @param aFileAndLine Optional file and line information or NULL.
+ */
+ AlfContainerWidgetException(int aError, const char* aInfo, const char* aFileAndLine) throw();
+
+ /**
+ * Default destructor.
+ */
+ virtual ~AlfContainerWidgetException() throw();
+
+ /**
+ * Returns the description of the exception.
+ * @ret The description of the exception.
+ */
+ const char* what() const throw();
+
+private:
+
+ /**
+ * Error description
+ */
+ osncore::UString mDescription;
+
+ };
+
+ } // Namespace Alf
+
+#endif // ALFCONTAINERWIDGETEXCEPTION_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_containerwidget_api/inc/alf/ialfcontainerwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2007 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: Base interface for all container widgets
+*
+*/
+
+
+#ifndef I_ALFCONTAINERWIDGET_H
+#define I_ALFCONTAINERWIDGET_H
+
+#include <alf/ialfwidget.h>
+class CAlfLayout;
+
+namespace Alf
+ {
+class IAlfLayoutManager;
+
+namespace ialfcontainerwidget
+ {
+static const IfId ident =
+ {
+ 0, "container"
+ };
+ }
+
+/**
+ * The interface for container widget.
+ *
+ * Container widget maintains it's own control group. When a widget control is set to container
+ * widget throught the IAlfWidget::setControl() - method the control is automatically appended to the
+ * container widget's control group. If the control that is being set to the container widget is
+ * already part of another control group it will be removed from the previous control group and appended
+ * to the container widget's control group.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfContainerWidget : public IAlfWidget
+ {
+public:
+
+ static inline const IfId& type()
+ {
+ return ialfcontainerwidget::ident;
+ }
+
+ virtual ~IAlfContainerWidget() {}
+
+ /**
+ * Returns total number of widgets contained by this container.
+ *
+ * @return int Total number of widgets.
+ */
+ virtual int widgetCount() const = 0;
+
+ /**
+ * Adds a child widget to the container.
+ *
+ * This will throw an osncore::AlfException exception with error code
+ * osncore::EInvalidArgument if the aWidget is the same widget that the container
+ * widget itself or if user tries to add a view widget into a container
+ * widget.
+ *
+ * Adding a widget instance that is already added will be silently
+ * ignored.
+ *
+ * @exception osncore::AlfException with error code osncore::EInvalidArgument if the
+ * aWidget is the same widget as the container widget or when
+ * a view widget is attempted to be added to a container.
+ *
+ * @param aWidget Child widget to be added to container.
+ */
+ virtual void addWidget(IAlfWidget& aWidget) = 0;
+
+ /**
+ * Returns child widget at given index. If index is not found return null.
+ *
+ * @param aIndex Index of widget to be returned.
+ * @return Widget at given index or null if the widget is not found.
+ */
+ virtual IAlfWidget* getWidget(int aIndex) const = 0;
+
+ /**
+ * Returns the child index, when given the child widget.
+ *
+ * @param aWidget child widget, which index is returned
+ * @return the index of the child widget, or -1, if widget is not child of this container.
+ */
+ virtual int getWidgetIndex(IAlfWidget& aWidget) const = 0;
+
+ /**
+ * Removes the child widget from given index.
+ *
+ * If widget for the given index is not found then the call
+ * is silently ignored.
+ *
+ * @param aIndex Index from which widget has to be removed.
+ */
+ virtual void removeWidget(int aIndex) = 0;
+
+ /**
+ * Sets the base layout of container widget. Ownership of the
+ * layout manager is transferred to container widget.
+ *
+ * @param aLayout New base layout of container widget.
+ */
+ virtual void applyLayout(IAlfLayoutManager& aLayout) = 0;
+
+
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFCONTAINERWIDGET_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_customlayoutmanagers_api/alf_customlayoutmanagers_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="cc286ba3e80897c374bcd9fb641d3a4e" dataversion="1.0">
+<name>alf customlayoutmanagers api</name>
+<description>API for alfcustomlayoutmanagers</description>
+<type>c++</type>
+<subsystem>alfcustomlayoutmanagers</subsystem>
+<libs></libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_customlayoutmanagers_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 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: File that exports the files belonging to
+: ALF custom layout managers
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// To be removed once migration to the new internal export dir has been done
+
+../inc/alf/ialflctanchorlayoutpolicy.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialflctanchorlayoutpolicy.h)
+../inc/alf/alflctanchorlayoutmanager.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alflctanchorlayoutmanager.h)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_customlayoutmanagers_api/inc/alf/alflctanchorlayoutmanager.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2007 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: grid layout manager
+*
+*/
+
+
+#ifndef ALFLCTANCHORLAYOUTMANAGER_H
+#define ALFLCTANCHORLAYOUTMANAGER_H
+
+#include <osn/osndefines.h>
+#include <osn/osntypes.h>
+#include <memory>
+#include <alf/alflayoutmanager.h>
+#include <alf/alflayout.h>
+
+using std::auto_ptr;
+
+namespace Alf
+ {
+class IAlfWidgetControl;
+class AlfLCTAnchorLayoutPreferencesImpl;
+class AlfLCTAnchorLayoutPolicyImpl;
+
+/**
+ * Grid layout manager
+ *
+ * Layout manager handles the layouting of child widgets in the container widget.
+ * It uses IAlfLayoutPreferences-interface (@see IAlfLayoutPreferences)
+ * of child widgets as a guide for laying out the widgets. The layoutmanager
+ * is set to the IAlfHostApi- interface (@see IAlfHostApi::setBaseLayout)
+ * createLayout-method should be the first call after creating the layoutmanager.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfLCTAnchorLayoutManager : public AlfLayoutManager
+ {
+ friend class AlfLCTAnchorLayoutPreferencesImpl;
+ friend class AlfLCTAnchorLayoutPolicyImpl;
+
+public:
+
+ /**
+ * layout manager constructor
+ *
+ */
+ AlfLCTAnchorLayoutManager();
+
+ /**
+ * virtual destructor
+ */
+ virtual ~AlfLCTAnchorLayoutManager();
+
+public:
+ //from IAlfLayoutManager
+
+ /**
+ * from IAlfLayoutManager
+ * Notifies the layout manager, that the child control's layout
+ * must be updated
+ *
+ * @param aControl control, which size has changed.
+ * @throw AlfVisualException(EInvalidVisual), if layout is not created.
+ */
+ virtual void updateChildLayout(CAlfWidgetControl* aControl);
+
+ /**
+ * from IAlfLayoutManager
+ * Notifies the layout manager, that the control's has been
+ * removed from the layout.
+ *
+ * @param aControl control, which has been removed from the layout.
+ * @throw AlfVisualException(EInvalidVisual), if layout is not created.
+ */
+ virtual void childRemoved(CAlfWidgetControl* aControl);
+public:
+protected:
+
+ void doUpdateChildLayout(CAlfWidgetControl* aControl);
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+private: // data
+ auto_ptr<AlfLCTAnchorLayoutPreferencesImpl> mDataPreferences;
+ auto_ptr<AlfLCTAnchorLayoutPolicyImpl> mDataPolicy;
+ };
+
+ } // namespace Alf
+
+#endif // ALFLCTANCHORLAYOUTMANAGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_customlayoutmanagers_api/inc/alf/ialflctanchorlayoutpolicy.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 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: interface for layout policy
+*
+*/
+
+
+#ifndef I_ALFLCTANCHORLAYOUTMANAGER
+#define I_ALFLCTANCHORLAYOUTMANAGER
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+
+namespace osncore
+ {
+class UString;
+ }
+
+class CAlfControl;
+class TAknLayoutHierarchyComponentHandle;
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+
+namespace ialflctanchorlayoutpolicy
+ {
+ static const IfId Ident =
+ {
+ 0, "lctanchorlayoutpolicy"
+ };
+ }
+
+using namespace osncore;
+using Alf::CAlfWidgetControl;
+
+
+
+/**
+ * The interface for grid layout policy
+ *
+ * Provides grid specific layout APIs
+ *
+ * @code
+ * // Create layout manager interface.
+ * IAlfLayoutManager* layoutManager = IAlfInterfaceBase::makeInterface<IAlfLayoutManager>(control);
+ *
+ * // See if layout policy is supported in the given layout manager.
+ * IAlfLCTAnchorLayoutPolicy* layoutPolicy = IAlfInterfaceBase::makeInterface<IAlfLCTAnchorLayoutPolicy>(layoutManager);
+ *
+ * if(layoutPolicy != 0)
+ * {
+ * int rows = layoutPolicy->Attach(componentHandle);
+ * }
+ * @endcode
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class IAlfLCTAnchorLayoutPolicy : public IAlfInterfaceBase
+ {
+public:
+
+ static inline const IfId& type()
+ {
+ return ialflctanchorlayoutpolicy::Ident;
+ }
+
+ virtual inline ~IAlfLCTAnchorLayoutPolicy() {}
+
+
+ /**
+ * attach the anchors needed for a child visual, according to the layout data
+ * corresponding to the component handle.
+ *
+ * @note this should can be used for layout text components, but also use IAlfLCTTextLayoutPolicy
+ * with the contained text visual to set the text style and alignment
+ *
+ * @param aOrdinal the child visual index
+ * @param aComponentHandle the layout data to use
+ */
+ virtual void Attach (int aOrdinal, const UString& aLCTString, int aVarietyIndex) = 0;
+
+
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType ) = 0;
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFLCTANCHORLAYOUTMANAGER
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_resourcepool_api/alf_resourcepool_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<api id="efaf9c300bc51c617245721716b0cc1a" dataversion="1.0">
+<name>alf resourcepool api</name>
+<description>Alf Resource Pool API</description>
+<type>c++</type>
+<subsystem>alfresourcepool</subsystem>
+<libs><lib name="alfresourcepool.lib"/>
+</libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_resourcepool_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 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: File that exports the files belonging to
+: ALF resouce pool API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// To be removed once migration to the new internal export dir has been done
+
+../inc/alf/alfresourcepool.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfresourcepool.h)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_resourcepool_api/inc/alf/alfresourcepool.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 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: API for handling alf graphic resources
+*
+*/
+
+
+#ifndef ALF_RESOURCEPOOL_H
+#define ALF_RESOURCEPOOL_H
+
+#include <osn/osndefines.h>
+#include <osn/ustring.h>
+
+#include <alf/alftexture.h>
+class TAlfImage;
+class CAlfTextureManager;
+struct TAlfXYMetric;
+
+namespace Alf
+{
+
+#define KResourcePoolThemeDefinitionPrefixS60 "s60"
+
+using namespace osncore;
+
+class ResourcePoolImpl;
+
+/**
+ * Resoure pool is responsible of controlling commonly used image resources
+ * in an application. The resources will be indentified by tags, which are not
+ * case sensitive.
+ *
+ * @code
+ * // create image resources
+ * resourcePool->createLogicalImageResource( "qgn_indi_find_glass" );
+ * resourcePool->setInitialSize( "qgn_indi_find_glass", XYMetric( 64, 64 ) );
+ * resourcePool->setAspectRatio( "qgn_indi_find_glass", ResourcePool::aspectRatioPreserved );
+ *
+ * resourcePool->createImageResource(
+ * "my_face",
+ * pic0001.jpg );
+ *
+ * // utilize the resource
+ * imageVisual->setImage(
+ * resourcePool->getImageResource( "qgn_indi_find_glass" ) );
+ *
+ * sharpImageVisual->setImage(
+ * resourcePool->getImageResource( "my_face" ),
+ * XYMetric( 256, 256 ) );
+ *
+ * // when the resource in not used anymore, the resource can be deleted
+ * resourcePool->deleteImageResource( "qgn_indi_find_glass" );
+ * resourcePool->deleteImageResource( "my_face" );
+ *
+ * @endcode
+ *
+ * @lib alfresourcepool.lib
+ * @since S60 v5.0.1
+ */
+class ResourcePool
+ {
+public:
+
+ // Aspect ratio of the image resource
+ // @see setAspectRatio
+ enum AspectRatio
+ {
+ /*
+ * Scales the icon to the maximum size that fits in the given size,
+ * whilst preserving the aspect ratio of the icon. The sizes of the resulting
+ * bitmaps are exactly of the given size. If the aspect ratio of
+ * the given size differs from the aspect ratio of the icon,
+ * the resulting bitmaps will contain an unused area.
+ */
+ aspectRatioPreserved = 0,
+
+ /*
+ * Scales the icon to the maximum size that fits in the given size,
+ * whilst preserving the aspect ratio of the icon. The resulting bitmaps
+ * are resized so that any unused portion of the given size is not
+ * present in them.
+ *
+ * This mode should be used when only the height or the width of the icon
+ * is known and the other should be based on the aspect ratio of the icon.
+ * The unknown dimension should be defined high enough so
+ * that it does not limit the scaling based on the aspect ratio of the icon.
+ */
+ aspectRatioPreservedAndUnusedSpaceRemoved = 1,
+
+ /*
+ * Scales the icon exactly to the given size. Does not preserve the aspect
+ * ratio of the icon.
+ */
+ aspectRatioNotPreserved = 2,
+
+ /*
+ * Scales the icon to the minimum size that covers the given size,
+ * whilst preserving the aspect ratio of the icon. The sizes of the resulting
+ * bitmaps are exactly of the given size. If the aspect ratio of
+ * the given size differs from the aspect ratio of the icon, some parts of the
+ * icon will be sliced from the resulting bitmaps.
+ */
+ aspectRatioPreservedSlice = 3
+ };
+
+public:
+
+ /**
+ * Constructs a resource pool
+ *
+ * @param aTextureManager Used texture manager.
+ * @param aParentPool Chained parent pool (optional) - not supported currently
+ */
+ OSN_IMPORT ResourcePool(
+ CAlfTextureManager& aTextureManager,
+ ResourcePool* aParentPool = NULL);
+
+ /**
+ * Destructor
+ */
+ OSN_IMPORT ~ResourcePool();
+
+public:
+
+ /**
+ * Creates an image resource based on a logical name. The name will
+ * be also used as the image resource tag because the logical name
+ * is unique in the system.
+ *
+ * The logical name should be format "qgn_xxx_xxx" i.e. as stated
+ * in the S60 reference icons document.
+ *
+ * @note The KAknsIIDQgnXxxXxx format works for a while but it will be
+ * deprecated -> use the qgn_xxx_xxx format.
+ *
+ * @param aTag Resource tag. NULL terminated 8-bit string
+ *
+ * @exception invalid_argument if the tag cannot be matched with any
+ * logical name
+ */
+ OSN_IMPORT void createLogicalImageResource( const Utf8* aTag );
+
+ /**
+ * Creates an image resource based on a theme definition. This definition
+ * may concists of several different theme systems.
+ *
+ * Currently supported formats:
+ * #1 S60 Skin;
+ * s60;mifFilePath;mifImageIndex;mifMaskIndex;majorID;minorId
+ *
+ * s60: literal "s60", which specifies that the following
+ * item definition is based on the S60 Skin system
+ * mifFilePath: literal into the multibitmap file (mif/mbm). Can be empty.
+ * mifImageIndex:unsigned integer which is the index to the mifFilePath. Only used if mifFilePath is given.
+ * mifMaskIndex: unsigned integer which is the mask index to the mifFilePath. Only used if mifFilePath is given.
+ * majorID: unsigned integer or hexadecimal starting with 0x of the Major skin ID. Can be empty.
+ * minorId: unsigned integer or hexadecimal starting with 0x of the Minor skin ID. Only used if majorID is given.
+ *
+ * examples: "s60;;;;268457670;76" // 0x100056c6;0x4c -> KAknsIIDQgnIndiFindGlass
+ * "s60;c:\myFile.mif;1;2;;"
+ * "s60;myMbmFile.mbm;435;;2342345;234" // If skin ID not found, use mbm file with index 435 (no mask)
+ *
+ * @param aTag Resource tag.
+ * @param aThemeDefinition Definition of the theme element.
+ *
+ * @exception invalid_argument theme definition is not supported.
+ */
+ OSN_IMPORT void createThemeImageResource(
+ const Utf8* aTag,
+ const UString& aThemeDefinition );
+
+ /**
+ * Creates an image resource based on a file name.
+ * The aFileName can be a full path with the drive letter or it
+ * can be relative path to the texture manager defaul path
+ *
+ * @param aTag Resource tag.
+ * @param aFileName File name.
+ * @param aFlag How to convert the bitmap to texture
+ * default all fileimages will be treated as nonanimated
+ * @see TextureManager::setImagePath()
+ */
+ OSN_IMPORT void createFileImageResource(
+ const Utf8* aTag,
+ const UString& aFileName ,TAlfTextureFlags aFlag = EAlfTextureFlagLoadAnimAsImage );
+
+ /**
+ * Deletes image resource
+ *
+ * @param aTag Resource tag.
+ */
+ OSN_IMPORT void deleteImageResource( const Utf8* aTag );
+
+ /**
+ * Checks if the given resource identifier exists.
+ *
+ * @param aTag Resource tag.
+ *
+ * @return 'true' if the indentified resource exists.
+ */
+ OSN_IMPORT bool hasImageResource( const Utf8* aTag ) const;
+
+ /**
+ * Sets initial/default loading size for the image resource. The given size
+ * is only a hint and the resource pool may used it or ignore it. Without the
+ * initial size hint, the image will be rasterized to size determined by the
+ * resource pool. The initial size hint can be overridden with the appropriate
+ * getImageResource() function.
+ *
+ * @param aTag Resource tag.
+ * @param aInitialSizeHint Initial/default size hint (only Pixel and RelativeToDisplay supported)
+ */
+ OSN_IMPORT void setInitialSize(
+ const Utf8* aTag,
+ const TAlfXYMetric& aInitialSizeHint );
+
+ /**
+ * Sets aspect ratio mode. This affects to the aspect ratio of the loaded image
+ * resource. The new setting will take place when the image resource is loaded.
+ *
+ * @note Currently only SVG icons are supported. For file image loading, the aspect ratio
+ * is preserved.
+ *
+ * @note The blitting of the image resource can still scale and change the aspect ratio
+ * of the drawn image. @see ImageVisual::setScaleMode
+ *
+ * @param aTag Resource tag.
+ * @param aAspectRatio Used aspect ratio.
+ */
+ OSN_IMPORT void setAspectRatio(
+ const Utf8* aTag,
+ AspectRatio aAspectRatio );
+
+ /**
+ * Finds a image resource with the given tag. The initial size or system
+ * default size is used.
+ *
+ * If the given resource is not found, the Image::hasTexture() returns false.
+ *
+ * @param aTag Resource tag.
+ *
+ * @return Image which can be passed to any visual/brush.
+ *
+ * @exception invalid_argument if the resource is found but cannot be instantiated
+ */
+ OSN_IMPORT TAlfImage getImageResource( const Utf8* aTag );
+
+ /**
+ * Finds a image resouce with the given tag. The size hint may be
+ * used to find/re-rasterize the image resource.
+ *
+ * If the given resource is not found, the Image::hasTexture() returns false.
+ *
+ * @param aTag Resource tag.
+ * @param aSizeHint Rasteration size hint (only Pixel and RelativeToDisplay supported)
+ *
+ * @return Image which can be passed to any visual/brush.
+ *
+ * @exception invalid_argument if the resource is found but cannot be instantiated
+ */
+ OSN_IMPORT TAlfImage getImageResource(
+ const Utf8* aTag,
+ const TAlfXYMetric& aSizeHint );
+
+private:
+
+ auto_ptr<ResourcePoolImpl> mResourcePoolImpl;
+ };
+
+} // namespace Alf
+
+#endif // ALF_RESOURCEPOOL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_scrollbarwidget_api/alf_scrollbarwidget_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="001bb4a510beadc7dbb6f1bca5f14de2" dataversion="1.0">
+<name>alf scrollbarwidget api</name>
+<description>API for alfscrollbarwidget</description>
+<type>c++</type>
+<subsystem>alfscrollbarwidget</subsystem>
+<libs></libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_scrollbarwidget_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: ALF widget factory API
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+//../inc/alf/ialfscrollbararrowbaseelement MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfscrollbararrowbaseelement)
+//../inc/alf/ialfscrollbarconstantthumbbaseelement.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfscrollbarconstantthumbbaseelement.h)
+../inc/alf/ialfscrollbardefaultbaseelement.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfscrollbardefaultbaseelement.h)
+../inc/alf/ialfscrollbarmodel.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfscrollbarmodel.h)
+../inc/alf/ialfscrollbarwidget.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfscrollbarwidget.h)
+../inc/alf/alfscrollevents.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfscrollevents.h)
+../inc/alf/alfscrollbarproductids.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfscrollbarproductids.h)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_scrollbarwidget_api/inc/alf/alfscrollbarproductids.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2007 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: Widget interface with utilities for scrollbar widget.
+*
+*/
+
+#ifndef ALF_SCROLLBARPRODUCTIDS_H
+#define ALF_SCROLLBARPRODUCTIDS_H
+
+static const char* const KScrollBarWidget = "scrollbarwidget";
+static const char* const KScrollBarModel = "scrollbarmodel";
+static const char* const KScrollBarDefaultBaseElement =
+ "scrollbardefaultbaseelement";
+#endif // ALF_SCROLLBARPRODUCTIDS_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_scrollbarwidget_api/inc/alf/alfscrollevents.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2007 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: Widget interface with utilities for scrollbar widget.
+ *
+*/
+
+
+#ifndef ALF_SCROLLEVENTS_H
+#define ALF_SCROLLEVENTS_H
+
+// WidgetModel Includes
+#include <alf/alfwidgetevents.h>
+
+// Widget Includes
+#include <alf/ialfscrollbarwidget.h>
+#include <alf/ialfscrollbardefaultbaseelement.h>
+
+namespace Alf
+ {
+ // forward declaration
+ class IAlfScrollBarDefaultBaseElement;
+
+ /**
+ * Flags to indicate the changes being done in the scrollbar model
+ * ENoChange Flag to indicate no scrollbar model data is changed
+ * ESpanChanged Flag to indicate Span is changed
+ * EViewLengthChanged Flag to indicate view length is changed
+ * EViewStartPosChanged Flag to indicate view start position is changed
+ * EFocusPosChanged Flag to indicate focus position is changed
+ *
+ * @since S60 ?S60_version
+ */
+ enum ScrollModelChangeMask
+ {
+ ENoChange = 0, // Flag if scrollbar model data is changed
+ ESpanChanged = 1, // Flag to indicate Span is changed
+ EViewLengthChanged = 2, // Flag to indicate view length is changed
+ EViewStartPosChanged = 4, // Flag if view start position is changed
+ };
+
+ /**
+ * This structure is used to send data along with
+ * EEventScrollModelChanged scroll event
+ *
+ * @since S60 ?S60_version
+ */
+ struct ScrollModelChangedEventData
+ {
+ int mSpan; // Span
+ int mViewLength; // View Length
+ int mViewStartPos; // View Start position
+ int mChangedMask; // combination (ORing) of one or more
+ // TScrollModelChangeMask enums
+ };
+
+ } // namespace Alf
+
+#endif // IALF_SCROLLEVENTS_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_scrollbarwidget_api/inc/alf/ialfscrollbardefaultbaseelement.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2007 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: interface for the scrollbar default lct base element.
+*
+*/
+
+#ifndef I_ALF_SCROLLBARDEFAULTLCTBASEELEMENT_H
+#define I_ALF_SCROLLBARDEFAULTLCTBASEELEMENT_H
+
+#include <alf/ialfelement.h>
+#include <alf/ialfwidget.h>
+#include <alf/ialfinterfacebase.h>
+#include <alf/alfevent.h>
+#include <alf/alfwidgetevents.h>
+
+using namespace osncore;
+
+namespace Alf
+ {
+ /**
+ * @namespace alfscrollbardefaultbaseelement
+ *
+ * ident specifies the unique identifier for the base-element.
+ */
+ namespace alfscrollbardefaultbaseelement
+ {
+ static const IfId ident =
+ {
+ 0,"BaseElement"
+ };
+ }
+/**
+ * An interface for the default base element of the scrollbar.
+ *
+ * The default base element is an interface that contains the basic layouting and scrolling logic of the scrollbar widget.
+ * The base element provides a simple scrollbar visualization.
+ * It allows the user to:
+ * 1. Specify the TotalLength ViewLength and ThumbWidth
+ * 2. Specify the opacity of thumb with respect to widget opacity
+ *
+ * The default base element of the scrollbar uses Anchor Layout
+ *
+ * The default base element also acts as an eventhandler and currently listens to following events:
+ * 1. EEventModelChanged, EEventScrollBarClicked
+ *
+ * default base element handles EEventScrollBarClicked event(Custom Event) which are convetred to higher level events
+ * like EEventScrollUp ,EEventScrollDown,EEventScrollLeft,EEventScrollRight ,
+ * On receiving these events, the default base element accordingly changes the position of the thumb
+ *
+ *
+ * @lib alfscrollbarwidget.lib
+
+ * @since S60 ?S60_version
+ */
+class IAlfScrollBarDefaultBaseElement: public IAlfInterfaceBase
+ {
+
+public:
+
+ /**
+ * Getter for the type identifier of this interface.
+ * Usage:
+ * @code
+ * IAlfElement* element;
+ * IAlfBaseElement* baseElement =
+ * static_cast<IAlfScrollBarBaseElement*> (
+ * element->makeInterface (IAlfScrollBarBaseElement::type() ) );
+ * @endcode
+ * @see \link IAlfInterfaceBase \endlink for
+ * \link IAlfInterfaceBase::makeInterface \endlink
+ * The above code provides all the interfaces of ScrollBar base element.
+ * @since S60 ?S60_version
+ * @return Identifier of this interface.
+ */
+ static inline const IfId& type()
+ {
+ return alfscrollbardefaultbaseelement :: ident;
+ }
+
+
+ /**
+ * Sets the animation time for the thumb movement
+ * Controls the movement of the thumb in the context of
+ * scroll
+ * @param aTime, Animation time in milliseconds
+ */
+ virtual void setThumbAnimationTime ( int aTime ) = 0;
+
+ /**
+ * Gets the Thumb animation time.
+ *
+ * @return Animation time.
+ */
+ virtual int getThumbAnimationTime() const = 0;
+
+ /**
+ * This function is deprecated. Use attribute APIs to set or get opacity.
+ * Sets the Opacity of widget.
+ * Default value of scrollbar opacity is 1.0.
+ *
+ * @param aOpacity Opacity of the scrollbar. The value should be between 0.0
+ * to 1.0.
+ *
+ * @exception AlfException
+ */
+ virtual void setOpacity(float aOpacity)=0;
+
+ /**
+ * This function is deprecated. Use attribute APIs to set or get opacity.
+ * Gets the Opacity of widget.
+ *
+ * @return: Thumb opacity
+ */
+ virtual float getOpacity() const=0;
+
+ /**
+ * Sets the Opacity of thumb. This is relative to widget opacity.Default value is 1.0.
+ * The value of aOpacity should be between 0.0 to 1.0
+ * @param aOpacity Opacity of the thumb
+ */
+ virtual void setThumbOpacity ( float aOpacity ) = 0;
+
+ /**
+ * Gets the Opacity of thumb.
+ *
+ * @return: Thumb opacity
+ */
+ virtual float getThumbOpacity() const = 0;
+
+
+ /**
+ * Destructor.
+ */
+ virtual ~IAlfScrollBarDefaultBaseElement() {}
+ }; // class IAlfScrollBarDefaultBaseElement
+ } // namespace Alf
+
+#endif // IALF_SCROLLBARDEFAULTLCTBASEELEMENT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_scrollbarwidget_api/inc/alf/ialfscrollbarmodel.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2007 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: Model interface with utilities for scrollbar widget.
+*
+*/
+
+
+#ifndef IALF_SCROLLBARMODEL_H
+#define IALF_SCROLLBARMODEL_H
+
+
+//WidgetModel Includes
+#include <alf/ialfmodel.h>
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+namespace alfscrollbarmodel
+ {
+ static const IfId ident =
+ {
+ 0, "alfscrollbarmodel"
+ };
+ }
+
+/**
+ * An interface of the scrollbar model.
+ */
+class IAlfScrollBarModel : public IAlfModel
+ {
+
+public:
+
+ /**
+ * Getter for the type identifier of this interface.
+ *
+ * @return A descriptor to identify the type of this interface.
+ */
+ static inline const IfId& type()
+ {
+ return alfscrollbarmodel::ident;
+ }
+
+ /**
+ * Function for initializing the model.
+ *
+ * The unit of paremeters aTotalLength, aViewLength, aViewStartPosition
+ * depends on the user of scrollbar. For example editor may
+ * decide to support scrolling by line,means in case of editor
+ * aTotalLenght can be total number of lines in the document,
+ * aViewlength can be the number of lines which fit inside a page/view,
+ * aViewstartPosition can be the line number from which view starts and
+ *
+ * (currently no visualization is there for focus position inside scrollbar)
+ *
+ * @param aTotalLength - Total length of the content or document if it
+ * were laid out. Minimum Value of total length can be
+ * 1. If a value less than 1 is passed it is converted
+ * to 1 automatically.
+ *
+ * @param aViewLength - Amount of TotalLength which is viewable. Minmum
+ * value of viewlength is 1 and maximum value is equal
+ * to total length. If a value less than 1 is passed
+ * it is converted to 1 similarly, if a value greater
+ * than aTotalLength is passed it is converted to
+ * aTotalLength.
+ * @param aViewStartPosition - view start position. This can be between 0
+ * and (aTotalLength - aViewLength). As in
+ * case of total length and view length, if a
+ * value out side range is passed it is convered
+ * to the nearest boundary value (0 or
+ * aTotalLength - aViewLength).
+ * @return void.
+ */
+ virtual void initializeData(
+ int aTotalLength,
+ int aViewLength,
+ int aViewStartPosition) = 0;
+
+ /**
+ * Sets the Total Length for the Scrollbar
+ * which is the length of the document or viewable data.
+ *
+ * Arbitrary units are used, but the same units as the rest of the model.
+ * This length is best current estimate of the length of the entire
+ * viewable data in this model's direction.(i.e, vertical, horizontal).
+ * It represents physical extent (e.g. could be pixels), not logical size
+ * of the data.
+ * It is understood to represent the physical laid out size of the data
+ * if it were possible to view it all at once.
+ *
+ * @param aTotalLength - Total length of the content or document. Minimum
+ * Value of total length can be 1. If a value less
+ * than 1 is passed, it is converted to 1
+ * automatically.
+ * If the value passed is less than the current view
+ * length, current view length is also changed to the
+ * passed total length so that view length is still
+ * valid. Similarly if required, view start position
+ * is also changed so that it is still valid.
+ * See the documentation of initializeData() to know
+ * valid values of each model data. If change of more
+ * than one model data is required, use changeData()
+ * function.
+ *
+ * @return void.
+ */
+ virtual void setTotalLength(int aTotalLength) = 0;
+
+ /**
+ * Sets the View Length for the Scrollbar
+ * For horizontal models, this is the width of the view.
+ * For veritcal, this is the height of the view.
+ *
+ * Note the units are arbitrary but uniform with the rest of the model.
+ * Note that this measure is proportional to the physical width or height
+ * of the view.This metric is sometimes called the Thumb size.
+ * @param aViewLegth - Amount of Total Length which is viewable. Minmum
+ * value of viewlength is 1 and maximum value is equal
+ * to total length. If a value out of range is passed
+ * it is converted to the nearest boundary (1 or total
+ * length).
+ * See the documentation of initializeData() to know
+ * valid values of each model data. If change of more
+ * than one model data is required, use changeData()
+ * function.
+ * @return void.
+ */
+ virtual void setViewLength(int aViewLength) = 0;
+
+ /**
+ * Sets the View Start Position for the Scrollbar
+ * Position in arbitrary units of the start of the currently viewed data.
+ * For horizontal models, this is the position of the left of the view
+ * relative to the far left end of the document.
+ * For veritcal, this is the position of the top of the view from the
+ * top of the viewable data.
+ *
+ * Note the units are arbitrary but uniform with the rest of the model.
+ * Position is in physical space as if the entire data were laid out.
+ * This metric is sometimes called the Thumb position.
+ *
+ * @param aViewStartPosition - start position of the viewable area. This can
+ * be between 0 and (aTotalLength - aViewLength
+ * ). If a value out side range is passed, it
+ * is convered to the nearest boundary value (0
+ * or totalLength - viewLength)
+ * See the documentation of initializeData() to
+ * know valid values of each model data. If
+ * change of more than one model data is
+ * required, use changeData() function.
+ *
+ * @return void.
+ */
+ virtual void setViewStartPosition(int aViewStartPosition) = 0;
+
+ /**
+ * Sets TotalLength, View length and ViewStartPosition for the Scrollbar.
+ *
+ * See the documentation of initializeData() to know valid values of each
+ * model data. If the value passed are not valid, they are changed to the
+ * closest valid value.
+ *
+ * @param aTotalLength - total length
+ * @param aViewLength - view Length
+ * @param aViewStartPosition - View Start Position
+ * @return void.
+ */
+ virtual void changeData(
+ int aTotalLength,
+ int aViewLength,
+ int aViewStartPosition) = 0;
+
+ /**
+ * Length of the document or viewable data.
+ * (refer setter function for detailed concept).
+ * @return length in arbitrary units of the viewable data
+ */
+ virtual int getTotalLength() const = 0;
+
+ /**
+ * Length of the view (refer setter function for detailed concept).
+ *
+ * @return view length
+ */
+ virtual int getViewLength() const = 0;
+
+ /**
+ * Position in arbitrary units of the start of the currently viewed data
+ * (refer setter function for detailed concept).
+ * @return position of the start of the view
+ */
+ virtual int getViewStartPosition() const = 0;
+
+ };
+
+ } // namespace Alf
+
+#endif // IALF_SCROLLBARMODEL_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_scrollbarwidget_api/inc/alf/ialfscrollbarwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2007 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: Widget interface with utilities for scrollbar widget.
+*
+*/
+
+#ifndef I_ALF_SCROLLBARWIDGET_H
+#define I_ALF_SCROLLBARWIDGET_H
+
+//WidgetModel includes
+#include <alf/ialfwidget.h>
+#include <alf/alfevent.h>
+#include <alf/alfwidgetevents.h>
+#include <alf/ialfwidgetfactory.h>
+
+//osn includes
+#include <osn/osndefines.h>
+#include <osn/ustring.h>
+
+namespace Alf
+ {
+namespace alfscrollbarwidget
+ {
+ /**
+ * @namespace alfscrollbarwidget
+ *
+ * ident specifies the unique identifier for the grid widget.
+ */
+ static const IfId ident =
+ {
+ 0, "alfscrollbarwidget"
+ };
+ static const Utf8* const KBaseElementName = "BaseElement";
+ }
+
+/**
+ * Enumeration of selectionchanged events generated by the grid widget.
+ */
+enum
+ {
+ EEventScrollBarClicked = ELastCommonWidgetEvent+1111,
+ EEventScrollBarTouchDown,
+ EEventScrollBarDrag
+ };
+
+
+/**
+ * Interface for the scrollbar widget.
+ *
+ * Default visualization of scrollbar contains following components.
+ * <ul>
+ * <li>Thumb (The size of the Thumb shows the amount of scrollable content)</li>
+ * <li>Track (Place holder for Thumb)</li>
+ * </ul>
+ *
+ * A scrollbar widget is used along with a scrollable widget,
+ * <ul>
+ * <li>to show the amount of scrollable content inside scrollable widget by
+ * means of thumb size</li>
+ * <li>to generate scroll events(MoveUp and Movedown, PageUp PageDown and drag)
+ * </li>
+ * <li>to show the view start position in the scrollbale content</li>
+ * </ul>
+ *
+ * The communication between scrollbar and scrollable widget happens through
+ * events. Scrollbar handles only pointer events which are converted to higher
+ * level events like <b>EEventScrollUp, EEventScrollDown, EEventScrollLeft,
+ * EEventScrollRight, EEventScrollPageUp, EEventScrollPageDown,
+ * EEventScrollPageLeft and EEventScrollPageRight</b>
+ * and sent to scrollable widget.Scrollable widget can also generate similar
+ * higher level events in response to key and pointer events.In which case it
+ * is scrollable widget's resposibility to send these events to scrollbar.
+ *
+ */
+class IAlfScrollBarWidget: public IAlfWidget
+ {
+public:
+ /**
+ * Get the type of widget.
+ *
+ * @return The type of widget
+ */
+ static const IfId& type()
+ {
+ return alfscrollbarwidget::ident;
+ }
+
+ /**
+ * Gets the Base Element Name.
+ *
+ * @return The base element's name
+ */
+ static inline const char* baseElementName()
+ {
+ return alfscrollbarwidget::KBaseElementName;
+ }
+
+ /**
+ * Destructor.
+ */
+ virtual ~IAlfScrollBarWidget() {}
+ /**
+ * Sets whether or not tactile feedback is enabled.
+ *
+ * @param aFlag Whether or not tactile is enabled.
+ */
+ virtual void enableTactile(bool aFlag) = 0;
+
+ /**
+ * Returns the state of tactile feedback whether it is enabled/disabled.
+ *
+ * @param aEnabled Whether or not tactile is enabled.
+ */
+ virtual bool IsTactileEnabled() = 0;
+
+ };
+
+ } // namespace Alf
+
+#endif // IALF_SCROLLBARWIDGET_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_viewwidget_api/alf_viewwidget_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="1bcc7436185f77adc4ac26a6839e264f" dataversion="1.0">
+<name>alf viewwidget api</name>
+<description>Alf View Widget API</description>
+<type>c++</type>
+<subsystem>alfviewwidget</subsystem>
+<libs></libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_viewwidget_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: ALF widget factory API
+*
+*/
+
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/alf/ialfviewwidget.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfviewwidget.h)
+../inc/alf/alfviewwidgetexception.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfviewwidgetexception.h)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_viewwidget_api/inc/alf/alfviewwidgetexception.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2007 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: View widget exception class.
+*
+*/
+
+
+#ifndef ALFVIEWWIDGETEXCEPTION_H
+#define ALFVIEWWIDGETEXCEPTION_H
+
+// INCLUDES
+#include <alf/alfexception.h>
+#include <osn/ustring.h>
+
+namespace Alf
+ {
+
+/**
+ * Error codes used with AlfViewWidgetException.
+ *
+ * There is an offset in AlfViewWidgetException error codes, so that
+ * AlfViewWidget specific exceptions can be separated from
+ * osncore::AlfException base exceptions and exceptions of other widgets.
+ */
+enum TAlfViewWidgetErrorCode
+ {
+ /**
+ * Error occured in construction or initialization of the view
+ * widget.
+ */
+ EInitializationError = 600,
+
+ /**
+ * Handle to status pane not found
+ */
+ EStatusPaneError,
+
+ /**
+ * Handle to control pane not found
+ */
+ EControlPaneError,
+
+ /**
+ * Control group id specified in the viewwidget constructor
+ * already reserved.
+ */
+ EControlGroupAlreadyExists
+ };
+
+/**
+ * AlfViewWidgetException is a base class for all view widget
+ * exceptions.
+ *
+ */
+class AlfViewWidgetException : public osncore::AlfException
+ {
+public:
+ // Constructors and destructor
+
+ /**
+ * Constructor with AlfViewWidget specific error code.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfViewWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ */
+ AlfViewWidgetException(int aError) throw();
+
+ /**
+ * Constructor with AlfViewWidget specific error code
+ * and additional information.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfViewWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ * @param aInfo Optional additional information or NULL.
+ */
+ AlfViewWidgetException(int aError, const char* aInfo) throw();
+
+ /**
+ * Constructor with AlfViewWidget specific error code,
+ * additional information, source file and line of code.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfViewWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ * @param aInfo Optional additional information or NULL.
+ * @param aFileAndLine Optional file and line information or NULL.
+ */
+ AlfViewWidgetException(int aError, const char* aInfo, const char* aFileAndLine) throw();
+
+ /**
+ * Default destructor.
+ */
+ virtual ~AlfViewWidgetException() throw();
+
+ /**
+ * Returns the description of the exception.
+ * @ret The description of the exception.
+ */
+ const char* what() const throw();
+
+private:
+
+ /**
+ * Error description
+ */
+ osncore::UString mDescription;
+
+ };
+
+ } // Namespace Alf
+
+#endif // ALFVIEWWIDGETEXCEPTION_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_viewwidget_api/inc/alf/ialfviewwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,274 @@
+/*
+* Copyright (c) 2007 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: View widget interface.
+*
+*/
+
+
+#ifndef IALF_VIEWWIDGET_H
+#define IALF_VIEWWIDGET_H
+
+#include <e32base.h>
+#include <alf/ialfcontainerwidget.h>
+
+//Forward Declaration
+class TAknsItemID;
+class CAlfDisplay;
+
+namespace Alf
+ {
+
+namespace alfviewwidget
+ {
+static const IfId ident =
+ {
+ 0, "viewwidget"
+ };
+
+ }
+
+/**
+ * An interface for the view widget.
+ *
+ * @since S60 ?S60_version
+ */
+
+class IAlfViewWidget : public IAlfContainerWidget
+ {
+
+public:
+ /**
+ * Getter for the type identifier of this interface.
+ * @return A descriptor to identify the type of this interface.
+ *
+ * @since S60 ?S60_version
+ */
+ static inline const IfId& type()
+ {
+ return alfviewwidget::ident;
+ }
+
+
+ /**
+ * This will show the view widget. The view widget will be
+ * shown on the top of the view stack. If the view was already
+ * shown it will be moved on top of the view stack.
+ *
+ * @see getViewStackPosition()
+ *
+ * @param aShow true if the view is to be shown, false if
+ * the view will be hidden. The view is not shown,
+ * till this api is called with true parameter.
+ * @since S60 ?S60_version
+ */
+ virtual void show(bool aShow = true) = 0 ;
+
+ /**
+ * API to make the view widget accept events.
+ *
+ * @param aAccept true if the view is to accept inputs, else false
+ * default value is true
+ * @since S60 ?S60_version
+ */
+ virtual void acceptEvents(bool aAccept = true) = 0 ;
+
+ /**
+ * API to enable/disable Avkon status pane
+ *
+ * @param aEnable true to enable the status pane, else false
+ * the default value is true.
+ * @since S60 ?S60_version
+ */
+ virtual void enableStatusPane(bool aEnable = true) = 0;
+
+ /**
+ * API to hide/show Avkon control pane
+ * If the AlfDisplay bound to the view widget does not occupy the
+ * entire client rectangle, this API has no effect.
+ *
+ * @param aEnable true to enable the control pane, else false
+ * the default value is true.
+ * @since S60 ?S60_version
+ */
+ virtual void enableControlPane(bool aEnable = true) = 0;
+
+ /**
+ * API to enable/disable Avkon Skin to be used as view widget's background.
+ *
+ * @param aSkinBackground true if the view has to use Avkon Skin as background.
+ * false otherwise.
+ * @since S60 ?S60_version
+ */
+ virtual void useSkinBackground(bool aSkinBackground = true) = 0;
+
+ /**
+ * API to use Skin with the given ID to be used as view widget's background.
+ * Also enables skin background. See IAlfViewWidget::useSkinBackground()
+ *
+ * @param aID Skin id of the graphics to be used in the texture.
+ *
+ * @since S60 ?S60_version
+ */
+ virtual void setSkinBackground(TAknsItemID aSkinID) = 0;
+
+ /**
+ * API to check whether the view is shown
+ *
+ * @return true if the view is shown, else false
+ *
+ * @since S60 ?S60_version
+ */
+ virtual bool shown() = 0;
+
+ /**
+ * Returns the position of the view on the view stack.
+ * This tells the view Z-coordinate position relative to other views.
+ * Top-most view returns zero. Views under that have a growing
+ * number of position. If the view is hidden -1 is returned.
+ * Only view widgets are taken into consideration in the position calculation.
+ * Other control groups in the display roster are ignored. For example,
+ * position zero doesn't mean that the control group of this view would be
+ * top-most.
+ *
+ * Only top-most view is activate while all other views are being deactivate.
+ *
+ * @see show()
+ *
+ * @return Position of the view, -1 if view is hidden.
+ */
+ virtual int getViewStackPosition() const = 0;
+
+ /**
+ * API to check whether the view accepts events
+ *
+ * @return true if the view accepts events, else false
+ *
+ * @since S60 ?S60_version
+ */
+ virtual bool eventsAccepted() = 0;
+
+ /**
+ * API to check whether the status pane is enabled
+ *
+ * @return true if the status pane is enabled, else false
+ *
+ * @since S60 ?S60_version
+ */
+ virtual bool statusPaneEnabled() = 0;
+
+ /**
+ * API to check whether the control pane is enabled
+ *
+ * @return true if the control pane is enabled, else false
+ *
+ * @since S60 ?S60_version
+ */
+ virtual bool controlPaneEnabled() = 0;
+
+ /**
+ * API to check whether skin info is being used for background
+ * or not
+ *
+ * @return true if the skin info is being used, else false
+ *
+ * @since S60 ?S60_version
+ */
+ virtual bool usingSkinBackground() = 0;
+
+ /**
+ * API to get the Avkon Skin ID being used as view widget's background.
+ * Use IAlfViewWidget::usingSkinBackground() to check if this is
+ * being used.
+ *
+ * @return Avkon Skin ID being used for view's background.
+ * Returns an ID with major and minor fields=-1 if
+ * this info was never set.
+ * See IAlfViewWidget::setSkinBackground()
+ *
+ * @since S60 ?S60_version
+ */
+ virtual TAknsItemID skinBackground() = 0;
+
+ /**
+ * API to Set the display area of the view widget.
+ * This will set the alfdisplay area with param passed
+ * Client need to call this api with screen/apprect to make
+ * view full screen or application rect
+ *
+ * @param aDisplayRect: the area in which view widget should be
+ * displayed
+ *
+ * @since S60 ?S60_version
+ */
+ virtual void setRect(const TRect& aDisplayRect) = 0;
+
+ /**
+ * Virtual destructor.
+ */
+ virtual ~IAlfViewWidget () {}
+
+ };
+
+/**
+ * Structure to store information required to instantiate a view widget
+ * via the widget factory mechanism.
+ * A pointer to this structure is casted to a void pointer and sent to the
+ * factory plugin during the view widget construction.
+ */
+struct AlfViewWidgetInitData
+ {
+ /**
+ * Owner environment for the widget
+ */
+ CAlfEnv* mEnv;
+
+ /**
+ * Display pointer
+ */
+ CAlfDisplay* mDisplay;
+
+ /**
+ * Widget instance ID.This uniquely identifies every widget instance
+ * and is its name.
+ * @see AlfWidget::Widgetname()
+ */
+ const char* mWidgetId;
+
+ /**
+ * Control group ID that will be used to create a new control group
+ * and append the view widget into.
+ */
+ int mControlGroupId;
+
+ /**
+ * Pointer to node in declaration containing information for the widget.
+ */
+ DuiNode* mNode;
+
+ /**
+ * XML file name containing the declaration for the presention of the widget.
+ */
+ const char* mFilePath;
+
+ /**
+ * Pointer to custom data passed via factory mechanism
+ * Not Owned.
+ */
+ AlfCustomInitDataBase* mCustomData;
+ };
+
+ }//end of namespace
+
+#endif // IALF_VIEWWIDGET_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetfactory_api/alf_widgetfactory_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="2e83a08df571f254641c882d64e63fc8" dataversion="1.0">
+<name>alf widgetfactory api</name>
+<description>API for AlfWidgetFactory</description>
+<type>c++</type>
+<subsystem>alfwidgetfactory</subsystem>
+<libs></libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetfactory_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: ALF widget factory API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// To be removed once migration to the new internal export dir has been done
+
+../inc/alf/ialfwidgetfactory.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfwidgetfactory.h)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetfactory_api/inc/alf/ialfwidgetfactory.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,567 @@
+/*
+* Copyright (c) 2007 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: Custom widget factories are registered into factory chain
+*
+*/
+
+
+#ifndef I_ALFWIDGETFACTORY_H
+#define I_ALFWIDGETFACTORY_H
+
+//Widget Utils includes
+#include <alf/alftypes.h>
+
+//Widget Model Includes
+#include <alf/ialfinterfacebase.h>
+
+//Forward declaration
+class CAlfDisplay;
+
+//Namespaces
+namespace duiuimodel
+ {
+ class DuiNode;
+ }
+
+using namespace duiuimodel;
+
+namespace Alf
+ {
+
+//Forward declarations
+class IAlfWidget;
+class IAlfModel;
+class IAlfWidgetControl;
+class IAlfElement;
+class IAlfVisualTemplate;
+class IAlfWidgetEventHandler;
+class IAlfFactoryPlugin;
+class IAlfViewWidget;
+class IAlfContainerWidget;
+class IAlfLayoutManager;
+
+//Namespace
+namespace category
+ {
+ static const char* const KWidget = "widget";
+ static const char* const KModel = "model";
+ static const char* const KControl ="control";
+ static const char* const KElement ="element";
+ static const char* const KVisualTemplate ="visualtemplate";
+ static const char* const KEventHandler = "eventhandler";
+ }
+
+namespace alfwidgetfactory
+ {
+ static const IfId ident=
+ {
+ 0,"alfwidgetfactory"
+ };
+
+ }
+
+/**
+ * @class AlfCustomInitDataBase ialfwidgetfactory.h "alf/ialfwidgetfactory.h"
+ *
+ * Empty placeholder for custom data to be plumbed through the factory while
+ * creating widgets or widget parts.
+ * Derive from this class to pass custom data via the factory.
+ *
+ * @lib alfwidgetfactory.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfCustomInitDataBase
+ {
+public:
+
+ /**
+ * Virtual destructor.
+ */
+ virtual ~AlfCustomInitDataBase() {}
+ };
+
+
+/**
+ * @class IAlfWidgetFactory ialfwidgetfactory.h "alf/ialfwidgetfactory.h"
+ *
+ * Interface to create widgets, register custom widget factories and query
+ * factory products.
+ *
+ * Widget factory provides methods to create widgets, event handlers,
+ * controls, visual templates and elements through a factory chain.
+ * @code
+ * MAlfListWidget* list = widgetFactory.CreateWidget<MAlfListWidget>(
+ * "alflistwidget");
+ * if( list )
+ * {
+ * // do operations with widget
+ * }
+ * @endcode
+ *
+ * @lib alfwidgetfactory.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfWidgetFactory: public IAlfInterfaceBase
+ {
+public:
+ static inline const IfId& type()
+ {
+ return alfwidgetfactory::ident;
+ }
+
+ /**
+ * Destructor
+ */
+ virtual ~IAlfWidgetFactory() {}
+
+ // Templates
+
+ /**
+ * Constructs a new widget.
+ *
+ * Each widget will have to be added into a container widget. The root
+ * container widget of an application user interface view can be created
+ * with the createViewWidget() method. The widget hierarchy can be
+ * constructed from the root container widget by using container and leaf
+ * widgets. When a new widget is created a container has to be specified
+ * that is going to contain the created widget. The container can be a
+ * root container widget or some of the inner container widgets in the
+ * widget containment hierarchy.
+ *
+ * Widget's control is bound to a display object when this widget is first
+ * shown. The widget is bound to the same display that was given in the
+ * constructor of its containing view.
+ *
+ * @see createViewWidget()
+ * @see Alf::IAlfContainerWidget
+ *
+ * @exception osncore::AlfWidgetException Thrown with error code
+ * osncore::EInvalidArgument if both node and declaration file
+ * path have non-null value at the same time.
+ * @exception osncore::AlfWidgetException Thrown with error code
+ * osncore::EInvalidWidgetInstanceId if an attempt is made to
+ * create a widget with the Instance ID of an existing widget.
+ *
+ * @param aLoadId Widget type identifier.
+ * @param aInstanceId Id or name of the widget to be created.
+ * @param aContainerWidget Reference to a container widget that will
+ * contain the created widget.
+ * @param aNode Declarative UI node which is used to construct
+ * and configure this widget from a declaration.
+ * Default implementation if aNode is NULL.
+ * @param aFilePath File handle to an XML file describing the
+ * presentation of the widget. Both aNode and
+ * aFilePath cannot be non-null values at the
+ * same time.
+ * @param aCustomData Custom data to be passed to the widget during
+ * construction.
+ *
+ * @return Pointer to the created widget or 0. The created widget is
+ * maintained in the UI Accelerator Toolkit environment.
+ */
+ template<class T>
+ T* createWidget(
+ const char* aLoadId, const char* aInstanceId,
+ IAlfContainerWidget& aContainerWidget,
+ DuiNode* aNode=0, const char* aFilePath=0,
+ AlfCustomInitDataBase* aCustomData=0)
+ {
+ return static_cast<T*>(
+ createWidget(aLoadId,aInstanceId,aContainerWidget,
+ aNode,aFilePath,aCustomData));
+ }
+
+ /**
+ * Destroy widget
+ *
+ * @param aWidget A widget to be destroyed.
+ * @return Error code, if widget was not found, 0 otherwise.
+ */
+ template<class T>
+ int destroyWidget(T* aWidget)
+ {
+ return destroyWidget(static_cast<IAlfWidget*>(aWidget));
+ }
+
+ /**
+ * Create a widget model
+ *
+ * @param aLoadId Implementation to load
+ * @param aCustomData Custom data to be passed to the model during
+ * construction.
+ * @return Pointer to model or 0.
+ */
+ template<class T>
+ T* createModel(const char* aLoadId, AlfCustomInitDataBase* aCustomData=0)
+ {
+ return static_cast<T*>(createModel(aLoadId,aCustomData));
+ }
+
+ /**
+ * Create a control
+ *
+ * @param aLoadId Load identifier
+ * @param aInstanceId Instance identifier
+ * @param aDisplay Display where control is bound
+ * @param aCustomData Custom data to be passed to the control during
+ * construction.
+ * @return Pointer to control or 0.
+ */
+ template<class T> T* createControl(
+ const char* aLoadId, const char* aInstanceId,
+ CAlfDisplay* aDisplay=0, AlfCustomInitDataBase* aCustomData=0)
+ {
+ return static_cast<T*>(
+ createControl(aLoadId,aInstanceId,aDisplay,aCustomData));
+ }
+
+ /**
+ * Create an element
+ *
+ * @param aLoadId Load identifier
+ * @param aInstanceId Instance identifier
+ * @param aControl Control Use by element contructor
+ * @param aCustomData Custom data to be passed to the element during
+ * construction.
+ * @return Pointer to element or 0.
+ */
+ template<class T> T* createElement(
+ const char* aLoadId, const char* aInstanceId,
+ IAlfWidgetControl& aControl, DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0)
+ {
+ return static_cast<T*>(
+ createElement(aLoadId,aInstanceId,aControl,aNode,aCustomData));
+ }
+
+ /**
+ * Create a visual template
+ *
+ * @param aLoadId Load identifier
+ * @param aInstanceId Instance identifier
+ * @param aCustomData Custom data to be passed to the visual template
+ * during construction.
+ * @return Pointer to visual template or 0.
+ */
+ template<class T> T* createVisualTemplate(
+ const char* aLoadId, const char* aInstanceId,
+ DuiNode* aNode=0, AlfCustomInitDataBase* aCustomData=0)
+ {
+ return static_cast<T*>(
+ createVisualTemplate(aLoadId,aInstanceId,aNode,aCustomData));
+ }
+
+ /**
+ * Create an event handler
+ *
+ * @param aLoadId Load identifier
+ * @param aInstanceId Instance identifier
+ * @param aCustomData Custom data to be passed to the event handler
+ * during construction.
+ * @return Pointer to event handler or 0.
+ */
+ template<class T> T* createEventHandler(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0)
+ {
+ return static_cast<T*>(
+ createEventHandler(aLoadId,aInstanceId,aNode,aCustomData));
+ }
+
+ /**
+ * Create an layoutmanager.
+ *
+ * @param aLoadId Load identifier
+ * @param aInstanceId Instance identifier
+ * @param aNode declaration node.
+ * @param aCustomData Custom data to be passed to the layout manager
+ * during construction.
+ * @return Pointer to instance or NULL
+ */
+ template<class T> T* createLayoutManager(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0)
+ {
+ return static_cast<T*>(
+ createLayoutManager(aLoadId,aInstanceId,aNode,aCustomData));
+ }
+
+public:
+
+ /**
+ * Constructs a new view widget.
+ *
+ * Application user interface contains always at least one view widget.
+ *
+ * View widget is a container widget that can be used to contain other
+ * container or leaf widgets. View widget is the root of the application
+ * user interface view into which the widget hierarchy can be built.
+ *
+ * View widget control is appended in a control group. Each view will be
+ * associated with a unique control group. A unique, unreserved control
+ * group ID should be passed through this construction method.
+ * Construction method will then create a new control group for the given
+ * ID and append the view widget's control into the control group. When
+ * the view widget is destroyed also its control group is destroyed and
+ * the control group ID is free to be used again. If an already reserved
+ * control group ID is passed an osncore::AlfException is thrown with
+ * error code osncore::EInvalidArgument.
+ *
+ * If the application contains multiple views it is possible to apply
+ * transitions from a view widget to another by manipulating the
+ * associated control groups.
+ *
+ * View widget is bound to a single display. If no display is given as a
+ * construction parameter then primary display of the UI Accelerator
+ * Toolkit environment is used. If no display is given and there is no
+ * primary display in the environment an osncore::AlfException is thrown
+ * with error code osncore::EDisplayNotFound.
+ *
+ * @see Alf::IAlfViewWidget
+ * @see Alf::IAlfContainerWidget
+ * @see CAlfControlGroup
+ *
+ * @exception osncore::AlfException Thrown with error code
+ * osncore::EInvalidArgument if a control group with the
+ * provided id already exists and with error code
+ * osncore::EDisplayNotFound if no display object is provided
+ * and there is no primary display.
+ *
+ * @exception osncore::AlfWidgetException Thrown with error code
+ * osncore::EInvalidArgument if both node and declaration
+ * file path have non-null value at the same time.
+ * @exception osncore::AlfWidgetException Thrown with error code
+ * osncore::EInvalidWidgetInstanceId if an attempt is made to
+ * create a view widget with the Instance ID of an existing widget.
+ *
+ * @param aInstanceId Id or name of the view widget to be created.
+ * @param aControlGroupId Id of the control group to be created. This has
+ * to be unique and unreserved control group id.
+ * @param aNode Declarative UI node which is used to construct
+ * and configure this widget from a declaration.
+ * Default implementation if aNode is NULL.
+ * @param aDisplay Display in which the view widget is maintained.
+ * Primary display is used if no display is
+ * provided.
+ * @param aFilePath File handle to an XML file describing the
+ * presentation of the view widget. Both aNode and
+ * aFilePath cannot be non-null values at the same
+ * time.
+ * @param aCustomData Custom data to be passed to the widget during
+ * construction.
+ *
+ * @return Pointer to a new view widget or 0. The created widget is
+ * maintained in the UI Accelerator Toolkit environment.
+ */
+ virtual IAlfViewWidget* createViewWidget(
+ const char* aInstanceId,
+ int aControlGroupId,
+ DuiNode* aNode=0,
+ CAlfDisplay* aDisplay=0,
+ const char* aFilePath=0,
+ AlfCustomInitDataBase* aCustomData=0) = 0;
+
+ /**
+ * Constructs a new widget.
+ *
+ * Each widget will have to be added into a container widget. The root
+ * container widget of an application user interface view can be created
+ * with the createViewWidget() method. The widget hierarchy can be
+ * constructed from the root container widget by using container and leaf
+ * widgets. When a new widget is created a container has to be specified
+ * that is going to contain the created widget. The container can be a
+ * root container widget or some of the inner container widgets in the
+ * widget containment hierarchy.
+ *
+ * Widget's control is bound to a display object when this widget is first
+ * shown. The widget is bound to the same display that was given in the
+ * constructor of its containing view.
+ *
+ * @see createViewWidget()
+ * @see Alf::IAlfContainerWidget
+ *
+ * @exception osncore::AlfWidgetException Thrown with error code
+ * osncore::EInvalidArgument if both node and declaration file
+ * path have non-null value at the same time.
+ * @exception osncore::AlfWidgetException Thrown with error code
+ * osncore::EInvalidWidgetInstanceId if an attempt is made to
+ * create a widget with the Instance ID of an existing widget.
+ *
+ * @param aLoadId Widget type identifier.
+ * @param aInstanceId Id or name of the widget to be created.
+ * @param aContainerWidget Reference to a container widget that will
+ * contain the created widget.
+ * @param aNode Declarative UI node which is used to construct
+ * and configure this widget from a declaration.
+ * Default implementation if aNode is NULL.
+ * @param aFilePath File handle to an XML file describing the
+ * presentation of the widget. Both aNode and
+ * aFilePath cannot be non-null
+ * values at the same time.
+ * @param aCustomData Custom data to be passed to the widget during
+ * construction.
+ *
+ * @return Pointer to the created widget or 0. The created widget is
+ * maintained in the UI Accelerator Toolkit environment.
+ */
+ virtual IAlfWidget* createWidget(
+ const char* aLoadId,
+ const char* aInstanceId,
+ IAlfContainerWidget& aContainerWidget,
+ DuiNode* aNode=0,
+ const char* aFilePath=0,
+ AlfCustomInitDataBase* aCustomData=0) = 0;
+
+ /**
+ * Destroy widget
+ *
+ * @param aWidget A widget to be destroyed.
+ * @return -1, if widget was not found, 0 otherwise.
+ */
+ virtual int destroyWidget(IAlfWidget* aWidget) = 0;
+
+ /**
+ * Find named widgets owned by the factory
+ *
+ * @param aWidgetName A widget name to be found.
+ *
+ * @return The widget pointer if it is found, 0 otherwise.
+ */
+ virtual IAlfWidget* findWidget(const char* aWidgetName)const = 0;
+
+
+ /**
+ * Append widgets into the widget factory
+ *
+ * @param aWidget A widget to be added
+ *
+ * @return -1, if widget was already added to the factory, 0 otherwise.
+ */
+ virtual int appendWidget(IAlfWidget* aWidget) = 0;
+
+ /**
+ * Create a widget model
+ *
+ * @param aLoadId Implementation to load
+ * @param aCustomData Custom data to be passed to the model during
+ * construction.
+ * @return Pointer to widget or 0. Ownership is transferred to caller.
+ */
+ virtual IAlfModel* createModel(
+ const char* aLoadId,
+ AlfCustomInitDataBase* aCustomData=0) = 0;
+
+ /**
+ * Create a control
+ *
+ * @param aLoadId Load identifier
+ * @param aInstanceId Instance identifier
+ * @param aDisplay Display where control is bound
+ * @param aCustomData Custom data to be passed to the control during
+ * construction.
+ * @return Pointer to created control or 0.
+ */
+ virtual IAlfWidgetControl* createControl(
+ const char* aLoadId,
+ const char* aInstanceId,
+ CAlfDisplay* aDisplay=0,
+ AlfCustomInitDataBase* aCustomData=0) = 0;
+
+ /**
+ * Create an element
+ *
+ * @param aLoadId Load identifier
+ * @param aInstanceId Instance identifier
+ * @param aControl Control Use by element contructor
+ * @param aCustomData Custom data to be passed to the element during
+ * construction.
+ * @return Pointer to created element or 0.
+ */
+ virtual IAlfElement* createElement(
+ const char* aLoadId,
+ const char* aInstanceId,
+ IAlfWidgetControl& aControl,
+ DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0) = 0;
+
+ /**
+ * Create a visual template
+ *
+ * @param aLoadId Load identifier
+ * @param aInstanceId Instance identifier
+ * @param aCustomData Custom data to be passed to the visual template
+ * during construction.
+ * @return Pointer to created visual template or 0.
+ */
+ virtual IAlfVisualTemplate* createVisualTemplate(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0) = 0;
+
+ /**
+ * Create an event handler
+ *
+ * @param aLoadId Load identifier
+ * @param aInstanceId Instance identifier
+ * @param aCustomData Custom data to be passed to the event handler
+ * during construction.
+ * @return Pointer to created event handler or 0.
+ */
+ virtual IAlfWidgetEventHandler* createEventHandler(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0) = 0;
+
+ /**
+ * Create an layoutmanager.
+ *
+ * @param aLoadId Load identifier
+ * @param aInstanceId Instance identifier
+ * @param aNode declaration node.
+ * @param aCustomData Possible custom initialization data for the
+ * layoutmanager.
+ * @return Pointer to created layout manager or 0.
+ */
+ virtual IAlfLayoutManager* createLayoutManager(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0) = 0;
+
+ /**
+ * Application can register a custom factory to create custom factory
+ * products.
+ * Ownership is transferred to a widget factory chain,
+ * if call is successfull.
+ *
+ * @exception std::bad_alloc
+ * @param aFactory Custom factory
+ * @return void
+ */
+ virtual void registerCustomWidgetFactory(IAlfFactoryPlugin* aFactory) = 0;
+ };
+
+ } // namespace Alf
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/alf_widgetmodel_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<api id="50965c680089dd7c554b4cac018089b6" dataversion="1.0">
+<name>alf widgetmodel api</name>
+<description>Alf WidgetModel API</description>
+<type>c++</type>
+<subsystem>alfwidgetmodel</subsystem>
+<libs><lib name="alfwidgetmodel.lib"/>
+</libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: ALF widget model API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// To be removed once migration to the new internal export dir has been done
+
+../inc/alf/ialfbranch.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfbranch.h)
+../inc/alf/ialfcontainer.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfcontainer.h)
+../inc/alf/ialfelement.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfelement.h)
+
+../inc/alf/ialfwidget.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfwidget.h)
+../inc/alf/ialfinterfacebase.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfinterfacebase.h)
+../inc/alf/alfvarianttype.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfvarianttype.h)
+
+../inc/alf/ialfmap.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfmap.h)
+../inc/alf/ialfmodel.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfmodel.h)
+../inc/alf/ialfmodelchangeobserver.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfmodelchangeobserver.h)
+../inc/alf/ialfnavigation.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfnavigation.h)
+
+../inc/alf/ialflayoutmanager.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialflayoutmanager.h)
+../inc/alf/alflayoutmanager.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alflayoutmanager.h)
+../inc/alf/alfgridlayoutmanager.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfgridlayoutmanager.h)
+../inc/alf/alfanchorlayoutmanager.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfanchorlayoutmanager.h)
+../inc/alf/ialflayoutpreferences.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialflayoutpreferences.h)
+../inc/alf/ialfvarianttype.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfvarianttype.h)
+../inc/alf/ialfsortfunction.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfsortfunction.h)
+
+
+../inc/alf/ialfwidgetcontrol.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfwidgetcontrol.h)
+../inc/alf/ialfwidgeteventhandler.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfwidgeteventhandler.h)
+../inc/alf/alfwidgetcontrol.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfwidgetcontrol.h)
+../inc/alf/alfmodel.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfmodel.h)
+../inc/alf/alfmodel.inl MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfmodel.inl)
+
+../inc/alf/alfwidget.inl MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfwidget.inl)
+../inc/alf/alfwidgetcontrol.inl MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfwidgetcontrol.inl)
+
+
+../inc/alf/alfeventoutputsignalsubscriber.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfeventoutputsignalsubscriber.h)
+
+../inc/alf/alfelement.inl MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfelement.inl)
+
+../inc/alf/alfwidgeteventhandler.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfwidgeteventhandler.h)
+../inc/alf/alfwidgeteventhandler.inl MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfwidgeteventhandler.inl)
+
+
+../inc/alf/alfwidgetevents.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfwidgetevents.h)
+../inc/alf/ialfmodelbase.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfmodelbase.h)
+
+../inc/alf/alfwidgetenvextension.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfwidgetenvextension.h)
+../inc/alf/alfwidgetcommand.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfwidgetcommand.h)
+../inc/alf/ialfgridlayoutpolicy.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfgridlayoutpolicy.h)
+../inc/alf/alfflowlayoutmanager.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfflowlayoutmanager.h)
+../inc/alf/ialfflowlayoutpolicy.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfflowlayoutpolicy.h)
+../inc/alf/ialfappeventlistener.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialfappeventlistener.h)
+../inc/alf/attrproperty.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/attrproperty.h)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfanchorlayoutmanager.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2007 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: anchor layout manager
+*
+*/
+
+
+#ifndef ALFANCHORLAYOUTMANAGER_H
+#define ALFANCHORLAYOUTMANAGER_H
+
+#include <osn/osndefines.h>
+#include <osn/osntypes.h>
+#include <memory>
+#include <alf/alflayoutmanager.h>
+#include <alf/alflayout.h>
+
+using std::auto_ptr;
+
+namespace Alf
+ {
+class IAlfWidgetControl;
+class AlfAnchorLayoutManagerImpl;
+
+/**
+ * @class AlfAnchorLayoutManager alfanchorlayoutmanager.h "alf/alfanchorlayoutmanager.h"
+ * Anchor layout manager
+ * Layout manager handles the layouting of child widgets in the container widget.
+ * It uses IAlfLayoutPreferences-interface (@see IAlfLayoutPreferences)
+ * of child widgets as a guide for laying out the widgets. The layoutmanager
+ * is set to the IAlfHostApi- interface (@see IAlfHostApi::setBaseLayout)
+ * createLayout-method should be the first call after creating the layoutmanager.
+ * @see IAlfLayoutPreferences
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfLayoutManager, IAlfLayoutPreferences
+ */
+class AlfAnchorLayoutManager : public AlfLayoutManager
+ {
+ friend class AlfAnchorLayoutManagerImpl;
+public:
+
+ /**
+ * Layout manager constructor
+ * @exception std::bad_alloc
+ */
+ OSN_IMPORT AlfAnchorLayoutManager();
+
+ /**
+ * virtual destructor
+ */
+ OSN_IMPORT virtual ~AlfAnchorLayoutManager();
+
+public:
+ //from IAlfLayoutManager
+
+ /**
+ * from IAlfLayoutManager
+ * Notifies the layout manager, that the child control's layout
+ * must be updated
+ *
+ * @param aControl control, which size has changed.
+ * @throw AlfVisualException(EInvalidVisual), if layout is not created.
+ */
+ virtual void updateChildLayout(CAlfWidgetControl* aControl);
+
+ /**
+ * from IAlfLayoutManager
+ * Notifies the layout manager, that the control's has been
+ * removed from the layout.
+ *
+ * @param aControl control, which has been removed from the layout.
+ * @throw AlfVisualException(EInvalidVisual), if layout is not created.
+ */
+ virtual void childRemoved(CAlfWidgetControl* aControl);
+public:
+protected:
+
+ OSN_IMPORT void doUpdateChildLayout(CAlfWidgetControl* aControl);
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ OSN_IMPORT virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+private: // data
+ auto_ptr<AlfAnchorLayoutManagerImpl> mData;
+ };
+
+ } // namespace Alf
+
+#endif // ALFANCHORLAYOUTMANAGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfelement.inl Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2007 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: Template interface getter for CAlfElement class.
+*
+*/
+
+
+// -----------------------------------------------------------------------------
+// Template getter for interfaces provided by the the element classes.
+// The type of the queried interface is specified by the
+// template parameter.
+// -----------------------------------------------------------------------------
+//
+template <class T>
+T* AlfElement::makeInterface( AlfElement* aElement )
+ {
+ if (aElement)
+ {
+ return static_cast< T* >( aElement->makeInterface( T::type() ) );
+ }
+ return 0;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfeventoutputsignalsubscriber.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 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: Event output signal subscriber interface
+*
+*/
+
+
+#ifndef ALFEVENTOUTPUTSIGNALSUBSCRIBER_H
+#define ALFEVENTOUTPUTSIGNALSUBSCRIBER_H
+
+#include <osn/osndefines.h>
+//using namespace osncore;
+
+namespace Alf
+ {
+
+/**
+ * Event output signal subscriber interface.
+ */
+class IAlfEventOutputSignalSubscriber
+ {
+public:
+ /**
+ * Called by event output signal. This method calls subscriber's callback method.
+ */
+ virtual void receiveSignal() = 0;
+ virtual ~IAlfEventOutputSignalSubscriber() {}
+ };
+
+/**
+ * Event output signal subscriber.
+ */
+template <class T>
+OSN_NONSHARABLE_CLASS( AlfEventOutputSignalSubscriber )
+ : public IAlfEventOutputSignalSubscriber
+ {
+public:
+ explicit AlfEventOutputSignalSubscriber(T& aSubscriber, void (T::*aFnc)(void))
+ :mSubscriber(aSubscriber), mFnc(aFnc) {}
+
+ void receiveSignal() {(mSubscriber.*mFnc)();}
+
+private: // data
+ // Subscriber
+ T& mSubscriber;
+ // Callback
+ void (T::*mFnc)(void);
+ };
+
+ } // namespace Alf
+
+#endif // ALFEVENTOUTPUTSIGNALSUBSCRIBER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfflowlayoutmanager.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2007 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: flow layoutmanager.
+*
+*/
+
+
+#ifndef ALFFLOWLAYOUTMANAGER
+#define ALFFLOWLAYOUTMANAGER
+
+#include <alf/alflayout.h>
+#include <osn/osndefines.h>
+#include <osn/osntypes.h>
+#include <memory>
+#include <alf/alflayoutmanager.h>
+
+using std::auto_ptr;
+
+namespace Alf
+ {
+class AlfFlowLayoutPolicyImpl;
+class AlfFlowLayoutPreferencesImpl;
+
+/** @class AlfFlowLayoutManager alfflowlayoutmanager.h "alf/alfflowlayoutmanager.h"
+ * Flow layout manager positions children next to each other either horizontally or
+ * vertically. The manager sizes the children by using the preferred sizes of the
+ * children. @see IAlfLayoutPreferences::getPreferredSize()
+ *
+ *
+ * Flow layout manager takes system wide layout mirroring into consideration.
+ * In western locales the visuals are layed out from left to right whereas
+ * in arabic locale for instance the visuals are layed out from right to left.
+ * Mirroring is considered only when the flow is horizontal. The layout manager
+ * will always lay its children from top to bottom.
+ *
+ * @interfaces IAlfLayoutManager, IAlfLayoutPreferences
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+
+class AlfFlowLayoutManager : public AlfLayoutManager
+ {
+public:
+ friend class AlfFlowLayoutPolicyImpl;
+ friend class AlfFlowLayoutPreferencesImpl;
+public:
+
+ /**
+ * layout manager constructor
+ *
+ * @exception std::bad_alloc
+ * @param aLayoutType type of layout used by this manager.
+ */
+ OSN_IMPORT AlfFlowLayoutManager();
+
+ /**
+ * virtual destructor
+ */
+ OSN_IMPORT virtual ~AlfFlowLayoutManager();
+
+public:
+ //from AlfLayoutManager
+
+ /**
+ * from AlfLayoutManager
+ * Notifies the layout manager, that the child control's layout
+ * must be updated.
+ *
+ * @param aControl control, which size has changed.
+ */
+ OSN_IMPORT virtual void updateChildLayout(CAlfWidgetControl* aControl);
+
+public:
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ OSN_IMPORT virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+protected:
+
+private: // data
+
+ auto_ptr<AlfFlowLayoutPolicyImpl> mData;
+ auto_ptr<AlfFlowLayoutPreferencesImpl> mPrefImpl;
+ };
+
+ } // namespace Alf
+
+#endif // ALFFLOWLAYOUTMANAGER
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfgridlayoutmanager.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2007 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: grid layout manager
+*
+*/
+
+
+#ifndef ALFGRIDLAYOUTMANAGER_H
+#define ALFGRIDLAYOUTMANAGER_H
+
+#include <osn/osndefines.h>
+#include <osn/osntypes.h>
+#include <memory>
+#include <alf/alflayoutmanager.h>
+#include <alf/alflayout.h>
+
+using std::auto_ptr;
+
+namespace Alf
+ {
+class IAlfWidgetControl;
+class AlfGridLayoutManagerImpl;
+class AlfGridLayoutPolicyImpl;
+
+/**
+ * @class AlfGridLayoutManager alfgridlayoutmanager.h "alf/alfgridlayoutmanager.h"
+ * Grid layout manager
+ * Layout manager handles the layouting of child widgets in the container widget.
+ * It uses IAlfLayoutPreferences-interface (@see IAlfLayoutPreferences)
+ * of child widgets as a guide for laying out the widgets. The layoutmanager
+ * is set to the IAlfHostApi- interface (@see IAlfHostApi::setBaseLayout)
+ * createLayout-method should be the first call after creating the layoutmanager.
+ * @see IAlfLayoutPreferences
+ * @see IAlfGridLayoutPolicy
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfLayoutManager, IAlfLayoutPreferences, IAlfGridLayoutPolicy
+ */
+class AlfGridLayoutManager : public AlfLayoutManager
+ {
+ friend class AlfGridLayoutManagerImpl;
+ friend class AlfGridLayoutPolicyImpl;
+public:
+
+ /**
+ * Layout manager constructor
+ * @exception std::bad_alloc
+ */
+ OSN_IMPORT AlfGridLayoutManager();
+
+ /**
+ * virtual destructor
+ */
+ OSN_IMPORT virtual ~AlfGridLayoutManager();
+
+public:
+ //from IAlfLayoutManager
+
+ /**
+ * from IAlfLayoutManager
+ * Notifies the layout manager, that the child control's layout
+ * must be updated
+ *
+ * @param aControl control, which size has changed.
+ * @throw AlfVisualException(EInvalidVisual), if layout is not created.
+ */
+ virtual void updateChildLayout(CAlfWidgetControl* aControl);
+
+ /**
+ * from IAlfLayoutManager
+ * Notifies the layout manager, that the control's has been
+ * removed from the layout.
+ *
+ * @param aControl control, which has been removed from the layout.
+ * @throw AlfVisualException(EInvalidVisual), if layout is not created.
+ */
+ virtual void childRemoved(CAlfWidgetControl* aControl);
+public:
+protected:
+
+ OSN_IMPORT void doUpdateChildLayout(CAlfWidgetControl* aControl);
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ OSN_IMPORT virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+private: // data
+ auto_ptr<AlfGridLayoutManagerImpl> mData;
+ auto_ptr<AlfGridLayoutPolicyImpl> mDataPolicy;
+ };
+
+ } // namespace Alf
+
+#endif // ALFGRIDLAYOUTMANAGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alflayoutmanager.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,243 @@
+/*
+* Copyright (c) 2007 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: interface for layout managers
+*
+*/
+
+
+#ifndef ALFLAYOUTMANAGER
+#define ALFLAYOUTMANAGER
+
+#include <osn/osndefines.h>
+#include <osn/osntypes.h>
+#include <memory>
+#include <alf/ialflayoutmanager.h>
+#include <alf/alflayout.h>
+
+using std::auto_ptr;
+
+namespace Alf
+ {
+class IAlfWidgetControl;
+class AlfLayoutManagerImpl;
+class IAlfLayoutPreferences;
+
+
+/**
+ * @class AlfLayoutManager alflayoutmanager.h "alf/alflayoutmanager.h"
+ * The interface for layout managers
+ *
+ * Layout manager handles the layouting of child widgets in the container widget.
+ * It uses IAlfLayoutPreferences-interface (@see IAlfLayoutPreferences)
+ * of child widgets as a guide for laying out the widgets. The layoutmanager
+ * is set to the IAlfHostApi- interface (@see IAlfHostApi::setBaseLayout)
+ * createLayout-method should be the first call after creating the layoutmanager.
+ *
+ * Layout manager may also provide information about the layout preferences of its
+ * children. If this is supported the layout manager will combine the layout preferences
+ * of its children taking into consideration the technique used to lay out the children
+ * using the layout manager. This will provide information about the whole display area
+ * occupied by the layout manager. For instance vertical flow layout manager will provide
+ * preferred size area of its children by summing their heights and providing the maximum
+ * width among the children.
+ *
+ * @code
+ * // Create layout manager interface.
+ * IAlfLayoutManager* layoutManager = IAlfInterfaceBase::makeInterface<IAlfLayoutManager>(control);
+ *
+ * // See if layout preferences is supported in the given layout manager.
+ * IAlfLayoutPreferences* layoutPreferences = IAlfInterfaceBase::makeInterface<IAlfLayoutPreferences>(layoutManager);
+ *
+ * if(layoutPreferences != 0)
+ * {
+ * TAlfXYMetric preferredSize;
+ * // This will report the preferred size of the layout by combining together preferred sizes of its children.
+ * bool result = layoutPreferences->getPreferredSize(preferredSize);
+ * }
+ * @endcode
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfLayoutManager, IAlfLayoutPreferences
+ */
+class AlfLayoutManager : public IAlfLayoutManager
+ {
+public:
+
+ /**
+ * layout manager constructor
+ *
+ * @param aLayoutType type of layout used by this manager.
+ */
+ OSN_IMPORT AlfLayoutManager(TAlfLayoutType aLayoutType);
+
+ /**
+ * virtual destructor
+ */
+ OSN_IMPORT virtual ~AlfLayoutManager();
+
+public:
+
+ /**
+ * @return the owner control of the layoutmanager.
+ */
+ OSN_IMPORT CAlfWidgetControl& owner() const;
+
+ /**
+ * returns the control at aIndex.
+ *
+ * @param aIndex index for the control.
+ * @return control at aIndex
+ */
+ OSN_IMPORT CAlfWidgetControl* getControl(int aIndex) const;
+
+ /**
+ * returns the count of controls inside layoutmanager.
+ *
+ * @return count of controls inside layoutmanager
+ */
+ OSN_IMPORT int count() const;
+
+public:
+ //from IAlfLayoutManager
+
+ /**
+ * creates the layout used by this layoutmanager.
+ *
+ * @param aOwner, owner-control of the the created layout.
+ * @param aParentLayout parent for the created layout
+ * @param aLayoutIndex index, where created visual should be placed in the parent layout.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if aLayoutIndex is out of bounds.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::ECanNotCreateVisual if the layout creation failed.
+ */
+ OSN_IMPORT virtual void createLayout(CAlfWidgetControl& aOwner,
+ CAlfLayout* aParentLayout, int aLayoutIndex);
+
+ /**
+ * from IAlfLayoutManager
+ * Returns the layout used by this layoutmanager.
+ *
+ * @return layout used by this layoutmanager.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if layout is not created.
+ */
+ OSN_IMPORT virtual CAlfLayout& getLayout() const;
+
+ /**
+ * from IAlfLayoutManager
+ * Notifies the layout manager, that the child control's layout
+ * must be updated
+ *
+ * @param aControl control, which size has changed.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if layout is not created.
+ *
+ */
+ OSN_IMPORT virtual void updateChildLayout(CAlfWidgetControl* aControl);
+
+ /**
+ * from IAlfLayoutManager
+ * Notifies the layout manager, that all the child control's layouts
+ * must be updated.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if layout is not created.
+ */
+ OSN_IMPORT virtual void updateChildrenLayout();
+
+ /**
+ * from IAlfLayoutManager
+ * Notifies the layout manager, that the control's has been
+ * removed from the layout.
+ *
+ * @param aControl control, which has been removed from the layout.
+ * @exception osncore::AlfVisualException Thrown with error code osncore::EInvalidVisual if layout is not created.
+ */
+ OSN_IMPORT virtual void childRemoved(CAlfWidgetControl* aControl);
+
+protected:
+ /**
+ * Notifies the layout manager, that the child control's layout
+ * must be updated. Called in updateChildLayout for the updated control
+ * and in updateChildrenLayout for all the controls in the layout.
+ *
+ * @param aControl control, which size has changed.
+ */
+ OSN_IMPORT virtual void doUpdateChildLayout(CAlfWidgetControl* aControl);
+
+ /**
+ * returns the rect of the control.
+ *
+ * @param aControl, control, which size is queried.
+ * @param aRect will receive the rect of aControl, if return value is true.
+ * @return true, if control rect was fetched, false, if the control hasn't
+ * got a visualization.
+ */
+ OSN_IMPORT bool controlRect(
+ CAlfWidgetControl& aControl, TAlfRealRect& aRect);
+
+ /**
+ * sets the size and position to the control
+ *
+ * @param aControl, control, which size and position is being set.
+ * @param aRect, rect for aControl
+ */
+ OSN_IMPORT void setControlRect(
+ CAlfWidgetControl& aControl, const TAlfRealRect &aRect);
+
+ /**
+ * sets the position to the control
+ *
+ * @param aControl, control, which position is being set.
+ * @param aPos, position for aControl
+ */
+ OSN_IMPORT void setControlPosition(
+ CAlfWidgetControl& aControl, const TAlfRealPoint& aPos);
+
+ /**
+ * sets the size to control
+ *
+ * @param aControl, control, which size is being set.
+ * @param aSize, new size for aControl.
+ */
+ OSN_IMPORT void setControlSize(
+ CAlfWidgetControl& aControl, const TAlfRealPoint &aSize);
+
+ /**
+ * returns layout preferences for aControl
+ *
+ * @return layout preferences for aControl.
+ */
+ OSN_IMPORT const IAlfLayoutPreferences* getLayoutPreferences(
+ CAlfWidgetControl* aControl) const;
+
+public:
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ OSN_IMPORT virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+private: // data
+
+ auto_ptr<AlfLayoutManagerImpl> mData;
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFLAYOUTMANAGER
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfmodel.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,277 @@
+/*
+* 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 ALFMODEL_H
+#define ALFMODEL_H
+
+
+//INCLUDES
+#include <osn/osncommon.h>
+#include <osn/osndefines.h>
+#include <alf/ialfmodel.h>
+#include <memory>
+namespace osncore
+ {
+template <class T> class AlfPtrVector;
+ }
+namespace std
+ {
+template <class T> class auto_ptr;
+ }
+
+using namespace osncore;
+using namespace std;
+
+namespace Alf
+ {
+
+/* Forward declarations*/
+class IAlfVariantType;
+class IAlfModelChangeObserver;
+class AlfModelOperation;
+class AlfWidgetImpl;
+class AlfModelImpl;
+class IfId;
+
+
+/** @class AlfModel alfmodel.h "alf/alfmodel.h"
+ * Concerete implementation of the IAlfModel
+ *
+ * @interfaces IAlfModel
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfModel : public IAlfModel
+ {
+public:
+
+ /**
+ * Constructor.
+ * @exception std::bad_alloc
+ *
+ * @param aDataSource - datasource from where the model is initialized,
+ * ownership is transferred to the model
+ * @since S60 ?S60_version
+ * @return New object.
+ */
+ OSN_IMPORT AlfModel( IAlfVariantType* aDataSource);
+
+
+ /**
+ * The Default constructor.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfModel();
+
+ /**
+ * Class Destructor.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT virtual ~AlfModel();
+
+
+ //IAlfModel virtual Methods
+
+ /**
+ * From IAlfModel.
+ * Add a new observer to be notified of any changes in the model.
+ *
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ * @param aObserver The model change observer to be added.
+ *
+ * @return void
+ */
+ OSN_IMPORT virtual void addModelChangeObserver(
+ IAlfModelChangeObserver &aObserver);
+
+ /**
+ * From IAlfModel.
+ * Remove an observer which is added to get notified of any changes
+ * in the model.
+ *
+ * @since S60 ?S60_version
+ * @param aObserver The model change observer to be removed.
+ *
+ * @return void
+ */
+ OSN_IMPORT virtual void removeModelChangeObserver(
+ IAlfModelChangeObserver &aObserver);
+
+
+ /**
+ * From IAlfModel.
+ * Get the root data object of this model.
+ *
+ * @since S60 ?S60_version
+ * @return The root data object.
+ */
+ OSN_IMPORT virtual IAlfVariantType* data() const;
+
+ /**
+ * From IAlfModel.
+ * Clears the Model.
+ *
+ * @since S60 ?S60_version
+ * @return void
+ */
+ OSN_IMPORT virtual void clearModel();
+
+
+ /**
+ * Api to change the model completely at one short. From IAlfModel
+ *
+ * @since S60 ?S60_version
+ * @param aData The new data.
+ */
+ OSN_IMPORT void setData(IAlfVariantType* aData);
+
+ /**
+ * Change a given of data fields in the model . All model change
+ * observers are notified about the change.
+ * @exception osncore::AlfDataException Thrown with the error code
+ * osncore::EInvalidModelOperation when the operation fails.
+ *
+ * @since S60 ?S60_version
+ * @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 to be set
+ */
+ OSN_IMPORT void updateData(
+ int aNumContainerIndices,
+ int* aContainerIndices,
+ IAlfVariantType* aData ) ;
+
+ /**
+ * Add a number of data fields in the model data. All model change
+ * observers are notified about the change.
+ *
+ * @exception osncore::AlfDataException Thrown with the error code
+ * osncore::EInvalidModelOperation when the operation fails.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ OSN_IMPORT void addData(
+ int aNumContainerIndices,
+ int* aContainerIndices,
+ IAlfVariantType* aData );
+
+ /**
+ * Remove a number of data fields in the model data. All model change
+ * observers are notified about the change.
+ * @exception osncore::AlfDataException Thrown with the error code
+ * osncore::EInvalidModelOperation when the operation fails.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ OSN_IMPORT void removeData(
+ int aNumContainerIndices,
+ int* aContainerIndices) ;
+
+ /**
+ * Api for executing batch operations
+ *
+ * @exception osncore::AlfDataException Thrown with the error code
+ * osncore::EInvalidModelOperation when the operation fails.
+ *
+ * @since S60 ?S60_version
+ * @param aOperationsArray - An RPOinterArray containing the list of
+ * operations to be executed in batch.
+ */
+ OSN_IMPORT void executeOperations(
+ AlfPtrVector<AlfModelOperation>& aOperationsArray);
+
+ /**
+ * Api for executing one operation at a Time
+ *
+ * @since S60 ?S60_version
+ * @param aOperation - An Operation to be executed on the model.
+ */
+ OSN_IMPORT void executeOperation(AlfModelOperation* aOperation);
+
+ /**
+ * Notifies the observers, that the model has changed.
+ */
+ OSN_IMPORT void notifyModelChanged();
+
+
+// from base class IAlfInterfaceBase
+
+ /**
+ * From IAlfInterfaceBase.
+ * Getter for interfaces provided by the widget classes.
+ * Derived classes should always call the base class method
+ * from the overridden makeInterface.
+ *
+ * @since S60 ?S60_version
+ * @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 );
+
+
+protected:
+
+private:
+ /**
+ * Internal addDataL method .
+ * @param aAddOperation - An Addoperation
+ * @since S60 ?S60_version
+ */
+ void addData(AlfModelOperation* aAddOperation);
+
+ /**
+ * Internal removeDataL method .
+ * @param aRemoveOperation - A remove operation
+ * @since S60 ?S60_version
+ */
+ void removeData(AlfModelOperation* aRemoveOperation);
+
+ /**
+ * Internal updateDataL method .
+ * @param aUpdateOperation - An update operation
+ * @since S60 ?S60_version
+ */
+ void updateData(AlfModelOperation* aUpdateOperation);
+
+private:
+
+ auto_ptr<AlfModelImpl> mData;
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFMODEL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfmodel.inl Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2007 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: The base class for all widgets.
+*
+*/
+
+
+// -----------------------------------------------------------------------------
+// Template getter for interfaces provided by the widget, the control,
+// or the model. The type of the queried interface is specified by the
+// template parameter.
+// -----------------------------------------------------------------------------
+//
+template <class T>
+T* AlfModel::makeInterface( AlfModel* aWidget )
+ {
+ return static_cast< T* >( AlfModel::makeInterface( aWidget, T::type() ) );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfvarianttype.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1102 @@
+/*
+* 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 ALFVARIANTTYPE_H
+#define ALFVARIANTTYPE_H
+
+
+// INCLUDES
+#include <e32def.h>
+#include <osn/osndefines.h>
+#include <osn/osncommon.h>
+#include <alf/ialfvarianttype.h>
+#include <alf/ialfcontainer.h>
+#include <alf/ialfmap.h>
+#include <alf/ialfbranch.h>
+#include <memory>
+#include <alf/ialfsortfunction.h>
+
+
+namespace osncore
+ {
+class UString;
+ }
+namespace std
+ {
+template <class T> class auto_ptr;
+ }
+
+using namespace osncore;
+using std::auto_ptr;
+
+namespace Alf
+ {
+
+// FORWARD DECLARATIONS
+class IAlfContainer;
+class IAlfMap;
+class AlfBranch;
+class AlfVariantDataImpl;
+class AlfContainerDataImpl;
+class AlfMapDataImpl;
+class AlfBranchDataImpl;
+class IAlfModelBase;
+// CLASS DECLARATIONS
+
+/**
+ * @class AlfVariantType alfvarianttype.h "alf/alfvarianttype.h"
+ * Concrete implementation of the variant data type interface.
+ * AlfVariantType can hold data of integer,real,string and unsigned integer types.
+ * @see IAlfVariantType
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfVariantType: public IAlfVariantType
+ {
+public:
+
+ /**
+ * Constructor for variant data type creation for a descriprtor type of data
+ * @exception std::bad_alloc
+ *
+ * @param aValue - Descriptor to be assigned for the variant data
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfVariantType(const UString& aValue);
+
+
+ /**
+ * Constructor for variant data type creation for a integer type of data
+ * @exception std::bad_alloc
+ *
+ * @param aValue - integer to be assigned for the variant data
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfVariantType(const int& aValue);
+
+
+ /**
+ * Constructor for variant data type creation for a Unsigned integer type of data
+ * @exception std::bad_alloc
+ *
+ * @param aValue - unsigned integer to be assigned for the variant data
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfVariantType(const uint& aValue);
+
+
+ /**
+ * Constructor for variant data type creation for a real type of data
+ * @exception std::bad_alloc
+ *
+ * @param aValue - Real value to be assigned for the variant data
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfVariantType(const double& aValue);
+
+
+ /**
+ * Constructor for variant data type creation for a user defined type of data
+ * @exception std::bad_alloc
+ *
+ * @param aValue - IAlfModelBase* to be assigned for the variant data
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfVariantType(IAlfModelBase* aValue) ;
+
+ /**
+ * Constructor for variant data type creation for a bool type of data
+ * @exception std::bad_alloc
+ *
+ * @param aValue - Boolean value to be assigned for the variant data
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfVariantType(const bool& aValue);
+
+ //from IAlfVariantType Interface
+ /**
+ * Set the Data the variantData. From IAlfVariantType Interface
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aValue
+ * is of invalid type.
+ * @exception std::bad_alloc
+ *
+ * @param aValue The new value.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void set(IAlfVariantType& aValue);
+
+ /**
+ * Get the data type.From IAlfVariantType Interface
+ *
+ * @since S60 ?S60_version
+ * @return The data type.
+ */
+ OSN_IMPORT IAlfVariantType::Type type() const;
+
+ /**
+ * Get the data value as an bool .From IAlfVariantType Interface
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aValue
+ * is not of boolean type.
+ *
+ * @return bool data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT bool boolean() const;
+
+ /**
+ * Get the data value as an Integer .From IAlfVariantType Interface
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aValue
+ * is not of integer type.
+ *
+ * @return Integer data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT int integer() const;
+
+ /**
+ * Get the data value as unsigned int.From IAlfVariantType Interface
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aValue
+ * is not of unsigned integer type.
+ *
+ * @return unsigned integer value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT uint uinteger() const;
+
+ /**
+ * Get the data value as an bool .From IAlfVariantType Interface
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aValue
+ * is not of real type.
+ *
+ * @return real data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT double real() const;
+
+ /**
+ * Get the data value as an Descriptor .From IAlfVariantType Interface
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aValue
+ * is not of string type.
+ *
+ * @return string data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT const UString& string() const;
+
+ /**
+ * Get the data value as an Container .From IAlfVariantType Interface.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfVariantType is not a container.
+ *
+ * @return AlfContainer .
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfContainer* container();
+
+ /**
+ * Get the data value as Map .From IAlfVariantType Interface.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfVariantType is not a map.
+ *
+ * @return Map
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfMap* map() ;
+
+ /**
+ * Get the data value as Branch .From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfVariantType is not a branch.
+ *
+ * @return Map
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfBranch* branch() ;
+
+ /**
+ * Get the data value as a User Defined Data Pointer.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aValue
+ * is not of custom type.
+ *
+ * @return IAlfModelBase interface.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfModelBase* customData();
+
+ /**
+ * Destructor
+ *
+ * @return
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT ~AlfVariantType();
+
+
+ /**
+ * The default constructor.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfVariantType();
+
+ /**
+ * Equality comparison operator.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if aValue
+ * is of invalid type.
+ *
+ * @param aOther object to compare against.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT bool operator==(const IAlfVariantType& aOther) const;
+
+private:
+
+
+ /**
+ * 2nd Phase Constructor
+ *
+ * @since S60 ?S60_version
+ * @param aType
+ */
+ void construct(Type aType);
+
+
+private:
+ //data owned
+ auto_ptr<AlfVariantDataImpl> mVarData;
+
+ };
+
+
+/**
+ * @class AlfVariantType alfvarianttype.h "alf/alfvarianttype.h"
+ * Concrete implementation of the variant data type interface.
+ * Simple default container of variant types.
+ * @see IAlfContainer
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfContainer : public IAlfContainer
+ {
+public:
+
+ /**
+ * Constructor for creating a variant data type which can store a alfcontainer
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfContainer();
+
+ /**
+ * Destructor
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT ~AlfContainer();
+
+ //IAlfContainer APIs
+
+ /**
+ * Adds a variantData item into the container .From IAlfContainer interface
+ * @aData variant data to be added into the container. Ownership is transferred
+ * if the method completes without exceptions. If there is an exception
+ * (e.g. due to out of memory), the client code is responsible for cleaning up the object.
+ * @exception std::bad_alloc
+ *
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void addItem(IAlfVariantType* aData);
+
+ /**
+ * Adds a variantData item into the container .From IAlfContainer interface
+ * @aIndex index where the data is added
+ * @aData variant data to be added into the container. Ownership is transferred
+ * if the method completes without exceptions. If there is an exception
+ * (e.g. due to out of memory), the client code is responsible for cleaning up the object.
+ * @exception std::bad_alloc
+ *
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void addItem(uint aIndex, IAlfVariantType* aData);
+
+ /**
+ * Gets the Number of items in the container . From IAlfContainer interface
+ *
+ * @return number of items in the container
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT int count();
+
+ /**
+ * Gets the Item at a given index in the container From IAlfContainer interface
+ * @param aIndex - index at which the element is required
+ * @return item as a MlfVariantType
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfVariantType* item(uint aIndex);
+
+ /**
+ * Clones the entire container From IAlfContainer interface
+ * @exception std::bad_alloc
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if
+ * there is an invalid data type in the container.
+ *
+ * @return the cloned container
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfContainer* clone();
+
+
+ /**
+ * Removes an item from given index in the container. From IAlfContainer interface
+ * @param aIndex - index at which the element is to be removed.
+ * @return item as a IAlfVariantType
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void removeItem(uint aIndex);
+
+ /**
+ * Clear the Container. From IAlfContainer interface
+ *
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void clear() ;
+
+ /**
+ * Replace an item from given index in the container.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidContainerOperation if
+ * the replaceItem fails.
+ *
+ * @param aIndex - index at which the element is to be replaced
+ * @param aNewData - new Data to be replaced
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void replaceItem(uint aIndex, IAlfVariantType* aNewData );
+
+ /**
+ * sorts the container using user defined sort function.
+ *
+ * @param aSortFunction - sort function.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void sort( const IAlfSortFunction& aSortFunction );
+
+ //from IAlfVariantType Interface
+ /**
+ * Set the Data the variantData. From IAlfVariantType Interface.
+ * Always throws an exception always.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidContainerOperation always.
+ * Use the addItem API.
+ *
+ * @param aValue The new value.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void set(IAlfVariantType& aValue);
+
+ /**
+ * Get the data type.From IAlfVariantType Interface
+ *
+ * @return The data type.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfVariantType::Type type() const;
+
+ /**
+ * Get the data value as an bool .From IAlfVariantType Interface.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfContainer is not boolean.
+ *
+ * @return bool data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT bool boolean() const;
+
+ /**
+ * Get the data value as an Integer .From IAlfVariantType Interface.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfContainer is not an integer.
+ *
+ * @return Integer data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT int integer() const;
+
+ /**
+ * Get the data value as unsigned int.From IAlfVariantType Interface.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfContainer is not an unsigned integer.
+ *
+ * @return unsigned integer data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT uint uinteger() const;
+
+ /**
+ * Get the data value as an bool .From IAlfVariantType Interface.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfContainer is not a real value.
+ *
+ * @return real data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT double real() const;
+
+ /**
+ * Get the data value as an Descriptor .From IAlfVariantType Interface.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfContainer is not a string.
+ *
+ * @return string data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT const UString& string() const;
+
+ /**
+ * Get the data value as an Conatiner .From IAlfVariantType Interface.
+ *
+ * @return AlfContainer .
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfContainer* container();
+
+ /**
+ * Get the data value as Map .From IAlfVariantType Interface.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfContainer is not a map.
+ *
+ * @return Map
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfMap* map();
+
+ /**
+ * Get the data value as Branch .From IAlfVariantType Interface.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfContainer is not a map.
+ *
+ * @return Map
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfBranch* branch();
+
+ /**
+ * Get the data value as a User Defined Data Pointer.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfContainer is not a custom data type.
+ *
+ * @return IAlfModelBase interface.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfModelBase* customData();
+
+ /**
+ * Equality comparison operator.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidContainerOperation always.
+ *
+ * @param aOther object to compare against.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT bool operator==(const IAlfVariantType& aOther) const;
+private:
+ void construct();
+ //Data owned
+ auto_ptr<AlfContainerDataImpl> mContainerData;
+
+ };
+
+/**
+ * @class AlfMap alfvarianttype.h "alf/alfvarianttype.h"
+ * Concrete implementation of the variant data type interface.
+ * Simple map of variant types.The map is contains data and a key.
+ * @see IAlfMap
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfMap : public IAlfMap
+ {
+public:
+
+
+ /**
+ * 1st phase Constructor for creating a variant data type which can store a AlfMap
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfMap();
+
+
+
+ //IAlfContainer APIs
+
+ /**
+ * Gets the Number of items in the container . From IAlfContainer interface
+ *
+ * @return number of items in the container
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT int count() const;
+
+ /**
+ * Gets the Item at a given index in the container From IAlfContainer interface
+ * @param aIndex - index at which the element is required
+ * @return item as a MlfVariantType
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfVariantType* item(uint aIndex);
+
+ /**
+ * Clones the entire container From IAlfContainer interface
+ * @exception std::bad_alloc
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType if
+ * there is an invalid data type in the container.
+ *
+ * @return the cloned container
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfMap* clone();
+
+
+ /**
+ * Removes an item from given index in the container. From IAlfContainer interface.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidMapOperation if
+ * the removeItem fails.
+ *
+ * @param aIndex - index at which the element is to be removed
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void removeItem(uint aIndex);
+
+ /**
+ * Clear the Container. From IAlfContainer interface
+ *
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void clear() ;
+
+ /**
+ * Replace an item from given index in the container
+ * @exception std::bad_alloc
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidMapOperation if
+ * the replaceItem fails.
+ * @param aIndex - index at which the element is to be replaced
+ * @param aNewData - new Data to be replaced
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void replaceItem(uint aIndex, IAlfVariantType* aNewData );
+
+
+
+ //IAlfMap Interface APis
+
+ /**
+ * Gets the Item for a given name in the map. From IAlfContainer interface
+ * @param aName - name of the element that is required
+ * @return item as a IAlfVariantType
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfVariantType* item(const UString& aName);
+
+ /**
+ * Gets the index of the item by the given name.
+ * @param aName The name associated with requested item.
+ * @return The index corresponding to the name of the item.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT int itemIndex(const UString& aName);
+
+ /**
+ * Removes an item for a given Name in map. From IAlfContainer interface
+ * @exception std::bad_alloc
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidMapOperation if
+ * the removeItem fails.
+ *
+ * @param aName - name of the element that is to be removed
+ * @return item as a MlfVariantType
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void removeItem(const UString& aName);
+
+ /**
+ * Replace an item for a given name in the container
+ * @exception std::bad_alloc
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidMapOperation if
+ * the replaceItem fails.
+ *
+ * @param aName - name of the element that is to be replaced
+ * @param aNewData - new Data to be replaced
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void replaceItem(const UString& aName,IAlfVariantType* aNewData);
+
+ /**
+ * Adds a variantData item into the container .From IAlfContainer interface
+ * @exception std::bad_alloc
+ *
+ * @param aName - name of the data that needs to be added
+ * @param aData- variant data to be added into the container. Ownership is transferred
+ * if the method completes without exceptions. If there is an exception
+ * (e.g. due to out of memory), the client code is responsible for cleaning up the object.
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void addItem(IAlfVariantType* aData, const UString& aName);
+
+ /**
+ * Adds a variantData item into the container .From IAlfContainer interface
+ * @exception std::bad_alloc
+ *
+ * @aIndex index where the data is added
+ * @param aName - name of the data that needs to be added
+ * @param aData- variant data to be added into the container. Ownership is transferred
+ * if the method completes without exceptions. If there is an exception
+ * (e.g. due to out of memory), the client code is responsible for cleaning up the object.
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void addItem(uint aIndex, IAlfVariantType* aData, const UString& aName);
+
+ /**
+ * Gets the Name at a given index in the container
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidArrayIndex if
+ * aIndex is invalid.
+ *
+ * @param aIndex - index at which the name of the element in the map is required
+ * @return item name as a TPtr
+ * @since S60 ?S60_version
+ */
+ const UString& name(uint aIndex) const;
+
+ //class methods
+ /**
+ * Destructor
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT ~AlfMap();
+
+
+ //from IAlfVariantType Interface
+ /**
+ * Set the Data the variantData. From IAlfVariantType Interface.
+ * Always throws an exception always.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidMapOperation always.
+ * Use the addItem API.
+ * @param aValue The new value.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void set(IAlfVariantType& aValue);
+
+ /**
+ * Get the data type.From IAlfVariantType Interface
+ *
+ * @return The data type.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfVariantType::Type type() const;
+
+ /**
+ * Get the data value as an bool .From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfMap is not boolean.
+ *
+ * @return bool data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT bool boolean() const;
+
+ /**
+ * Get the data value as an Integer .From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfMap is not an integer.
+ *
+ * @return Integer data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT int integer() const;
+
+ /**
+ * Get the data value as unsigned int.From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfMap is not an unsigned integer.
+ *
+ * @return unsigned integer data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT uint uinteger() const;
+
+ /**
+ * Get the data value as an bool .From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfMap is not a real value.
+ *
+ * @return double data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT double real() const;
+
+ /**
+ * Get the data value as an Descriptor .From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfMap is not a string value.
+ *
+ * @return string data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT const UString& string() const;
+
+ /**
+ * Get the data value as an Conatiner .From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfMap is not a container.
+ *
+ * @return AlfContiner .
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfContainer* container();
+
+ /**
+ * Get the data value as Map .From IAlfVariantType Interface
+ *
+ * @return Map
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfMap* map();
+
+ /**
+ * Get the data value as Branch .From IAlfVariantType Interface
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfMap is not a branch.
+ *
+ * @return Branch
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfBranch* branch();
+
+ /**
+ * Get the data value as a User Defined Data Pointer.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfMap is not a custom data type.
+ *
+ * @return IAlfModelBase interface.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfModelBase* customData();
+
+ /**
+ * Equality comparison operator.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT bool operator==(const IAlfVariantType& aOther) const;
+
+private:
+ void construct();
+ //data
+ auto_ptr<AlfMapDataImpl> mMapDataImpl;
+ };
+
+/**
+ * @class AlfBranch alfvarianttype.h "alf/alfvarianttype.h"
+ * Concrete implementation of the variant data type interface.
+ * @see IAlfBranch
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfBranch: public IAlfBranch
+ {
+public:
+
+
+ /**
+ * Parameterized Constructor
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfBranch( IAlfMap* aData, IAlfMap* aChildData);
+
+ /**
+ * Default Constructor
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT AlfBranch();
+
+ /**
+ *
+ * @return
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfMap* data();
+
+ /**
+ *
+ * @param aData -
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void setData( IAlfMap* aData );
+
+ /**
+ *
+ * @param aIndex -
+ * @return .
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfVariantType* childData(int aIndex);
+
+ /**
+ *
+ * @param aIndex -
+ * @return .
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT const UString& childName(int aIndex);
+
+ /**
+ *
+ * @return .
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfMap* childData();
+
+ /**
+ *
+ * @param aChildData -
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void setChildData( IAlfMap* aChildData );
+
+ /**
+ *
+ * @return
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT uint childrenCount();
+
+ /**
+ * Destructor
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT ~AlfBranch();
+
+ /**
+ * sorts the branch using user defined sort function.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidBranchOperation if
+ * sorting fails.
+ *
+ * @param aSortFunction - sort function.
+ * return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void sort( const IAlfSortFunction& aSortFunction );
+
+ /**
+ * Function to Clone the Branch
+ * @exception std::bad_alloc
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidBranchOperation if
+ * cloning fails.
+ *
+ * @return
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfBranch* clone();
+
+
+ //from IAlfVariantType Interface
+ /**
+ * Set the Data the variantData. From IAlfVariantType Interface
+ * Always throws an exception always.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidBranchOperation always.
+ * Use the setData API.
+ *
+ * @param aValue The new value.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void set(IAlfVariantType& aValue);
+
+ /**
+ * Get the data type.From IAlfVariantType Interface
+ *
+ * @return The data type.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfVariantType::Type type() const;
+
+ /**
+ * Get the data value as an bool .From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfBranch is not boolean.
+ * @return bool data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT bool boolean() const;
+
+ /**
+ * Get the data value as an Integer .From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfBranch is not an integer.
+ *
+ * @return Integer data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT int integer() const;
+
+ /**
+ * Get the data value as unsigned int.From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfBranch is not an unsigned integer.
+ *
+ * @return unsigned integer data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT uint uinteger() const;
+
+ /**
+ * Get the data value as an bool .From IAlfVariantType Interface
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfBranch is not a real value.
+ *
+ * @return real data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT double real() const;
+
+ /**
+ * Get the data value as an Descriptor .From IAlfVariantType Interface
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfBranch is not a string value.
+ *
+ * @return string data value.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT const UString& string() const;
+
+ /**
+ * Get the data value as an Conatiner. From IAlfVariantType Interface
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfBranch is not a container.
+ *
+ * @return AlfContiner .
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfContainer* container();
+
+ /**
+ * Get the data value as Map. From IAlfVariantType Interface
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfBranch is not a map.
+ *
+ * @return Map
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfMap* map();
+
+ /**
+ * Get the data value as Branch. From IAlfVariantType Interface
+ *
+ * @return Map
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfBranch* branch();
+
+ /**
+ * Get the data value as a User Defined Data Pointer.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidVariantDataType always
+ * since AlfBranch is not a custom value.
+ *
+ * @return IAlfModelBase interface.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT IAlfModelBase* customData();
+
+ /**
+ * Equality comparison operator.
+ * Always throws an exception.
+ * @exception osncore::AlfDataException Thrown with error code osncore::EInvalidBranchOperation always.
+ *
+ * @param aOther object to compare against.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT bool operator==(const IAlfVariantType& aOther) const;
+private:
+ /**
+ * 2nd Phase Constructor
+ * @return
+ * @since S60 ?S60_version
+ */
+ void construct( IAlfMap* aData, IAlfMap* aChildData);
+
+private:
+
+ //Data - owned
+ auto_ptr<AlfBranchDataImpl> mBranchData;
+
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFVARIANTTYPE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfwidget.inl Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2007 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: Template interface getter for CAlfWidget class.
+*
+*/
+
+
+// -----------------------------------------------------------------------------
+// Template getter for interfaces provided by the widget, the control,
+// or the model. The type of the queried interface is specified by the
+// template parameter.
+// -----------------------------------------------------------------------------
+//
+template <class T>
+T* AlfWidget::makeInterface( AlfWidget* aWidget )
+ {
+ return static_cast< T* >( AlfWidget::makeInterface( aWidget, T::type() ) );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfwidgetcommand.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2007 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: widget commands
+*
+*/
+
+
+#ifndef ALFWIDGETCOMMAND_H
+#define ALFWIDGETCOMMAND_H
+
+#include <alf/alfcommand.h>
+#include <osn/ustring.h>
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+// FORWARD DECLARATIONS
+ class AlfAttribute;
+ class AlfWidget;
+
+/**
+ * @class TAlfWidgetAttributeCommand alfwidgetcommand.h "alf/alfwidgetcommand.h"
+ *
+ * AlfCommand type for carrying an attribute and delivering
+ * it to a presentation element of a recipient widget.
+ *
+ * @see AlfAttribute
+ * @since S60 ?S60_version
+ */
+class TAlfWidgetAttributeCommand : public TAlfObjectCommand
+ {
+ public:
+ /**
+ * Constructor.
+ *
+ * @param aAttribute The attributes to be set
+ * @param aTarget Name of the target AlfElement instance
+ * @param aRecipient Widget that the command is to be executed on
+ * @since S60 ?S60_version
+ */
+ TAlfWidgetAttributeCommand(
+ AlfAttribute* aAttribute,
+ UString& aTarget,
+ AlfWidget* aRecipient );
+
+ /**
+ * Destructor
+ */
+ ~TAlfWidgetAttributeCommand();
+
+ /* Implementation of TAlfCommand::ExecuteL(). */
+ void ExecuteL(CAlfEnv& aEnv) const;
+
+ /* Implementation of TAlfCommand::Size(). */
+ TInt Size() const;
+
+ public:
+ AlfAttribute* mOwnedAttribute; // Owned
+ UString mTarget;
+ };
+
+
+ } // namespace Alf
+
+#endif // ALFWIDGETCOMMAND_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfwidgetcontrol.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,718 @@
+/*
+* Copyright (c) 2007 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: The base class for all widget controls.
+*
+*/
+
+
+#ifndef ALFWIDGETCONTROL_H
+#define ALFWIDGETCONTROL_H
+
+#include <osn/osndefines.h>
+#include <osn/osnnew.h> // for OSN operator new parameter types
+#include <alf/ialfwidgetcontrol.h>
+#include <alf/alfcontrol.h>
+#include <alf/ialfmodelchangeobserver.h>
+#include <memory>
+namespace osncore
+ {
+template <class T> class AlfPtrVector;
+ }
+
+namespace std
+ {
+template <class T> class auto_ptr;
+ }
+
+using namespace osncore;
+using namespace std;
+
+namespace Alf
+ {
+class IAlfContainerWidget;
+class IAlfWidgetEventHandler;
+class IAlfElement;
+class AlfWidget;
+class IAlfMap;
+class IAlfVariantType;
+class AlfWidgetControlImpl;
+class IAlfHostAPI;
+class IfId;
+class ElementData;
+
+/** @class CAlfWidgetControl alfwidgetcontrol.h "alf/alfwidgetcontrol.h"
+ * The base class for all widget controls.
+ * Widget controls are derived from Alfred controls, and owned by
+ * the Alfred environment or control groups. Controls are responsible
+ * for the widget logic, i.e., storing and controlling the state of
+ * the widget. This usually includes input event handling, updating
+ * the presentation, and communication with the model, the application,
+ * and other controls. Event handlers can be used to implement parts
+ * of the widget logic.
+ *
+ * @interfaces IAlfWidgetControl, IAlfHostAPI, IAlfAttributeOwner
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class CAlfWidgetControl :
+ public CAlfControl,
+ public IAlfModelChangeObserver,
+ public IAlfWidgetControl
+ {
+public:
+
+ /**
+ * The constructor.
+ *
+ * @since S60 ?S60_version
+ * @param aEnv The Alfred environment.
+ */
+ OSN_IMPORT CAlfWidgetControl(CAlfEnv& aEnv);
+
+
+ /**
+ * operator new method to ensure correct OS-neutral handling of failure to
+ * allocate memory.
+ *
+ * This operator will throw std::bad_alloc if memory cannot be allocated.
+ * If memory is successfully allocated, it will fill all bytes of allocated
+ * memory with zero.
+ *
+ * Note that the parameter list below is not relevant to the actual usage
+ * which is typically:
+ *
+ * auto_ptr<CAlfWidgetControl> control(new(EMM) CAlfWidgetControl(aEnv));
+ * or
+ * CAlfWidgetControl* mControl = new(EMM) CAlfWidgetControl(aEnv);
+ *
+ * @exception Throws std::bad_alloc if there is a failure to allocate
+ * memory for the object under construction.
+ *
+ * @param aSize The number of bytes required for an instance of the class.
+ * This parameter is supplied automatically.
+ * @param aEnumValue An enumeration value of newarg. Always use EMM.
+ * @return a pointer to the zero-ed memory allocated on the heap.
+ * Ownership transferred to caller.
+ */
+ OSN_IMPORT void* operator new(size_t aSize, newarg aEnumValue)
+ throw (std::bad_alloc);
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~CAlfWidgetControl();
+
+ /**
+ * Set the owner widget of this control.
+ * Called by AlfWidget::setControlL().
+ *
+ * @since S60 ?S60_version
+ * @param aWidget The owner widget of this control.
+ */
+ void setOwnerWidget( AlfWidget* aWidget );
+
+ /**
+ * Returns top level layout. Returns NULL if this control does not
+ *
+ * @return Pointer to top level layout, or NULL if not available.
+ */
+ OSN_IMPORT CAlfLayout* ContainerLayout(
+ const CAlfControl* /*aConnected*/) const;
+
+ /**
+ * state.
+ */
+ OSN_IMPORT uint state() const;
+
+ /**
+ * sets the state.
+ */
+ OSN_IMPORT void setState( uint aState );
+
+ /**
+ * enables State.
+ */
+ OSN_IMPORT void enableState( uint aState );
+
+ /**
+ * disables State.
+ */
+ OSN_IMPORT void disableState( uint aState );
+
+ /**
+ * checks State.
+ */
+ OSN_IMPORT bool checkState( uint aState ) const;
+
+ /**
+ * returns no of event handlers.
+ */
+ OSN_IMPORT int numEventHandlers() const;
+
+ /**
+ * returns the event handlers at the index.
+ */
+ OSN_IMPORT IAlfWidgetEventHandler& eventHandler( int aIndex );
+
+ /**
+ * returns event handler index.
+ */
+ OSN_IMPORT int eventHandlerIndex(
+ IAlfWidgetEventHandler& aEventHandler ) const;
+
+ /**
+ * returns finds the event handler .
+ */
+ OSN_IMPORT IAlfWidgetEventHandler* findEventHandler(
+ const TAlfEvent& aEvent );
+
+ /**
+ * adds an event handler.
+ * @exception osncore::AlfWidgetException Thrown with the error code
+ * osncore::ECommonError when user tries to add an event handler at an
+ * index but it fails.
+ */
+ OSN_IMPORT void addEventHandler(
+ IAlfWidgetEventHandler* aEventHandler,
+ int aIndex = -1 );
+
+ /**
+ * removes an event handlers.
+ */
+ OSN_IMPORT void removeAndDestroyEventHandler(
+ IAlfWidgetEventHandler& aEventHandler );
+
+ /**
+ * returns no of event handlers.
+ */
+ OSN_IMPORT void removeEventHandler(
+ IAlfWidgetEventHandler& aEventHandler );
+
+ /**
+ * Remove and destroy an event handler from the control bases on its name.
+ *
+ * @since S60 ?S60_version
+ * @param aHandlerId The name/Id of the event handler to be removed
+ * and destroyed.
+ */
+ OSN_IMPORT void removeAndDestroyEventHandler( const UString& aHandlerId );
+
+ /**
+ * Remove and destroy an event handler from the control bases on its name.
+ *
+ * @since S60 ?S60_version
+ * @param aHandlerId The name/Id of the event handler to be removed
+ * and destroyed.
+ */
+ OSN_IMPORT void removeAndDestroyEventHandler( UString& aHandlerId );
+
+ /**
+ * Remove and destroy all event handlers associated with presentation
+ * elements.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void removeAndDestroyPresentationEventHandlers();
+
+ /**
+ * Removes all event handlers associated with presentation elements from
+ * this control.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void removePresentationEventHandlers();
+
+ /**
+ * Returns no of elements.
+ */
+ OSN_IMPORT int numElements() const;
+
+ /**
+ * Returns an element at the index.
+ */
+ OSN_IMPORT IAlfElement& element( int aIndex );
+
+ /**
+ * Finds an element with specified name.
+ */
+ OSN_IMPORT IAlfElement* findElement( const char* aName );
+
+ /**
+ * Adds an element in the end.
+ * @exception std::bad_alloc
+ * @exception osncore::AlfException Thrown with the error code
+ * osncore::ECommonError if the given element object has been added
+ * in the widget control already.
+ *
+ * @param aElement Element to be added.
+ * Ownership is transferred iff no exception is thrown.
+ */
+ OSN_IMPORT void addElement( IAlfElement* aElement );
+
+ /**
+ * removes and destroys an element.
+ */
+ OSN_IMPORT void removeAndDestroyElement( const IAlfElement& aElement );
+
+ /**
+ * removes an element but does not destroy it.
+ */
+ OSN_IMPORT void removeElement( const IAlfElement& aElement );
+
+ /**
+ * Returns the data id of an element.
+ */
+ OSN_IMPORT virtual uint elementDataId(
+ const IAlfElement& aElement,
+ uint aIndex,
+ uint aParentDataId );
+
+ /**
+ * Returns the data id of the parent element of an element.
+ */
+ OSN_IMPORT virtual uint parentElementDataId(
+ const IAlfElement& aElement,
+ uint aDataId );
+
+ /**
+ * Returns index corresponding to a data id.
+ */
+ OSN_IMPORT virtual uint dataIdToIndex(
+ const IAlfElement& aElement,
+ uint aDataId );
+
+ /**
+ * Returns data of an element.
+ */
+ OSN_IMPORT IAlfVariantType* elementData(
+ const IAlfElement& aElement,
+ uint aDataId );
+
+ /**
+ * Sets the data id range of an element.
+ */
+ OSN_IMPORT void setDataIdRange( const IAlfElement& aElement, uint aRange );
+
+ /**
+ * Returns the data id range of an element.
+ */
+ OSN_IMPORT uint dataIdRange( const IAlfElement& aElement );
+
+ /**
+ * Updates presentation.
+ * @exception osncore::AlfVisualException Thrown with the error code
+ * osncore::ECanNotCreateVisual when during updation of presentation,
+ * visual trees are created and an error occurs during the creation of
+ * visuals.
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT void updatePresentation();
+
+ /**
+ * Destroys presentation (visual trees under elements).
+ */
+ OSN_IMPORT void destroyPresentation( int aTimeMilliseconds = 0 );
+
+ /**
+ * Destroys all visuals and elements.
+ */
+ OSN_IMPORT void destroyVisualsAndElements( int aTimeMilliseconds = 0 );
+
+ /**
+ * Return the owner widget of this control .
+ */
+ OSN_IMPORT AlfWidget* widget();
+
+ /*
+ * Notifies the parent control that the layout should be recalculated.
+ * If there is no parent, nothing is done.
+ */
+ OSN_IMPORT void updateParentLayout();
+
+ /*
+ * @return true if the control acts as a container for other widgets.
+ *
+ */
+ OSN_IMPORT bool isContainer() const;
+
+ /*
+ * @return true if the control is focusable, false otherwise.
+ */
+ OSN_IMPORT bool isFocusable() const;
+
+ /**
+ * Template getter for interfaces provided by the control classes.
+ * The type of the queried interface is specified by the
+ * template parameter.
+ *
+ * @exception std::bad_alloc
+ *
+ * @since S60 ?S60_version
+ * @param aControl The control to get the interface for.
+ *
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ template <class T>
+ static T* makeInterface( CAlfWidgetControl* aControl );
+
+ /**
+ * Handles events sent to widget control.
+ * <b> Widgets can override this. </b>
+ * The default implementation tunnels key events towards the
+ * focussed child widget. If custom events EEventFocusNextWidget/
+ * EEventFocusPreviousWidget are received the default implementation
+ * attempts to switch focus to the next/previous child widget.
+ *
+ * @since S60 ?S60_version
+ * @param aEvent The event to be handled.
+ *
+ * @return Result of event processing. See AlfEventStatus.
+ */
+ OSN_IMPORT virtual AlfEventStatus handleEvent( const TAlfEvent& aEvent );
+
+ /**
+ * Processes the events sent to this control.
+ * The events are passed to the tunnelling phase event handlers,
+ * handleEvent method and the bubbling phase event handlers in
+ * that order till one of them consumes the event.
+ *
+ * @since S60 ?S60_version
+ * @param aEvent The event to be handled.
+ *
+ * @return Result of event processing. See AlfEventStatus.
+ */
+ OSN_IMPORT AlfEventStatus processEvent( const TAlfEvent& aEvent );
+
+// from base class IAlfModelChangeObserver
+
+ /**
+ * From IAlfInterfaceBase.
+ * Update the control according to the changed model.
+ * Destroy existing visuals and cancel all animation commands.
+ * Create new visuals according to the data in the new model.
+ *
+ * @since S60 ?S60_version
+ * @param aModel The new model.
+ */
+ OSN_IMPORT virtual void modelChanged( IAlfModel& aModel );
+
+ /**
+ * Update the presentation according to the data changes.
+ *
+ * @since S60 ?S60_version
+ * @param aArrayOfOperation An Array containing the operations performed
+ * on the model.
+ */
+ OSN_IMPORT virtual void dataChanging(
+ const AlfPtrVector<AlfModelOperation>& aOperations );
+
+ /**
+ * Update the presentation according to the data changes.
+ *
+ * @exception osncore::AlfVisualException Thrown with the error code
+ * osncore::ECanNotCreateVisual when adding the visual tree through
+ * adding the data for it in the model but the creation of visual tree
+ * is failed.
+ *
+ * @since S60 ?S60_version
+ * @param aOperation An operation performed on the model.
+ */
+ OSN_IMPORT virtual void dataChanging(
+ const AlfModelOperation& aOperation );
+
+ /**
+ * The default implementation is empty.
+ * Derived classes may update the state of the
+ * control according to the changed data.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT virtual void dataChanged();
+
+// from base class IAlfInterfaceBase
+
+ /**
+ * From IAlfInterfaceBase.
+ * Getter for interfaces provided by the control classes.
+ * Derived classes should always call the base class method
+ * from the overridden MakeInterface.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ OSN_IMPORT virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+public:
+
+// New non-virtual methods
+
+ /**
+ * Resets control group of this control. If the control is in a
+ * control group it will be removed from its currect control group
+ * and appended to the given control group.
+ *
+ * @param Reference to the control group to which this control is appended.
+ */
+ void resetControlGroup(CAlfControlGroup& aControlGroup);
+
+ /**
+ * Resets control group of this control and the whole hierarchy of
+ * controls that are connected to this control or its children with
+ * connections.
+ *
+ * This control and the tree of controls below it are removed from
+ * their previous control groups.
+ *
+ * @since S60 ?S60_version
+ * @param Reference to the control group to which controls are appended.
+ * This control group replaces control groups to which the controls
+ * in this control hierarchy belong before the call is made.
+ */
+ void resetHierarchyControlGroup(CAlfControlGroup& aControlGroup);
+
+ /**
+ * Attempt to acquire focus for this control.
+ */
+ OSN_IMPORT void AcquireFocus();
+
+ /**
+ * Attempt to relinquish focus for this control.
+ */
+ OSN_IMPORT void RelinquishFocus();
+
+ /**
+ * returns hostApi for this control.
+ *
+ * @return hostApi-instance.
+ */
+ IAlfHostAPI& hostAPI();
+
+protected:
+
+ /**
+ * The protected constructor.
+ *
+ * @since S60 ?S60_version
+ */
+ OSN_IMPORT CAlfWidgetControl();
+
+
+ /**
+ * The constructor.
+ *
+ * @since S60 ?S60_version
+ * @param aEnv The Alfred environment.
+ */
+ OSN_IMPORT void construct(CAlfEnv& aEnv);
+
+ /**
+ * handles focusing to next control.
+ * Handles the container inside container cases. If next focusable
+ * control is not found, moves focus to upper level container, if no
+ * next focusable controls found in any of the upper level
+ * containers, loops back to the first control.
+ *
+ * @since S60 ?S60_version
+ * @return true, if focus was changed.
+ */
+ OSN_IMPORT bool handleFocusNext();
+
+ /**
+ * handles focusing to previous control.
+ * Handles also the container inside container cases. If next focusable
+ * control is not found, moves focus to upper lever container, if no
+ * previous focusable controls found in any of the upper level
+ * containers, loops back to the last control.
+ *
+ * @since S60 ?S60_version
+ * @return true, if focus was changed.
+ */
+ OSN_IMPORT bool handleFocusPrevious();
+
+ /**
+ * return the first focusable child control.
+ * First focusable is also the default control to get the focus.
+ *
+ * @since S60 ?S60_version
+ * @param aHostApi hostapi-instance. Use: for iterating the connected
+ * controls.
+ * @return control, which should be the first to get the focus.
+ */
+ OSN_IMPORT virtual CAlfWidgetControl* getFirstFocusable(
+ IAlfContainerWidget& aContainer);
+
+ /**
+ * return the last focusable child control.
+ *
+ * @since S60 ?S60_version
+ * @param aHostApi hostapi-instance. Use: for iterating the connected
+ * controls.
+ * @return control, which should be the last one to get the focus
+ */
+ OSN_IMPORT virtual CAlfWidgetControl* getLastFocusable(
+ IAlfContainerWidget& aContainer);
+
+ /**
+ * return next focusable control right after aControl
+ *
+ * @since S60 ?S60_version
+ * @param aHostApi hostapi-instance. Use: for iterating the connected
+ * controls.
+ * @param aControl reference control
+ * @return control, which should be focused right after aControl.
+ * If no focusable control left, should return 0.
+ */
+ OSN_IMPORT virtual CAlfWidgetControl* getFocusableAfter(
+ IAlfContainerWidget& aContainer,
+ CAlfWidgetControl& aControl);
+
+ /**
+ * return next focusable control right before aControl.
+ *
+ * @since S60 ?S60_version
+ * @param aHostApi hostapi-instance. Use: for iterating the connected
+ * controls.
+ * @param aControl reference control.
+ * @return control, which should be focused right before aControl.
+ * If no focusable control left, should return 0.
+ */
+ OSN_IMPORT virtual CAlfWidgetControl* getFocusableBefore(
+ IAlfContainerWidget& aContainer,
+ CAlfWidgetControl& aControl);
+
+ /**
+ * Called when the control's focus state changes.
+ */
+ OSN_IMPORT void FocusChanged(CAlfDisplay& aDisplay, TBool aFocused);
+
+private:
+
+ // from base class MAlfEventHandler
+
+ /**
+ * Sends the event to processEvent method.
+ * <b>Widgets are discouraged from overriding this method.</b>
+ * Leaves with exception description if processEvent throws.
+ *
+ * @since S60 ?S60_version
+ * @param aEvent The event to be handled.
+ *
+ * @return <code>ETrue</code>, if the event was handled.
+ * Otherwise <code>EFalse</code>.
+ *
+ */
+ OSN_IMPORT virtual TBool OfferEventL( const TAlfEvent& aEvent );
+
+ /**
+ * Calculate the child index inside a map.
+ * In the data hierarchy, map items may by children
+ * or containers of children. In order to calculate the
+ * absolute child index, all previous map items need to be
+ * considered. If the map is the root data, child items
+ * with different element names are not considered.
+ *
+ * @since S60 ?S60_version
+ * @param aMap The map containing the children.
+ * @param aMapIndex The index inside the map.
+ * @param aContainerIndex The index inside the container.
+ * @param aRoot Is the map the root data.
+ *
+ * @return The child index.
+ */
+ uint childIndex( IAlfMap& aMap, uint aMapIndex,
+ uint aContainerIndex, bool aRoot );
+
+ /**
+ * returns next control, that can be focused in relation to
+ * the aControl.
+ *
+ * @since S60 ?S60_version
+ * @param aControl reference control.
+ *
+ * @return next focusable control, if aControl == 0, first focusable
+ * control should be returned.
+ */
+ CAlfWidgetControl* nextFocusableControl(CAlfWidgetControl* aControl);
+
+ /**
+ * returns previous control, that can be focused in relation to
+ * the aControl.
+ *
+ * @since S60 ?S60_version
+ * @param aControl reference control,
+ *
+ * @return previous focusable control, if aControl == 0, last focusable
+ * control should be returned.
+ */
+ CAlfWidgetControl* previousFocusableControl(CAlfWidgetControl* aControl);
+
+ // Private state handler methods
+
+ void enableStateVisible();
+ void disableStateVisible();
+ void enableStateEnabled();
+ void disableStateEnabled();
+ void enableStateFocused();
+ void disableStateFocused();
+ void enableStateFocusable();
+ void disableStateFocusable();
+
+ // Tools for checking state invariants
+ static void checkStateInvariants(uint aNewState);
+ void predictAndCheckStateInvariants(
+ uint aChangePattern, bool aEnabling) const;
+
+ /**
+ * Removes presentaion elements that is associated with
+ * the eventhandler.This will remove the element reference from the
+ * element array .
+ *
+ * @since S60 ?S60_version
+ * @param aEventHandler A reference to event handler associated with
+ * presentation element.
+ *
+ * @return the pointer to element data holding the pointer to the element
+ * if it is found, else null
+ */
+ ElementData* removePesentationElementData(
+ IAlfWidgetEventHandler& aEventHandler );
+
+ /**
+ * Constants for aPhase parameter in function ProcessEventHandlingPhase.
+ */
+ static const int tunneling = 0;
+ static const int bubbling = 1;
+
+ /**
+ * Goes through all the event handlers in either tunneling or
+ * bubbling phase.
+ */
+ AlfEventStatus ProcessEventHandlingPhase(
+ int aPhase,
+ const TAlfEvent& aEvent );
+
+private: // data
+ auto_ptr<AlfWidgetControlImpl> mWdgtControlData;
+ };
+
+#include "alf/alfwidgetcontrol.inl"
+
+ } // namespace Alf
+
+#endif // ALFWIDGETCONTROL_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfwidgetcontrol.inl Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2007 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: Template interface getter for CAlfWidgetControl class.
+*
+*/
+
+
+// -----------------------------------------------------------------------------
+// Template getter for interfaces provided by the the control classes.
+// The type of the queried interface is specified by the
+// template parameter.
+// -----------------------------------------------------------------------------
+//
+template <class T>
+T* CAlfWidgetControl::makeInterface( CAlfWidgetControl* aControl )
+ {
+ if (aControl)
+ {
+ return static_cast< T* >( aControl->makeInterface( T::type() ) );
+ }
+ return NULL;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfwidgetenvextension.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 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: Utilities to create and access widget model extensions to AlfEnv
+*
+*/
+
+
+#ifndef ALFWIDGETENVEXTENSION_H
+#define ALFWIDGETENVEXTENSION_H
+
+#include <osn/osndefines.h>
+
+class CAlfEnv;
+
+namespace Alf
+ {
+ class ResourcePool;
+ class IAlfWidgetFactory;
+ class AlfThemeManagerUtil;
+ }
+namespace Alf
+ {
+
+/**
+ * @class AlfWidgetEnvExtension alfwidgetenvextension.h "alf/alfwidgetenvextension.h"
+ * class with methods to access extensions in AlfEnv
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfWidgetEnvExtension
+ {
+public:
+
+ /**
+ * Initialize the singleton objects that are required for the widget model
+ *
+ * @exception osncore::AlfWidgetException Thrown with the error code
+ * osncore::ECommonError when the resource pool extension
+ * can not be hooked to Alf environment.
+ * @exception osncore::AlfWidgetException Thrown with the error code
+ * osncore::ECommonError when the factory extension can
+ * not be hooked to Alf environment.
+ * @exception osncore::AlfWidgetException Thrown with the error code
+ * osncore::ECommonError when the widget factory cannot
+ * be created.
+ *
+ * @param aEnv Alf environment object.
+ */
+ OSN_IMPORT static void initializeEnvironment(CAlfEnv& aEnv);
+
+ /**
+ * Initialize the singleton object for the resource pool required for the
+ * widget model
+ *
+ * @param aEnv Alf environment object
+ */
+ static void initializeEnvironmentForResourcePool(CAlfEnv& aEnv);
+
+ /**
+ * Initializes environment with Theme Manager extension
+ *
+ * @param aEnv Alf environment object
+ */
+ static void AlfWidgetEnvExtension::initializeEnvironmentForTheme(CAlfEnv& aEnv);
+
+ /**
+ * Initialize the singleton object for the widget factory required for
+ * the widget model
+ *
+ * @param aEnv Alf environment object
+ */
+ static void initializeEnvironmentForFactory(CAlfEnv& aEnv);
+
+ /**
+ * Access to the application-level resource pool
+ * It also initializes the environment with resource pool extension,
+ * if it was not initialized earlier
+ *
+ * @exception osncore::AlfWidgetException Thrown with the error code
+ * osncore::ECommonError when the extension can not be
+ * hooked to Alf environment.
+ * @param aEnv The Alf environment object in which to find the pool
+ * @return ref to the application-level resource pool
+ */
+ OSN_IMPORT static ResourcePool& resourcePool(CAlfEnv& aEnv);
+
+
+ /**
+ * Access to the widget factory
+ * It also initializes the environment with widget factory extension,
+ * if it was not initialized earlier
+ *
+ * @exception osncore::AlfWidgetException Thrown with the error code
+ * osncore::ECommonError when the extension can not be
+ * hooked to Alf environment.
+ * @exception osncore::AlfWidgetException Thrown with the error code
+ * osncore::ECommonError when the widget factory cannot
+ * be created.
+ * @param aEnv The Alf environment object in which to find the
+ * widget factory
+ * @return ref to the widget factory
+ */
+ OSN_IMPORT static IAlfWidgetFactory& widgetFactory( CAlfEnv& aEnv);
+ /**
+ * Access to the application-level Thememanager.
+ *
+ * @param aEnv The Alf environment object in which to find the thememanager.
+ * @return ref to the application-level ThemeManager.
+ */
+ OSN_IMPORT static AlfThemeManagerUtil& themeManagerUtil(CAlfEnv& aEnv);
+
+ };
+
+ }
+#endif // ALFWIDGETENVEXTENSION_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfwidgeteventhandler.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,424 @@
+/*
+* Copyright (c) 2007 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: Header for generic event handler for alf widgets
+*
+*/
+
+
+#ifndef ALFWIDGETEVENTHANDLER_H
+#define ALFWIDGETEVENTHANDLER_H
+
+
+#include <osn/osndefines.h>
+#include <osn/osncommon.h>
+#include <alf/alfevent.h>
+#include <alf/alfcommand.h>
+#include <alf/ialfwidgeteventhandler.h>
+#include <alf/alfwidgetevents.h>
+using namespace osncore;
+
+#include <memory>
+using namespace std;
+
+namespace osncore
+ {
+class UString;
+ }
+
+using osncore::UString;
+
+namespace Alf
+ {
+class CAlfWidgetControl;
+class AlfWidget;
+class AlfReferenceToVisual;
+class IAlfAttributeSetter;
+class AlfAttributeContainer;
+class AlfWidgetEventHandlerImpl;
+class AlfAttribute;
+class AlfAttributeValueType;
+class IfId;
+class IAlfEventOutputSignalSubscriber;
+class IAlfAppEventListener;
+
+// Custom event IDs defined by the event handling framework.
+enum
+ {
+ EActivateState = 1000000,
+ EDeactivateState
+ };
+
+enum WidgetTactileFeedbackType
+ {
+ tactileFeedbackNone,
+ tactileFeedbackBasic,
+ tactileFeedbackSensitive
+ };
+
+/** @class AlfWidgetEventHandler alfwidgeteventhandler.h "alf/alfwidgeteventhandler.h"
+ * A generic event handler for alf widgets.
+ * One AlfWidgetEventHandler instance is meant to handle one or more event
+ * inputs, which result in the same event output. When any of the event inputs
+ * accept the given event, all the event outputs and event cancel outputs are
+ * executed. However, animation event outputs and cancel outputs are executed
+ * only in response to custom events, not pointer or key events.
+ * If an animation command is required in response to a key or pointer event,
+ * the event handler handling those should generate a custom event and then
+ * the event handler handling that should generate an animation command.
+ *
+ * @code
+ * ?good_class_usage_example(s)
+ * @endcode
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+OSN_NONSHARABLE_CLASS( AlfWidgetEventHandler ) : public IAlfWidgetEventHandler
+ {
+public:
+
+ /**
+ * Constructor.
+ * @param IAlfWidgetEventHandler::AlfEventHandlerType type whe
+ * @param aEventHandlerType Event handler type.
+ * It can be presentaion related or logical.
+ * @param aEventHandlerExecutionPhase Event handler exceution phase.
+ * It can be tunneling phase/bubbling phase/both.
+ */
+ OSN_IMPORT AlfWidgetEventHandler(
+ IAlfWidgetEventHandler::AlfEventHandlerType
+ aEventHandlerType = ELogicalEventHandler,
+ IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase
+ aEventHandlerExecutionPhase = ETunnellingPhaseEventHandler );
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfWidgetEventHandler();
+
+ /**
+ * Adds a key event input to the event handler.
+ *
+ * @exception std::bad_alloc
+ * @param aEventID The key code
+ * @param aEventTypeFlags Event type flags.
+ * @param aKeyEventModifiers Bitmask of the possible modifiers of the key event.
+ * This event handler is triggered only if the received key event contains these modifiers.
+ * See enumeration KeyEventModifiers for the possible bit values.
+ */
+ OSN_IMPORT void addKeyInput(
+ int aEventID,
+ EventTypeFlags aEventTypeFlags = keyDown,
+ uint aKeyEventModifiers = 0 );
+
+ /**
+ * Adds a custom event input to the event handler.
+ *
+ * @exception std::bad_alloc
+ * @param aEventID The event ID.
+ * @param aUseEventData Use the custom event data to determine the accepted events.
+ * @param aEventData The accepted custom event data value. Only used if
+ * aUseEventData is true.
+ */
+ OSN_IMPORT void addCustomInput( int aEventID, bool aUseEventData = EFalse,
+ int aEventData = 0 );
+
+ /**
+ * Adds a pointer event input in the event handler.
+ *
+ * @exception std::bad_alloc
+ * @param aElementName The name of the element.
+ * @param aVisualName The name of the visual.
+ * @param aEvent
+ */
+ OSN_IMPORT void addPointerInput(
+ const char* aElementName, const char* aVisualName,
+ WidgetPointerEvent aEvent = pointerEventUp );
+
+ /**
+ * Adds an event output in the event handler.
+ *
+ * @exception std::bad_alloc
+ * @param aEventType The event type. The only accepted types are
+ * TAlfEvent::ETypeCustom and TAlfEvent::ETypeKey.
+ * @param aEventID The event ID.
+ * @param aTargetWidget The name of the target widget.
+ * In the case of custom events, it can be an empty string, which means
+ * that the event is to be broadcast to all the event handlers.
+ * Key event outputs must always define a target widget.
+ * @param aDelay Delay in microseconds before sending the command.
+ * The default value of zero means that the command is scheduled immediately.
+ * Currently, key event outputs are always executed immediately.
+ */
+ OSN_IMPORT void addOutput(
+ int aEventType,
+ int aEventID,
+ const char* aTargetWidget,
+ unsigned int aDelay = 0 );
+
+ /**
+ * Adds an animation output in the event handler.
+ *
+ * @exception std::bad_alloc
+ * @param aTargetVisual Reference to the animated visual.
+ * @param aReferenceVisual Reference to the visual with the
+ * reference value, or NULL if no reference value is used.
+ *
+ * @param aAttributeSetter The attribute setter for animating
+ * the attribute using Hitchcock commands. Ownership is transferred,
+ * if the method does not throw an exception.
+ *
+ * @param aAttributeContainer The attribute container holding the attribute
+ * value(s) used by the attribute setter. Ownership is transferred, if the method does not
+ * throw an exception. The container can hold new values for multiple different
+ * attributes, in which case all of them are applied when the animation output
+ * is triggered.
+ *
+ * @param aAnimationTime The duration of the animation. Note that this parameter
+ * is used only if the transition time parameter is not defined in the
+ * corresponding attribute in the attribute container.
+ *
+ * @param aDelay The delay in microseconds before starting the animation.
+ * Note that this parameter is used only if the delay parameter is not defined in the
+ * corresponding attribute in the attribute container.
+ */
+ OSN_IMPORT void addAnimationOutput(
+ AlfReferenceToVisual* aTargetVisual,
+ AlfReferenceToVisual* aReferenceVisual,
+ IAlfAttributeSetter* aAttributeSetter,
+ AlfAttributeContainer* aAttributeContainer,
+ unsigned int aAnimationTime,
+ unsigned int aDelay );
+
+ /**
+ * Adds an event output for canceling timed custom events
+ * in the event handler.
+ *
+ * @exception std::bad_alloc
+ * @param aTargetWidget The name of the target widget.
+ * @param aEventID The event ID of the event to be canceled.
+ * @param aCancelAll Whether to cancel all the custom commands that are
+ * scheduled to be sent to the widget or not. If this is ETrue,
+ * the aEventID parameter is ignored.
+ */
+ OSN_IMPORT void addCancelOutput(
+ const char* aTargetWidget, int aEventID, bool aCancelAll );
+
+ /**
+ * Adds an event output for canceling timed animation events
+ * in the event handler.
+ *
+ * @exception std::bad_alloc
+ * @param aElementName Element name.
+ * @param aVisualName Visual name.
+ * @param aOperation Identifies the operation of the command to be canceled.
+ * @param aCancelAll Whether to cancel all the animation commands that are
+ * scheduled to be sent to the widget or not. If this is ETrue,
+ * the aOperation parameter is ignored.
+ */
+ OSN_IMPORT void addAnimationCancelOutput(
+ const char* aElementName,
+ const char* aVisualName,
+ TAlfOp aOperation,
+ bool aCancelAll );
+
+ /**
+ * Adds an event output for changing the value of a certain attribute
+ * of the widget.
+ *
+ * @exception std::bad_alloc
+ * @param aAttribute The attribute
+ * object is transferred and this function takes care of deleting it
+ * even if the function leaves. Thus, it should not be in the cleanup stack
+ * when calling this function, to avoid potential double deletion.
+ */
+ OSN_IMPORT void addWidgetAttributeOutput( AlfAttribute& aAttribute,
+ const char* aWidgetId = 0 );
+
+ /**
+ * Adds an event output for changing the value of a certain attribute
+ * of the widget.
+ *
+ * @exception std::bad_alloc
+ * @param aName Name of the attribute
+ * @param aValue Value of the attribute
+ * object is transferred and this function takes care of deleting it
+ * even if the function leaves. Thus, it should not be in the cleanup stack
+ * when calling this function, to avoid potential double deletion.
+ */
+ OSN_IMPORT void addWidgetAttributeOutput( UString& aName,
+ AlfAttributeValueType* aValue, const char* aWidgetId = 0 );
+
+ /**
+ * Adds an event output for changing the value of a certain attribute
+ * of the widget.
+ *
+ * @exception std::bad_alloc
+ * @param aName Name of the attribute
+ * @param aValue Value of the attribute
+ * object is transferred and this function takes care of deleting it
+ * even if the function leaves. Thus, it should not be in the cleanup stack
+ * when calling this function, to avoid potential double deletion.
+ */
+ OSN_IMPORT void addWidgetAttributeInput( UString& aName,
+ AlfAttributeValueType* aValue, const char* aElementId = 0 );
+
+ /**
+ * Adds an event output for launching tactile feedback (instant feedback).
+ * Note that the implementation of this function is flagged
+ * with RD_TACTILE_FEEDBACK, i.e. if RD_TACTILE_FEEDBACK is not defined
+ * the method does nothing --> no output added.
+ *
+ * @exception std::bad_alloc
+ * @param aFeedbackType The type of the tactile feedback that should
+ * be used in the output.
+ */
+ OSN_IMPORT void addTactileOutput(
+ WidgetTactileFeedbackType aFeedbackType );
+
+ /**
+ * Adds an event output for event passing.
+ *
+ * @param aSourceWidget
+ * @param aTargetWidget
+ * be used in the output.
+ */
+ OSN_IMPORT void addEventPasserOutput(
+ const char* aSourceWidget , const char* aTargetWidget );
+
+ /**
+ * Adds an event output for event passing.
+ *
+ * @param aSourceWidget defines source widget
+ * @param aTargetWidget defines target widget. ie. Event is offered for the target widget
+ * @param aNewEventId Event is mapped to this type of event.
+ * @param aNewEventCustomData New event custom data
+ * be used in the output.
+ */
+ OSN_IMPORT void addEventPasserOutput(
+ const char* aSourceWidget , const char* aTargetWidget, int aNewEventId, int aNewEventCustomData );
+ /**
+ * Adds an event input for event passing.
+ * @param aEventId integer contains the specific event id.
+ * @param aCustomData Event specific integer data
+ */
+ OSN_IMPORT void addEventPasserInput (
+ int aEventId, int aCustomData );
+ /**
+ * Adds a subscriber to be notified when event handler's input is received.
+ *
+ * @param aSubscriber Object containing knowledge of the subscribing class and
+ * its callback method.
+ */
+ OSN_IMPORT void addWidgetEventOutputSignalSubscriber( IAlfEventOutputSignalSubscriber& aSubscriber );
+
+ /**
+ * Adds an event output for changing the state of a widget
+ *
+ * @exception Alf::AlfWidgetException value osncore::EInvalidWidget
+ * if aTargetWidget is NULL or empty.
+ * @exception Alf::AlfWidgetException value osncore::EInvalidArgument
+ * if aDisableStates and aEnableStates have a common bit set.
+ *
+ * @exception std::bad_alloc
+ * @param aName Id of the target widget instance
+ * @param aEnableStates mask of states to be set to true
+ * @param aDisableStates mask of states to be cleared
+ */
+ OSN_IMPORT void addWidgetStateOutput( const UString& aTargetWidget,
+ uint aEnableStates, uint aDisableStates );
+
+ /**
+ * Adds application event output for event passing.
+ *
+ * @exception std::bad_alloc
+ * @param aCmd command
+ * @param aAppEvent subscriber
+ */
+ OSN_IMPORT void addAppEventOutput(const UString& aCmd , IAlfAppEventListener& aAppEvent );
+
+// from base class IAlfWidgetEventHandler
+
+ /**
+ * @see IAlfWidgetEventHandler.
+ */
+ virtual AlfEventStatus offerEvent( CAlfWidgetControl& aControl,const TAlfEvent& aEvent);
+
+
+ /**
+ * @see IAlfWidgetEventHandler.
+ */
+ bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;
+
+ /**
+ * @see IAlfWidgetEventHandler.
+ */
+ void setActiveStates( unsigned int aStates );
+
+ /**
+ * @see IAlfWidgetEventHandler.
+ */
+ void setCapturing( bool aCapturing );
+
+ /**
+ * @see IAlfWidgetEventHandler.
+ */
+ bool capturing() const;
+
+ /**
+ * @see IAlfWidgetEventHandler.
+ * Calls to this API will overwrite previous set values.
+ */
+ void setEventHandlerData( const AlfWidgetEventHandlerInitData& aData );
+
+ /**
+ * @see IAlfWidgetEventHandler.
+ */
+ AlfWidgetEventHandlerInitData* eventHandlerData();
+
+ /**
+ * Returns the type of EventHandler.
+ * @see IAlfWidgetEventHandler::AlfEventHandlerType
+ *
+ * @return The type of event handler.
+ */
+ IAlfWidgetEventHandler::AlfEventHandlerType eventHandlerType();
+
+ /**
+ * Returns information about the phase in the event handling cycle in
+ * which the event hadler will be executed.
+ * @see IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase
+ *
+ * @return Event handler execution phase.
+ */
+ IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase eventExecutionPhase();
+
+// from base class IAlfInterfaceBase
+
+ /**
+ * @see IAlfInterfaceBase.
+ */
+ IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+
+private: // data
+
+ auto_ptr<AlfWidgetEventHandlerImpl> mImpl;
+ };
+
+ } // namespace Alf
+
+#endif // C_ALFWIDGETEVENTHANDLER_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfwidgeteventhandler.inl Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2007 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: Alfwidgethandler inline file.
+*
+*/
+
+
+template <class T>
+ T* AlfWidgetEventHandler::makeInterface( IAlfInterfaceBase* aThis )
+ {
+ if ( aThis && aThis->type() == T::type() )
+ {
+ return static_cast<T*>( this );
+ }
+ return NULL;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/alfwidgetevents.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2007 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: Definition of the commonly used custom event ids.
+*
+*/
+
+
+#ifndef ALFWIDGETEVENTS_H
+#define ALFWIDGETEVENTS_H
+
+namespace Alf
+ {
+/**
+ * The list of commonly used custom event ids.
+ * The widget-specific ids should use values from ELastCommonWidgetEvent.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+enum CommonWidgetEvent
+ {
+ EEventActivateState = 0,
+ EEventDeactivateState = 1,
+ EEventWidgetInitialized = 2,
+ EEventSetFocus = 3,
+ EEventClearFocus = 4,
+ EEventFocusedItemTypeChanged = 5,
+ EEventItemSelected = 6,
+ EEventNavigatePrimaryNext = 7,
+ EEventNavigatePrimaryPrev = 8,
+ EEventNavigateSecondaryNext = 9,
+ EEventNavigateSecondaryPrev = 10,
+ EEventNavigateLeft = 11,
+ EEventNavigateRight = 12,
+ EEventNavigateUp = 13,
+ EEventNavigateDown = 14,
+ EEventScrollToTarget = 15,
+ EEventScrollPrimaryNext = 16,
+ EEventScrollPrimaryPrev = 17,
+ EEventScrollSecondaryNext = 18,
+ EEventScrollSecondaryPrev = 19,
+ EEventScrollToFirst = 20,
+ EEventScrollToLast = 21,
+ EEventScrollUp = 22,
+ EEventScrollDown = 23,
+ EEventScrollLeft = 24,
+ EEventScrollRight = 25,
+ EEventScrollPageUp = 26,
+ EEventScrollPageDown = 27,
+ EEventScrollPageLeft = 28,
+ EEventScrollPageRight = 29,
+ EEventScrollBarModelChanged = 30,
+ EEventFocusNextWidget = 31,
+ EEventFocusPreviousWidget = 32,
+ EEventWidgetGainedFocus = 33,
+ EEventWidgetLostFocus = 34,
+ EEventWidgetAttributeChanged = 35,
+ EEventWidgetPresentationDestroyed = 36,
+ EEventDragVertical = 37,
+ EEventDragHorizontal = 38,
+ EEventMissedPointerUp = 39,
+ ELastCommonWidgetEvent = 99
+ };
+
+/**
+ * OSN pointer event enumeration.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+enum WidgetPointerEvent
+ {
+ pointerEventDown = ELastCommonWidgetEvent + 1,
+ pointerEventUp,
+ pointerEventDrag
+ };
+
+/**
+ * Event type flags.
+ */
+enum EventTypeFlags
+ {
+ custom = 0x0001, // custom event
+ keyDown = 0x0002, // key down event, key repeat generates this event also
+ keyUp = 0x0004, // key up event
+
+ /** Flag to indicate that the custom event data
+ * should be used to determine the accepted events.
+ * Can not be used with key events.
+ */
+ useEventData = 0x8000
+ };
+
+/**
+ * Key event modifiers.
+ */
+enum KeyEventModifiers
+ {
+ alt = 0x0001,
+ ctrl = 0x0002,
+ shift = 0x0004,
+ func = 0x0008,
+ capsLock = 0x0010,
+ numLock = 0x0020,
+ scrollLock = 0x0040
+ };
+
+ } // namespace Alf
+
+#endif // ALFWIDGETEVENTS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/attrproperty.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1040 @@
+/*
+* Copyright (c) 2007 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: Contains common properties used in DUI UI Model
+*
+*/
+
+
+#ifndef DUIPROPERTY_H
+#define DUIPROPERTY_H
+
+namespace duiuimodel
+ {
+
+// DUI XML namespace.
+const char KDefaultNameSpaceUri[] = "http://www.series60.com/xml/dhuiml/1";
+
+namespace nodetypes
+ {
+ static const char KImageVisual[] = "imagevisual";
+ static const char KTextVisual[] = "textvisual";
+ static const char KMeshVisual[] = "meshvisual";
+ static const char KLineVisual[] = "linevisual";
+ static const char KLayout[] = "layout";
+ static const char KGridLayout[] = "gridlayout";
+ static const char KFlowLayout[] = "flowlayout";
+ static const char KDeckLayout[] = "decklayout";
+ static const char KCurvePathLayout[] = "curvepathlayout";
+ static const char KCurvePath[] = "curvepath";
+ static const char KLine[] = "line";
+ static const char KArc[] = "arc";
+ static const char KColor[] = "color";
+ static const char KViewportLayout[] = "viewportlayout";
+ static const char KAttributeSetter[] = "attributesetter";
+ static const char KAttributeCreator[] = "attributecreator";
+ static const char KDataAttributeSetter[] = "dataattributesetter";
+ static const char KAnchorLayout[] = "anchorlayout";
+ static const char KAnchorLayoutInput[] ="anchorlayoutinput";
+ static const char KEventHandler[] = "eventhandler";
+ static const char KEventInput[] = "eventinput";
+ static const char KEventOutput[] = "eventoutput";
+ static const char KCondition[] = "condition";
+ static const char KConditionGroup[] = "conditiongroup";
+ static const char KProperty[] = "property";
+ static const char KVisualConnection[] = "visualconnection";
+ static const char KListFlowElement[] = "listflowelement";
+ static const char KAnchor[] = "anchor";
+ static const char KMetric[] = "metric";
+ static const char KRect[] = "rect";
+ static const char KLCTImageVisual[] = "lctimagevisual";
+ static const char KLCTTextVisual[] = "lcttextvisual";
+ static const char KLCTAnchorLayout[] = "lctanchorlayout";
+ static const char KLCTGridLayout[] = "lctgridlayout";
+ static const char KPadding[] = "padding";
+ static const char KFrameBrush[] = "framebrush";
+ static const char KBorderBrush[] = "borderbrush";
+ static const char KDropShadowBrush[] = "dropshadowbrush";
+ static const char KGradientBrush[] = "gradientbrush";
+ static const char KImageBrush[] = "imagebrush";
+ static const char KShadowBorderBrush[] ="shadowborderbrush";
+ static const char KVisualization[] = "visualization";
+ static const char KImageResource[] = "imageresource";
+ static const char KResources[] = "resources";
+ static const char KElement[] = "element";
+ static const char KTactile[] = "tactile";
+ static const char KButtonControl[] = "buttoncontrol";
+ static const char KButtonWidgetControl[] = "buttonwidgetcontrol";
+ static const char KListControl[] = "listcontrol";
+ static const char KGridControl[] = "gridcontrol";
+ static const char KGridContainerControl[] = "gridcontainercontrol";
+ static const char KGridDefaultBaseElement[] = "griddefaultbaseelement";
+ static const char KGridDefaultFocusElement[] = "griddefaultfocuselement";
+ static const char KGridDefaultTextItemElement[] = "griddefaulttextitemelement";
+ static const char KGridDefaultImageElement[] = "griddefaultimageelement";
+ static const char KGridDefaultImagetextElement[] = "griddefaultimagetextitemelement";
+ static const char KLayoutManager[] = "layoutmanager";
+ static const char KConnection[] = "connection";
+ static const char KMapToEvent[] = "maptoevent";
+ static const char KAppEvents[] = "appevents";
+ static const char KButtonWidget[] = "buttonwidget";
+ static const char KListWidget[] = "listwidget";
+ static const char KGridWidget[] = "gridwidget";
+ static const char KScrollbarWidget[] = "scrollbarwidget";
+ static const char KWidget[] = "widget";
+ static const char KAppData[] = "appdata";
+ static const char KApplication[] = "application";
+ static const char KContainer[] = "container";
+ static const char KView[] = "view";
+ static const char KDhuiml[] = "dhuiml";
+ static const char KVersion[] = "version";
+ }
+
+namespace commonattributevalues
+ {
+ static const char KTrue[] = "true";
+ static const char KFalse[] = "false";
+ }
+
+namespace commonattributes
+ {
+ static const char KId[] = "id";
+ static const char KRef[] = "ref";
+ static const char KClass[] = "class";
+ }
+
+namespace commonvisualattributes
+ {
+ // deprecated
+ static const char KFocusable[] = "focusable";
+ static const char KDisabled[] = "disabled";
+ static const char KParentVisual[] = "parentvisual";
+ static const char KOpacity[] = "opacity";
+ static const char KTurnAngle[] = "turnangle";
+ // end deprecated
+
+
+ static const char KSetFlags[] = "setflags";
+ static const char KClearFlags[] = "clearflags";
+
+ namespace visualflags
+ {
+ static const char KManualSize[] = "ManualSize";
+ static const char KAlfVisualFlagManualPosition[] = "AlfVisualFlagManualPosition";
+ static const char KAlfVisualFlagManualLayout[] = "AlfVisualFlagManualLayout";
+ static const char KAlfVisualFlagLayoutUpdateNotification[] = "AlfVisualFlagLayoutUpdateNotification";
+ static const char KAlfVisualFlag3DProjection[] = "AlfVisualFlag3DProjection";
+ static const char KAlfVisualFlagNoDepthOcclusion[] = "AlfVisualFlagNoDepthOcclusion";
+ static const char KAlfVisualFlagLocalHorizon[] = "AlfVisualFlagLocalHorizon";
+ static const char KAlfVisualFlagClipping[] = "AlfVisualFlagClipping";
+ static const char KAlfVisualFlagHOriginCenter[] = "AlfVisualFlagHOriginCenter";
+ static const char KAlfVisualFlagHOriginRight[] = "AlfVisualFlagHOriginRight";
+ static const char KAlfVisualFlagVOriginCenter[] = "AlfVisualFlagVOriginCenter";
+ static const char KAlfVisualFlagVOriginBottom[] = "AlfVisualFlagVOriginBottom";
+ static const char KAlfVisualChanged[] = "AlfVisualChanged";
+ static const char KAlfVisualFlagNoDepthUpdate[] = "AlfVisualFlagNoDepthUpdate";
+ static const char KAlfVisualFlagManualTransitionTime[] = "AlfVisualFlagManualTransitionTime";
+ static const char KAlfVisualFlagDrawAfterOthers[] = "AlfVisualFlagDrawAfterOthers";
+ static const char KAlfVisualFlagFreezeLayout[] = "AlfVisualFlagFreezeLayout";
+ static const char KAlfVisualFlagIgnorePointer[] = "AlfVisualFlagIgnorePointer";
+ static const char KAlfVisualFlagAutomaticLocaleMirroringEnabled[] = "AlfVisualFlagAutomaticLocaleMirroringEnabled";
+ static const char KAlfVisualFlagLast[] = "AlfVisualFlagLast";
+ }
+ }
+
+namespace commonbrushattributes
+ {
+ static const char KOwnerVisual[] = "ownervisual";
+ static const char KOpacity[] = "opacity";
+ static const char KSecondaryAlpha[] = "secondaryalpha";
+ static const char KLayer[] = "layer";
+
+ namespace layertypes
+ {
+ static const char KBrushLayerBackGround[] = "brushlayerbackground";
+ static const char KBrushLayerForeGround[] = "brushlayerforeground";
+ }
+ }
+
+namespace borderbrushattributes
+ {
+ static const char KImage[] = "image";
+ static const char KThicknessWidth[] = "thicknesswidth";
+ static const char KThicknessHeight[] = "thicknessheight";
+ static const char KImageOffsetX[] = "imageoffsetx";
+ static const char KImageOffsetY[] = "imageoffsety";
+ static const char KEdgeOffsetX[] = "edgeoffsetx";
+ static const char KEdgeOffsetY[] = "edgeoffsety";
+ }
+
+namespace dropshadowbrushattributes
+ {
+ static const char KSoftness[] = "softness";
+ static const char KDepth[] = "depth";
+ }
+
+namespace framebrushattributes
+ {
+ static const char KSkinID[] = "skinid";
+ }
+
+namespace gradientbrushattributes
+ {
+ static const char KImage[] = "image";
+ static const char KDirection[] = "direction";
+
+ namespace directiontypes
+ {
+ static const char KUp[] = "up";
+ static const char KDown[] = "down";
+ static const char KLeft[] = "left";
+ static const char KRight[] = "right";
+ }
+ }
+
+namespace imagebrushattributes
+ {
+ static const char KImage[] = "image";
+ static const char KImageScaleMode[] = "imagescalemode";
+ static const char KOffsetX[] = "offsetx";
+ static const char KOffsetY[] = "offsety";
+ static const char KScale[] = "scale";
+ }
+
+namespace shadowborderbrushattributes
+ {
+ static const char KBorderWitdh[] = "borderwitdh";
+ }
+
+namespace rect
+ {
+ static const char KTopLeftX[] = "topleftx";
+ static const char KTopLeftY[] = "toplefty";
+ static const char KBottomRightX[] = "bottomrightx";
+ static const char KBottomRightY[] = "bottomrighty";
+ }
+
+namespace padding
+ {
+ static const char KPaddingTop[] = "padding-top";
+ static const char KPaddingRight[] = "padding-right";
+ static const char KPaddingBottom[] = "padding-bottom";
+ static const char KPaddingLeft[] = "padding-left";
+ }
+
+namespace color
+ {
+ static const char KAlpha[] = "sca";
+ static const char KBlue[] = "scb";
+ static const char KGreen[] = "scg";
+ static const char KRed[] = "scr";
+ }
+
+namespace layoutattributes
+ {
+ static const char KParentLayout[] = "parentlayout";
+ static const char KHeight[] = "height";
+ static const char KWidth[] = "width";
+ static const char KMaxHeight[] = "maxheight";
+ static const char KMaxWidth[] = "maxwidth";
+ static const char KMinHeight[] = "minheight";
+ static const char KMinWidth[] = "minwidth";
+
+ static const char KUpdateLayoutTime[] = "updatelayouttime";
+ static const char KTransitionTime[] = "transitiontime"; // will replace updatelayouttime
+ static const char KScrolling[] = "scrolling";
+ static const char KAutomaticLocaleMirroring[] = "automirroring";
+ static const char KBaseUnitX[] = "baseunitx";
+ static const char KBaseUnitY[] = "baseunity";
+ static const char KPositionX[] = "positionx";
+ static const char KPositionY[] = "positiony";
+ static const char KInnerPaddingVertical[]="innerpadding-vertical";
+ static const char KInnerPaddingHoriz[]="innerpadding-horizontal";
+ static const char KLayoutScrollOffsetX[]="scrolloffsetx";
+ static const char KLayoutScrollOffsetY[]="scrolloffsety";
+ static const char KExpansionFlag[] = "expansion flag";
+
+ namespace grid
+ {
+ static const char KRows[] = "rows";
+ static const char KColumns[] = "columns";
+ static const char KRowWeight[] = "rowweight";
+ static const char KColumnWeight[] = "columnweight";
+ static const char KSetLayoutModeFlag[] = "setlayoutmodeflag";
+ static const char KClearLayoutModeFlag[] = "clearlayoutmodeflag";
+ }
+
+ namespace flow
+ {
+ static const char KFlowDirection[] = "flowdirection";
+ static const char KLayoutMode[] = "layoutmode";
+ static const char KLayoutCentering[] = "layoutcentering";
+
+ namespace flowdirectionvalues
+ {
+ static const char KHorizontal[] = "horizontal";
+ static const char KVertical[] = "vertical";
+ }
+
+ namespace layoutmodevalues
+ {
+ static const char KCenterperpendicular[] = "centerperpendicular";
+ static const char KFitperpendicular[] = "fitperpendicular";
+ }
+ }
+
+ namespace viewport
+ {
+ static const char KVirtualHeight[] = "virtualheight";
+ static const char KVirtualWidth[] = "virtualwidth";
+ static const char KViewportHeight[] = "viewportheight";
+ static const char KViewportWidth[] = "viewportwidth";
+ static const char KViewportPositionX[] = "viewportpositionx";
+ static const char KViewportPositionY[] = "viewportpositiony";
+ }
+ }
+
+namespace property
+ {
+ static const char KName[] = "name";
+ static const char KValue[] = "value";
+ }
+
+namespace textvisualattributes
+ {
+ static const char KLineWrap[] = "linewrap";
+ static const char KText[] = "text";
+ static const char KBackgroundType[] = "backgroundtype";
+ static const char KLineSpacing[] = "linespacing";
+ static const char KLineSpacingUnits[] = "linespacingunits";
+ static const char KFont[] = "font";
+ static const char KHorizontalAlign[] = "horizontalalign";
+ static const char KVerticalAlign[] = "verticalalign";
+ static const char KMaxLineCount[] = "maxlinecount";
+ static const char KStyle[] = "style";
+ static const char KPreconfiguredStyle[] = "preconfiguredstyle";
+ static const char KShadowOpacity[] = "shadowopacity";
+ static const char KTextSkinColorId[] = "textskincolorid";
+ static const char KTextColorSkinIndex[] = "textcolorskinindex";
+ static const char KEnableShadow[]= "enableshadow";
+ static const char KTextColor[]= "textcolor";
+ static const char KLocalisationText[] = "localisedtext"; //for localisation
+ static const char KLang[] = "localisedlanguage"; //for localisation
+ static const char KVarArgs[] = "varargs"; //for localisation
+
+ namespace linewrapvalue
+ {
+ static const char KManual[] = "manual";
+ static const char KTruncate[] = "truncate";
+ static const char KBreak[] = "break";
+ }
+
+ namespace backgroundtypevalue
+ {
+ static const char KDark[] = "dark";
+ static const char KLight[] = "light";
+ }
+
+ namespace linespacingvalue
+ {
+ static const char KPixel[] = "pixel";
+ static const char KTwips[] = "twips";
+ }
+
+ namespace horizontalalignvalue
+ {
+ static const char KLeft[] = "left";
+ static const char KCenter[] = "center";
+ static const char KRight[] = "right";
+ static const char KLocale[] = "locale";
+ static const char KLocaleMirrored[] = "localemirrored";
+ }
+
+ namespace verticalalignvalue
+ {
+ static const char KTop[] = "top";
+ static const char KCenter[] = "center";
+ static const char KBottom[] = "bottom";
+ }
+
+ namespace preconfiguredstylevalue
+ {
+ static const char KNormal[] = "normal";
+ static const char KNormalItalic[] = "normalitalic";
+ static const char KMenuItem[] = "menuitem";
+ static const char KSmall[] = "small";
+ static const char KMenuSmall[] = "menusmall";
+ static const char KMenuTitle[] = "menutitle";
+ static const char KLarge[] = "large";
+ static const char KSoftkey[] = "softkey";
+ static const char KSupplement[] = "supplement";
+ static const char KTitle[] = "title";
+ }
+ }
+
+namespace lctvisualattributes
+ {
+ static const char KLCT[] = "lct";
+ static const char KLCTNoSize[] = "lctnosize";
+ static const char KVariety[] = "variety";
+ static const char KAdditionalIcon[] = "additionalicon";
+ static const char KAdditionalIconCount[] = "additionaliconcount";
+ }
+
+namespace linevisualattributes
+ {
+ static const char KImagePath[] = "imagepath";
+ static const char KThickness[] = "thickness";
+ static const char KShadowThickness[] = "shadowthickness";
+ static const char KStartPos[] = "startposition";
+ static const char KEndPos[] = "endposition";
+ static const char KColor[] = "color";
+ static const char KAlphaMappingFunction[] = "alphamappingfunction";
+ static const char KWidthMappingFunction[] = "widthmappingfunction";
+ }
+
+namespace tactileattributes
+ {
+ static const char KEventInput[] = "eventinput";
+ static const char KFeedbackType[] = "feedbacktype";
+
+ namespace eventinputvalues
+ {
+ static const char KStylusDown[] = "stylusdown";
+ static const char KStylusUp[] = "stylysup";
+ }
+
+ namespace feedbacktypevalues
+ {
+ static const char KBasic[] = "basic";
+ static const char KSensitive[] = "sensitive";
+ }
+ }
+
+namespace mappingfunctions
+ {
+ static const char KConst[] = "constantmappingfunction";
+ static const char KLinear[] = "linearmappingfunction";
+ static const char KSine[] = "sinemappingfunction";
+ static const char KCosine[] = "cosinemappingfunction";
+ }
+
+
+namespace imagevisualattributes
+ {
+ static const char KImageScaleMode[] = "imagescalemode";
+ static const char KImageColorMode[] = "imagecolormode";
+ static const char KSecondaryAlpha[] = "secondaryalpha";
+ static const char KDropShadow[] = "dropshadow";
+ static const char KImagePath[] = "imagepath";
+ static const char KSecondaryImagePath[] = "secondaryimagepath";
+ static const char KScale[] = "scale";
+ static const char KOffset[] = "offset";
+ static const char KStretchMode[] = "stretchmode";
+ static const char KOffsetX[] = "offsetx";
+ static const char KOffsetY[] = "offsety";
+ static const char KSkinImagePath[] = "skinimagepath";
+ static const char KSecondarySkinImagePath[] = "skinsecondaryimage";
+ static const char KImageResourceRef[] = "imageresourceref";
+ static const char KSecondaryImageResourceRef[] = "secondaryimageresourceref";
+ static const char KImageWidth[] = "imagewidth";
+ static const char KImageHeight[] = "imageheight";
+ static const char KColor[] = "color";
+ static const char KSkinFrameImage[] = "skinframeimage";
+ static const char KAnimatedSkinImage[] = "animationimage";
+ static const char KFrameOuterRectTLX[] = "frameouterrecttlx";
+ static const char KFrameOuterRectTLY[] = "frameouterrecttly";
+ static const char KFrameOuterRectBRX[] = "frameouterrectbrx";
+ static const char KFrameOuterRectBRY[] = "frameouterrectbry";
+ static const char KFrameInnerRectTLX[] = "frameinnerrecttlx";
+ static const char KFrameInnerRectTLY[] = "frameinnerrecttly";
+ static const char KFrameInnerRectBRX[] = "frameinnerrectbrx";
+ static const char KFrameInnerRectBRY[] = "frameinnerrectbry";
+ static const char KLctFrameInnerrectId[] = "lctframeinnerrectid";
+
+ namespace imagescalemodevalue
+ {
+ static const char KNormal[] = "normal";
+ static const char KFitWidth[] = "fitwidth";
+ static const char KFitHeight[] = "fitheight";
+ static const char KCover[] = "cover";
+ static const char KFit[] = "fit";
+ static const char KFitInside[] = "fitinside";
+ }
+
+ namespace imagecolormodevalue
+ {
+ static const char KColorModulate[] = "colormodulate";
+ static const char KColorDimmed[] = "colordimmed";
+ }
+
+ namespace stretchmodevalue
+ {
+ static const char KNone[] = "none";
+ static const char KHorizontal[] = "horizontal";
+ static const char KVertical[] = "vertical";
+ static const char KFull[] = "full";
+ }
+
+ }
+
+namespace meshvisualattributes
+ {
+ static const char KMeshType[] = "meshtype";
+ static const char KImagePath[] = "imagepath";
+ static const char KSecondaryImagePath[] = "secondaryimagepath";
+ static const char KSpecularImagePath[] = "specularimagepath";
+ static const char KSecondaryAlpha[] = "secondaryalpha";
+ static const char KYawAngle[] = "yawangle";
+ static const char KPitchAngle[] = "pitchangle";
+ static const char KScale[] = "scale";
+
+ namespace meshtypevalue
+ {
+ static const char KProcedural[] = "procedural";
+ static const char KM3g[] = "m3g";
+ }
+ }
+
+namespace attributesetter
+ {
+ static const char KName[] = "name";
+ static const char KTargetValue[] = "targetvalue";
+ static const char KSourceValue[] = "sourcevalue";
+ static const char KInterpolationStyle[] = "interpolationstyle";
+ static const char KTime[] = "time";
+ static const char KTimeToTarget[] = "timetotarget";
+ static const char KMappingFunctionId[] = "mappingfunctionid";
+ static const char KType[] = "type";
+ static const char KDataField[] = "datafield";
+
+ namespace interpolationstylevalues
+ {
+ static const char KStyleSystemDefault[] = "stylesystemdefault";
+ static const char KStyleNone[] = "stylenone";
+ static const char KStyleLinear[] = "stylelinear";
+ static const char KSineWave[] = "sinewave";
+ static const char KDecelerate[] = "decelerate";
+ static const char KStyleAccelerate[] = "styleaccelerate";
+ static const char KStyleAdaptive[] = "styleadaptive";
+ static const char KStyleImpulse[] = "styleimpulse";
+ static const char KStyleLast[] = "stylelast";
+ }
+
+ namespace categoryvalues
+ {
+ static const char KData[] = "data";
+ }
+
+ namespace typevalues
+ {
+ static const char KStatic[] = "static";
+ static const char KDynamic[] = "dynamic";
+ }
+ }
+
+namespace curvepathattributes
+ {
+ static const char KEnableLoop[] = "enableloop";
+ static const char KOrigin[] = "origin";
+ static const char KOffsetX[] = "offsetx";
+ static const char KOffsetY[] = "offsety";
+ static const char KLine[] = "line";
+ static const char KArc[] = "arc";
+
+ namespace line
+ {
+ static const char KStartX[] = "startx";
+ static const char KStartY[] = "starty";
+ static const char KEndX[] = "endx";
+ static const char KEndY[] = "endy";
+ static const char KLength[] = "length";
+ }
+
+ namespace arc
+ {
+ static const char KOriginX[] = "originx";
+ static const char KOriginY[] = "originy";
+ static const char KHorizontalRadius[] = "horizontalradius";
+ static const char KVerticalRadius[] = "verticalradius";
+ static const char KStartAngle[] = "startangle";
+ static const char KEndAngle[] = "endangle";
+ static const char KLength[] = "length";
+ }
+ }
+
+namespace anchorlayoutinput
+ {
+ static const char KChildOrdinal[] = "childordinal";
+ static const char KAttachmentOrdinal[] = "attachmentordinal";
+ }
+
+namespace eventhandler
+ {
+ static const char KPriority[] = "priority";
+ static const char KType[] = "type";
+ static const char KState[] = "state";
+ static const char KCapture[] = "capture";
+ static const char KOwner[] = "owner";
+ }
+
+namespace eventinput
+ {
+ static const char KName[] = "name";
+ static const char KElementName[] = "elementname";
+
+ namespace namevalue
+ {
+ static const char KKeyEvent[] = "keyevent";
+ static const char KStylus[] = "stylus";
+ static const char KCustomEvent[] = "customevent";
+ static const char KEventPasserInput[] = "eventpasserinput";
+ static const char KPropertyInput[] = "attributeinput";
+
+ namespace keyeventvalue
+ {
+ static const char KScanCode[] = "scancode";
+ static const char KKeyCode[] = "keycode";
+ static const char KModifier[] = "modifier";
+ static const char KType[] = "type";
+ }
+
+ namespace keyeventtype
+ {
+ static const char KKeyUp[] = "keyup";
+ static const char KKeyDown[] = "keydown";
+ }
+
+ namespace stylusvalue
+ {
+ static const char KElementName[] = "elementname";
+ static const char KVisualName[] = "visualname";
+ }
+
+ namespace customeventvalue
+ {
+ static const char KEventId[] = "eventid";
+ static const char KUserData[] = "userdata";
+ }
+
+ namespace propertyinput
+ {
+ static const char KPropertyName[] = "propertyname";
+ }
+ }
+ }
+
+namespace eventoutput
+ {
+ static const char KName[] = "name";
+
+ namespace namevalue
+ {
+ static const char KCustomEvent[] = "customevent";
+ static const char KCancelEvent[] = "cancelevent";
+ static const char KAnimationCancel[] = "animationcancel";
+ static const char KAnimation[] = "animation";
+ static const char KPropertyOutput[] = "attributeoutput";
+ static const char KTactile[] = "tactile";
+ static const char KEventPasserOutput[] = "eventpasseroutput";
+ static const char KAppEvent[] = "appevent";
+
+ namespace customevent
+ {
+ static const char KEventId[] = "eventid";
+ static const char KEventType[] = "eventtype";
+ static const char KWidgetName[] = "widgetname";
+ static const char KDelay[] = "delay";
+ }
+
+ namespace cancelevent
+ {
+ static const char KEventId[] = "eventid";
+ static const char KWidgetName[] = "widgetname";
+ static const char KCancelAll[] = "cancelall";
+ }
+
+ namespace animationcancel
+ {
+ static const char KElementName[] = "elementname";
+ static const char KVisualName[] = "visualname";
+ static const char KOperationType[] = "operationtype";
+ static const char KCancelAll[] = "cancelall";
+ }
+
+ namespace animation
+ {
+ static const char KAnimationTime[] = "animationtime";
+ static const char KDelay[] = "delay";
+ }
+
+ namespace propertyoutput
+ {
+ static const char KTargetWidget[] = "targetwidget";
+ }
+
+ namespace tactile
+ {
+ static const char KFeedbackType[] = "feedbacktype";
+ }
+
+ namespace eventpasseroutput
+ {
+ static const char KSourceWidgetId[] = "sourcewidget";
+ static const char KTargetWidgetId[] = "targetwidget";
+ static const char KMapsTo[] = "mapsto";
+ static const char KMapToEventCustomData[] = "customdata";
+ }
+ }
+ }
+
+namespace operationname
+ {
+ static const char KNone[] = "none";
+ static const char KHide[] = "hide";
+ static const char KShow[] = "show";
+ static const char KEnableInput[] = "enableinput";
+ static const char KDisableInput[] = "disableinput";
+ static const char KRemoveAndDestroyAll[] = "removeanddestroyall";
+ static const char KModifyFlags[] = "modifyflags";
+ static const char KSetPrimaryImage[] = "setprimaryimage";
+ static const char KSetSecondaryImage[] = "setsecondaryimage";
+ static const char KSetText[] = "settext";
+ static const char KEnableTransformation[] = "enabletransformation";
+ static const char KDisableTransformation[] = "disabletransformation";
+ static const char KSet[] = "set";
+ static const char KSetWithSpeed[] = "setwithspeed";
+ static const char KSetStyle[] = "setstyle";
+ static const char KLoadIdentity[] = "loadidentity";
+ static const char KTranslate[] = "translate";
+ static const char KScale[] = "scale";
+ static const char KRotate[] = "rotate";
+ static const char KReplaceStep[] = "replacestep";
+ }
+
+namespace keyeventmodifier
+ {
+ static const char KAlt[] = "alt";
+ static const char KCtrl[] = "ctrl";
+ static const char KShift[] = "shift";
+ static const char KFunc[] = "func";
+ static const char KCapsLock[] = "capslock";
+ static const char KNumLock[] = "numlock";
+ static const char KScrollLock[] = "scrolllock";
+ }
+
+namespace visualconnection
+ {
+ static const char KTargetWidget[] = "targetwidget";
+ static const char KTargetElement[] = "targetelement";
+ static const char KTargetVisual[] = "targetvisual";
+ static const char KSourceWidget[] = "sourcewidget";
+ static const char KSourceElement[] = "sourceelement";
+ static const char KSourceVisual[] = "sourcevisual";
+ }
+
+
+namespace listcontrolattributes
+ {
+ static const char KFocusloop[] = "focusloop";
+ static const char KPagescroll[] = "pagescroll";
+ static const char KExpandItemDelay[] = "expanditemdelay";
+ static const char KMarkable[] = "markable";
+ static const char KTactile[] = "tactile";
+ static const char KScrollbarMode[] = "scrollbarmode";
+
+ namespace markablevalue
+ {
+ static const char KNone[] = "none";
+ static const char KSingle[] = "single";
+ static const char KMulti[] = "multi";
+ }
+
+ namespace tactilevalue
+ {
+ static const char KEnabled[] = "enabled";
+ static const char KDisabled[] = "disabled";
+ }
+
+ namespace scrollbarmodevalue
+ {
+ static const char KHide[] = "hide";
+ static const char KShow[] = "show";
+ static const char KAuto[] = "auto";
+ }
+ }
+
+namespace listflowelement
+ {
+ static const char KParentElement[] = "parentelement";
+ static const char KDefaultParentLayout[] = "defaultparentlayout";
+ static const char KScrollingTime[] = "scrollingtime";
+ static const char KPageScrollingTime[] = "pagescrollingtime";
+ static const char KInsertingTime[] = "insertingtime";
+ static const char KRemovingTime[] = "removingtime";
+ static const char KChangingTime[] = "changingtime";
+ static const char KFadeInTime[] = "fadeintime";
+ static const char KFadeInDelay[] = "fadeindelay";
+ static const char KFadeOutDelay[] = "fadeoutdelay";
+ static const char KFadeOutTime[] = "fadeouttime";
+ static const char KPartialsOpacity[] = "partialsopacity";
+ static const char KItemHeight[] = "itemheight";
+ static const char KItemWidth[] = "itemwidth";
+ static const char KHorizontalAlign[] = "horizontalalign";
+ static const char KScrollOffsetY[] = "scrolloffsety";
+ static const char KVerticalOffset[] = "verticaloffset";
+ static const char KFocusInFront[] = "focusinfront";
+ }
+
+namespace gridcontrolattributes
+ {
+ static const char KTactile[] = "tactile";
+
+ namespace tactile
+ {
+ static const char KTactileOn[] = "on";
+ static const char KTactileOff[] = "off";
+ }
+ }
+
+namespace griddefaultbaseelement
+ {
+ static const char KLooping[] = "looping";
+ static const char KFadingEffect[] = "fadingeffect";
+ static const char KDefaultAnimationTime[] = "defaultanimationtime";
+ static const char KSingleRow[] = "singlerow";
+ static const char KSingleTapSelect[] = "singletapselect";
+ static const char KFocussedIndex[] = "focussedindex";
+ static const char KHorizScrollbarMode[] = "horizontalscrollbarmode";
+ static const char KVertScrollbarMode[] = "verticalscrollbarmode";
+ static const char KCellWidth[] = "cellwidth";
+ static const char KCellHeight[] = "cellheight";
+ static const char KMaxColumns[] = "maxcolumns";
+
+ namespace looping
+ {
+ static const char KLoopingOn[] = "on";
+ static const char KLoopingOff[] = "off";
+ }
+
+ namespace singletapselect
+ {
+ static const char KSingleTapSelectOn[] = "on";
+ static const char KSingleTapSelectOff[] = "off";
+ }
+
+ namespace fading
+ {
+ static const char KFadingOn[] = "on";
+ static const char KFadingOff[] = "off";
+ }
+
+ namespace scrollbarmodevalue
+ {
+ static const char KHide[] = "hide";
+ static const char KShow[] = "show";
+ static const char KAuto[] = "auto";
+ }
+ }
+
+namespace griddefaultfocuselement
+ {
+ static const char KImagePath[] = "imagepath";
+ static const char KSkinImagePath[] = "skinimagepath";
+ static const char KSkinFrameImage[] = "skinframeimage";
+ }
+
+namespace griddefaultitemelement
+ {
+ static const char KState[] = "state";
+ static const char KSkinEnabled[] = "skinenabled";
+
+ namespace itemstate
+ {
+ static const char KEnabled[] = "enabled";
+ static const char KDisabled[] = "disabled";
+ }
+ }
+
+namespace gridpinningbaseelement
+ {
+ static const char KOrientation[] = "orientation";
+ static const char KFocussedIndex[] = "focussedindex";
+ static const char KPinnedPosition[] = "pinnedposition";
+ static const char KPinnedItemSize[] = "pinneditemsize";
+ static const char KDefaultAnimationTime[] = "defaultanimationtime";
+ static const char KCellWidth[] = "cellwidth";
+ static const char KCellHeight[] = "cellheight";
+ static const char KArrow[] = "arrow";
+
+ namespace orientation
+ {
+ static const char KHorizontal[] = "horizontal";
+ static const char KVertical[] = "vertical";
+ }
+ namespace arrow
+ {
+ static const char KEnableArrow[] = "enable";
+ static const char KDisableArrow[] = "disable";
+ }
+ }
+
+namespace scrollbarcontrolattributes
+ {
+ static const char KTactile[] = "tactile";
+
+ namespace tactile
+ {
+ static const char KTactileOn[] = "on";
+ static const char KTactileOff[] = "off";
+ }
+ }
+
+namespace scrollbardefaultbaseelement
+ {
+ static const char KEnableArrows[] = "enablearrows";
+ static const char KAlignment[] = "alignment";
+ static const char KOrientation[] = "orientation";
+
+ // Thumb specific Attributes
+ static const char KThumbWidth[] = "thumbwidth";
+ static const char KThumbOpacity[] = "thumbopacity";
+ static const char KThumbMinimumSize[] = "thumbminimumsize";
+ static const char KThumbAnimationTime[] = "thumbanimationtime";
+
+ // image attributes
+ static const char KTrackStartImage[] = "trackstartimage";
+ static const char KTrackMiddleImage[] = "trackmiddleimage";
+ static const char KTrackEndImage[] = "trackendimage";
+ static const char KThumbStartImage[] = "thumbstartimage";
+ static const char KThumbMiddleImage[] = "thumbmiddleimage";
+ static const char KThumbEndImage[] = "thumbendimage";
+ static const char KTrackStartImagePressed[] = "trackstartimagepressed";
+ static const char KTrackMiddleImagePressed[] = "trackmiddleimagepressed";
+ static const char KTrackEndImagePressed[] = "trackendimagepressed";
+ static const char KThumbStartImagePressed[] = "thumbstartimagepressed";
+ static const char KThumbMiddleImagePressed[] = "thumbmiddleimagepressed";
+ static const char KThumbEndImagePressed[] = "thumbendimagepressed";
+ static const char KStartArrowImage[] = "startarrowimage";
+ static const char KEndArrowImage[] = "endarrowimage";
+
+ namespace alignment
+ {
+ static const char KLeft[] = "left";
+ static const char KRight[] = "right";
+ static const char KTop[] = "top";
+ static const char KBottom[] = "bottom";
+ }
+
+ namespace orientation
+ {
+ static const char KHorizontal[] = "horizontal";
+ static const char KVertical[] = "vertical";
+ }
+ }
+
+namespace anchor
+ {
+ static const char KAnchorType[] = "anchortype";
+ static const char KAttachmentOrigin[] = "attachmentorigin";
+
+ namespace anchortypevalue
+ {
+ static const char KAnchorTypeNone[] = "anchortypenone";
+ static const char KAnchorTypeWidth[] = "anchortypewidth";
+ static const char KAnchorTypeLeft[] = "anchortypeleft";
+ static const char KAnchorTypeHCenter[] = "anchortypehcenter";
+ static const char KAnchorTypeRight[] = "anchortyperight";
+ static const char KAnchorTypeHeight[] = "anchortypeheight";
+ static const char KAnchorTypeTop[] = "anchortypetop";
+ static const char KAnchorTypeVCenter[] = "anchortypevcenter";
+ static const char KAnchorTypeBottom[] = "anchortypebottom";
+ static const char KAnchorTypeSize[] = "anchortypesize";
+ static const char KAnchorTypeTopLeft[] = "anchortypetopleft";
+ static const char KAnchorTypeTopCenter[] = "anchortypetopcenter";
+ static const char KAnchorTypeTopRight[] = "anchortypetopright";
+ static const char KAnchorTypeCenterLeft[] = "anchortypecenterleft";
+ static const char KAnchorTypeCenter[] = "anchortypecenter";
+ static const char KAnchorTypeCenterRight[] = "anchortypecenterright";
+ static const char KAnchorTypeBottomLeft[] = "anchortypebottomleft";
+ static const char KAnchorTypeBottomCenter[] = "anchortypebottomcenter";
+ static const char KAnchorTypeBottomRight[] = "anchortypebottomright";
+ }
+
+ namespace attachmentoriginvalue
+ {
+ static const char KAnchorAttachmentOriginNone[] = "anchorattachmentoriginnone";
+ static const char KAnchorAttachmentOriginLeft[] = "anchorattachmentoriginleft";
+ static const char KAnchorAttachmentOriginHCenter[] = "anchorattachmentoriginhcenter";
+ static const char KAnchorAttachmentOriginRight[] = "anchorattachmentoriginright";
+ static const char KAnchorAttachmentOriginTop[] = "anchorattachmentorigintop";
+ static const char KAnchorAttachmentOriginVCenter[] = "anchorattachmentoriginvcenter";
+ static const char KAnchorAttachmentOriginBottom[] = "anchorattachmentoriginbottom";
+ static const char KAnchorAttachmentOriginTopLeft[] = "anchorattachmentorigintopleft";
+ static const char KAnchorAttachmentOriginTopCenter[] = "anchorattachmentorigintopcenter";
+ static const char KAnchorAttachmentOriginTopRight[] = "anchorattachmentorigintopright";
+ static const char KAnchorAttachmentOriginCenterLeft[] = "anchorattachmentorigincenterleft";
+ static const char KAnchorAttachmentOriginCenter[] = "anchorattachmentorigincenter";
+ static const char KAnchorAttachmentOriginCenterRight[] = "anchorattachmentorigincenterright";
+ static const char KAnchorAttachmentOriginBottomLeft[] = "anchorattachmentoriginbottomleft";
+ static const char KAnchorAttachmentOriginBottomCenter[] = "anchorattachmentoriginbottomcenter";
+ static const char KAnchorAttachmentOriginBottomRight[] = "anchorattachmentoriginbottomright";
+ }
+ }
+
+namespace metric
+ {
+ static const char KMagnitude[] = "magnitude";
+ static const char KTextStyleId[] = "textstyleid";
+ }
+
+namespace imageresource
+ {
+ static const char KLogicalName[] = "logicalname";
+ static const char KResourceName[] = "resourcename";
+ static const char KResourceType[] = "resourcetype";
+
+ namespace resourcetypevalue
+ {
+ static const char KTheme[] = "theme";
+ static const char KFile[] = "file";
+ }
+ }
+
+namespace controlattributes
+ {
+ static const char KType[] = "type";
+ static const char KScrollType[] = "scrolltype";
+ static const char KItemType[] = "itemtype";
+ static const char KFocusLoop[] = "focusloop";
+ static const char KPageScroll[] = "pagescroll";
+ static const char KSelectionType[] = "selectiontype";
+ static const char KNumModes[] = "nummodes";
+ static const char KEnable[] = "enable";
+ static const char KFocus[] = "focus";
+ static const char KMarkable[] = "markable";
+ }
+
+namespace layoutmanager
+ {
+ static const char KType[] = "type";
+ static const char KId[] = "id";
+
+ namespace lctanchorlayout
+ {
+ static const char KWidgetAnchor[] = "widgetanchor";
+ }
+ }
+
+ } // namespace duiuimodel
+#endif // DUIPROPERTY_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfappeventlistener.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,79 @@
+/*
+* 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: Provides system state information
+*
+*/
+
+
+#ifndef IALFAPPEVENTLISTENER_H
+#define IALFAPPEVENTLISTENER_H
+
+class TAlfEvent;
+
+namespace osncore
+ {
+ class UString;
+ }
+
+using namespace osncore;
+
+namespace Alf
+{
+/**
+ * @class IAlfAppEvent
+ *
+ * @discussion Provides function to handle application events.
+ *
+ */
+class IAlfAppEventListener
+ {
+public:
+ /**
+ * @function handleApplicationEvent
+ *
+ * Function will be called when application event triggers.
+ * Application has to register itself to listen events by
+ * using duiengine's subscribeAppEvent function
+ *
+ * example:
+ * <appevents>
+ * <eventhandler id="pressed" owner="gridwidget1">
+ * <eventinput id="pressedinput" name="customevent">
+ * <property name="eventid" value="1333" />
+ * <!-- value 1333 is selection changed in grid widget -->
+ * </eventinput>
+ * <eventoutput name="appevent">
+ * <property value="itemclicked"/>
+ * </eventoutput>
+ * </eventhandler>
+ * </appevents>
+ *
+ * Register your application to listen application events via IDuiEngineConstruction:
+ * duiEngineConstructionInterface->subscribeAppEvents(*this);
+ *
+ * aCmd is the value you have set on property's value attribute, in this case
+ * "itemclicked"
+ *
+ * @param aCmd command which is specified to eventoutput
+ * @param aEvent contains event specific data
+ * @return void
+ */
+ virtual void handleApplicationEvent(const UString& aCmd, const TAlfEvent& aEvent) = 0;
+ };
+}
+
+
+#endif
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfbranch.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,129 @@
+/*
+* 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: Defines a branch data type for the data hierarchy
+*
+*/
+
+
+
+#ifndef I_ALFBRANCH_H
+#define I_ALFBRANCH_H
+
+
+// INCLUDES
+#include <alf/ialfvarianttype.h>
+
+namespace osncore
+ {
+class UString;
+ }
+
+using osncore::UString;
+
+namespace Alf
+ {
+class IAlfMap;
+class IAlfSortFunction;
+
+/**
+ * An interface for Container data type.
+ *
+ * @lib hitchcockwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfBranch : public IAlfVariantType
+ {
+public:
+
+ /**
+ * The data for this branch
+ *
+ * @return the data for this branch as a Map Interface pointer
+ * @since S60 ?S60_version
+ */
+ virtual IAlfMap* data() = 0;
+
+ /**
+ * Set the data for this branch.
+ * @param aData The new data for this branch.
+ * @since S60 ?S60_version
+ */
+ virtual void setData( IAlfMap* aData ) = 0;
+
+ /**
+ * The data for a child at a given index
+ * @param aIndex- index of the child at which the data needs to be fetched
+ * @return the data for its children as a Map Interface pointer
+ * @since S60 ?S60_version
+ */
+ virtual IAlfVariantType* childData(int aIndex) = 0;
+
+ /**
+ * APi to get the childName
+ * @param aIndex- index of the child at which the data needs to be fetched
+ * @return the name for the child at the given index
+ * @since S60 ?S60_version
+ */
+ virtual const UString& childName(int aIndex) = 0;
+
+ /**
+ * The data for all children.
+ * @return the data for its children as a Map Interface pointer
+ * @since S60 ?S60_version
+ */
+ virtual IAlfMap* childData() = 0;
+
+ /**
+ * Set the data for children of this branch.
+ * @param aChildData The new data for the children.
+ * @since S60 ?S60_version
+ */
+ virtual void setChildData( IAlfMap* aChildData ) = 0;
+
+ /**
+ * Get the number of children in this branch
+ * @return The number of children
+ * @since S60 ?S60_version
+ */
+ virtual uint childrenCount() = 0;
+
+ /**
+ * Destructor
+ * @since S60 ?S60_version
+ */
+ virtual ~IAlfBranch() {};
+
+ /**
+ * Sorts the branch using user defined sort function.
+ *
+ * @param aSortFunction - sort function.
+ * @since S60 ?S60_version
+ */
+ virtual void sort( const IAlfSortFunction& aSortFunction ) = 0;
+
+ /**
+ * Function to Clone the Branch
+ * @since S60 ?S60_version
+ * @return The clone
+ */
+ virtual IAlfBranch* clone() = 0;
+
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFBRANCH_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfcontainer.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,131 @@
+/*
+* 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 I_ALFCONTAINER_H
+#define I_ALFCONTAINER_H
+
+
+// INCLUDES
+#include <alf/ialfvarianttype.h>
+
+namespace Alf
+ {
+
+// FORWARD DECLARATIONS
+class IAlfSortFunction;
+
+/**
+ * An interface for Container data type.
+ * @lib hitchcockwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfContainer : public IAlfVariantType
+ {
+public:
+
+ /**
+ * Adds a variantData item into the container
+ * @param aData variant data to be added into the container
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ virtual void addItem(IAlfVariantType* aData)=0;
+
+ /**
+ * Adds a variantData item into the container
+ * @param aIndex index where the data is added
+ * @param aData variant data to be added into the container
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ virtual void addItem(uint aIndex, IAlfVariantType* aData)=0;
+
+ /**
+ * Gets the Number of items in the container
+ *
+ * @return number of items in the container
+ * @since S60 ?S60_version
+ */
+ virtual int count() = 0;
+
+ /**
+ * Gets the Item at a given index in the container
+ * @param aIndex - index at which the element is required
+ * @return item as a MlfVariantType
+ * @since S60 ?S60_version
+ */
+ virtual IAlfVariantType* item(uint aIndex) = 0;
+
+ /**
+ * Clones the entire container
+ *
+ * @return the cloned container
+ * @since S60 ?S60_version
+ */
+ virtual IAlfContainer* clone() = 0;
+
+
+ /**
+ * Removes an item from given index in the container
+ * @param aIndex - index at which the element is to be removed
+ * @return item as a MlfVariantType
+ * @since S60 ?S60_version
+ */
+ virtual void removeItem(uint aIndex) = 0;
+
+ /**
+ * Clear the Container
+ *
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void clear() = 0;
+
+ /**
+ * Replace an item from given index in the container
+ * @param aIndex - index at which the element is to be replaced
+ * @param aNewData - new Data to be replaced
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void replaceItem(uint aIndex, IAlfVariantType* aNewData ) = 0;
+
+ /**
+ * sorts the container using user defined sort function.
+ *
+ * @param aSortFunction - sort function.
+ * @since S60 ?S60_version
+ */
+ virtual void sort( const IAlfSortFunction& aSortFunction ) = 0;
+
+ /**
+ * Destructor
+ *
+ * @since S60 ?S60_version
+ */
+ virtual ~IAlfContainer(){}
+ };
+
+
+ } // namespace Alf
+
+#endif // I_ALFCONTAINER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfelement.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,373 @@
+/*
+* Copyright (c) 2007 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: The interface and the basic implementation for presentation elements.
+*
+*/
+
+
+#ifndef I_ALFELEMENT_H
+#define I_ALFELEMENT_H
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+#include <osn/osntypes.h>
+
+class CAlfVisual;
+class CAlfLayout;
+
+using namespace osncore;
+
+namespace duiuimodel
+ {
+class DuiNode;
+ }
+using namespace duiuimodel;
+
+namespace Alf
+ {
+//FORWARD DECLARATION
+class IAlfVariantType;
+class IAlfBranch;
+class IAlfWidgetControl;
+class AlfCustomInitDataBase;
+class IAlfVisualTemplate;
+
+namespace alfelement
+ {
+static const IfId ident=
+ {
+ 0,"alfelement"
+ };
+ }
+
+/**
+ * The interface for presentation elements.
+ * The presentation of a widget can be divided into parts by using
+ * elements. Each element is responsible for populating and maintaining
+ * a specific part of the presentation. The element creates and updates
+ * visual trees according to the data provided by the control. Elements
+ * may also implement presentation logic, such as visual lifetime and
+ * resource management, scrolling, and animations.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfElement : public IAlfInterfaceBase
+ {
+public:
+ static inline const IfId& type()
+ {
+ return alfelement::ident;
+ }
+ /**
+ * Get the name of the element.
+ *
+ * @since S60 ?S60_version
+ * @return The name of the element.
+ */
+ virtual const char* name() const = 0;
+
+ /**
+ * Create a new visual tree to the child element of this element.
+ * Some elements, e.g., CAlfRecyclingGridElement and CAlfRecyclingCurvePathElement
+ * implement visual lifetime management to control the creation of the
+ * visual trees in the child elements. This method can be implemented to
+ * control, if the visual tree should be created or not.
+ *
+ * @since S60 ?S60_version
+ * @param aElement The child element.
+ * @param aChildData The data for the new visual tree.
+ * @param aData The parent branch of the added data. Used to determine the
+ * visual trees that have outdated data IDs.
+ *
+ * @param aIndex The index of the new data .
+ */
+ virtual void createChildVisualTree( IAlfElement* aElement,
+ IAlfVariantType& aChildData,
+ IAlfBranch& aData,
+ int aIndex, uint aDataID ) = 0;
+
+ /**
+ *
+ *
+ * @since S60 ?S60_version
+ * @param aData
+ * @param aParentData
+ * @param aIndex
+ * @param aParentDataID
+ * @param aParentLayout
+ * @param aLayoutIndex
+ * @return
+ */
+ virtual CAlfVisual* createVisualTree( IAlfVariantType& aData,
+ IAlfBranch& aParentData,
+ int aIndex, uint aParentDataID,
+ CAlfLayout* aParentLayout,
+ int aLayoutIndex ) = 0;
+
+ /**
+ *
+ *
+ * @since S60 ?S60_version
+ * @param aData
+ * @param aDataID
+ * @param aParentLayout
+ * @param aLayoutIndex
+ * @return
+ */
+ virtual CAlfVisual* createVisualTree( IAlfVariantType& aData,
+ uint aDataID,
+ CAlfLayout* aParentLayout,
+ int aLayoutIndex ) = 0;
+
+ /**
+ *
+ *
+ * @since S60 ?S60_version
+ * @param aElement
+ * @param aData
+ * @param aIndex
+ * @param aDataID
+ * @return void
+ */
+ virtual void removeChildVisualTree( IAlfElement* aElement,
+ IAlfBranch& aData,
+ int aIndex, uint aDataID ) = 0;
+
+ /**
+ *
+ *
+ * @since S60 ?S60_version
+ * @param aParentData
+ * @param aIndex
+ * @param aParentDataID
+ * @return void
+ */
+ virtual void removeVisualTree( IAlfBranch& aParentData, int aIndex,
+ uint aParentDataID ) = 0;
+
+ /**
+ *
+ *
+ * @since S60 ?S60_version
+ * @param aData
+ * @param aDataID
+ * @return void
+ */
+ virtual void removeVisualTree( IAlfVariantType& aData, uint aDataID ) = 0;
+
+ /**
+ * Create or update a visual tree according to the given data. A data id is assigned
+ * to the created visual tree. If a visual tree with the given data id already
+ * exists, the visuals are just updated. The caller is responsible for providing
+ * the parent layout for the visual tree. The default parent layout may or may not
+ * be used.
+ *
+ * @since S60 ?S60_version
+ * @param aData The data for the visuals.
+ * @param aOldData the old data for the visuals. The data, that is replaced.
+ * @param aDataID The data id for the visual tree.
+ * @return The created or updated visual tree.
+ */
+ virtual void updateVisualTree( IAlfVariantType& aNewData,
+ IAlfVariantType& aOldData,
+ uint aDataID ) = 0;
+
+ /**
+ * Replace an existing visual tree with a new one. A data id is used
+ * to find the visual tree to be replaced. A new data id is assigned
+ * to the visual tree, and the visuals are updated according to the
+ * given data. The method is used for recycling visual trees for
+ * a large number of presentation instances (@see CAlfRecyclingGridElement).
+ * The structure of the new visual tree should match the structure
+ * of the replaced visual tree. Otherwise, the visuals structure
+ * needs to be modified by creating and destroying visuals. The visual
+ * tree remains in the same layout as it was before.
+ *
+ * @since S60 ?S60_version
+ * @param aData The data for the new visuals.
+ * @param aDataID The data id for the new visual tree.
+ * @param aOldDataID The data id of the visual tree to be replaced.
+ */
+ virtual void replaceVisualTree( IAlfVariantType& aData,
+ uint aDataID, uint aOldDataID ) = 0;
+
+ /**
+ *
+ *
+ * @since S60 ?S60_version
+ * @param aParentBranch
+ * @param aStartIndex
+ * @param aOffset
+ * @param aOldParentDataId
+ * @param aParentDataID
+ * @return void
+ */
+ virtual void updateDataIDs( IAlfBranch& aParentBranch, int aStartIndex,
+ int aOffset, uint aOldParentDataId,
+ uint aParentDataID ) = 0;
+
+ /**
+ * Get the default parent layout for the visual trees created by this element.
+ * The default parent layout is used for all root level elements (@see RootElement()).
+ *
+ * @since S60 ?S60_version
+ * @param aParentDataID The data id associated with the parent element instance.
+ * @return The default layout for the visual trees created by this element, or NULL
+ * if the default layout does not exist.
+ */
+ virtual CAlfLayout* defaultParentLayout(uint aParentDataID) = 0;
+
+ /**
+ * Find a visual according to the name of the visual and the data id
+ * used to create the visual tree.
+ *
+ * @param aName The name of the visual.
+ * @param aDataID The data id associated with the visual tree.
+ * @return The default layout for the visual trees created by this element.
+ */
+ virtual CAlfVisual* findVisual(const char* aName, uint aDataID) = 0;
+
+ /**
+ * Get the data id of a visual tree created by this element.
+ *
+ * @param aVisual The root of the visual tree.
+ * @return The data id associated with the visual tree.
+ */
+ virtual uint dataID(const CAlfVisual& aVisual) const = 0;
+
+ /**
+ * Get the parent element of this element. Some elements may have
+ * child elements (@see CAlfRecyclingGridElement). In this case,
+ * the parent element is responsible for populating the child elements.
+ * Elements with no parent element are called root elements and
+ * populated directly by the control.
+ *
+ * @since S60 ?S60_version
+ * @return The parent element, or NULL if this is a root element.
+ */
+ virtual const IAlfElement* parentElement() const = 0 ;
+
+ /**
+ * Set the parent element for this element.
+ *
+ * @since S60 ?S60_version
+ * @param aParent The parent element of this element.
+ */
+ virtual void setParentElement(IAlfElement& aParent) = 0;
+
+ /**
+ * removes and destroys all the visuals
+ *
+ * @since S60 ?S60_version
+ * @param aTimeMilliseconds the animation time for remove.
+ */
+ virtual void removeAndDestroyVisuals( int aTimeMilliseconds ) = 0;
+
+ /**
+ * Checks if referred visual is part of this element.
+ *
+ * @since S60 ?S60_version
+ * @param aVisual reference to visual under inspection.
+ */
+ virtual bool contains(CAlfVisual& aVisual) const = 0;
+
+ /**
+ * Sets the visual template for the element. This element
+ * will acquire ownership of the visual template hierarchy
+ * under the given visual template.
+ * Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ * @param aTemplate Root of the visual template hierarchy to be set
+ * into the widget element.
+ */
+ virtual void setVisualTemplate(IAlfVisualTemplate& aTemplate) throw() = 0;
+
+ /**
+ * Returns the root visual template of the visual template hierarchy
+ * owned by this element. Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ * @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 IAlfVisualTemplate* getVisualTemplate() const throw() = 0;
+
+ /**
+ * Destroyes the visual template object assigned to this element and the whole
+ * visual template hierarchy under it. Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ */
+ virtual void destroyVisualTemplate() throw() = 0;
+
+ /**
+ * Removes the visual template from this element. Returns pointer to the removed visual
+ * template object. The ownership of the visual template object is transferred to the
+ * caller. Call to this method cannot throw an exception.
+ *
+ * @since S60 ?S60_version
+ *
+ * @return The visual template object that was owned by this element. NULL if no visual
+ * template hierarchy was owned by this element.
+ */
+ virtual IAlfVisualTemplate* removeVisualTemplate() throw() = 0;
+
+ /**
+ * Destructor
+ */
+ virtual ~IAlfElement(){}
+ };
+
+
+/**
+ * Placeholder for information required to instantiate an element
+ * via the widget factory mechanism.
+ * A pointer to this structure is casted to a void pointer and sent to the
+ * factory plugin.
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+struct AlfElementInitData
+ {
+ /**
+ * Owner control for the element.
+ */
+ IAlfWidgetControl* mControl;
+ /**
+ * Element instance ID.This uniquely identifies every element instance
+ * and is its name. Also see AlfElement::name().
+ */
+ char* mElementId;
+
+ /**
+ * Pointer to node in declaration containing information for the element.
+ */
+ DuiNode* mNode;
+
+ /**
+ * Pointer to custom data passed via factory mechanism
+ * Not Owned.
+ */
+ AlfCustomInitDataBase* mCustomData;
+ };
+
+
+ } // namespace Alf
+#endif // I_ALFELEMENT_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfflowlayoutpolicy.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2007 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: flow layout policy.
+*
+*/
+
+
+#ifndef I_ALFFLOWLAYOUTPOLICY
+#define I_ALFFLOWLAYOUTPOLICY
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+
+namespace Alf
+ {
+
+namespace ialfflowlayoutpolicy
+ {
+ static const IfId Ident =
+ {
+ 0, "flowlayoutpolicy"
+ };
+ }
+
+/**
+ * interface for flow layout policy. The policy-interface can be queried
+ * from the layoutmanager using the makeInterface- call.
+ * @see IAlfLayoutManager
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfFlowLayoutPolicy : public IAlfInterfaceBase
+ {
+public:
+
+ /** Flow directions. */
+ enum flowDirection
+ {
+ /**
+ * Flow horizontally. System wide layout mirroring is considered
+ * to determine whether visuals are layed from left to right
+ * or from right to left.
+ */
+ EFlowHorizontal,
+
+ /** Flow vertically. */
+ EFlowVertical
+ };
+
+ /** Mode flags that specify how the flow is laid out. */
+ enum flowModeFlags
+ {
+ /** Center the children perpendicular to the flow direction.
+ For example, if the flow direction is horizontal (left->right)
+ this flag will center the children vertically along the flow. */
+ EFlowModeCenterPerpendicular = 0x1,
+
+ /** Fit the children perpendicular to the flow direction.
+ For example, if the flow direction is horizontal, the children
+ will be vertically resized to fit the layout's rectangle. */
+ EFlowModeFitPerpendicular = 0x2
+ };
+public:
+
+ static inline const IfId& type()
+ {
+ return ialfflowlayoutpolicy::Ident;
+ }
+
+ virtual inline ~IAlfFlowLayoutPolicy() {}
+
+ /**
+ * Sets the direction of the flow.
+ *
+ * @param aDirection Flow direction.
+ */
+ virtual void setFlowDirection(enum flowDirection aDirection) = 0;
+
+ /**
+ * returns the flow direction
+ *
+ * @param aDirection Flow direction.
+ */
+ virtual enum flowDirection flowDirection() const = 0;
+
+ /**
+ * Sets the mode of the flow. The mode flags determine how the flow layout
+ * behaves.
+ *
+ * @param aMode Mode flags (OR'd together).
+ *
+ * @see IAlfFlowLayoutPolicy::flowModeFlags
+ */
+ virtual void setMode(int aMode) = 0;
+
+ /**
+ * Returns the mode flags of the flow.
+ *
+ * @see IAlfFlowLayoutPolicy::flowModeFlags
+ *
+ * @return Returns the current mode flags.
+ */
+ virtual int mode() const = 0;
+
+public:
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType ) = 0;
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFFLOWLAYOUTPOLICY
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfgridlayoutpolicy.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 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: interface for layout policy
+*
+*/
+
+
+#ifndef I_ALFGRIDLAYOUTMANAGER
+#define I_ALFGRIDLAYOUTMANAGER
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+
+class CAlfLayout;
+class CAlfControl;
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+
+namespace ialfgridlayoutpolicy
+ {
+ static const IfId Ident =
+ {
+ 0, "gridlayoutpolicy"
+ };
+ }
+
+using Alf::CAlfWidgetControl;
+
+
+
+/**
+ * The interface for grid layout policy
+ *
+ * Provides grid specific layout APIs
+ *
+ * @code
+ * // Create layout manager interface.
+ * IAlfLayoutManager* layoutManager = IAlfInterfaceBase::makeInterface<IAlfLayoutManager>(control);
+ *
+ * // See if layout policy is supported in the given layout manager.
+ * IAlfGridLayoutPolicy* layoutPolicy = IAlfInterfaceBase::makeInterface<IAlfGridLayoutPolicy>(layoutManager);
+ *
+ * if(layoutPreferences != 0)
+ * {
+ * int rows = layoutPolicy->dimensionCount(EAlfGridDimensionRow);
+ * }
+ * @endcode
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfGridLayoutPolicy : public IAlfInterfaceBase
+ {
+public:
+
+ static inline const IfId& type()
+ {
+ return ialfgridlayoutpolicy::Ident;
+ }
+
+ virtual inline ~IAlfGridLayoutPolicy() {}
+
+public:
+ /* Each dimension corresponds to a different axis for the grid blocks */
+ enum gridLayoutDimension
+ {
+ EGridDimensionColumn = 0,
+ EGridDimensionRow
+ };
+
+public:
+
+ /**
+ * Sets the number and weights of blocks in this grid layout in the direction of the specified
+ * dimension. Each block's weight will be set to equal the supplied value, the result
+ * of which is that all blocks will be equally spaced, whatever the units.
+ *
+ * @see appendWeight; for more information on how weights are used to calculate layout positions.
+ *
+ * @note This API could be useful if then subsequent calls to @c replaceWeight are made to
+ * change specific values, depending on how many of the values are different.
+ * @note Calling this with aCount set to 0 will clear all of the existing weights in the direction
+ * of the specified dimension.
+ * @note this is the same as using metrics with unit type EAlfUnitWeight.
+ *
+ * @param aDim the dimension along which to fill
+ * @param aCount The number of lines of blocks to fill
+ * @param aWeight the weights to be used for all blocks
+ * @throw AlfVisualException
+ */
+ virtual void fillWeights(gridLayoutDimension aDim, int aCount, const TAlfMetric& aWeight) = 0;
+
+ /**
+ * Add a new line of blocks to this grid layout at the last position in the direction of the
+ * specified dimension. It will have the supplied weight. Weights can be any metric value,
+ * hence different units can be used for each block. In particular, EAlfUnitWeight can be used
+ * to represent weight values in aribtrary proportional units.
+ *
+ * In the case of proportional weights, the effect of this will be to cause the other blocks to
+ * resize according to the new total weight.
+ *
+ * @note If non-relative coordinates are specified (e.g., real pixels), the combined blocks might not
+ * fill the entire layout area. However, weights will always stretch to fill all available space
+ * after the fixed units have been determined. Therefore, depending on circumstances it may
+ * be better to use EAlfUnitWeight
+ * @note For example [2 weights, 1 weight, 2 weights] in a layout of 100 pixels would result
+ * in [40 pixels, 20 pixels, 40 pixels].
+ * @note For example [10 pixels, 1 weight, 15 pixels] in a layout of 100 pixels would result
+ * in [10 pixels, 75 pixels, 15 pixels].
+ *
+ * @param aDim the dimension to which the weight corresponds
+ * @param aWeight the weight to be used for the block in the specified dimension,
+ * replacing any previously existing weight for that block
+ * @throw AlfVisualException
+ */
+ virtual void appendWeight(gridLayoutDimension aDim, const TAlfMetric& aWeight) = 0;
+
+ /**
+ * Add a new line of blocks to this grid layout at the specified position in the direciton of
+ * the specified dimension. It will have the supplied weight. In the case of proportional
+ * weights, the effect of this will be to cause the other blocks to resize according to the new
+ * total weight. It will also mean that many child visuals will now occupy different blocks within
+ * the grid according to how the blocks wrap.
+ *
+ * @note will leave if the specified position is greater than the number of objects currently in the array,
+ * so check first by calling @c preferredDimensionCount
+ * @see appendWeight for more information on how weights are used to calculate layout positions.
+ *
+ * @param aDim the dimension to which the weight corresponds
+ * @param aWeight the weight to be used for the block in the specified dimension,
+ * replacing any previously existing weight for that block
+ * @param aPos the index of the block
+ * @throw AlfVisualException
+ */
+ virtual void insertWeight(gridLayoutDimension aDim, const TAlfMetric& aWeight, int aPos) = 0;
+
+ /**
+ * Sets the weight of a specific line of blocks in this grid layout, in the direction of the supplied dimension.
+ * In the case of proportional weights, the effect of this will be to cause the
+ * other blocks to resize according to the new total weight.
+ *
+ * @see appendWeight for more information on how weights are used to calculate layout positions.
+ *
+ * @param aDim the dimension to which the weight corresponds
+ * @param aWeight the weight to be used for the block in the specified dimension,
+ * replacing any previously existing weight for that cell
+ * @param aPos the index of the cell
+ * @throw AlfVisualException
+ */
+ virtual void replaceWeight(gridLayoutDimension aDim, const TAlfMetric& aWeight, int aPos) = 0;
+
+ /**
+ * Remove a line of blocks from this grid layout at the specified position in the
+ * specified dimension. In the case of proportional weights, the effect of this will
+ * be to cause the other blocks to resize according to the new total weight. It will also mean
+ * that many child visuals will now occupy different blocks within the grid according to how
+ * the blocks wrap.
+ *
+ * @see appendWeight for more information on how weights are used to calculate layout positions.
+ *
+ * @param aDim the dimension to which the weight corresponds
+ * @param aPos the index of the cell
+ * @throw AlfVisualException
+ */
+ virtual void removeWeight(gridLayoutDimension aDim, int aPos) = 0;
+
+ /**
+ * Returns the weight of a specific line of blocks in this grid layout, in the
+ * specified dimension.
+ *
+ * @see appendWeight for more information on how weights are used to calculate layout positions.
+ *
+ * @param aDim the dimension to which the weight corresponds
+ * @param aPos the index of the cell
+ * @return the weight being used for the cell in the specified dimension, will be 0 magnitude if not set
+ * @throw AlfVisualException
+ */
+ virtual TAlfMetric weight(gridLayoutDimension aDim, int aPos) const = 0;
+
+ /**
+ * Return the number of lines of blocks in this grid, along the specified dimension
+ *
+ * @param aDim the dimension along which to count
+ * @return The number of lines of blocks in this grid.
+ */
+ virtual int count(gridLayoutDimension aDim) const = 0;
+
+public:
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType ) = 0;
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFGRIDLAYOUTMANAGER
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfinterfacebase.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2007 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: The base class for interfaces provided by widget classes.
+*
+*/
+
+
+#ifndef I_ALFINTERFACEBASE_H
+#define I_ALFINTERFACEBASE_H
+
+
+
+namespace Alf
+ {
+
+struct IfId;
+/**
+ * The base class for interfaces provided by
+ * widget classes, including CAlfWidget, CAlfModel,
+ * CAlfWidgetControl, MAlfWidgetEventHandler,
+ * MAlfElement and derived classes.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfInterfaceBase
+ {
+public:
+ /**
+ * Default virtual destructor.
+ */
+ virtual ~IAlfInterfaceBase() {}
+
+ /**
+ * Interface getter with casting.
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ template <class T>
+ static T* makeInterface(IAlfInterfaceBase* aBase)
+ {
+ return (aBase? static_cast<T*>(aBase->makeInterface(T::type())): 0);
+ }
+
+
+ /**
+ * Interface getter.
+ * Derived classes should always call the base class method
+ * from the overridden MakeInterface.
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType ) = 0;
+
+
+ };
+
+ }
+
+#endif // I_ALFINTERFACEBASE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialflayoutmanager.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,185 @@
+/*
+* Copyright (c) 2007 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: interface for layout managers
+*
+*/
+
+
+#ifndef I_ALFLAYOUTMANAGER
+#define I_ALFLAYOUTMANAGER
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+
+class CAlfLayout;
+class CAlfControl;
+
+namespace duiuimodel
+ {
+class DuiNode;
+ }
+using namespace duiuimodel;
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class AlfCustomInitDataBase;
+
+namespace ialflayoutmanager
+ {
+ static const IfId Ident =
+ {
+ 0, "ialflayoutmanager"
+ };
+ }
+
+/**
+ * The interface for layout managers
+ *
+ * Layout manager handles the layouting of child widgets in the container widget.
+ * It uses IAlfLayoutPreferences-interface (@see IAlfLayoutPreferences)
+ * of child widgets as a guide for laying out the widgets. The layoutmanager
+ * is set to the IAlfHostApi- interface (@see IAlfHostApi::setBaseLayout)
+ * createLayout-method should be the first call after creating the layoutmanager.
+ *
+ * Layout manager may also provide information about the layout preferences of its
+ * children. If this is supported the layout manager will combine the layout preferences
+ * of its children taking into consideration the technique used to lay out the children
+ * using the layout manager. This will provide information about the whole display area
+ * occupied by the layout manager. For instance vertical flow layout manager will provide
+ * preferred size area of its children by summing their heights and providing the maximum
+ * width among the children.
+ *
+ * @code
+ * // Create layout manager interface.
+ * IAlfLayoutManager* layoutManager = IAlfInterfaceBase::makeInterface<IAlfLayoutManager>(control);
+ *
+ * // See if layout preferences is supported in the given layout manager.
+ * IAlfLayoutPreferences* layoutPreferences = IAlfInterfaceBase::makeInterface<IAlfLayoutPreferences>(layoutManager);
+ *
+ * if(layoutPreferences != 0)
+ * {
+ * TAlfXYMetric preferredSize;
+ * // This will report the preferred size of the layout by combining together preferred sizes of its children.
+ * bool result = layoutPreferences->getPreferredSize(preferredSize);
+ * }
+ * @endcode
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfLayoutManager : public IAlfInterfaceBase
+ {
+public:
+
+ static inline const IfId& type()
+ {
+ return ialflayoutmanager::Ident;
+ }
+
+ virtual inline ~IAlfLayoutManager() {}
+
+ /**
+ * Creates the layout used by this layoutmanager.
+ *
+ * @param aOwner owner-control of the the created layout.
+ * @param aParentLayout parent for the created layout
+ * @param aLayoutIndex index, where created visual should be placed in the parent layout.
+ * @throw AlfVisualException(EInvalidArrayIndex), if aLayoutIndex is out of bounds
+ * AlfVisualException(ECanNotCreateVisual), if the layout creation failed.
+ */
+ virtual void createLayout(CAlfWidgetControl& aOwner,
+ CAlfLayout* aParentLayout, int aLayoutIndex) = 0;
+
+ /**
+ * Returns the layout used by this layoutmanager.
+ *
+ * @return layout used by this layoutmanager.
+ * @throw AlfVisualException(EInvalidVisual), if layout is not created.
+ */
+ virtual CAlfLayout& getLayout()const = 0;
+
+ /**
+ * Notifies the layout manager, that the child control's layout
+ * must be updated
+ *
+ * @param aControl control, which size has changed.
+ * @throw AlfVisualException(EInvalidVisual), if layout is not created.
+ */
+ virtual void updateChildLayout(CAlfWidgetControl* aControl) = 0;
+
+ /**
+ * Notifies the layout manager, that all the child control's layouts
+ * must be updated.
+ * @throw AlfVisualException(EInvalidVisual), if layout is not created.
+ */
+ virtual void updateChildrenLayout() = 0;
+
+ /**
+ * Notifies the layout manager, that the control's has been
+ * removed from the layout.
+ *
+ * @param aControl control, which has been removed from the layout.
+ * @throw AlfVisualException(EInvalidVisual), if layout is not created.
+ */
+ virtual void childRemoved(CAlfWidgetControl* aControl) = 0;
+
+public:
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType ) = 0;
+ };
+
+/**
+ * Placeholder for information required to instantiate an layoutmanager
+ * via the widget factory mechanism.
+ * A pointer to this structure is casted to a void pointer and sent to the
+ * factory plugin.
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+struct AlfLayoutManagerInitData
+ {
+ /**
+ * Event handler instance ID.This uniquely identifies every event handler instance.
+ */
+ char* mLayoutManagerId;
+
+ /**
+ * Pointer to node in declaration containing information for the widget.
+ */
+ DuiNode* mNode;
+
+ /**
+ * Pointer to custom data passed via factory mechanism
+ * Not Owned.
+ */
+ AlfCustomInitDataBase* mCustomData;
+ };
+
+
+ } // namespace Alf
+
+#endif // I_ALFLAYOUTMANAGER
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialflayoutpreferences.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2007 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: The interface for inquiring the layout preferences of a laid-out object
+*
+*/
+
+
+#ifndef I_ALFLAYOUTPERENCES_H
+#define I_ALFLAYOUTPERENCES_H
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+#include <alf/alfmetric.h>
+#include <osn/osntypes.h>
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+class IAlfLayoutManager;
+
+namespace alflayoutpreferences
+ {
+ static const IfId Ident=
+ {
+ 0,"alflayoutpreferences"
+ };
+ }
+
+/**
+ * The interface for finding the layout preferences for an Alf widget model
+ * presentation object.
+ *
+ * This interface is called by layout managers (implementors of @c IAlfLayoutManager)
+ * in order to find out information about their contained presentation objects.
+ *
+ * It is implemented by presentation objects in order to report to the layout manager
+ * what sizes objects prefer.
+ *
+ * The layout manager is responsible for finding out layout preferences for all the
+ * AlfElement instances in the next level down of containment - the "child" elements.
+ * It calls @c makeInterface<IAlfLayoutPreferences> on these elements.
+ * The layout manager uses its knowledge about how these child elements relate to
+ * each other geometrically to come up with a decision on how many child elements
+ * can be shown, where they are to be positioned, and how big they should be.
+ * @see IAlfLayoutManager
+ *
+ * @c AlfElements that represent contained sets of visuals - those that take up
+ * space within the visual containment - should implement @c IAlfLayoutPreferences,
+ * or defer its implementation to another presentation object which is capable
+ * of reporting layout preferences.
+ *
+ * The following units are allowed to be used in the returned parameter values:
+ * EAlfUnitPixel - pixels
+ * EAlfUnitDisplaySize - units relative to the display
+ * EAlfS60Unit - S60 layout specification units
+ *
+ * Other units do not make sense, since the metric is being passed
+ * to a different layout context. Furthermore, the reason for this API
+ * is for the implementing object to state its own, internal, preferences
+ * without recourse to its containment. This implies the use of the more
+ * absolute units.
+ *
+ * The units used for the returned @c TAlfXYMetric objects are chosen independently
+ * by the implementations of each API. They do not have to be return the same units.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfLayoutPreferences : public IAlfInterfaceBase
+ {
+public:
+ static inline const IfId& type()
+ {
+ return alflayoutpreferences::Ident;
+ }
+
+ /**
+ * Return the minimum desirable size of a presentation object.
+ *
+ * Minimum size should mean the size at which the visual would start to become
+ * unreadable in the case of text, or too difficult to see with sufficient
+ * clarity in the case of graphics.
+ *
+ * false is to be returned if the implementing presentation object does
+ * not care how small it is made.
+ *
+ * @param aMinSize The minimum size that the object would like to be laid out to
+ * @return false iff the object queried does not care about a minimum size
+ */
+ virtual bool getMinimumSize( TAlfXYMetric& aMinSize ) const = 0;
+
+ /**
+ * Return the maximum size desired by a presentation object.
+ *
+ * There may often be no preference as to maximum size. The implementation
+ * should then return false.
+ *
+ * @param aMaxSize The maximum size that the object would like to be laid out to
+ * @return false iff the object queried does not care about a maximum size
+ */
+ virtual bool getMaximumSize( TAlfXYMetric& aMaxSize ) const = 0;
+
+ /**
+ * Return the preferred size for a presentation object.
+ *
+ * The preferred size is the optimum size of the object in the absence
+ * of external factors.
+ *
+ * The value returned should greater than or equal in size to a value
+ * returned by getMinimumSize()
+ *
+ * The value returned should less than or equal in size to a value
+ * returned by getMaximumSize()
+ *
+ * @param aPreferredSize The size that the object would like to be laid out to
+ * @return false iff the object queried does not have a preferred size
+ */
+ virtual bool getPreferredSize( TAlfXYMetric& aPreferredSize ) const = 0;
+
+ /**
+ * Set the preferred size into a presentation object.
+ *
+ * The preferred size is being dictated by external code in this case.
+ * This new value should over-ride any internal preferred size.
+ *
+ * Calling this API has several side-effects. Subsequent calls to
+ * getPreferredSize should return @c true and return the new preferred
+ * size.
+ *
+ * Subsequent calls to getMinimumSize must return either @c false, or return
+ * @c true with a value less than or equal to the preferred size.
+ *
+ * Subsequent calls to getMaximumSize must return either @c false, or return
+ * @c true with a value greater than or equal to the preferred size.
+ *
+ * @param aPreferredSize The new preferred size for the laid-out object
+ */
+ virtual void setPreferredSize( const TAlfXYMetric& aPreferredSize ) = 0;
+
+ };
+
+ } // namespace Alf
+#endif // I_ALFLAYOUTPERENCES_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfmap.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,170 @@
+/*
+* 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 I_ALFMAP_H
+#define I_ALFMAP_H
+
+
+// INCLUDES
+#include <alf/ialfvarianttype.h>
+#include <osn/osntypes.h>
+
+namespace osncore
+ {
+class UString;
+ }
+
+using osncore::UString;
+
+namespace Alf
+ {
+/**
+ * An interface for Container data type.
+ *
+ * @lib hitchcockwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfMap : public IAlfVariantType
+ {
+public:
+
+
+ /**
+ * Gets the Number of items in the container
+ *
+ * @return number of items in the container
+ * @since S60 ?S60_version
+ */
+ virtual int count() const = 0;
+
+ /**
+ * Gets the Item at a given index in the container
+ * @param aIndex - index at which the element is required
+ * @return item as a MlfVariantType
+ * @since S60 ?S60_version
+ */
+ virtual IAlfVariantType* item(uint aIndex) = 0;
+
+ /**
+ * Gets the Name at a given index in the container
+ * @param aIndex - index at which the name of the element in the map is required
+ * @return item name as a TDesC8
+ * @since S60 ?S60_version
+ */
+ virtual const UString& name(uint aIndex) const = 0;
+
+ /**
+ * Clones the entire container
+ *
+ * @return the cloned container
+ * @since S60 ?S60_version
+ */
+ virtual IAlfMap* clone() = 0;
+
+ /**
+ * Removes an item from given index in the container
+ * @param aIndex - index at which the element is to be removed
+ * @return item as a MlfVariantType
+ * @since S60 ?S60_version
+ */
+ virtual void removeItem(uint aIndex) = 0;
+
+ /**
+ * Clear the Container
+ *
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void clear() = 0;
+
+ /**
+ * Replace an item from given index in the container
+ * @param aIndex - index at which the element is to be replaced
+ * @param aNewData - new Data to be replaced
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void replaceItem(uint aIndex, IAlfVariantType* aNewData ) = 0;
+
+ /**
+ * Adds a variantData item into the container
+ * @param aData - varaint Data Item to be added into the container
+ * @param @Name - Name associated with this Variant Data Item.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void addItem(IAlfVariantType* aData, const UString& aName)=0;
+
+ /**
+ * Adds a variantData item into the container
+ * @param aIndex index where the data is added
+ * @param aData - variant Data Item to be added into the container
+ * @param @Name - Name associated with this Variant Data Item.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void addItem(uint aIndex, IAlfVariantType* aData, const UString& aName)=0;
+
+ /**
+ * Gets the item by the given name.
+ * @param aName The name associated with requested item.
+ * @return The value corresponding to the name of the item.
+ * @since S60 ?S60_version
+ */
+ virtual IAlfVariantType* item(const UString& aName) = 0;
+
+ /**
+ * Gets the index of the item by the given name.
+ * @param aName The name associated with requested item.
+ * @return The index corresponding to the name of the item, or -1 if not found.
+ * @since S60 ?S60_version
+ */
+ virtual int itemIndex(const UString& aName) = 0;
+
+ /**
+ * Removes the Item associated with a name
+ * @param aName - Name associated with this Variant Data Item that is required to be removed in the map
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void removeItem(const UString& aName) = 0;
+
+ /**
+ * Replaces the Item associated with a name in the container with a new variant data type
+ * @param aName - Name associated with this Variant Data Item that is required to be replaced in the map
+ * @aNewData - New Data to be set
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void replaceItem(const UString& aName,IAlfVariantType* aNewData) = 0;
+
+ /**
+ * Destructor
+ *
+ * @since S60 ?S60_version
+ */
+ virtual ~IAlfMap(){}
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFMAP_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfmodel.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,201 @@
+/*
+* 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 I_ALFMODEL_H
+#define I_ALFMODEL_H
+
+
+//INCLUDES
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+
+namespace osncore
+ {
+template <class T> class AlfPtrVector;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+
+/* Forward declarations*/
+class IAlfModelChangeObserver;
+class IAlfVariantType;
+class AlfModelOperation;
+class AlfCustomInitDataBase;
+
+
+namespace alfmodel
+ {
+static const IfId ident=
+ {
+ 0,"alfmodel"
+ };
+ }
+
+/**
+ * An interface of the component model.
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+
+class IAlfModel: public IAlfInterfaceBase
+ {
+public:
+ static inline const IfId& type()
+ {
+ return alfmodel::ident;
+ }
+
+ /**
+ * Virtual destructor.
+ *
+ * @since S60 ?S60_version
+ */
+ virtual ~IAlfModel() {}
+
+ /**
+ * Add a new observer to be notified of any changes in the model.
+ *
+ * @exception std::bad_alloc
+ *
+ * @param aObserver The model change observer to be added.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void addModelChangeObserver(
+ IAlfModelChangeObserver& aObserver ) = 0;
+
+
+ /**
+ * Remove an observer which is added to get notifications.
+ *
+ * @param aObserver The model change observer to be removed.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void removeModelChangeObserver(
+ IAlfModelChangeObserver& aObserver )=0;
+
+ /**
+ * Api to change the model completely at one short. From IAlfModel
+ *
+ * @param aData The new data.
+ * @since S60 ?S60_version
+ */
+ virtual void setData( IAlfVariantType* aData ) = 0;
+
+ /**
+ * Change a given of data fields in the model . All model change
+ * observers are notified about the change.
+ * @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 to be set
+ * @since S60 ?S60_version
+ */
+ virtual void updateData(
+ int aNumContainerIndices,int* aContainerIndices,
+ IAlfVariantType* aData ) = 0;
+
+ /**
+ * Add a number of data fields in the model data. All model change
+ * observers are notified about the change.
+ *
+ * @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.
+ * @since S60 ?S60_version
+ */
+ virtual void addData(
+ int aNumContainerIndices,int* aContainerIndices,
+ IAlfVariantType* aData ) = 0;
+
+ /**
+ * Remove a number of data fields in the model data. All model change
+ * observers are notified about the change.
+ *
+ * @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.
+ * @since S60 ?S60_version
+ */
+ virtual void removeData(
+ int aNumContainerIndices,
+ int* aContainerIndices ) = 0;
+
+ /**
+ * Api for executing batch operations
+ *
+ * @param aOperationsArray - An RPOinterArray containing the list of
+ * operations to be executed in batch.
+ * @since S60 ?S60_version
+ */
+ virtual void executeOperations(
+ AlfPtrVector<AlfModelOperation>& aOperationsArray) = 0;
+
+ /**
+ * Api for executing one operation at a Time
+ *
+ * @param aOperation - An Operation to be executed on the model.
+ * @since S60 ?S60_version
+ */
+ virtual void executeOperation(AlfModelOperation* aOperation) = 0;
+
+ /**
+ * Clears the Model.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ virtual void clearModel() = 0;
+ /**
+ * Get the root data object of this model.
+ *
+ * @return The root data object.
+ * @since S60 ?S60_version
+ */
+ virtual IAlfVariantType* data() const = 0;
+
+ };
+
+/**
+ * Placeholder for information required to instantiate a model
+ * via the widget factory mechanism.
+ * A pointer to this structure is casted to a void pointer and sent to the
+ * factory plugin.
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+struct AlfModelInitData
+ {
+ /**
+ * Pointer to custom data passed via factory mechanism
+ * Not Owned.
+ */
+ AlfCustomInitDataBase* mCustomData;
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFMODEL_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfmodelbase.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* 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 I_ALFMODELBASE_H
+#define I_ALFMODELBASE_H
+
+namespace osncore
+ {
+class UString;
+ }
+
+using osncore::UString;
+
+namespace Alf
+ {
+// CLASS DECLARATIONS
+
+/**
+ * Base class for setting custom data to a variant type.
+ * Derive from this class if you want to store custom data in
+ * a variant type.
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfModelBase
+ {
+public:
+ virtual ~IAlfModelBase() {}
+ virtual const UString& Type() = 0;
+ };
+
+ }// namespace Alf
+
+#endif // I_ALFMODEL_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfmodelchangeobserver.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,89 @@
+/*
+* 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 I_ALFMODELCHANGEOBSERVER_H
+#define I_ALFMODELCHANGEOBSERVER_H
+
+//INCLUDES
+
+namespace osncore
+ {
+template <class T> class AlfPtrVector;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+
+/* Forward declarations*/
+class IAlfModel;
+class AlfModelOperation;
+
+/**
+* An interface for observing the changes in the model.
+* @lib hitchcockwidgetmodel.lib
+* @since S60 ?S60_version
+* @status Draft
+*/
+class IAlfModelChangeObserver
+ {
+public:
+ /** Virtual destructor.*/
+ virtual ~IAlfModelChangeObserver() {}
+
+ /**
+ * Notify the observer that the model has changed.
+ *
+ * @param aModel The new model.
+ * @since S60 ?S60_version
+ */
+ virtual void modelChanged( IAlfModel& aModel ) = 0;
+
+ /**
+ * Notify the observers that a number of change operations
+ * are about to be performed on the model.
+ *
+ * @param aArrayOfOperation An Array containing the operations performed on the model.
+ * @since S60 ?S60_version
+ */
+ virtual void dataChanging( const AlfPtrVector<AlfModelOperation>& aArrayOfOperation ) = 0;
+
+ /**
+ * Notify the observers that a change operation
+ * is about to be performed on the model.
+ *
+ * @param aOperation An operation performed on the model.
+ * @since S60 ?S60_version
+ */
+ virtual void dataChanging( const AlfModelOperation& aOperation ) = 0;
+
+ /**
+ * Notify the observers that the data of the model has been changed.
+ * This is called automatically after any DataChangingL() call.
+ *
+ * @since S60 ?S60_version
+ */
+ virtual void dataChanged() = 0;
+ };
+
+
+ } // namespace Alf
+
+#endif // I_ALFMODELCHANGEOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfnavigation.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,290 @@
+/*
+* Copyright (c) 2007 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: Navigation interface for list-like widgets.
+*
+*/
+
+
+
+#ifndef I_ALFNAVIGATION_H
+#define I_ALFNAVIGATION_H
+
+#include <alf/ialfinterfacebase.h>
+
+namespace Alf
+ {
+
+namespace alfnavigation
+ {
+static const IfId ident =
+ {
+ 0, "alfnavigation"
+ };
+ }
+
+/**
+* An interface that defines functionality for navigation in a
+* one-dimensional array of items. In addition to the normal
+* one-dimansional behavior, a common use case is to have
+* a two-dimensional layout and navigation model for the items.
+* Therefore, both one- and two-dimensional navigation models are
+* supported by the interface.
+*
+* Since the logical behavior is decoupled from the presentation,
+* the navigation is controlled in terms of logical dimensions,
+* namely the primary and the secondary dimensions. The primary
+* dimension is the dimension in which the navigation space
+* expands when new items are inserted. In a one-dimensional layout,
+* only the primary dimension is needed. The secondary dimension
+* is used with two-dimensional layouts and navigation models.
+* The size of the navigation space in the secondary dimension
+* should be a constant.
+*
+* The navigation interface consists of navigation parameters,
+* scrolling parameters, and orientation parameters. The navigation
+* parameters are used to control the focused item in the logical
+* navigation events. The scrolling parameters are used to send
+* scrolling events according to the focused item. The orientation
+* parameters are used to convert directional navigation events
+* to the logical navigation events. In addition, the usage of
+* default navigation key events, i.e., arrow keys, can be enabled
+* or disabled.
+*
+* @lib alfwidgetmodel.lib
+* @since S60 ?S60_version
+* @status Draft
+*/
+class IAlfNavigation : public IAlfInterfaceBase
+ {
+public:
+ /**
+ * Getter for the type identifier of this interface.
+ *
+ * @since S60 ?S60_version
+ * @return A descriptor to identify the type of this interface.
+ */
+ static inline const IfId& type()
+ {
+ return alfnavigation::ident;
+ }
+
+ /**
+ * Getter for the index of the currently focused item.
+ *
+ * @since S60 ?S60_version
+ * @return An index of the currently focused item.
+ */
+ virtual int focusedIndex() const = 0;
+
+ /**
+ * Setter for the index of the currently focused item.
+ * If the given index is outside the range of items,
+ * the index is set to the first or the last index.
+ *
+ * @since S60 ?S60_version
+ * @param aIndex The new index of the focused item.
+ */
+ virtual void setFocusedIndex( int aIndex ) = 0;
+
+ /**
+ * Getter for the size of the page in primary dimension.
+ * The page size is used for EEventNavigatePrimaryPageUp and
+ * EEventNavigatePrimaryPageDown events, as well as for scrolling
+ * in primary dimension.
+ *
+ * @since S60 ?S60_version
+ * @return The page size in primary dimension.
+ */
+ virtual int primaryPageSize() const = 0;
+
+ /**
+ * Getter for the size of the page in secondary dimension.
+ * The page size is used for EEventNavigateSecondaryPageUp and
+ * EEventNavigateSecondaryPageDown events, as well as for scrolling
+ * in secondary dimension.
+ *
+ * @since S60 ?S60_version
+ * @return The page size in secondary dimension.
+ */
+ virtual int secondaryPageSize() const = 0;
+
+ /**
+ * Getter for the size of the navigation space in secondary dimension.
+ * One step in the primary dimension changes the index of the focused
+ * item by the secondary size. The size is also used for scrolling
+ * in secondary dimension. The secondary size of a one-dimensional
+ * list should be one.
+ *
+ * @since S60 ?S60_version
+ * @return The size in secondary dimension.
+ */
+ virtual int secondarySize() const = 0;
+
+ /**
+ * Getter for looping in primary dimension.
+ *
+ * @since S60 ?S60_version
+ * @return <code>true</code> if the looping is enabled,
+ * <code>false</code> otherwise.
+ */
+ virtual bool primaryLooping() const = 0;
+
+ /**
+ * Getter for looping in secondary dimension.
+ *
+ * @since S60 ?S60_version
+ * @return <code>true</code> if the looping is enabled,
+ * <code>false</code> otherwise.
+ */
+ virtual bool secondaryLooping() const = 0;
+
+ /**
+ * Set the navigation parameters for one-dimensional navigation.
+ * The secondary size and the secondary page size are set to one,
+ * to indicate that navigation and scrolling in secondary direction
+ * is disabled. Also the secondary looping is disabled.
+ *
+ * @since S60 ?S60_version
+ * @param aPrimaryPageSize The page size in primary dimension.
+ * @param aPrimaryLooping Enable or disable looping.
+ */
+ virtual void setNavigationParams( int aPrimaryPageSize,
+ bool aPrimaryLooping ) = 0;
+
+ /**
+ * Set the navigation parameters for two-dimensional navigation.
+ * The parameters determine the behavior of all navigation events.
+ * Navigation and scrolling are supported in both dimensions.
+ * If the secondary page size is equal to the size of the whole
+ * navigation space, the scrolling in secondary dimension is disabled.
+ *
+ * @since S60 ?S60_version
+ * @param aPrimaryPageSize The page size in primary dimension.
+ * @param aPrimaryLooping Enable or disable looping.
+ */
+ virtual void setNavigationParams( int aPrimaryPageSize,
+ int aSecondarySize,
+ int aSecondaryPageSize,
+ bool aPrimaryLooping,
+ bool aSecondaryLooping ) = 0;
+
+ /**
+ * Getter for scrolling distance in primary dimension.
+ * The scrolling distance is the minimum number of items before
+ * the first or the last visible item. For example, the scrolling
+ * distance of one defines that the focus should never get to the
+ * first or the last visible item, except in the beginning or the
+ * end of the list.
+ *
+ * @since S60 ?S60_version
+ * @return The scrolling distance in primary dimension.
+ */
+ virtual int primaryScrollingDist() const = 0;
+
+ /**
+ * Getter for scrolling distance in secondary dimension.
+ *
+ * @since S60 ?S60_version
+ * @return The scrolling distance in secondary dimension.
+ */
+ virtual int secondaryScrollingDist() const = 0;
+
+ /**
+ * Set the scrolling distances for the list control.
+ * The scrolling distances are used to determine when
+ * to start scrolling. The scrolling distance of zero
+ * indicates that the scrolling should start if the focus
+ * is moved outside of the visible items. Similarly,
+ * the scrolling distance of one indicates that the
+ * scrolling should start when the first or the last
+ * visible item is focused.
+ *
+ * @param aPrimaryScrollingDist The minimum number of items before the first
+ * or the last visible item in primary dimension.
+ * @param aSecondaryScrollingDist The minimum number of items before the first
+ * or the last visible item in secondary dimension.
+ * @since S60 ?S60_version
+ */
+ virtual void setScrollingParams( int aPrimaryScrollingDist,
+ int aSecondaryScrollingDist ) = 0;
+
+ /**
+ * Determine if the primary dimension on the screen is vertical.
+ * This is used to convert directional navigation events to the
+ * logical navigation events.
+ *
+ * @since S60 ?S60_version
+ * @return <code>true</code> if the primary dimension is vertical,
+ * <code>false</code> if the primary dimension is horizontal.
+ */
+ virtual bool verticalPrimary() const = 0;
+
+ /**
+ * Determine if the indices in the navigation space
+ * increase from left to right. This is used to determine
+ * the direction of the horizontal navigation events.
+ *
+ * @since S60 ?S60_version
+ * @return <code>true</code> if the indices increase from left to right,
+ * <code>false</code> if the indices increase from right to left.
+ */
+ virtual bool leftToRight() const = 0;
+
+ /**
+ * Determine if the indices in the navigation space
+ * increase from up to down. This is used to determine
+ * the direction of the vertical navigation events.
+ *
+ * @since S60 ?S60_version
+ * @return <code>true</code> if the indices increase from up to down,
+ * <code>false</code> if the indices increase from down to up.
+ */
+ virtual bool upToDown() const = 0;
+
+ /**
+ * Set the orientation parameters.
+ * The orientation parameters are used to convert directional
+ * navigation events to logical navigation events.
+ *
+ * @since S60 ?S60_version
+ * @param aVerticalPrimary Specify the orientation of the primary dimension.
+ * @param aLeftToRight Specify the increasing order of horizontal indices.
+ * @param aUpToDown Specify the increasing order of vertical indices.
+ */
+ virtual void setOrientationParams( bool aVerticalPrimary,
+ bool aLeftToRight, bool aUpToDown ) = 0;
+
+ /**
+ * Determine if the default key events are used for navigation.
+ *
+ * @since S60 ?S60_version
+ * @return <code>true</code> if the default key events are used,
+ * <code>false</code> otherwise.
+ */
+ virtual bool defaultKeysEnabled() const = 0;
+
+ /**
+ * Enable or disable the default key events.
+ *
+ * @since S60 ?S60_version
+ * @param aEnable The usage of the default key events.
+ */
+ virtual void enableDefaultKeys( bool aEnable ) = 0;
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFNAVIGATION_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfsortfunction.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,53 @@
+/*
+* 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: callback interface for sort.
+*
+*/
+
+
+#ifndef I_ALFSORTFUNCTION
+#define I_ALFSORTFUNCTION
+
+// CLASS DECLARATIONS
+namespace Alf
+ {
+
+class IAlfMap;
+
+/**
+ * callback- interface for sort.
+ *
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfSortFunction
+ {
+public:
+ /**
+ * compares two leafs
+ *
+ * @param aFirst first parameter for comparison
+ * @param aSecond second parameter for comparison
+ * @return < 0, if aFirst is less than aSecond, > 0 if aFirst is more than aSecond,
+ 0, if aFirst equals aSecond.
+ * @since S60 ?S60_version
+ */
+ virtual int compareLeafs( const IAlfMap* aFirst, const IAlfMap* aSecond ) const = 0;
+
+ };
+
+ }
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfvarianttype.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,170 @@
+/*
+* 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 I_ALFVARIANTTYPE_H
+#define I_ALFVARIANTTYPE_H
+
+
+// INCLUDES
+
+#include <osn/osntypes.h>
+#include <alf/ialfmodelbase.h>
+
+namespace osncore
+ {
+class UString;
+ }
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+// FORWARD DECLARATIONS
+class IAlfContainer;
+class IAlfMap;
+class IAlfBranch;
+class IAlfModelBase;
+
+//INTERFACE DECLARATIONS
+
+/**
+ * An interface for variant data type.
+ * Application-specific data source classes may implement
+ * this interface. Alternatively, a wrapper class may
+ * be implemented to convert data fields from application source
+ * to some IAlfVariantType implementation (e.g., CAlfVariantType).
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfVariantType
+ {
+public:
+ /** Type enumeration. */
+ enum Type{EBool, EInt, EUint, EReal, EString, EContainer, EMap, EBranch,ECustomData};
+
+ /** Virtual destructor. */
+ virtual ~IAlfVariantType() {}
+
+ /**
+ * Set the Data the variantData
+ *
+ * @param aValue The new value.
+ * @since S60 ?S60_version
+ */
+ virtual void set(IAlfVariantType& aValue) = 0;
+
+ /**
+ * Get the data type.
+ *
+ * @return The data type.
+ * @since S60 ?S60_version
+ */
+ virtual Type type() const = 0;
+
+ /**
+ * Get the data value as an bool .
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EBool.
+ * @return bool data value.
+ * @since S60 ?S60_version
+ */
+ virtual bool boolean() const = 0;
+
+ /**
+ * Get the data value as an integer.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EInt.
+ * @return Integer data value.
+ * @since S60 ?S60_version
+ */
+ virtual int integer() const = 0;
+
+ /**
+ * Get the data value as an unsigned integer.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EUInt.
+ * @return Unsigned integer data value.
+ * @since S60 ?S60_version
+ */
+ virtual uint uinteger() const = 0;
+
+ /**
+ * Get the data value as a real number.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EReal.
+ * @return Real data value.
+ * @since S60 ?S60_version
+ */
+ virtual double real() const = 0;
+
+ /**
+ * Get the data value as a descriptor.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EString.
+ * @return string value.
+ * @since S60 ?S60_version
+ */
+ virtual const UString& string() const = 0;
+
+ /**
+ * Get the data value as a container interface.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EContainer.
+ * @return Container interface.
+ * @since S60 ?S60_version
+ */
+ virtual IAlfContainer* container() = 0;
+
+ /**
+ * Get the data value as a map interface.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EMap.
+ * @return Map interface.
+ * @since S60 ?S60_version
+ */
+ virtual IAlfMap* map() = 0;
+
+ /**
+ * Get the data value as a Branch interface.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EBranch.
+ * @return Branch interface.
+ * @since S60 ?S60_version
+ */
+ virtual IAlfBranch* branch() = 0;
+
+ /**
+ * Get the data value as a User Defined Data Pointer.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not ECustomData.
+ * @return CAlfModelBase interface.
+ * @since S60 ?S60_version
+ */
+ virtual IAlfModelBase* customData() = 0;
+
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFVARIANTTYPE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,234 @@
+/*
+* Copyright (c) 2007 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: The base class for all widgets.
+*
+*/
+
+
+#ifndef I_ALFWIDGET_H
+#define I_ALFWIDGET_H
+
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+#include <alf/alfvarianttype.h>
+
+namespace duiuimodel
+ {
+class DuiNode;
+ }
+
+using namespace duiuimodel;
+
+class CAlfEnv;
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class IAlfModel;
+class IAlfWidgetFactory;
+class IAlfContainerWidget;
+class AlfCustomInitDataBase;
+
+
+namespace alfwidget
+ {
+static const IfId ident=
+ {
+ 0,"alfwidget"
+ };
+ }
+/**
+ * An interface for all widgets.
+ * Widgets consist of a model and a control.
+ * The model is owned by the widget, but all
+ * controls are owned by Alfred environment.
+ * The widget can be queried for interfaces provided
+ * by derived widget classes, the control or the model.
+ * Widgets can be constructed using the widget factory.
+ * Widgets are owned and accessed using the Alfred
+ * environment.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfWidget : public IAlfInterfaceBase
+ {
+public:
+ static inline const IfId& type()
+ {
+ return alfwidget::ident;
+ }
+
+ /** Virtual destructor. */
+ virtual ~IAlfWidget() {}
+
+ /**
+ * Getter for the control. The ownership is not passed.
+ *
+ * @since S60 ?S60_version
+ * @return The control of this widget, or NULL if the control is not specified.
+ */
+ virtual CAlfWidgetControl* control() const = 0;
+
+ /**
+ * Getter for the parent container. The ownership is not passed.
+ *
+ * @return the parent container or 0 if the widget is the root-widget.
+ */
+ virtual IAlfContainerWidget* parent() const = 0;
+
+ /**
+ * Sets a new widget control. After this call has been succesfully executed, the control is
+ * owned by this widget. When a new widget control is set to a widget the previously set widget
+ * control is removed.
+ *
+ * Through the aDeletePreviousControl - parameter user can specify whether the previously set
+ * control is destroyed when new control is set. Otherwise the previous control is left on the
+ * ownership of the caller. The caller has to manually delete the control or reset it to another
+ * widget or control group.
+ *
+ * If the control passed through this method exists in a control group it is appended to the
+ * control group of the view where this widget is contained in and removed from its previous
+ * control group.
+ *
+ * Widget should always have a valid control. An osncore::AlfException is thrown with error code
+ * osncore::EInvalidArgument if a control that is already used in another widget is attempted to
+ * be used with this widget. You have to replace the control in the source widget first
+ * before you can reuse that control in the target widget. See two code snippets below for details:
+ *
+ * @code
+ * // This will throw an osncore::AlfException with error code osncore::EInvalidArgument.
+ * targetWidget.setControl(sourceWidget.control());
+ * @endcode
+ *
+ * @code
+ * CAlfWidgetControl* control = sourceWidget.control();
+ * sourceWidget.setControl(newControl, false);
+ * // This is ok, since control is not set in sourceWidget anymore.
+ * targetWidget.setControl(control);
+ * @endcode
+ *
+ * @see IAlfViewWidget
+ *
+ * @param aControl The new widget control to be used with this widget.
+ * @param aDeletePreviousControl If set to true will destroy the previously set control from UI Accelerator Toolkit Environment.
+ *
+ * @exception osncore::AlfException If the given control is already set to another widget an osncore::AlfException
+ * is thrown with error code osncore::EInvalidArgument.
+ */
+ virtual void setControl( CAlfWidgetControl* aControl, bool aDeletePreviousControl = true ) = 0;
+
+ /**
+ * Getter for the model. The ownership is not passed.
+ *
+ * @since S60 ?S60_version
+ * @return The model of this widget, or NULL if the model is not specified.
+ */
+ virtual IAlfModel* model() = 0;
+
+ /**
+ * Setter for the model. Ownership is passed and the old model is released.
+ *
+ * @since S60 ?S60_version
+ * @param aModel The model for this widget.
+ * @param aTakeOwnership Whether takes ownership of model or not
+ * return void
+ */
+ virtual void setModel( IAlfModel* aModel,bool aTakeOwnership = true) = 0;
+
+ /**
+ * Get the name of the widget instance.
+ *
+ * @since S60 ?S60_version
+ * @return Widget name
+ */
+ virtual const char* widgetName() const = 0;
+
+ /**
+ * Sets/Releases the Focus from child widget of container.
+ * Does not set the actual focused status in roster.
+ *
+ * @since S60 ?S60_version
+ * @param aFocus boolean value for focused status
+ * return void
+ */
+ virtual void setChildFocus(bool aFocus) = 0;
+
+ /**
+ * Sets the presentation for the widget using presentation XML file.
+ * Destroys any existing presentation.
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @exception AlfWidgetException if no visualization node available
+ * in Presentation XML or if no control
+ * is associated with the widget.
+ * @exception bad_alloc
+ * @since S60 ?S60_version
+ * @return void.
+ */
+ virtual void setPresentation(const char* aFilePath) = 0;
+ };
+
+/**
+ * Placeholder for information required to instantiate a widget
+ * via the widget factory mechanism.
+ * A pointer to this structure is casted to a void pointer and sent to the
+ * factory plugin.
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+struct AlfWidgetInitData
+ {
+ /**
+ * Owner environment for the widget
+ */
+ CAlfEnv* mEnv;
+
+ /**
+ * Container widget pointer that is going to contain the created widget.
+ */
+ IAlfContainerWidget* mContainerWidget;
+
+ /**
+ * Widget instance ID.This uniquely identifies every widget instance
+ * and is its name. Also see AlfWidget::Widgetname().
+ */
+ char* mWidgetId;
+
+ /**
+ * Pointer to node in declaration containing information for the widget.
+ */
+ DuiNode* mNode;
+
+ /**
+ * XML file name containing the declaration for the presention of the widget.
+ */
+ const char* mFilePath;
+
+ /**
+ * Pointer to custom data passed via factory mechanism
+ * Not Owned.
+ */
+ AlfCustomInitDataBase* mCustomData;
+ };
+
+
+ } // namespace Alf
+
+#endif // I_ALFWIDGET_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfwidgetcontrol.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,506 @@
+/*
+* Copyright (c) 2007 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: The base class for all widgets.
+*
+*/
+
+
+#ifndef I_ALFWIDGETCONTROL_H
+#define I_ALFWIDGETCONTROL_H
+
+#include <osn/osntypes.h>
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+
+//FORWARD DECLARATION
+class TAlfEvent;
+class CAlfDisplay;
+
+namespace osncore
+ {
+ class UString;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+//FORWARD DECLARATIONS
+class IAlfWidgetEventHandler;
+class IAlfElement;
+class AlfWidget;
+class IAlfVariantType;
+class AlfCustomInitDataBase;
+
+
+namespace alfwidgetcontrol
+ {
+static const IfId ident=
+ {
+ 0,"alfwidgetcontrol"
+ };
+ }
+
+/**
+ * The interface for widget controls.
+ * Widget controls are derived from Alfred controls. This is
+ * the primary interface to access the widget control functionality.
+ * Alfred control interface can be queried, but direct access should not
+ * be needed. Widget controls are responsible for the widget logic, i.e.,
+ * storing and controlling the state of the widget. This usually includes
+ * input event handling, updating the presentation, and communication with
+ * the model, the application, and other controls. Event handlers can be
+ * used to implement parts of the widget logic.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfWidgetControl : public IAlfInterfaceBase
+ {
+public:
+
+ /**
+ * Defines the bitflags used with the state interfaces.
+ */
+
+ // Visible is set if the widget control is currently intended to be visible
+ static const uint Visible = 0x0001;
+
+ // Enabled is set if the widget control is to be responsive to user input
+ // Note: Presentation may render this control in some way to indicate that
+ // it is disabled
+ static const uint Enabled = 0x0002;
+
+ // Focused is set if the control is to be currently attracting key events
+ static const uint Focused = 0x0004;
+
+ // Focusable is set iff the widget control is to allow focus to be put
+ // on it
+ static const uint Focusable = 0x0008;
+
+public:
+ static inline const IfId& type()
+ {
+ return alfwidgetcontrol::ident;
+ }
+ /**
+ * Virtual destructor.
+ *
+ * @since S60 ?S60_version
+ */
+ virtual ~IAlfWidgetControl() {}
+
+ /**
+ * Get the state of the control.
+ * The state is a combination of binary state flags.
+ *
+ * The individual aspects of the state can be queried by testing
+ * for the bits in the return value.
+ *
+ * @since S60 ?S60_version
+ * @return The bit-pattern encoding the state
+ */
+ virtual uint state() const = 0;
+
+ /**
+ * Sets the widget control's state.
+ *
+ * The entire state of the widget is set to the passed-in value.
+ *
+ * The new state must conform to the following invariants:
+ *
+ * If IAlfWidgetControl::Focus is set, then IAlfWidgetControl::Focusable must also be set
+ * If IAlfWidgetControl::Focusable is set, then IAlfWidgetControl::Enabled must also be set
+ *
+ * If these invariants are violated, then this method will throw AlfException::EInvalidArgument
+ *
+ * @since S60 ?S60_version
+ * @param aState The new state of the control.
+ */
+ virtual void setState( uint aState ) = 0;
+
+ /**
+ * Enable given states.
+ *
+ * This method modifies a state by enabling bits. No bits are disabled.
+ * This is equal to <code>SetState( State() | aState )</code>.
+ *
+ * The resulting state is tested for the invariants documented with setState()
+ * and throws the same exceptions.
+ *
+ * @since S60 ?S60_version
+ * @param aState The states to be enabled.
+ */
+ virtual void enableState( uint aState ) = 0;
+
+ /**
+ * Disable given states.
+ *
+ * This method modifies a state by clearing bits. No bits are set.
+ * This is equal to <code>SetState( State() & ( 0xFFFFFFFF ^ aState ) )</code>.
+ *
+ * The resulting state is tested for the invariants documented with setState()
+ * and throws the same exceptions.
+ *
+ * @since S60 ?S60_version
+ * @param aState The states to be disabled.
+ */
+ virtual void disableState( uint aState ) = 0;
+
+ /**
+ * Checks the current state of the widget control for a single aspect.
+ * This is equal to <code>enabled = State() & aState</code>
+ *
+ * The parameter passed in should usually be a single bit state aspect
+ * e.g. <code>IAlfWidgetControl::Focusable</code>
+ * If a pattern with more than one bit set is passed in, the result
+ * is not easily usable.
+ *
+ * @since S60 ?S60_version
+ * @param aState a state bit pattern to test
+ * @return true if and only one of the passed-in bits is set in the state
+ */
+ virtual bool checkState( uint aState ) const = 0;
+
+ /**
+ * Get the number of event handlers in the control.
+ *
+ * @since S60 ?S60_version
+ * @return The number of event handlers.
+ */
+ virtual int numEventHandlers() const = 0;
+
+ /**
+ * Get an event handler by index.
+ *
+ * @since S60 ?S60_version
+ * @param aIndex The index of the event handler to get.
+ *
+ * @return The event handler at the given index.
+ */
+ virtual IAlfWidgetEventHandler& eventHandler( int aIndex ) = 0;
+
+ /**
+ * Get the index of the given event handler.
+ * The index specifies the order in which
+ * the event handlers are processed.
+ *
+ * @since S60 ?S60_version
+ * @param aEventHandler The event handler.
+ *
+ * @return The index of the event handler, or -1 if the event handler
+ * does not exist.
+ */
+ virtual int eventHandlerIndex(
+ IAlfWidgetEventHandler& aEventHandler ) const = 0;
+
+
+ /**
+ * Find an event handler responsible for the given event.
+ *
+ * @since S60 ?S60_version
+ * @param aEvent The event.
+ *
+ * @return The first event handler to handle the given event, or NULL
+ * if not found.
+ */
+ virtual IAlfWidgetEventHandler* findEventHandler(
+ const TAlfEvent& aEvent ) = 0;
+
+ /**
+ * Add a new event handler.
+ * The control takes the ownership of the event handler.
+ *
+ * @since S60 ?S60_version
+ * @param aEventHandler The event handler to be added.
+ * @param aIndex The index of the new event handler,
+ * or -1 to append the event handler after the existing
+ * event handlers.
+ */
+ virtual void addEventHandler(
+ IAlfWidgetEventHandler* aEventHandler,
+ int aIndex = -1 ) = 0;
+
+ /**
+ * Remove and destroy an event handler.
+ *
+ * @since S60 ?S60_version
+ * @param aEventHandler The event handler to be removed and destroyed.
+ */
+ virtual void removeAndDestroyEventHandler(
+ IAlfWidgetEventHandler& aEventHandler ) = 0;
+
+ /**
+ * Remove and destroy an event handler from the control bases on its name.
+ *
+ * @since S60 ?S60_version
+ * @param aHandlerId The name/Id of the event handler to be removed
+ * and destroyed.
+ */
+ virtual void removeAndDestroyEventHandler( const UString& aHandlerId ) = 0;
+
+
+ /**
+ * Remove and destroy an event handler.
+ *
+ * @since S60 ?S60_version
+ * @param aEventHandler The event handler to be removed and destroyed.
+ */
+ virtual void removeEventHandler(
+ IAlfWidgetEventHandler& aEventHandler ) = 0;
+
+
+ /**
+ * Remove and destroy all event handlers associated with presentation.
+ *
+ * @since S60 ?S60_version
+ */
+ virtual void removeAndDestroyPresentationEventHandlers() = 0;
+
+ /**
+ * Removes all event handlers associated with presentation from
+ * this control.
+ *
+ * @since S60 ?S60_version
+ */
+ virtual void removePresentationEventHandlers() = 0;
+
+ /**
+ * Get the number of elements in the control.
+ *
+ * @since S60 ?S60_version
+ * @return The number of elements.
+ */
+ virtual int numElements() const = 0;
+
+ /**
+ * Get an element by index.
+ *
+ * @since S60 ?S60_version
+ * @param aIndex The index of the element to get.
+ *
+ * @return The element at the given index.
+ */
+ virtual IAlfElement& element( int aIndex ) = 0;
+
+ /**
+ * Find an element by name.
+ *
+ * @since S60 ?S60_version
+ * @param aName The name of the element to find.
+ *
+ * @return The found element, or NULL if not found.
+ */
+ virtual IAlfElement* findElement( const char* aName ) = 0;
+
+ /**
+ * Add a new element.
+ * The control takes the ownership of the element.
+ *
+ * @since S60 ?S60_version
+ * @param aElement The element to be added.
+ */
+ virtual void addElement( IAlfElement* aElement ) = 0;
+
+ /**
+ * Remove and destroy an element. All visuals created by the
+ * element are destroyed.
+ *
+ * @since S60 ?S60_version
+ * @param aElement The element to be removed and destroyed.
+ */
+ virtual void removeAndDestroyElement( const IAlfElement& aElement ) = 0;
+
+ /**
+ * Remove an element.
+ *
+ * @since S60 ?S60_version
+ * @param aElement The element to be removed.
+ */
+ virtual void removeElement( const IAlfElement& aElement ) = 0;
+
+ /**
+ * Get an id for mapping data to a visual tree created by an element.
+ * The data id is required to be unique withing the scope of the element.
+ * The parent data id and data id ranges specified by SetDataIdRange can
+ * be used to calculate data ids in hierarchical element structures.
+ * In the default implementation, the data id is calculated as follows:
+ * \f[
+ * data id = aParentDataId * DataIdRange( aElement ) + aIndex
+ * \f]
+ *
+ * @since S60 ?S60_version
+ * @param aElement The element to associate the data id with.
+ * @param aIndex The index of the data field.
+ * @param aParentDataId The parent data id in the data hierarchy.
+ * @return A unique data id for mapping data to a visual tree.
+ */
+ virtual uint elementDataId(
+ const IAlfElement& aElement,
+ uint aIndex,
+ uint aParentDataId ) = 0;
+
+ /**
+ * Get the parent data id from the given data id.
+ * In the default implementation, the parent data id is calculated
+ * as follows:
+ * \f[
+ * parent data id = aDataId / DataIdRange( aElement )
+ * \f]
+ * The implementation should match the functionality of ElementDataId().
+ *
+ * @since S60 ?S60_version
+ * @param aElement The element associated with the given data id.
+ * @param aDataId The data id.
+ * @return The parent data id.
+ */
+ virtual uint parentElementDataId(
+ const IAlfElement& aElement,
+ uint aDataId ) = 0;
+
+ /**
+ * Get the index of the given child data id in the parent data container.
+ * In the default implementation, the parent data id is calculated
+ * as follows:
+ * \f[
+ * index = aDataId % DataIdRange( aElement )
+ * \f]
+ * The implementation should match the functionality of ElementDataId().
+ *
+ * @since S60 ?S60_version
+ * @param aElement The element associated with the given data id.
+ * @param aDataId The data id.
+ * @return The parent data id.
+ */
+ virtual uint dataIdToIndex(
+ const IAlfElement& aElement,
+ uint aDataId ) = 0;
+
+ /**
+ * Get data for a visual tree created by the given element.
+ *
+ * @since S60 ?S60_version
+ * @param aElement The element containing the visual tree.
+ * @param aDataId The data id of the visual tree.
+ * @return Data for the visual tree.
+ */
+ virtual IAlfVariantType* elementData(
+ const IAlfElement& aElement,
+ uint aDataId ) = 0;
+
+ /**
+ * Set the range of data ids for an element.
+ * The range is used for data mapping in ElementDataId() and ElementData().
+ * The default range for all elements is 0xFFFFFFFF. The ranges need to be
+ * adjusted for child elements in hierarchical element structures.
+ * Otherwise,the data ids will overflow and not remain unique.
+ * @see ElementDataId().
+ *
+ * @since S60 ?S60_version
+ * @param aElement The element.
+ * @param aRange The range of data ids.
+ */
+ virtual void setDataIdRange(
+ const IAlfElement& aElement,
+ uint aRange ) = 0;
+
+ /**
+ * Get the range of data ids for the given element.
+ * The range is used for data mapping in ElementDataId() and ElementData().
+ * @see SetDataIdRange().
+ *
+ * @since S60 ?S60_version
+ * @param aElement The element.
+ * @return The range of data ids for the element.
+ */
+ virtual uint dataIdRange( const IAlfElement& aElement ) = 0;
+
+ /**
+ * Create or update the presentation for the widget.
+ *
+ * @since S60 ?S60_version
+ */
+ virtual void updatePresentation() = 0;
+
+ /**
+ * Remove visuals from all elements. The visuals are destroyed
+ * after the given delay. This allows executing an animation
+ * sequence before the actual destruction of visuals.
+ *
+ * @since S60 ?S60_version
+ * @param aTimeMilliseconds The remaining time to destruction of
+ * all visuals.
+ */
+ virtual void destroyPresentation( int aTimeMilliseconds ) = 0;
+
+ /**
+ * Remove visuals from all elements and destroy all elements.
+ * The visuals and elements are destroyed after the given delay.
+ * This allows executing an animation sequence before the actual
+ * destruction of visuals.
+ *
+ * @since S60 ?S60_version
+ * @param aTimeMilliseconds The remaining time to destruction of
+ * all visuals.
+ */
+ virtual void destroyVisualsAndElements( int aTimeMilliseconds = 0 ) = 0;
+
+ /**
+ * Get the owner widget of this control.
+ *
+ * @since S60 ?S60_version
+ * @return The owner widget, or NULL if this control does not belong to
+ * any widget.
+ */
+ virtual AlfWidget* widget() = 0;
+
+ /**
+ * Handles events sent to widget control.
+ *
+ * @since S60 ?S60_version
+ * @param aEvent The event to be handled.
+ * @return Result of event processing. See AlfEventStatus.
+ */
+ virtual AlfEventStatus handleEvent( const TAlfEvent& aEvent ) = 0;
+
+ };
+
+/**
+ * Placeholder for information required to instantiate a widgetcontrol
+ * via the widget factory mechanism.
+ * A pointer to this structure is casted to a void pointer and sent to the
+ * factory plugin.
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+struct AlfWidgetControlInitData
+ {
+
+ /**
+ * Display pointer
+ */
+ CAlfDisplay* mDisplay;
+
+ /**
+ * Pointer to custom data passed via factory mechanism
+ * Not Owned.
+ */
+ AlfCustomInitDataBase* mCustomData;
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFWIDGETCONTROL_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfwidgetcontroldescriptor.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2007 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: An interface used by design tools to get a description of the control.
+*
+*/
+
+
+#ifndef I_ALFWIDGETCONTROLDESCRIPTOR_H
+#define I_ALFWIDGETCONTROLDESCRIPTOR_H
+
+#include <e32base.h>
+
+#include <alf/ialfinterfacebase.h>
+
+namespace Alf
+ {
+
+/**
+ * An interface used by design tools to get a description of the control.
+ * The description may include a generic description of the control, and
+ * descriptions of the event handlers and elements used by the control.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfWidgetControlDescription : public IAlfInterfaceBase
+ {
+public:
+ /**
+ * Get the description of the control.
+ *
+ * @since S60 ?S60_version
+ * @return The description of the control.
+ */
+ virtual const TDesC8& controlDescription() const = 0;
+
+ /**
+ * Get the number of required elements in the control.
+ *
+ * @since S60 ?S60_version
+ * @return The number of required elements.
+ */
+ virtual int numRequiredElements() const = 0;
+
+ /**
+ * Get the name of a required element by index.
+ *
+ * @since S60 ?S60_version
+ * @param aIndex The index of the element.
+ * @return The name of the element at the given index.
+ */
+ virtual const TDesC8& elementName(int aIndex) const = 0;
+
+ /**
+ * Get the description of a required element by index.
+ *
+ * @since S60 ?S60_version
+ * @param aIndex The index of the element.
+ * @return The description of the element at the given index.
+ */
+ virtual const TDesC8& elementDescription(int aIndex) const = 0;
+
+ /**
+ * Get the number of required event handlers in the control.
+ *
+ * @since S60 ?S60_version
+ * @return The number of required event handlers.
+ */
+ virtual int numRequiredEventHandlers() const = 0;
+
+ /**
+ * Get the event id of a required event handler by index.
+ * The event id may be a custaom event id or a key event id.
+ *
+ * @since S60 ?S60_version
+ * @param aIndex The index of the event handler.
+ * @return The name of the event handler at the given index.
+ */
+ virtual uint eventHandlerId(int aIndex) const = 0;
+
+ /**
+ * Determine the type of a required event handler by index.
+ * The event type may be a custom event or a key event.
+ *
+ * @note Pointer event handlers cannot be identified without
+ * an associated custom event id. Therefore, pointer event handlers
+ * are visible as custom event handlers.
+ *
+ * @since S60 ?S60_version
+ * @param aIndex The index of the event handler.
+ * @return <code>ETrue</code> if the event handler is a key event handler.
+ * <code>EFalse</code> if the event handler is a custom event handler.
+ */
+ virtual bool keyEventHandler(int aIndex) const = 0;
+
+ /**
+ * Get the name of a required event handler by index.
+ *
+ * @since S60 ?S60_version
+ * @param aIndex The index of the event handler.
+ * @return The name of the event handler at the given index.
+ */
+ virtual const TDesC8& eventHandlerName(int aIndex) const = 0;
+
+ /**
+ * Get the description of a required event handler by index.
+ *
+ * @since S60 ?S60_version
+ * @param aIndex The index of the event handler.
+ * @return The description of the event handler at the given index.
+ */
+ virtual const TDesC8& eventHandlerDescription(int aIndex) const = 0;
+
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFWIDGETCONTROLDESCRIPTOR_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialfwidgeteventhandler.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,220 @@
+/*
+* Copyright (c) 2007 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: Widget control event handler interface.
+*
+*/
+
+
+#ifndef I_ALFWIDGETEVENTHANDLER_H
+#define I_ALFWIDGETEVENTHANDLER_H
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+
+
+class TAlfEvent;
+
+namespace duiuimodel
+ {
+class DuiNode;
+ }
+using namespace duiuimodel;
+
+namespace Alf
+ {
+//FORWARD DECLARATIONS
+class CAlfWidgetControl;
+class AlfCustomInitDataBase;
+struct AlfWidgetEventHandlerInitData;
+
+
+namespace alfwidgeteventhandler
+ {
+static const IfId ident =
+ {
+ 0, "alfwidgeteventhandler"
+ };
+ }
+
+/**
+ * The interface for event handlers used by
+ * widget controls. The event handlers are
+ * used for handling any Alfred events, including
+ * key events, pointer events and custom events.
+ * Interfaces provided by the event handlers can
+ * be accessed using IAlfInterfaceBase::MakeInterface().
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfWidgetEventHandler : public IAlfInterfaceBase
+ {
+public:
+ enum AlfEventHandlerType
+ {
+ /**
+ * Presentation related event handlers. These will be deleted when the
+ * presentation is destroyed.
+ * @see: IAlfWigetControl::destroyPresentation
+ * @see: IAlfWiget::setPresentation
+ */
+ EPresentationEventHandler,
+ /**
+ * Logical event handlers. These event handlers are not presentation related and
+ * will not be destroyed during the destruction of the presentation.
+ */
+ ELogicalEventHandler,
+ };
+
+ /**
+ * Phase in which event handlers are executed.
+ */
+ enum AlfEventHandlerExecutionPhase
+ {
+ /**
+ * Tunneling event handlers are executed only in the tunnelling phase of the
+ * event handling cycle. Tunnelling event handlers are executed before
+ * IAlfWidgetControl::HandleEvent is executed.
+ * @see IAlfWidgetControl::HandleEvent
+ */
+ ETunnellingPhaseEventHandler,
+
+ /**
+ * Bubbling event handlers are executed only in the bubbling phase of the
+ * event handling cycle. Bubbling event handlers are executed after
+ * IAlfWidgetControl::HandleEvent is executed.
+ * @see IAlfWidgetControl::HandleEvent
+ */
+ EBubblingPhaseEventHandler,
+
+ /**
+ * These event handlers are executed both in the tunneling and bubbling phase
+ * of the event handling cycle i.e both before and after IAlfWidgetControl::HandleEvent
+ * is executed.
+ * @see IAlfWidgetControl::HandleEvent
+ */
+ ETunnellingAndBubblingPhaseEventHandler,
+ };
+
+ static inline const IfId& type()
+ {
+ return alfwidgeteventhandler::ident;
+ }
+
+ virtual inline ~IAlfWidgetEventHandler() {}
+
+ /**
+ * Used to identify event handlers that are capable of handling
+ * a specified key or custom event. Pointer event handlers cannot be
+ * identified directly, since they are dependent on the presentation.
+ * Therefore, pointer event handlers should be associated with
+ * a custom event ID that can be used to simulate the actual pointer event.
+ *
+ * @since S60 ?S60_version
+ * @param aEvent The event.
+ * @return <code>ETrue</code> if the event can be processed. Otherwise <code>EFalse</code>.
+ */
+ virtual bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const = 0;
+
+ /**
+ * Called when an input event is being offered to this event handler.
+ * The return value is used to indicate if the event was processed.
+ * Processed events may not be offered to other event handlers.
+ *
+ * @since S60 ?S60_version
+ * @param aControl The parent control of this event handler.
+ * @param aEvent The event.
+ * @return Result of event processing. See AlfEventStatus.
+ */
+ virtual AlfEventStatus offerEvent( CAlfWidgetControl& aControl,const TAlfEvent& aEvent) = 0;
+
+ /**
+ * Defines the widget states, where the event handler is active.
+ * By default, if this method is not called, the event handler is expected
+ * to be active in all states.
+ *
+ * @param aStates A bitmask defining the widget states, where the event
+ * handler is active. The low 16 bits are reserved for the states
+ * defined by the framework in . The high 16 bits are
+ * available for states defined by the client code.
+ */
+ virtual void setActiveStates( unsigned int aStates ) = 0;
+
+ /**
+ * Sets AlfWidgetEventHandlerInitData to event handler.
+ *
+ * @param aData A data structure which contains for example id of the event
+ * handler.
+ */
+ virtual void setEventHandlerData( const AlfWidgetEventHandlerInitData& aData ) = 0;
+
+ /**
+ * Returns AlfWidgetEventHandlerInitData.
+ *
+ * @return A pointer to AlfWidgetEventHandlerInitData structure which contains
+ * for example id of the event handler.
+ */
+ virtual AlfWidgetEventHandlerInitData* eventHandlerData() = 0;
+
+ /**
+ * Returns the type of EventHandler.
+ * @see IAlfWidgetEventHandler::AlfEventHandlerType
+ *
+ * @return The type of event handler.
+ */
+ virtual AlfEventHandlerType eventHandlerType() = 0;
+
+ /**
+ * Returns information about the phase in the event handling cycle in
+ * which the event hadler will be executed.
+ * @see IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase
+ *
+ * @return Event handler execution phase.
+ */
+ virtual AlfEventHandlerExecutionPhase eventExecutionPhase() = 0;
+ };
+
+/**
+ * Placeholder for information required to instantiate an event handler
+ * via the widget factory mechanism.
+ * A pointer to this structure is casted to a void pointer and sent to the
+ * factory plugin.
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+struct AlfWidgetEventHandlerInitData
+ {
+ /**
+ * Event handler instance ID.This uniquely identifies every event handler instance.
+ */
+ char* mWidgetEventHandlerId;
+
+ /**
+ * Pointer to node in declaration containing information for the widget.
+ */
+ DuiNode* mNode;
+
+ /**
+ * Pointer to custom data passed via factory mechanism
+ * Not Owned.
+ */
+ AlfCustomInitDataBase* mCustomData;
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFWIDGETEVENTHANDLER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/alf_widgetutils_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<api id="abd160d0b243761794701909ff0acef6" dataversion="1.0">
+<name>alf widgetutils api</name>
+<description>Alf WidgetUtils API</description>
+<type>c++</type>
+<subsystem>alfwidgetutils</subsystem>
+<libs><lib name="alfwidgetutils.lib"/>
+</libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: ALF widget factory API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// To be removed once migration to the new internal export dir has been done
+
+../inc/alf/alffactorypluginloader.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alffactorypluginloader.h)
+../inc/alf/alftypes.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alftypes.h)
+../inc/alf/ialffactoryplugin.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/ialffactoryplugin.h)
+../inc/alf/alfwidgetfactoryloader.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfwidgetfactoryloader.h)
+../inc/alf/alfexception.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfexception.h)
+../inc/alf/alfattributeexception.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfattributeexception.h)
+../inc/alf/alfvisualexception.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfvisualexception.h)
+../inc/alf/alfelementexception.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfelementexception.h)
+../inc/alf/alfwidgetexception.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfwidgetexception.h)
+../inc/alf/alfdataexception.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfdataexception.h)
+../inc/alf/alfexceptions.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfexceptions.h)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/alfattributeexception.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2007 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: attribute exception
+*
+*/
+
+
+
+
+#ifndef ALFATTRIBUTEEXCEPTION_H_
+#define ALFATTRIBUTEEXCEPTION_H_
+
+#include <alf/alfexception.h>
+
+using namespace std;
+
+namespace osncore
+ {
+
+
+/**
+ * UI library attribute exception class.
+ *
+ * @lib core.lib
+ * @since S60 ?S60_version
+ */
+class AlfAttributeException : public AlfException
+ {
+public:
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ */
+ OSN_IMPORT AlfAttributeException( const int aErrorCode ) throw();
+
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ * @param aInfo Optional additional information or NULL
+ * @param aFileAndLine Optional file and line information or NULL
+ */
+ OSN_IMPORT AlfAttributeException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw();
+
+ /**
+ * Class Destructor.
+ */
+ OSN_IMPORT virtual ~AlfAttributeException() throw();
+
+ /**
+ * Returns the description of the exception.
+ * @return The description of the exception.
+ */
+ OSN_IMPORT virtual const char* what() const throw();
+ };
+
+ }
+
+#endif //ALFATTRIBUTEEXCEPTION_H_
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/alfdataexception.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2007 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: data exception
+*
+*/
+
+
+
+
+#ifndef ALFDATAEXCEPTION_H_
+#define ALFDATAEXCEPTION_H_
+
+#include <alf/alfexception.h>
+
+
+namespace osncore
+ {
+
+
+/**
+ * @class AlfDataException alfdataexception.h "alf/alfdataexception.h"
+ * Exception class used with invalid data exceptions.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfDataException : public AlfException
+ {
+public:
+
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ */
+ OSN_IMPORT AlfDataException( const int aErrorCode ) throw();
+
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ * @param aInfo Optional additional information or NULL
+ * @param aFileAndLine Optional file and line information or NULL
+ */
+ OSN_IMPORT AlfDataException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw();
+
+ /**
+ * Class Destructor.
+ */
+ OSN_IMPORT virtual ~AlfDataException() throw();
+
+ /**
+ * Returns the description of the exception.
+ * @ret The description of the exception.
+ */
+ OSN_IMPORT virtual const char* what() const throw();
+ };
+
+ }
+
+#endif //ALFDATAEXCEPTION_H_
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/alfelementexception.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2007 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: element exception
+*
+*/
+
+
+
+
+#ifndef ALFELEMENTEXCEPTION_H_
+#define ALFELEMENTEXCEPTION_H_
+
+#include <alf/alfexception.h>
+
+
+namespace osncore
+ {
+
+/**
+ * @class AlfElementException alfelementexception.h "alf/alfelementexception.h"
+ * Element exception class.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfElementException : public AlfException
+ {
+public:
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ */
+ OSN_IMPORT AlfElementException( const int aErrorCode ) throw();
+
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ * @param aInfo Optional additional information or NULL
+ * @param aFileAndLine Optional file and line information or NULL
+ */
+ OSN_IMPORT AlfElementException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw();
+
+ /**
+ * Class Destructor.
+ */
+ OSN_IMPORT virtual ~AlfElementException() throw();
+
+ /**
+ * Returns the description of the exception.
+ * @return The description of the exception.
+ */
+ OSN_IMPORT virtual const char* what() const throw();
+ };
+
+ }
+
+#endif //ALFELEMENTEXCEPTION_H_
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/alfexception.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2007 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: bad alloc eception interface
+*
+*/
+
+
+
+
+#ifndef ALFEXCEPTION_H_
+#define ALFEXCEPTION_H_
+
+#include <osn/osncommon.h>
+#include <stdexcept>
+
+using namespace std;
+
+namespace osncore
+ {
+
+#define STRINGIFY(x) #x
+#define TOSTRING(x) STRINGIFY(x)
+
+#ifdef ALF_DEBUG_EXCEPTIONS
+/**
+* Use this macro for throwing exceptions in the widgetmodel code.
+*
+* @param p1 Exception class
+* @param p2 Error code
+* @param p3 Debug information string
+*/
+#define ALF_THROW(p1,p2,p3) \
+{p1 p4= p1(p2,p3, __FILE__ ":" TOSTRING(__LINE__)); throw (p4);}
+#else
+#define ALF_THROW(p1,p2,p3) {p1 p4= p1(p2); throw(p4);}
+#endif // ALF_DEBUG_EXCEPTIONS
+
+
+/**
+* Error codes for Alf Widget Model. These error codes are sent within
+* AlfException class and they are common across all widgets. Widget specific
+* exceptions are defined together with widget specific exception classes.
+* For more information on widget specific errors see widget specific exception
+* classes (like CAlfButtonException).
+*/
+enum AlfWidgetModelException
+ {
+ ECommonError,
+
+ /** Passed attribute had no meaning in the object
+ where it was passed to. */
+ EInvalidAttribute,
+
+ /* Passed attribute was valid, but the value for the
+ attribute was invalid. */
+ EInvalidAttributeValue,
+
+ /** Not enought information provided to affect the specified attribute. */
+ EIncompleteAttributeValues,
+
+ /** Passed visual was invalid */
+ EInvalidVisual,
+
+ /** Creation of visual failed */
+ ECanNotCreateVisual,
+
+ /** Passed visual value was invalid */
+ EInvalidVisualValue,
+
+ /** Passed Element was invalid */
+ EInvalidElement,
+
+ /** Invalid data type in Alf::IAlfVariantType */
+ EInvalidVariantDataType,
+
+ /** Array Index out of bounds */
+ EInvalidArrayIndex,
+
+ /** A non-applicable operation was performed on a
+ Alf::IAlfContainer object. */
+ EInvalidContainerOperation,
+
+ /** A non-applicable operation was performed on a
+ Alf::IAlfMap object. */
+ EInvalidMapOperation,
+
+ /** A non-applicable operation was performed on a
+ Alf::IAlfBranch object. */
+ EInvalidBranchOperation,
+
+ /** An invalid operation was perfomed on a
+ Alf::IAlfModel object. */
+ EInvalidModelOperation,
+
+ /** Passed Widget was invalid */
+ EInvalidWidget,
+
+ /**
+ * An invalid instance ID was supplied to the factory while creating a
+ * widget. Also used if an attempt is used to create a widget with same
+ * instance ID as an existing widget.
+ */
+ EInvalidWidgetInstanceId,
+
+ /**
+ * No display was found from the UI Accelerator Toolkit environment in
+ * which the widget should have been constructed.
+ * See Alf::IAlfWidgetFactory::createWidget() for more information.
+ */
+ EDisplayNotFound,
+
+ /**
+ * EInvalidArgument error code can be used when a user passes an
+ * argument which is invalid. For example, user tries to set alignment
+ * of vertical scrollbar as top or bottom (vertical scrollbar can be left or
+ * right aligned only).
+ */
+ EInvalidArgument,
+
+ /**
+ * Error code used when an operation would result in an invalid object
+ * hierarchy. There are multiple object hierarchies maintained in widget
+ * model that this error code can relate to. Widget objects are stored in a
+ * hierarchy under a view widget
+ * (see Alf::IAlfContainerWidget and Alf::IAlfWidget for more information).
+ * Widget presentation can be constructed from a hierarchy of visual
+ * templates (see Alf::IAlfVisualTemplate).
+ */
+ EInvalidHierarchy
+ };
+
+/**
+ * @class AlfException alfexception.h "alf/alfexception.h"
+ * Base exception class.
+ *
+ * Exceptions specify an error code, which can be one of the error codes
+ * defined in osncore::AlfWidgetModelException. Concrete widgets derive their
+ * own exception classes from this base class. If the exception is thrown from
+ * a concrete widget, the error code can also be one of the widget specific
+ * error codes.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfException : public exception
+ {
+public:
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ */
+ OSN_IMPORT AlfException( const int aErrorCode ) throw();
+
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ * @param aInfo Optional additional information or NULL
+ */
+ OSN_IMPORT AlfException( int aErrorCode, const char* aInfo ) throw();
+
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ * @param aInfo Optional additional information or NULL
+ * @param aFileAndLine Optional file and line information or NULL
+ */
+ OSN_IMPORT AlfException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw();
+
+ /**
+ * Class Destructor.
+ */
+ OSN_IMPORT virtual ~AlfException() throw();
+
+ /**
+ * Returns the description of the exception.
+ * @return The description of the exception.
+ */
+ OSN_IMPORT virtual const char* what() const throw();
+
+ /**
+ * Returns the error code of the exception.
+ * @return The error code of the exception.
+ */
+ OSN_IMPORT virtual int errorCode() const throw();
+
+ /**
+ * Returns additional information defined in the exception.
+ * This can be e.g. the name of the class, which has thrown the exception.
+ *
+ * @return Additional information defined in the exception.
+ */
+ OSN_IMPORT virtual const char* info() const throw();
+
+ /**
+ * Returns a string with the filename and the line number of the source code,
+ * which has thrown the exception. If the information does not exist,
+ * an empty string is returned.
+ *
+ * @return A string with the filename and the line number of the source code,
+ * which has thrown the exception.
+ */
+ OSN_IMPORT const char* fileAndLine() const throw();
+
+private: // data
+
+ int mErrorCode;
+ const char* mInfo;
+ const char* mFileAndLine;
+ };
+
+ }
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/alfexceptions.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2007 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: includes all exception classes
+*
+*/
+
+
+
+
+#ifndef ALFEXCEPTIONS_H_
+#define ALFEXCEPTIONS_H_
+
+#include <alf/alfattributeexception.h>
+#include <alf/alfvisualexception.h>
+#include <alf/alfelementexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfwidgetexception.h>
+
+#endif //ALFEXCEPTIONS_H_
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/alffactorypluginloader.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2007 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: Factory plugin loader
+*
+*/
+
+
+
+#ifndef ALFFACTORYPLUGINLOADER_H
+#define ALFFACTORYPLUGINLOADER_H
+
+#include <osn/osndefines.h>
+#include <memory>
+
+using namespace std;
+
+namespace Alf
+ {
+class IAlfFactoryPlugin;
+class AlfFactoryPluginLoaderImpl;
+
+/**
+ * @class AlfFactoryPluginLoader alffactorypluginloader.h "alf/alffactorypluginloader.h"
+ *
+ * Factory plugin loader loads factory plugins. Loader will resolve factory
+ * plugin based on given string and load factory which can create requested
+ * product. Loader owns factory plugins. Factory products and their
+ * derivatives must be destroyed before destroying a loader object.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfFactoryPluginLoader
+ {
+public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ *
+ * @exception std::bad_alloc Thrown if out of memory during the
+ * construction.
+ */
+ OSN_IMPORT AlfFactoryPluginLoader();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfFactoryPluginLoader();
+
+public:
+
+ /**
+ * Load a factory plugin.
+ *
+ * @param aFactoryProduct Factory plugin is loaded based on a given string
+ * @since S60 5.0
+ * @return Pointer to IAlfFactoryPlugin or NULL. Ownership is not
+ * transferred to caller.
+ */
+ OSN_IMPORT IAlfFactoryPlugin* loadFactoryPlugin(const char* aFactoryProduct);
+
+private:
+ /**
+ * Copy Constructor
+ */
+ AlfFactoryPluginLoader(const AlfFactoryPluginLoader&);
+
+ /**
+ * Assignment Operator
+ */
+ AlfFactoryPluginLoader& operator=(const AlfFactoryPluginLoader&);
+
+private: // Data
+ auto_ptr<AlfFactoryPluginLoaderImpl> mImpl;
+ };
+
+ } // namespace Alf
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/alftypes.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2007 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: Type declarations
+*
+*/
+
+
+
+#ifndef ALFTYPES_H
+#define ALFTYPES_H
+
+namespace Alf
+ {
+struct IfId
+ {
+ unsigned int mIfId;
+ const char* mImplementationId;
+ };
+
+
+/**
+ * Specfies the result of event processing when an event that
+ * is offered to an event handler.
+ */
+enum AlfEventStatus
+ {
+ /**
+ * The event handler did not handle the event.
+ */
+ EEventNotHandled = 0,
+ /**
+ * The event handler handled the event but does not
+ * desire to block the event flow to other interested
+ * entities.
+ */
+ EEventHandled,
+ /**
+ * The event handler consumed the event and wishes to
+ * terminate event flow to other interested enetities.
+ * In other words, the event handler acted as a "filter"
+ * for the event.
+ */
+ EEventConsumed,
+ };
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/alfvisualexception.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2007 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: visual exception
+*
+*/
+
+
+
+
+#ifndef ALFVISUALEXCEPTION_H_
+#define ALFVISUALEXCEPTION_H_
+
+#include <alf/alfexception.h>
+
+namespace osncore
+ {
+
+/**
+ * @class AlfVisualException alfvisualexception.h "alf/alfvisualexception.h"
+ * Visual exception class.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfVisualException : public AlfException
+ {
+public:
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ */
+ OSN_IMPORT AlfVisualException( const int aErrorCode ) throw();
+
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ * @param aInfo Optional additional information or NULL
+ * @param aFileAndLine Optional file and line information or NULL
+ */
+ OSN_IMPORT AlfVisualException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw();
+
+ /**
+ * Class Destructor.
+ */
+ OSN_IMPORT virtual ~AlfVisualException() throw();
+
+ /**
+ * Returns the description of the exception.
+ * @ret The description of the exception.
+ */
+ OSN_IMPORT virtual const char* what() const throw();
+ };
+ }
+
+#endif //ALFVISUALEXCEPTION_H_
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/alfwidgetexception.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2007 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: widget exception
+*
+*/
+
+
+
+
+#ifndef ALFWIDGETEXCEPTION_H_
+#define ALFWIDGETEXCEPTION_H_
+
+#include <alf/alfexception.h>
+
+using namespace std;
+
+namespace osncore
+ {
+
+/**
+ * @class AlfWidgetException alfwidgetexception.h "alf/alfwidgetexception.h"
+ * Widget exception class.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfWidgetException : public AlfException
+ {
+public:
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ */
+ OSN_IMPORT AlfWidgetException( const int aErrorCode ) throw();
+
+ /**
+ * Constructor.
+ * @param aErrorCode Error code
+ * @param aInfo Optional additional information or NULL
+ * @param aFileAndLine Optional file and line information or NULL
+ */
+ OSN_IMPORT AlfWidgetException(
+ int aErrorCode, const char* aInfo, const char* aFileAndLine ) throw();
+
+ /**
+ * Class Destructor.
+ */
+ OSN_IMPORT virtual ~AlfWidgetException() throw();
+
+ /**
+ * Returns the description of the exception.
+ * @ret The description of the exception.
+ */
+ OSN_IMPORT virtual const char* what() const throw();
+ };
+
+ }
+
+#endif //ALFWIDGETEXCEPTION_H_
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/alfwidgetfactoryloader.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2007 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: Loads widget factory plugin
+*
+*/
+
+
+
+#ifndef I_ALFWIDGETFACTORYLOADER_H
+#define I_ALFWIDGETFACTORYLOADER_H
+
+#include <osn/osndefines.h>
+#include <memory>
+
+using namespace std;
+
+class CAlfEnv;
+
+namespace Alf
+ {
+class IAlfWidgetFactory;
+class AlfWidgetFactoryLoaderImpl;
+
+/**
+ * @class AlfWidgetFactoryLoader alfwidgetfactoryloader.h "alf/alfwidgetfactoryloader.h"
+ *
+ * Factory plugin loader loads factory plugins. Loader will resolve factory
+ * plugin based on given string and load factory which can create requested
+ * product. Loader owns factory plugins. Factory products and their
+ * derivatives must be destroyed before destroying a loader object.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfWidgetFactoryLoader
+ {
+public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ *
+ * @exception std::bad_alloc Thrown if out of memory during the construction.
+ */
+ OSN_IMPORT AlfWidgetFactoryLoader();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~AlfWidgetFactoryLoader();
+
+public:
+
+ /**
+ * Loads a widget factory.
+ *
+ * @param aEnv Alfred Environment
+ * @return Pointer to IAlfWidgetFactory or 0.
+ * Ownership is not transferred to caller.
+ */
+ OSN_IMPORT IAlfWidgetFactory* loadWidgetFactory(CAlfEnv& aEnv);
+
+private:
+
+ /**
+ * Copy Constructor
+ */
+ AlfWidgetFactoryLoader( const AlfWidgetFactoryLoader& );
+
+ /**
+ * Assignment Operator
+ */
+ AlfWidgetFactoryLoader& operator=( const AlfWidgetFactoryLoader& );
+
+private: // Data
+ auto_ptr<AlfWidgetFactoryLoaderImpl> mImpl;
+ };
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alf_widgetutils_api/inc/alf/ialffactoryplugin.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2007 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: factory plugin interface.
+*
+*/
+
+
+
+#ifndef I_ALFFACTORYPLUGIN_H
+#define I_ALFFACTORYPLUGIN_H
+
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+
+namespace Alf
+ {
+
+namespace alffactoryplugin
+ {
+static const IfId ident=
+ {
+ 0,"alffactoryplugin"
+ };
+ }
+
+/**
+ * @class IAlfFactoryPlugin ialffactoryplugin.h "alf/ialffactoryplugin.h"
+ * Base class for factory plugins.
+ *
+ * @lib alfwidgetutils.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfFactoryPlugin : public IAlfInterfaceBase
+ {
+public:
+ static const IfId& type()
+ {
+ return alffactoryplugin::ident;
+ }
+public:
+ /**
+ * Create factory product.
+ * @param aProduct Product to create.
+ * @param aInitData Initialization data for product.
+ * @return Instance or 0.
+ */
+ virtual IAlfInterfaceBase* createProduct(
+ const char* aProduct, void* aInitData ) = 0;
+
+ /**
+ * Count available products.
+ *
+ * @return Product count.
+ */
+ virtual int productCount() const = 0;
+
+ /**
+ * Fetch product info by index.
+ *
+ * @param aIndex List index.
+ * @return String describing product.
+ */
+ virtual const char* productInfo( int aIndex ) const = 0;
+
+ /**
+ * Destructor.
+ */
+ virtual ~IAlfFactoryPlugin() {};
+ };
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/alfexport.hrh Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2007 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: Defines export macros for internal APIs in uiaccelerator.
+*
+*/
+
+
+#ifndef ALFEXPORT_HRH
+#define ALFEXPORT_HRH
+
+#include <platform_paths.hrh>
+
+// Use this macro for exporting currently internal headers in uiaccelerator
+#define ALF_INTERNAL_EXPORT(header) ../inc/##header |../../##header
+
+#endif //ALFEXPORT_HRH
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/gesturehelper_api/gesturehelper_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="28cc48c68e52308ca0b81248e7a3c370" dataversion="1.0">
+<name>gesturehelper api</name>
+<description>API for gesture helper</description>
+<type>c++</type>
+<subsystem>gesturehelper</subsystem>
+<libs></libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/gesturehelper_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 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: Build information
+*
+*/
+
+#include <platform_paths.hrh>
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/gesturecontrol.h MW_LAYER_PLATFORM_EXPORT_PATH(gesturecontrol.h)
+../inc/gesturehelper.h MW_LAYER_PLATFORM_EXPORT_PATH(gesturehelper.h)
+../inc/gestureobserver.h MW_LAYER_PLATFORM_EXPORT_PATH(gestureobserver.h)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/gesturehelper_api/inc/gesturecontrol.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2007 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: Gesture control
+*
+*/
+
+#ifndef _GESTURECONTROL_H_
+#define _GESTURECONTROL_H_
+
+#include <alf/alfcontrol.h>
+
+class CAlfEnv;
+class CAlfDisplay;
+
+namespace GestureHelper
+{
+
+class CGestureHelper;
+class MGestureObserver;
+
+/**
+ * Gesture control provides pointer event forwarding to gesture helper.
+ *
+ * Gesture control can be created as
+ * - Stand-alone: This functionality is usable by clients that want to
+ * capture pointer events from anywhere in the screen. For example, a view
+ * that wants to know if user tapped anywhere on the screen could use this.
+ * - Derived: client can use the forward-pointer-events-to-gesture-helper
+ * functionality by deriving from CGestureControl. Client has to create at
+ * least one visual that captures pointer events. This base class will
+ * receive the events and forward them to CGestureHelper.
+ *
+ * The client can keep other widgets on top of this control, to allow them
+ * priority of capturing the pointer events.
+ */
+class CGestureControl : public CAlfControl
+ {
+public:
+ /**
+ * Creates a stand-alone gesture control.
+ * Creates a full screen visual that captures pointer events. Converts
+ * pointer events to gestures and calls back on aObserver.
+ * @param aFreeControlGroupId control group id that client does not use
+ */
+ IMPORT_C static CGestureControl* NewLC( MGestureObserver& aObserver,
+ CAlfEnv& aEnv, CAlfDisplay& aDisplay, TInt aFreeControlGroupId );
+
+ /** Destructor */
+ IMPORT_C ~CGestureControl();
+
+ // From CAlfControl
+ IMPORT_C TBool OfferEventL( const TAlfEvent& aEvent );
+
+ /** @see CGestureHelper::SetHoldingEnabled */
+ IMPORT_C void SetHoldingEnabled( TBool aEnabled );
+ /** @see CGestureHelper::IsHoldingEnabled */
+ IMPORT_C TBool IsHoldingEnabled() const;
+ /** @see CGestureHelper::SetDoubleTapEnabled */
+ IMPORT_C void SetDoubleTapEnabled( TBool aEnabled );
+ /** @see CGestureHelper::IsDoubleTapEnabled */
+ IMPORT_C TBool IsDoubleTapEnabled() const;
+
+protected:
+ /** Constructor */
+ IMPORT_C CGestureControl();
+
+ /**
+ * Deriving class is expected to create a visual to receive pointer events.
+ * This base class does not create a visual (unless creates via NewLC, i.e.,
+ * in that case this class is not derived from)
+ * @param aFreeControlGroupId control group id that client does not use
+ */
+ IMPORT_C void ConstructL( MGestureObserver& aObserver,
+ CAlfEnv& aEnv, CAlfDisplay& aDisplay, TInt aFreeControlGroupId );
+
+private:
+ /// Helper that provides gestures
+ CGestureHelper* iHelper;
+ };
+
+} // namespace GestureHelper
+
+#endif // _GESTURECONTROL_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/gesturehelper_api/inc/gesturehelper.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2007 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: Gesture helper interface
+*
+*/
+
+#ifndef _GESTUREHELPER_H_
+#define _GESTUREHELPER_H_
+
+#include <e32base.h>
+#include <gestureobserver.h>
+
+class CAlfEnv;
+class CAlfDisplay;
+class TAlfEvent;
+struct TPointerEvent;
+
+namespace GestureHelper
+{
+
+class CGestureHelperImpl;
+
+/**
+ * Gesture helper provides functionality to convert a stream of pointer events
+ * into a logical gesture, and to assist clients in calculation of gesture
+ * speed and distance.
+ *
+ * Interfaces
+ * - CGestureHelper is a parser of pointer events. Recognises gestures from
+ * a sequence of pointer events, and converts them to gesture commands.
+ * For documentation of callbacks, see @ref MGestureObserver.
+ * - MGestureObserver allows clients to get notified of gestures
+ * - MGestureEvent represents the gesture (event)
+ */
+NONSHARABLE_CLASS( CGestureHelper ) : public CBase
+ {
+public:
+ /**
+ * The helper is expected to be a member variable, hence NewLC is not provided
+ */
+ IMPORT_C static CGestureHelper* NewL( MGestureObserver& aObserver );
+
+ /** Destructor */
+ IMPORT_C ~CGestureHelper();
+
+ /**
+ * Specify whether the helper will send hold events. By default, holding is enabled.
+ * "Hold" means user has held stylus/finger on the same position for a longer duration.
+ *
+ * Clients that require holding to be treated with no special meaning should disable
+ * holding to simplify their event handling.
+ * For example, assume the client uses swipe left/right to control navigation, and
+ * holding is enabled. If user holds, the client gets hold left/right
+ * event, and no swipe event. If user now drags left or right while still pressing
+ * stylus down, the client will not get a swipe event (since it already received a hold
+ * event). Upon release event, the client no reliable way of knowing whether the
+ * user swiped left/right or cancelled the swipe. This problem is removed if the
+ * client simply disables holding. In the above scenario while holding disabled,
+ * the client would get only swipe events (and released event).
+ * (Swipe can be cancelled by dragging towards, but not beyond, the starting position.)
+ */
+ IMPORT_C void SetHoldingEnabled( TBool aEnabled );
+
+ /**
+ * @return whether sending hold events is currently enabled
+ * ("Hold" means user has held stylus/finger on the same position for a longer duration.)
+ */
+ IMPORT_C TBool IsHoldingEnabled() const;
+
+ /**
+ * Enables/disables double tap support. Double tap is disabled by default.
+ * When double tap is disabled, gesture helper emits tap events immediately when
+ * user lifts stylus/finger.
+ * When double tap is enabled, tap events are emitted after the double tap timeout passes.
+ * The timeout is the maximum time within which the second tap will be treated
+ * as a double tap. That is, there is a delay (sluggishness) before client receives
+ * the tap event when double tap is enabled.
+ * tap + timeout => tap event emitted after timeout
+ * tap + tap before timeout => double tap event emitted immediately after the second tap
+ * tap + swipe => tap + swipe events
+ * (tap + timeout + tap + timeout => two tap events)
+ */
+ IMPORT_C void SetDoubleTapEnabled( TBool aEnabled );
+
+ /**
+ * @return whether double tap is currently enabled. See SetDoubleTapEnabled
+ */
+ IMPORT_C TBool IsDoubleTapEnabled() const;
+
+ /**
+ * Initialise pointer capture for Alfred
+ * This means that helper will receive drag events and pointer events that
+ * go outside the original visual area
+ */
+ IMPORT_C void InitAlfredPointerCaptureL( CAlfEnv& aEnv, CAlfDisplay& aDisplay,
+ TInt aFreeControlGroupId );
+
+ /**
+ * Give a pointer event to the helper, to form a part of a gesture
+ * For AVKON-based client, this interface is the only option.
+ * Alfred-based client should use OfferEventL, as it allows gesture events to
+ * provider the visual on which the pointer event started.
+ * @param aEvent pointer event
+ * @return whether event was consumed or not
+ * EFalse the event is not a pointer events and if pointer up/drag
+ * event received without pointer down event
+ * ETrue in all the other cases of pointer event
+ */
+ IMPORT_C TBool HandlePointerEventL( const TPointerEvent& aEvent );
+
+ /**
+ * Offer an Alf event. See HandlePointerEventL.
+ * @return whether event was consumed or not
+ * EFalse the event is not a pointer events and if pointer up/drag
+ * event received without pointer down event
+ * ETrue in all the other cases of pointer event
+ */
+ IMPORT_C TBool OfferEventL( const TAlfEvent& aEvent );
+
+ /**
+ * Cancel ongoing recognision. Purges all pointer events given earlier, and
+ * starts afresh. It is not necessary to call Cancel before deleting the object.
+ */
+ IMPORT_C void Cancel();
+
+ /**
+ * Adds a new observer to gesture helper events. Replaces any earlier observer.
+ * This is to allow sharing of gesture helper between different controls.
+ * The control which is currently shown (control that is on top of the roster)
+ * will add as an observer and the earlier control which is now not in focus will
+ * automatically be removed as an observer.
+ *
+ * This API should be used only when the gesture helper is shared between more
+ * than one control. Gesture helper can be shared only among the controls within the same roster.
+ * Only required for alf based applications, not required for CCoeControl.
+ *
+ */
+ IMPORT_C void AddObserver(MGestureObserver* aObserver);
+
+private:
+ /// interface implementation
+ CGestureHelperImpl* iImpl;
+ };
+
+} // namespace GestureHelper
+
+#endif // _GESTUREHELPER_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/gesturehelper_api/inc/gestureobserver.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2008-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: Gesture helper interface
+*
+*/
+
+#ifndef _GESTUREOBSERVER_H_
+#define _GESTUREOBSERVER_H_
+
+#include <e32std.h>
+
+class CAlfControl;
+class CAlfVisual;
+
+namespace GestureHelper
+{
+
+/// flag that indicates gesture code is a holding code
+/// clients should use MGestureEvent::IsHolding
+const TInt EFlagHold = 0x10000000;
+
+enum TGestureCode
+ {
+ // states
+ EGestureStart = 0x00000001, // gesture just started (user pressed stylus down)
+ EGestureDrag = 0x00000002, // user moved stylus (may be holding or not holding)
+ EGestureReleased = 0x00000003, // user lifted stylus while user was holding
+ // gestures
+ EGestureUnknown = 0x00000005, // gesture was not recognised
+ // these codes are sent when user lifts stylus (if holding not started)
+ EGestureTap = 0x00000006,
+ EGestureDoubleTap = 0x00000007, // only if double tap is enabled
+ // (via CGestureHelper::SetDoubleTapEnabled or
+ // CGestureControl::SetDoubleTapEnabled)
+ EGestureSwipeLeft = 0x00000008,
+ EGestureSwipeRight = 0x00000009,
+ EGestureSwipeUp = 0x0000000A,
+ EGestureSwipeDown = 0x0000000B,
+
+ // gestures related to advanced pointer events. These codes are sent if the platform supports advanced pointer events.
+ // states
+ EGestureMultiTouchStart = 0x0000000C, // multitouch gesture just started (user touched 2nd finger down)
+ EGestureMultiTouchReleased = 0x0000000D, // user released 2nd touch point while still holding the first touch point
+ // gestures
+ EGesturePinch = 0x0000000E, // This event is sent when the pinch is recognised for
+ // the first time or when the pinch distance is changing.
+
+ // these codes are sent when user initiates holding by keeping stylus in
+ // same place for a longer duration
+ EGestureHoldLeft = EGestureSwipeLeft | EFlagHold,
+ EGestureHoldRight = EGestureSwipeRight | EFlagHold,
+ EGestureHoldUp = EGestureSwipeUp | EFlagHold,
+ EGestureHoldDown = EGestureSwipeDown | EFlagHold
+ };
+
+/**
+ * Point of float accuracy
+ */
+NONSHARABLE_STRUCT( TRealPoint )
+ {
+ inline TRealPoint();
+ inline TRealPoint( const TRealPoint& aPoint );
+ inline TRealPoint( TReal aX, TReal aY );
+ inline TBool operator==( const TRealPoint& aPoint ) const;
+
+ TReal32 iX;
+ TReal32 iY;
+ };
+
+/**
+ * a gesture event
+ */
+class MGestureEvent
+ {
+public:
+ /** X and Y axes, or both */
+ enum TAxis
+ {
+ EAxisBoth,
+ EAxisHorizontal,
+ EAxisVertical
+ };
+
+public:
+ /**
+ * @param aRelevantAxis indicates whether only x, y or both coordinates
+ * should be considered when determining the code. For example,
+ * if client specifies EAxisVertical as relevant axis, a swipe
+ * to left and slightly up would result in an "swipe up" code,
+ * and not "swipe left" code. If client specifies EAxisHorizontal
+ * or EAxisBoth, "swipe left" code is returned.
+ * @return gesture code
+ */
+ virtual TGestureCode Code( TAxis aRelevantAxis ) const = 0;
+
+ /**
+ * @return ETrue if user has activated holding
+ * (by keeping stylus in the same position for longer time)
+ * EFalse if holding has not been activated
+ */
+ virtual TBool IsHolding() const = 0;
+
+ /**
+ * @return position where gesture started, i.e., where stulys
+ * was pressed down
+ */
+ virtual TPoint StartPos() const = 0;
+
+ /**
+ * @return current position of the stylus
+ */
+ virtual TPoint CurrentPos() const = 0;
+
+ /**
+ * @return speed of a swipe. unit is pixels per second.
+ */
+ virtual TRealPoint Speed() const = 0;
+
+ /**
+ * Abstracts the algorithm to calculate speed during swipe and hold. This
+ * algorithm (currently) assumes that max speed is achieved at the edges of an
+ * area.
+ * @param aEdges represents the coordinates of the rectange on which speed is
+ * calculated. Speed will reach maximum if stylus is on the edge
+ * or beyond the rect. In practise, the value should match the
+ * area of the layout that contains the scrollable visuals.
+ * For example, if the control area is the whole screen, the
+ * rect should be the screen rect.
+ * @returns the speed as a percentage between -100% and 100%
+ */
+ virtual TRealPoint SpeedPercent( const TRect& aEdges ) const = 0;
+
+ /**
+ * @return Length of gesture from starting position
+ * (start pos - current pos)
+ */
+ virtual TPoint Distance() const = 0;
+
+ /**
+ * @return visual on which the gesture started
+ * NULL if not known (e.g., AVKON-based client
+ */
+ virtual CAlfVisual* Visual() const = 0;
+
+ /**
+ * Pinch distance
+ *
+ * Used only for pinch. Returns 0 for other gestures.
+ *
+ * @return The ratio of pinch end distance to pinch start distance * 100
+ * PinchPercent above 100 for zooming out and below hundred for zooming in
+ */
+ virtual TInt PinchPercent() const = 0;
+
+ /**
+ * Centre point of the two touch points
+ *
+ * Used only for pinch. Returns TPoint(0,0) for other gestures.
+ *
+ * @return the centre point calculated using teh two touch down points
+ * This point will remian the same for one multitouch gesture start to end.
+ * This doesnt vary as the two points move away or closer.
+ */
+ virtual TPoint PinchCentrePoint() const = 0;
+
+ };
+
+/**
+ * Observer that will be notified when user makes gestures
+ */
+class MGestureObserver
+ {
+public:
+ /**
+ * Handle the gesture event
+ * @param aEvent event describing the gesture
+ */
+ virtual void HandleGestureL( const MGestureEvent& aEvent ) = 0;
+ };
+
+/**
+ * static class for finding a visual from a visual tree
+ */
+class HitTest
+ {
+public:
+ /**
+ * @return the leaf-most visual is under aPos, or NULL if not found
+ */
+ IMPORT_C static CAlfVisual* VisualByCoordinates( const CAlfControl& aControl,
+ const TPoint& aPos );
+ };
+
+// ----------------------------------------------------------------------------
+// Default constructor for real point
+// ----------------------------------------------------------------------------
+//
+inline TRealPoint::TRealPoint()
+ : iX( 0 ), iY( 0 )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// Copy constructor for real point
+// ----------------------------------------------------------------------------
+//
+inline TRealPoint::TRealPoint( const TRealPoint& aPoint )
+ : iX( aPoint.iX ), iY( aPoint.iY )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// Copy constructor for real point
+// ----------------------------------------------------------------------------
+//
+inline TRealPoint::TRealPoint( TReal aX, TReal aY )
+ : iX( aX ), iY( aY )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// Default constructor for real point
+// ----------------------------------------------------------------------------
+//
+inline TBool TRealPoint::operator==( const TRealPoint& aPoint ) const
+ {
+ return iX == aPoint.iX && iY == aPoint.iY;
+ }
+
+
+} // namespace GestureHelper
+
+#endif // _GESTUREOBSERVER_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/group/Doxyfile.txt Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1304 @@
+# Doxyfile 1.5.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file that
+# follow. The default is UTF-8 which is also the encoding used for all text before
+# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
+# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
+# possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "UI Accelerator DeclarativeUi uimodel"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = ../doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
+# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
+# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
+# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES = panic=@exception \
+ leave=@exception \
+ "internalTechnology=@par Internal technology" \
+ "internalComponent=@par Internal component" \
+ "internalAll=@par Internal all" \
+ "publishedPartner=@par Published-partner" \
+ "publishedAll=@par Published-all" \
+ "prototype=@par Prototype" \
+ "interim=@par Interim" \
+ "released=@par Released" \
+ "removed=@par Removed" \
+ "test=@par Test" \
+ "realtime=@par Realtime" \
+ "status=@par Status:\n"\
+ "attributes=@par Attributes: \n"\
+ "interfaces=@par Interfaces: \n"\
+ "lib=@par Library: \n"\
+ "events=@par Events: \n"\
+ "beginAPI=@name Exported API\n @{" \
+ endAPI=@}
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
+# include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = YES
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ../../inc/uimodel_iterator_api/inc/uimodel \
+INPUT = ../../inc/uimodel_node_api/inc/uimodel
+
+
+
+# This tag can be used to specify the character encoding of the source files that
+# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
+# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
+# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cpp \
+ *.h \
+ *.inl \
+ *.hh \
+ *.hrh \
+ *.dox
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the output.
+# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
+# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code. Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 3
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX = TAlf \
+ SAlf \
+ CAlf \
+ RAlf \
+ MAlf \
+ IAlf \
+ Alf
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = doxygen
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED = "NONSHARABLE_CLASS(name)=class name" \
+ "OSN_NONSHARABLE_CLASS(name)=class name" \
+ "_LIT(name,string)=const static TLitC<sizeof(L##string)/2> name={sizeof(L##string)/2-1,L##string}"
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
+# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
+# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
+# be found in the default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = NO
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a caller dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen will always
+# show the root nodes and its direct children regardless of this setting.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, which results in a white background.
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/group/Doxyfile_osn.txt Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1298 @@
+# Doxyfile 1.5.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file that
+# follow. The default is UTF-8 which is also the encoding used for all text before
+# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
+# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
+# possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "UI Accelerator Toolkit Operating System Neutrality Layer"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = ../osn_apidoc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
+# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
+# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
+# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES = panic=@exception \
+ leave=@exception \
+ "internalTechnology=@par Internal technology" \
+ "internalComponent=@par Internal component" \
+ "internalAll=@par Internal all" \
+ "publishedPartner=@par Published-partner" \
+ "publishedAll=@par Published-all" \
+ "prototype=@par Prototype" \
+ "interim=@par Interim" \
+ "released=@par Released" \
+ "removed=@par Removed" \
+ "test=@par Test" \
+ "realtime=@par Realtime" \
+ "beginAPI=@name Exported API\n @{" \
+ endAPI=@}
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
+# include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = YES
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ../osn_container_api/inc/osn \
+ ../osn_exception_api/inc/osn \
+ ../osn_global_api/inc/osn \
+ ../osn_smartpointer_api/inc/osn \
+ ../osn_string_api/inc/osn
+
+# This tag can be used to specify the character encoding of the source files that
+# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
+# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
+# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cpp \
+ *.h \
+ *.inl \
+ *.hh \
+ *.hrh \
+ *.dox
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the output.
+# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
+# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code. Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 3
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX = TAlf \
+ SAlf \
+ CAlf \
+ RAlf \
+ MAlf \
+ Alf
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED = "NONSHARABLE_CLASS(name)=class name" \
+ "_LIT(name,string)=const static TLitC<sizeof(L##string)/2> name={sizeof(L##string)/2-1,L##string}"
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
+# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
+# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
+# be found in the default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = NO
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a caller dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen will always
+# show the root nodes and its direct children regardless of this setting.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, which results in a white background.
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2006 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: Includes all the Domain API specific bld.inf files, which
+* export files.
+*
+*/
+
+
+
+#include "../alf_widgetfactory_api/group/bld.inf"
+#include "../alf_widgetutils_api/group/bld.inf"
+#include "../alf_widgetmodel_api/group/bld.inf"
+#include "../osn_container_api/group/bld.inf"
+#include "../osn_global_api/group/bld.inf"
+#include "../osn_string_api/group/bld.inf"
+
+//resource pool
+#include "../alf_resourcepool_api/group/bld.inf"
+
+// widget APIs
+#include "../alf_containerwidget_api/group/bld.inf"
+#include "../alf_viewwidget_api/group/bld.inf"
+#include "../alf_scrollbarwidget_api/group/bld.inf"
+
+#include "../alf_customlayoutmanagers_api/group/bld.inf"
+
+// gesture helper Api's
+#include "../gesturehelper_api/group/bld.inf"
+
+// MUL headers
+#include "../mul_coverflowwidget_api/group/bld.inf"
+#include "../mul_datamodel_api/group/bld.inf"
+#include "../mul_sliderwidget_api/group/bld.inf"
+#include "../mul_widget_api/group/bld.inf"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_coverflowwidget_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: coverflow widget API
+*
+*/
+
+#include <platform_paths.hrh>
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+
+../inc/mul/imulcoverflowwidget.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/imulcoverflowwidget.h)
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_coverflowwidget_api/inc/mul/imulcoverflowwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2007 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: The interface class for all Multimedia UI Library Cover Flow Widgets.
+ *
+*/
+
+#ifndef I_MULCOVERFLOWWIDGET_H
+#define I_MULCOVERFLOWWIDGET_H
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alftypes.h>
+#include <mul/imulmultiitemwidget.h>
+#include <gdi.h>
+#include <AknsItemID.h>
+
+//Gesture Helper namespace
+namespace GestureHelper
+ {
+ class CGestureHelper;
+ }
+
+namespace Alf
+ {
+ namespace mulcoverflowwidget
+ {
+ static const IfId Ident=
+ {
+ 0, "mulcoverflowwidget"
+ };
+ }
+
+ /**
+ * An interface for Multimedia coverflow Widget.
+ * Widgets consist of control and visualization elements.
+ *
+ * Interface paradigm would be used in a restrictive way.
+ * Controls are owned by Alfred environment.
+ * Widgets can be constructed using the widget factory.
+ * Widgets are owned and accessed using the Alfred
+ * environment.
+ *
+ * @lib mulcoverflowwidget.lib
+ */
+ class IMulCoverFlowWidget : public IMulMultiItemWidget
+ {
+ public:
+
+ /**
+ * Getter for the type identifier of this interface.
+ *
+ * @return A descriptor to identify the type of this interface.
+ **/
+ static inline const IfId& Type()
+ {
+ return mulcoverflowwidget::Ident;
+ }
+
+ /**
+ * Setting color as background of the coverflow.
+ * The API should be used in the case when the background type doesn't
+ * comes along with any extra data. This API should be used when the
+ * background has to set to Black, White or any other color
+ *
+ * @param aColor RGB color
+ *
+ * <B>Examples:</b>
+ * @code
+ * Set background of the coverflow as red color.
+ *
+ * mCoverFlowWidget->SetBackground( KRgbRed );
+ * @endcode
+ **/
+ virtual void SetBackground( const TRgb& aColor ) = 0;
+
+ /**
+ * Setting Skin id as background of the coverflow.
+ * The API should be used in the case when the background of
+ * Coverflow should come from skin data.
+ *
+ * @param aItemID Skin ID.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Set background of the coverflow as a texture.
+ *
+ * mCoverFlowWidget->SetBackground( KAknsIIDQsnBgScreenIdle );
+ *
+ * @endcode
+ **/
+ virtual void SetBackground(const TAknsItemID& aItemID ) = 0;
+
+ /**
+ * Setting UIOnOff mode in template4 of the coverflow.
+ * The API should be in template 4 to hide or show counter as per UI ON/OFF mode.
+ *
+ * @param aUIOn true if UIOn mode and counter to be displayed, else false for UIOff.
+ * @param aTransition transition time to show or hide counter.
+
+ * <B>Examples:</b>
+ * @code
+ * Set UiOnOff mode in coverflow widget.
+ *
+ * mCoverFlowWidget->SetUIOnOFF( true, 100 );
+ *
+ * @endcode
+ **/
+ virtual void SetUIMode(bool aUIOn = false, int aTransition = 0 ) = 0;
+
+ /**
+ * Rotate the highlight image
+ * The API is supported in template 4(fullscreen templet) to rotate the highlight image as per the
+ * direction specified in the param.
+ * This will rotate the image 90 degree on left or right side.
+ *
+ * @param aDirection, Direction of the rotation (ERotateLeft/ERotateRight).
+ * @param aImageSize, The actual size of the current highlighted image.
+ * @param aTransition transition time to rotate the image.
+
+ * <B>Examples:</b>
+ * @code
+ * Rotate the highlight image of the coverflow widget.
+ *
+ * mCoverFlowWidget->RotateImage( IMulWidget::ERotateLeft,TSize(500,400),100 );
+ *
+ * @endcode
+ **/
+ virtual void RotateImage(TMulRotation aDirection ,TSize aImageSize,int aAnimationTime) = 0;
+
+ /**
+ * Returns the gesture helper used in coverflow.
+ * This API is required for sharing the gesture helper between the widget and application.
+ * The ownership of the gesture helper lies with the widget.
+ *
+ * @return CGestureHelper Instance of gesture helper created by the widget.
+
+ * <B>Examples:</b>
+ * @code
+ * Query the gesture helper and use it in application
+ *
+ * CGestureHelper* gestureInstance = mCoverFlowWidget->Gesturehelper();
+ * gestureInstance->addObserver(*this);
+ *
+ * @endcode
+ **/
+ virtual GestureHelper::CGestureHelper* Gesturehelper() = 0;
+
+
+ /**
+ * Virtual destructor.
+ **/
+ virtual ~IMulCoverFlowWidget()
+ {
+ }
+ };
+
+ } // namespace Alf
+
+#endif // I_MULCOVERFLOWWIDGET_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_coverflowwidget_api/mul_coverflowwidget_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="5be41f5159c711faaa4c9d5052df97bf" dataversion="1.0">
+<name>mul coverflowwidget api</name>
+<description>API for MulCoverFlowWidget</description>
+<type>c++</type>
+<subsystem>mulcoverflowwidget</subsystem>
+<libs></libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: data model API
+*
+*/
+
+
+
+#include <platform_paths.hrh>
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+PRJ_EXPORTS
+
+../inc/mul/imulmodelbase.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/imulmodelbase.h)
+../inc/mul/imulmodel.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/imulmodel.h)
+../inc/mul/imulmodelprovider.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/imulmodelprovider.h)
+../inc/mul/imulvarianttype.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/imulvarianttype.h)
+../inc/mul/mulvisualitem.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/mulvisualitem.h)
+../inc/mul/mulvarianttype.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/mulvarianttype.h)
+../inc/mul/muldatapath.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/muldatapath.h)
+../inc/mul/mulutility.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/mulutility.h)
+../inc/mul/mulkeyboardutility.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/mulkeyboardutility.h)
+../inc/mul/mulmodelutility.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/mulmodelutility.h)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/imulmodel.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,332 @@
+/*
+* 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: Interface for model
+*
+*/
+
+
+#ifndef I_MULMODEL_H
+#define I_MULMODEL_H
+
+//Includes
+#include <alf/ialfinterfacebase.h>
+#include <alf/ialfmodel.h>
+#include <alf/alftypes.h>
+#include <mul/imulmodelbase.h>
+#include <mul/imulwidgetdef.h>
+#include <mul/imulwidget.h>
+#include <mul/muldatapath.h>
+#include <vector>
+#include <memory>
+
+namespace osncore
+ {
+ class UString;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+
+namespace mulmodel
+ {
+ static const IfId Ident=
+ {
+ 0, "mulmodel"
+ };
+
+ static const char* const KBaseElementName = "base" ;
+ static const char* const KItemElementName = "item" ;
+ }
+
+// Forward Declarations
+class MulVisualItem;
+class MulDataPath;
+class IMulModelProvider;
+
+/*! @class IMulModel
+*
+* @brief An interface for the data model.
+*
+* Client that creates the model own the model.
+* Client can use this interface to update data model.
+*
+*/
+class IMulModel : public IMulModelBase, public IAlfModel
+ {
+
+public:
+
+ /**
+ * Getter for the type identifier of this interface.
+ *
+ * @return A descriptor to identify the type of this interface.
+ */
+ static inline const IfId& type()
+ {
+ return mulmodel::Ident;
+ }
+
+ /**
+ * Virtual destructor.
+ */
+ virtual ~IMulModel() {}
+
+ /**
+ * Informs the data model that new items have been added to client's
+ * internal model. Data model is expected to sync its indices as a
+ * result.
+ * <b>Note:</b> This API will never give an exception.
+ *
+ * @param aIndex Position where items were inserted.
+ * @param aCount Number of items inserted.
+ * @param aPath Path of parent item in the data hierarchy.
+ * Default is Null path i.e. no parent.
+ */
+ virtual void Insert( int aIndex, int aCount,
+ const MulDataPath& aPath = MulDataPath() ) = 0 ;
+
+ /**
+ * Informs the data model that items have been removed from the client's.
+ * internal data model. Data model is expected to sync its indices as a
+ * result.
+ * <b>Note:</b> This API will never give an exception.
+ *
+ * @param aIndex Position from where items have to be removed.
+ * @param aCount Number of items to be removed.\
+ * @param aPath Path of parent item in the data hierarchy.
+ * Default is Null path i.e. no parent.
+ */
+ virtual void Remove( int aIndex, int aCount,
+ const MulDataPath& aPath = MulDataPath() ) = 0;
+
+ /**
+ * Informs the data model that an item has been updated in the client's
+ * internal model. Data model will use to input to determine whether
+ * a visualization change is required. If yes, the model will request the
+ * provider for updated data.
+ * <b>Note:</b> This API will never give an exception.
+ *
+ * @param aIndex Position from where items have to be updated.
+ * @param aCount Number of items to be updated.
+ * @param aPath Path of parent item in the data hierarchy.
+ * Default is Null path i.e. no parent.
+ */
+ virtual void Update( int aIndex, int aCount,
+ const MulDataPath& aPath = MulDataPath() ) = 0;
+
+ /**
+ * A refresh data request. Informs that the data model has to be
+ * repopulated with mentioned number of items. So the data model
+ * will remove all the existing data and issue request to the
+ * provider for new data.
+ * <b>Note:</b> This API will never give an exception.
+ *
+ * @param aCount Number of items to be repopulated.
+ * @param aPath Path of parent item in the data hierarchy.
+ * Default is Null path i.e. no parent.
+ */
+ virtual void Refresh( int aCount, const MulDataPath& aPath = MulDataPath() ) = 0;
+
+ /**
+ * Provide data for the specified item. This is a unified API for
+ * adding & updating data.
+ *
+ * @param aIndex Position of item to be updated.
+ * @param aVisualItem Collection of attributes. Ownership is transfered.
+ * @param aPath Path of parent item in the data hierarchy.
+ * Default is Null path i.e. no parent.
+ * @throw Invalid Argument, in case index is out of bound or visual
+ * item is NULL.
+ * @throw Logic Error, in case item could not be updated.
+ */
+ virtual void SetData( int aIndex, std::auto_ptr<MulVisualItem> aVisualItem,
+ const MulDataPath& aPath = MulDataPath() ) = 0;
+
+ /**
+ * Get the data for item at the specified index.
+ *
+ * @param aIndex Position of item in the data model.
+ * @param aPath Path of parent item in the data hierarchy.
+ * Default is Null path i.e. no parent.
+ * @return A constant reference to the data at the given index.
+ * @throw Invalid Argument, in case index is out of bound.
+ */
+ virtual const MulVisualItem* Data( int aIndex,
+ const MulDataPath& aPath = MulDataPath() ) const = 0;
+
+ /**
+ * Get the count of items in the model.
+ *
+ * @param aPath Path of parent item in the data hierarchy.
+ * Default is Null path i.e. no parent.
+ * @return Count of items in the model.
+ */
+ virtual int Count( const MulDataPath& aPath = MulDataPath() ) const = 0;
+
+ /**
+ * Set the data provider for the model.
+ * <b>Note:</b> This API will be removed in future.
+ * Clients would be able to specify the provider to the model at
+ * the time of the construction.
+ *
+ * @param aDataProvider Handle to the data provider.
+ * @throw Logic Error, in case same accessor object is passed again.
+ */
+ virtual void SetDataProvider( const IMulModelProvider& aDataProvider ) = 0;
+
+ /**
+ * Set the default logical template id for widget elements.
+ * Logical templates map to visualization of the element(s).
+ *
+ * @param aTemplateId Logical template id for the widget elements.
+ */
+ virtual void SetTemplate( mulwidget::TLogicalTemplate aDefaultTemplate ) = 0;
+
+ /**
+ * Set the logical template id for a specific widget element.
+ * Logical templates map to visualization of the element.
+ *
+ * @param aItemIndex Unique id of item of which template needs to be applied.
+ * @param aTemplateId Logical template id for the widget element.
+ * @param aPath Path of parent item in the data hierarchy.
+ * Default is Null path i.e. no parent.
+ * @throw Invalid Argument, in case index is out of bound.
+ */
+ virtual void SetTemplate( int aItemIndex, mulwidget::TLogicalTemplate aDefaultTemplate ,
+ const MulDataPath& aPath = MulDataPath() )=0;
+
+ /**
+ * Set the data window/cache size of the Data model.
+ * This API can be used to over-ride the data window size of the data model
+ * already set by the widget. This can be used by clients to set the buffer
+ * size different from what the widget has specified.
+ *
+ * @param aSize Size of buffer.
+ * @throw Invalid Argument, incase the buffer size is negative.
+ */
+ virtual void SetDataWindow( int aSize ) = 0;
+
+ /**
+ * Get the buffer size defined for the data model.
+ *
+ * @return Size of data window.
+ */
+ virtual int DataWindow( ) const = 0;
+
+ /**
+ * Set highlighted item in the model.
+ *
+ * @param aItemIndex Index of item.
+ * @param aPath Path of parent item in the data hierarchy.
+ * Default is Null path i.e. no parent.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Set index of the item to be highlighted.
+ *
+ * mListWidget->SetHighlight(highlight);
+ * @endcode
+ */
+ virtual void SetHighlight( int aItemIndex, const MulDataPath& aPath = MulDataPath() ) = 0;
+
+ /**
+ * Get the index of the current highlighted item from the model.
+ *
+ * @return Highlighted item index.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Get index of the highlighted item.
+ *
+ * int highlight = mListWidget->Highlight();
+ * @endcode
+ */
+ virtual int Highlight() = 0;
+
+ /**
+ * Get the index of the current highlighted item along with the path
+ * of the root item in the data hierarchy.
+ *
+ * @param aPath Path of parent item in the data hierarchy. Out parameter.
+ * @return Highlighted item index.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Get index of the highlighted item.
+ *
+ * int highlight = mListWidget->Highlight();
+ * @endcode
+ */
+ virtual int Highlight( MulDataPath& aPath ) = 0;
+
+ /**
+ * Function for setting the item(s) Marked or Unmarked. For mark and
+ * unmark operations, indices of items 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.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Mark the selected item
+ *
+ * mListWidget->SetMarkedIndices( MulWidgetDef::EMulMark, itemIndex );
+ * @endcode
+ */
+ virtual void SetMarkedIndices( MulWidgetDef::TMulWidgetMarkingType aType ,
+ const std::vector<int>& aItemsIndex,
+ const MulDataPath& aPath = MulDataPath() ) = 0;
+
+ /**
+ * Function for setting the item(s) Marked or Unmarked.
+ * For mark all and unmark all operations use this overloaded version.
+ *
+ * @param aType Type of marking operation to be performed.
+ * @throw Invalid Argument, if type is specified as mark and unmark.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Mark all items
+ *
+ * mListWidget->SetSelection( MulWidgetDef::EMulMarkAll );
+ * @endcode
+ */
+ virtual void SetMarkedIndices(
+ MulWidgetDef::TMulWidgetMarkingType aType = MulWidgetDef::EMulMarkAll
+ ) = 0;
+
+ /**
+ * Gets the indices of the currently marked items.
+ *
+ * @return Array of maked indices. This would return an empty container if no items are marked.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Get the array of all marked items
+ *
+ * std::vector<int> markedItems = mListWidget->MarkIndices();
+ * @endcode
+ */
+ virtual const std::vector<int>& MarkedIndices( const MulDataPath& aPath = MulDataPath() ) = 0;
+
+ };
+
+ } // namespace Alf
+
+#endif // I_MULMODEL_H
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/imulmodelaccessor.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,207 @@
+/*
+* 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: Interface for model accessor
+ *
+*/
+
+
+#ifndef I_MULMODELACCESSOR_H
+#define I_MULMODELACCESSOR_H
+
+//Includes
+#include <alf/ialfmodel.h>
+#include <mul/imulwidgetdef.h>
+#include <mul/imulwidget.h>
+
+#include <vector>
+
+namespace osncore
+ {
+ class UString;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+
+ /* Forward declarations*/
+ class MulVisualItem;
+ class IMulModelObserver;
+
+ /**
+ * An interface for accessing data model. Widgets use this interface to interact with Model.
+ * Data model implements this interface.
+ * @lib
+ */
+ class IMulModelAccessor : public IAlfModel
+ {
+ public:
+
+ /**
+ * The function to set a particular item as highlighted.
+ *
+ * @param aIndex Index of the item to be highlighted.
+ * @throws Invalid_argument Throws this exception if index is not a valid index.
+ */
+ virtual void SetHighlight( int aItemIndex ) = 0;
+
+ /**
+ * Scroll Window to mention item index
+ * it will check that data window needs to be updated or not
+ * and if required it update data window
+ *
+ * @aItemIndex item index
+ * @throws invaid_argument exception
+ */
+ virtual void ScrollWindow( int aItemIndex ) = 0;
+
+ /**
+ * Function to get the highlighted item index.
+ *
+ * @return Index of the highlighted index.
+ */
+ virtual int Highlight() = 0;
+
+ /**
+ * Function to get the count of items currently present in the model.
+ * This includes hidden items.
+ *
+ * @return Count of items existing in the model.
+ */
+ virtual int CurrentItemCount() = 0;
+
+ /**
+ * Set visible data window for model.
+ *
+ * @param aVisibleWindow No of visuals that widget can display at a time on screen.
+ */
+ virtual void SetVisibleWindow( int aWindowSize, int aPageTopIndex = -1 ) = 0;
+
+ /**
+ * Returns relative index from absolute index.
+ *
+ * @param aAbsoluteIndex Abosulte index
+ * @return Returns relative index from absolute index.
+ */
+ virtual int RelativeIndex( int aAbsoluteIndex ) const = 0;
+
+ /**
+ * Return visible window top offset
+ *
+ * @return Current window top offset
+ */
+ virtual int TopWindowOffset() const= 0;
+
+ /**
+ * Return visible window bottom offset
+ *
+ * @return Current window bottom offset
+ */
+ virtual int BottomWindowOffset() const = 0;
+
+ /**
+ * Return visible window top offset
+ *
+ * @return Current window top offset
+ */
+ virtual int TopOffset() const= 0;
+
+ /**
+ * Return visible window bottom offset
+ *
+ * @return Current window bottom offset
+ */
+ virtual int BottomOffset() const = 0;
+
+ /**
+ * Return rear buffer top offset
+ *
+ * @return Current window top offset
+ */
+ virtual int RearTopOffset() const = 0;
+
+ /**
+ * Return rear buffer bottom offset
+ *
+ * @return Current window top offset
+ */
+ virtual int RearBottomOffset() const = 0;
+
+ /**
+ * Check weather item at specified index is marked or not.
+ *
+ * @param aIndex Absolute index of item
+ * @return true if seleccted else otherwise
+ */
+ virtual bool IsItemMarked( int aIndex ) = 0;
+
+ /**
+ * 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.
+ */
+ virtual void SetMarkedIndex( MulWidgetDef::TMulWidgetMarkingType aType, int aIndex ) = 0;
+
+ /**
+ * Returns the visual item at the specified absolute index
+ *
+ * @param aIndex Absolute index of item
+ */
+ virtual const MulVisualItem& Item( int aAbsoluteIndex ) = 0;
+
+ /**
+ * Returns Absolute index from relative index
+ *
+ * @param aRelativeIndex Relative index
+ * @return Absolute index
+ */
+ virtual int AbsoluteIndex( int aRelativeIndex ) = 0;
+
+ /**
+ * Return whather currently looping is on or not
+ *
+ * @return true if looping is on false otherwise
+ */
+ virtual bool IsLoopingOn() = 0;
+
+ /**
+ * Add model state change observer.
+ *
+ * @param aObserver Observer- ownserhip is not transferred
+ */
+ virtual void AddModelObserver( IMulModelObserver* aObserver ) = 0;
+
+ /**
+ * Eemove model state change observer.
+ *
+ * @param aObserver Observer- ownserhip is not transferred
+ */
+ virtual void RemoveModelObserver( IMulModelObserver* aObserver )= 0;
+
+ /**
+ * Return default template
+ *
+ * @return Default template
+ */
+ virtual mulwidget::TLogicalTemplate Template( ) = 0;
+
+ };
+
+
+ } // namespace Alf
+
+#endif // I_MULMODELACCESSOR_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/imulmodelbase.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* 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: Interface for model base
+*
+*/
+
+
+#ifndef I_MULMODELBASE_H
+#define I_MULMODELBASE_H
+
+//Includes
+
+namespace Alf
+ {
+ // Forward Declaration
+ class IMulModelAccessor;
+
+
+ /*! @class IMulModelBase
+ * @brief An interface for common data model's base class.
+ *
+ * Client can query Accessor() interface from this class
+ * and can set Accessor to Multi-item Widgets.
+ *
+ * <b>Note:</b> <b><i>There has been a change in the way multi-item widget accesses
+ * the data model (for other widgets continue to set the model to the widget in the same way).
+ * The widget gets a restrictive access to the data model via IMulModelAccessor
+ * interface. The new way of assigning model to the widget is shown in the
+ * example given below. The client applications can't access the IMulModelAccessor
+ * interface anymore as its not export from now on.</i></b>
+ *
+ */
+ class IMulModelBase
+ {
+ public:
+
+ /**
+ * Return pointer of accessor interface.
+ * This pointer is required to call SetModel Api IMulWidget.
+ * Ownership of Accessor is not transferred.
+ *
+ * @return IMulModelAccessor Accessor interface.
+ * <B>Examples:</b>
+ * @code
+ * Create the data model using widget factory and assign it to a widget.
+ *
+ * mWidgetModel = widgetFactory.createModel<IMulModel> (KLoadNameModel);
+ *
+ * Set the default visualization for the list items. If the visualization is not
+ * specified there will be a panic when the model is assigned to the widget.
+ *
+ * mWidgetModel->SetTemplate( UString ( mulwidget::KTemplate6));
+ *
+ * Setting the data model to the widget.
+ *
+ * AddItems(10);
+ * mListWidget->SetModel( mWidgetModel);
+ * @endcode
+ */
+ virtual IMulModelAccessor* Accessor() = 0 ;
+
+ }; //End of class
+
+ } // namespace Alf
+
+#endif // I_MULMODELBASE_H
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/imulmodelprovider.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* 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: Interface for requesting data from the provider
+*
+*/
+
+
+#ifndef I_MULMODELPROVIDER_H
+#define I_MULMODELPROVIDER_H
+
+namespace Alf
+ {
+
+// Forward Declarations
+class MulVisualItem;
+class MulDataPath;
+
+/*! @class IMulModelProvider
+ * @brief An interface for requesting the data provider for data.
+ *
+ * Application should implement this interface inorder to become a data provider.
+ * Data model uses this interface to ask the application for data.
+ *
+ */
+class IMulModelProvider
+ {
+public:
+
+ /**
+ * Request the data provider for updating data in the model.
+ *
+ * @param aIndex Index at which the item request has been initiated.
+ * @param aCount Number of items requested.
+ * @param aPath Path of parent item in the data hierarchy.
+ */
+ virtual void ProvideData( int aIndex, int aCount, MulDataPath aPath ) = 0;
+
+ };
+
+
+} // namespace Alf
+
+#endif // I_MULMODELPROVIDER_H
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/imulsingleitemmodel.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,115 @@
+/*
+* 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: Interface for single item model
+ *
+*/
+
+
+#ifndef IMULSINGLEITEMMODEL_H_
+#define IMULSINGLEITEMMODEL_H_
+
+// Includes
+#include <alf/ialfmodel.h>
+
+namespace osncore
+ {
+// Forward Declarations
+class UString;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+
+// Forward Declarations
+class MulVisualItem;
+
+namespace mulsingleitemmodel
+ {
+ static const int KLastIndex = -1;
+ static const int KNumberOfIndices = 4;
+
+ static const char* const KBaseElementName = "base";
+
+ static const char* const KInvalidVisualItem = "NULL Visual Item passed";
+ static const char* const KIndexOutOfBound = "Index out of bound";
+ static const char* const KLogicError = "Logic error";
+ }// namespace mulsingleitemmodel
+
+class IMulSingleItemModel : public IAlfModel
+ {
+
+public:
+
+ /**
+ * Adds an item into the specified container at the given index.
+ *
+ * @param aItem Item to be added. Takes ownership.
+ * @param aContainerName Name of the container.
+ * @param aIndex Index of the item in the container. By default appends item.
+ * @throw Invalid Argument, incase visual item is NULL or out of bound index.
+ */
+ virtual void AddData(MulVisualItem* aItem, const UString& aContainerName,
+ int aIndex = mulsingleitemmodel::KLastIndex) = 0;
+
+ /**
+ * Update an item within the specified container at the given index.
+ *
+ * @param aItem Item to be updated. Takes ownership.
+ * @param aContainerName Name of the container.
+ * @param aIndex Index of the item in the container.
+ * @throw Invalid Argument, incase visual item is NULL, invalid container or out of bound index.
+ * Logic Error, cannot add data because of invalid internal structure
+ */
+ virtual void UpdateData(MulVisualItem& aItem, const UString& aContainerName, int aIndex) = 0;
+
+ /**
+ * Removes an item from the specified container at the given index.
+ *
+ * @param aContainerName Name of the container.
+ * @param aIndex Index of the item in the container.
+ * @throw Invalid Argument, incase of invalid container or out of bound index.
+ */
+ virtual void RemoveData(const UString& aContainer, int aIndex) = 0;
+
+ /**
+ * Returns an item from the specified container at the given index.
+ *
+ * @param aContainerName Name of the container.
+ * @param aIndex Index of the item in the container.
+ * @return Reference to the item.
+ * @throw Invalid Argument, incase of invalid container or out of bound index.
+ */
+ virtual MulVisualItem& Data(const UString& aContainerName, int aIndex) = 0;
+
+ /**
+ * Returns number of items in the specified container.
+ *
+ * @param aContainerName Name of the container.
+ * @return Number of items
+ * @throw Invalid Argument, incase of invalid container.
+ */
+ virtual int Count(const UString& aContainerName) = 0;
+
+ /**
+ * Virtual destructor.
+ */
+ virtual ~IMulSingleItemModel() {}
+
+ };// class IMulSingleItemModel
+
+ }// namespace Alf
+#endif // IMULSINGLEITEMMODEL_H_
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/imulvarianttype.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* 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: Interface for generic data type
+*
+*/
+
+
+#ifndef I_MULVARIANTTYPE_H
+#define I_MULVARIANTTYPE_H
+
+#include <memory>
+//#include <osn/osntypes.h>
+#include <e32cmn.h>
+
+// Forward Declarations
+
+namespace Alf
+ {
+
+// Forward Declarations
+ class IAlfMap;
+
+/*! @class IMulVariantType
+ * @brief Interface for mul model data type
+ *
+ * Application should implement this interface if application needs
+ * to provide custom data type to model.
+ *
+ */
+class IMulVariantType
+ {
+public:
+
+ enum TMulType{ EUnknown ,EBool, EInt, EUint, EReal, EDes, EMap, ECustomData };
+
+ /**
+ * Create copy of variant type
+ *
+ * @return Copy of variant type and ownsership is transferred
+ */
+ virtual std::auto_ptr< IMulVariantType > Clone() = 0;
+
+ /**
+ * Get data as symbian descriptior
+ *
+ * @return Descriptor data value.
+ */
+ virtual const TDesC& DesC() const = 0 ;
+
+ /**
+ * Type of data
+ *
+ * @return Data type of Variant Data
+ */
+ virtual TMulType Type() const = 0 ;
+
+ /**
+ * Destructor
+ */
+ virtual ~IMulVariantType()
+ {
+ }
+
+ /**
+ * Get the data value as an bool .
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EBool.
+ * @return bool data value.
+ */
+ virtual bool boolean() const = 0;
+
+ /**
+ * Get the data value as an integer.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EInt.
+ * @return Integer data value.
+ */
+ virtual int integer() const = 0;
+
+ /**
+ * Get the data value as an unsigned integer.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EUInt.
+ * @return Unsigned integer data value.
+ */
+ virtual uint uinteger() const = 0;
+
+ /**
+ * Get the data value as a real number.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EReal.
+ * @return Real data value.
+ */
+ virtual double real() const = 0;
+
+ /**
+ * Get the data value as a map interface.
+ *
+ * @exception osncore:AlfDataException Thrown if type() is not EMap.
+ * @return Map interface.
+ * @since S60 ?S60_version
+ */
+ virtual IAlfMap& Map() const = 0 ;
+
+ };
+
+ } // namespace Alf
+
+#endif // I_MULVARIANTTYPE_H
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/muldatapath.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,161 @@
+/*
+* 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: Header for MulDataPath
+*
+*/
+
+
+#ifndef MULDATAPATH_H
+#define MULDATAPATH_H
+
+#include <memory>
+#include <osn/osndefines.h>
+
+namespace osncore
+ {
+ class UString;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+
+//Forward Declaration
+class MulDataPathImpl; //store data for MulDataPath class
+/**
+ * @class MulDataPath
+ *
+ * MulDataPath represent hierarchy in data model.
+ * It stores index of node for each depth.
+ */
+class MulDataPath
+ {
+public:
+ /**
+ * Default constructor
+ *
+ * By default path will point to root node.
+ */
+ OSN_IMPORT MulDataPath();
+
+ /**
+ * Constrctor will create path with depth 1 and store specified index
+ * at depth1
+ *
+ * @param aIndexForDepth1 Index of node at depth 1
+ */
+ OSN_IMPORT MulDataPath( int aIndexForDepth1 );
+
+ /**
+ * Constrctor will create path with depth 2 and store specified index
+ * at depth 1 and depth 2
+ *
+ * @param aIndexForDepth1 Index of node at depth 1
+ * @param aIndexForDepth2 Index of node at depth 2
+ */
+ OSN_IMPORT MulDataPath( int aIndexForDepth1, int aIndexForDepth2);
+
+ /**
+ * Copy constructor
+ *
+ * @param aPath Existing path object
+ */
+ OSN_IMPORT MulDataPath(const MulDataPath& aPath);
+
+ /**
+ * Destructor
+ */
+ OSN_IMPORT ~MulDataPath();
+
+ /**
+ * Create new depth and add specified index at created depth.
+ *
+ * @param aIndex position of node at current depth
+ */
+ OSN_IMPORT void Append(int aIndex);
+
+ /**
+ * Depth of path
+ *
+ * @return Depth
+ */
+ OSN_IMPORT int Depth() const;
+
+ /**
+ * Return position/index of node at given depth
+ *
+ * @param aDepth Depth of path
+ * @return Position/index of node
+ */
+ OSN_IMPORT int operator[]( int aDepth ) const;
+
+ /**
+ * Comparisition operator for Path.
+ * Comapre that path is less that other path or not
+ *
+ * @param aPath path to wich current path need to be compared
+ * @return true - if is less ,false otherwise
+ */
+ bool operator<( MulDataPath& aPath);
+
+ /**
+ * return position in current depth. For internal use only
+ *
+ * @param position in current depth
+ */
+ int Index() const;
+
+ /**
+ * Set internal position in current depth
+ *
+ * @param aIndex position in current depth
+ */
+ void SetIndex( int aIndex );
+
+ /**
+ * Check whather both path are equal or not,
+ *
+ *
+ * @param aPath Path object to compare with
+ * @return true is equals, false other wise
+ */
+ bool operator== ( const MulDataPath& aPath);
+
+ /**
+ * Check whather both path are equal or not,For internal use only
+ *
+ * @param aPath Path object to compare with
+ * @return true is equals, false other wise
+ */
+ bool IsEqual( const MulDataPath& aPath );
+
+
+ /**
+ * Assignment operator
+ *
+ * @param aPath Existing path
+ */
+ void operator= ( MulDataPath aPath );
+
+
+private: //data
+
+ std::auto_ptr<MulDataPathImpl> mData; //own
+ };
+
+ } //namespace Alf
+
+#endif //MULDATAPATH_H
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/mulkeyboardutility.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* 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: Utility class for keyboard handling
+ *
+*/
+
+
+#ifndef MULKEYBOARDUTILITY_H_
+#define MULKEYBOARDUTILITY_H_
+
+#include <e32base.h>
+#include <e32std.h>
+#include <e32property.h>
+#include <centralrepository.h>
+#include <aknfepinternalcrkeys.h>
+#include <avkoninternalcrkeys.h> // KAknQwertyInputModeActive
+#include <coemain.h>
+
+ class CQwertySubscriber : public CActive
+ {
+ public:
+ CQwertySubscriber(TCallBack aCallBack, RProperty& aProperty);
+ ~CQwertySubscriber();
+
+ public: // New functions
+
+ void SubscribeL();
+ void StopSubscribe();
+
+ private: // from CActive
+
+ void RunL();
+ void DoCancel();
+
+ private:
+ TCallBack iCallBack;
+ RProperty& iProperty;
+ };
+
+class CKeyBoardUtility: public CCoeStatic
+{
+ public:
+ static CKeyBoardUtility* NewL();
+ private:
+ static TInt QwertyModeChangeNotification(TAny* aObj);
+ private:
+ ~CKeyBoardUtility();
+ CKeyBoardUtility();
+ bool bQwerty;
+ /** Qwerty Notification */
+ CQwertySubscriber* iQwertyModeStatusSubscriber;
+ RProperty iQwertyModeStatusProperty;
+ void HandleQwertyModeChangeNotification();
+ public:
+ bool IsQwerty();
+};
+#endif //MULKEYBOARDUTILITY_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/mulmodelutility.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,152 @@
+/*
+* 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: Utility class for data model
+*
+*/
+
+
+#ifndef MULMODELUTILITY_H_
+#define MULMODELUTILITY_H_
+
+#include <alf/alfvarianttype.h>
+#include <osn/osndefines.h>
+#include <e32cmn.h>
+#include <osn/ustring.h>
+
+#include "mul/imulwidget.h"
+
+namespace osncore
+ {
+ class UString;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+
+//Forward Declaration
+class MulVisualItem;
+class MulModelUtility
+ {
+public:
+
+ /**
+ * Create new Variant data from existing variant data.
+ *
+ * @param aValue Existing variant data;
+ *
+ * @reutrn new variant data, Ownership is transferred
+ */
+ OSN_IMPORT static IAlfVariantType* CreateVariantType( IAlfVariantType& aValue );
+
+ /**
+ * Convert map of visual item to map of alf map.
+ * Ite create new Map and while returning new map owner ship of map is transfered
+ *
+ * @param aVisualItem Map of visual item
+ * @return Map
+ */
+ OSN_IMPORT static std::auto_ptr<IAlfMap> ConvertVisualItemToMap( MulVisualItem& aVisualItem );
+
+ /**
+ *
+ * Convert AlfMap to visual item
+ *
+ * @param aMap IAlfMAP
+ * @return MulVisualItem ownership is trsnaferred
+ */
+ OSN_IMPORT static std::auto_ptr<MulVisualItem> ConvertMapToVisualItem( IAlfMap& aMap );
+
+ /**
+ * Check the prefix of the name to see whether they can be added in alfmodel
+ *
+ * @param aName Name whose prefix is to be checked
+ */
+ static bool CheckNamePrefix( UString aName ) ;
+
+ /**
+ * Convert UString to CAlfString
+ *
+ * @param aUString UString instance to convert to CAlfSTring
+
+ * @return Converted CAlfString
+ */
+ OSN_IMPORT static UString UStringToAlfString(const UString& aUString);
+
+ /**
+ * Convsert CAlfString to UString
+ *
+ * @param aUString CAlfSTring instance to convert to UString
+
+ * @return Converted UString
+ */
+ OSN_IMPORT static UString AlfStringToUString(const UString& aAlfString);
+
+ /**
+ * Covert integer to AlfString
+ *
+ * @param aNumber number to convert
+ * @return AlfString
+ */
+ OSN_IMPORT static UString IntToUString( int aNumber );
+
+ /**
+ * Convert TDes to UString
+ *
+ * @param aDes a TDes type string to be converted
+ * @param aString the converted Ustring
+ */
+ OSN_IMPORT static void ConvertTDesToUString (const TDesC& aDes, UString& aString);
+
+ /**
+ * Convert TDes8 to UString
+ *
+ * @param aDes a TDes8 type string to be converted
+ * @param aString the converted Ustring
+ */
+ OSN_IMPORT static void ConvertTDes8ToUString (const TDesC8& aDes, UString& aString);
+
+ /**
+ * Convert UString to TDes
+ *
+ * @param aString a UString type string to be converted
+ * @param aDes the TDes type converted string
+ */
+ OSN_IMPORT static void ConvertUStringToTDes (const UString& aString, TDes& aDes);
+
+ /**
+ * Convert UString to TDes8
+ *
+ * @param aString a UString type string to be converted
+ * @param aDes the TDes8 type converted string
+ */
+ OSN_IMPORT static void ConvertUStringToTDes8 (const UString& aString, TDes8& aDes);
+
+ /**
+ * Create a visualitem and set its default template
+ *
+ * @param aDefaultTemplate defaultTemplate for that visual item
+ */
+ OSN_IMPORT static std::auto_ptr<MulVisualItem> CreateVisualItem( mulwidget::TLogicalTemplate aDefaultTemplate );
+
+
+ };
+
+ } //namespace Alf
+
+#endif /*MULMODELUTILITY_H_*/
+
+//End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/mulutility.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,95 @@
+/*
+* 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 for utility class
+*
+*/
+
+
+#ifndef MULUTILITY_H_
+#define MULUTILITY_H_
+
+#include <stdexcept>
+#include <string>
+#include <e32cmn.h>
+#include <osn/osndefines.h>
+#include "mulkeyboardutility.h"
+
+namespace osncore
+ {
+ class UString;
+ }
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+static void MUL_ASSERT(bool aExpression, const char* aExceptionString)
+ {
+ if( aExpression )
+ {
+ throw std::logic_error(aExceptionString);
+ }
+ }
+
+class MulUtility
+ {
+public:
+ /**
+ * Converts the relative path to the absolute path.
+ *
+ * @param aRelativePath Which needs to be changed to the absolutepath.
+ * @return true , if aRelativepath changed to Absoulte path or else false
+ */
+ OSN_IMPORT static bool AbsolutePath(UString& aRelativePath);
+
+ /**
+ * Checks which orienatation the application is in and returns true if it is in
+ * Landscape orientation otherwise returns false
+ *
+ */
+ OSN_IMPORT static bool IsLandscape();
+
+ /**
+ * Checks if the given string tag is a pool resource or not
+ *
+ * @param aImageTag Path of the image file,which needs to be checked for resource tag format.
+ */
+ OSN_IMPORT static bool IsPoolResource(const UString& aImageTag);
+
+ /**
+ * Checks if current KeyBoard is QWERTY
+ * @return true if KeyBoard is QWERTY else false.
+ */
+ OSN_IMPORT static bool IsQwerty();
+
+private:
+ /**
+ * Checks the file for its existence
+ *
+ * @param afilePath File to be checked.
+ * @return true, In case file exists or else false.
+ */
+ static bool IsFileExists(/*const char* afilePath*/const TDesC& aFilePath);
+
+
+
+ };
+
+ } // namespace Alf
+
+#endif // MULUTILITY_H_
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/mulvarianttype.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,126 @@
+/*
+* 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: MulVarianttype implementation
+*
+*/
+
+#ifndef MULVARIANTTYPE_H
+#define MULVARIANTTYPE_H
+
+#include <mul/imulvarianttype.h>
+#include <alf/alfvarianttype.h>
+
+#include <osn/osndefines.h>
+
+namespace Alf
+ {
+// Forward Declarations
+
+/*! @class MulVariantType
+ * @brief To create data for data model
+ */
+class MulVariantType : public IMulVariantType
+ {
+public: //Constructor and Destructor
+
+ /**
+ * The default constructor.
+ */
+ OSN_IMPORT MulVariantType();
+
+ /**
+ * Constructor for Descriptor
+ *
+ * @param aDes Descriptor
+ * @return new Object
+ */
+ OSN_IMPORT MulVariantType( const TDesC& aDes );
+
+ /**
+ * Constructor for variant data type creation for a integer type of data
+ * @param aValue - integer to be assigned for the variant data
+ * @return New object.
+ */
+ OSN_IMPORT MulVariantType(const int& aValue);
+
+ /**
+ * Constructor for variant data type creation for a Unsigned integer type of data
+ * @param aValue - unsigned integer to be assigned for the variant data
+ * @return New object.
+ */
+ OSN_IMPORT MulVariantType(const uint& aValue);
+
+ /**
+ * Constructor for variant data type creation for a real type of data
+ * @param aValue - Real value to be assigned for the variant data
+ * @return New object.
+ */
+ OSN_IMPORT MulVariantType(const double& aValue);
+
+ /**
+ * Constructor for variant data type creation for a bool type of data
+ * @param aValue - Boolean value to be assigned for the variant data
+ * @return New object.
+ */
+ OSN_IMPORT MulVariantType(const bool& aValue);
+
+ /**
+ * Constructor for variant data type creation for a Alf Variant type of data
+ * @param aData -the variant data
+ * @return New object.
+ */
+ OSN_IMPORT MulVariantType( IAlfMap& aData );
+
+ /**
+ * Destructor
+ */
+ OSN_IMPORT ~MulVariantType();
+
+public: // From IMulVariantType
+
+ OSN_IMPORT std::auto_ptr< IMulVariantType > Clone();
+
+ OSN_IMPORT const TDesC& DesC() const;
+
+ OSN_IMPORT TMulType Type() const;
+
+ OSN_IMPORT bool boolean() const ;
+
+ OSN_IMPORT int integer() const ;
+
+ OSN_IMPORT uint uinteger() const ;
+
+ OSN_IMPORT double real() const ;
+
+ OSN_IMPORT IAlfMap& Map() const ;
+
+private:
+
+ void Construct( TMulType aType );
+
+private:
+
+ class MulVariantTypeImpl;
+
+private:
+
+ std::auto_ptr<MulVariantTypeImpl> mVarData;
+
+ };
+
+ } // namespace Alf
+
+#endif //I_MULVARIANTTYPE_H
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/inc/mul/mulvisualitem.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,263 @@
+/*
+* 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: Visual Item class
+ *
+*/
+
+
+#ifndef MULVISUALITEM_H
+#define MULVISUALITEM_H
+
+#include <osn/osndefines.h>
+#include <osn/ustring.h>
+#include <alf/alfvarianttype.h>
+#include <memory>
+#include <map>
+#include <vector>
+#include <e32cmn.h>
+
+namespace osncore
+ {
+ class UString;
+ }
+using namespace osncore;
+using namespace std;
+
+
+namespace Alf
+ {
+
+
+//enum mulvisualitem
+namespace mulvisualitem
+ {
+
+ enum TVisualAttribute
+ {
+ KMulIcon1 = 0,
+ KMulIcon2 ,
+ KMulIcon3 ,
+ KMulTitle ,
+ KMulTitle1 ,
+ KMulTitle2 ,
+ KMulDetail ,
+ KMulDate ,
+ KMulIndicator1 ,
+ KMulIndicator2 ,
+ KMulIndicator3 ,
+ KMulIndicator4 ,
+ KMulIndicator5,
+ KMulIndicator6,
+ KMulActionItem ,
+ KMulEnabled ,
+ KMulSoftkeyTitle ,
+ KMulLatch ,
+ KMulRead ,
+ KMulInputText,
+ KMulEmptyItem ,
+ KVisualItemProperties,
+ KVisualItemAttributes ,
+ KAttributeTemplate,
+ KMulMaxRange,
+ KMulMinRange,
+ KMulTick,
+ KMulPrimaryTick,
+ KMulSecondaryTick,
+ KMulLeftText,
+ KMulRightText,
+ KMulCounter1,
+ KMulCounter2,
+ KMulImage,
+ KMulPercent1,
+ KMulPercent2,
+ KMul_n,
+ KLastAttribute = 100 // reserved 0 to 100
+ };
+
+ }//namespace mulvisualitem
+
+/* Forward declarations*/
+class IAlfMap;
+class IAlfContainer;
+class IMulVariantType;
+/**
+/*! @class MulVisualItem
+ * @brief Client need to use this class to add data in data model.
+ *
+ * Visual item is set of attributes corresponding to an item in the widget.
+ * The attributes added to visual item get visualized on the widget
+ *
+ */
+class MulVisualItem
+ {
+private:
+
+ class MulAttribute;
+
+public:
+
+ /**
+ * Flags for attribute
+ */
+ enum TAttributeFlags
+ {
+ EDisposable = 0x01 // attribute with this flag on can be deleted from item is it is out of visible window
+ };
+
+ enum TAttributeOwnership
+ {
+ EDoesOwn = 0, //attribute is owned by model
+ EDoesNotOwn //attribute is not owned by model
+ };
+
+public: //Constructor and Dstructor
+
+ /**
+ * C++ constructor.
+ */
+ OSN_IMPORT MulVisualItem();
+
+ /**
+ * C++ constructor.
+ */
+ OSN_IMPORT MulVisualItem( const MulVisualItem& aVisualData );
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT ~MulVisualItem();
+
+public: // New mehtod
+
+ /**
+ * Add new attribute to visual item
+ *
+ * @param aName name of attribute
+ * @param aValue value of attribute
+ * @param aAttributeFlags property of this attribute
+ */
+ //OSN_IMPORT void SetAttribute( mulvisualitem::TVisualAttribute aName, const UString& aValue,int aAttributeFlags = 0 );
+
+ /**
+ * Add new attribute to visual item
+ *
+ * @param aName name of attribute
+ * @param aValue value of attribute
+ * @param aAttributeFlags property of this attribute
+ */
+ OSN_IMPORT void SetAttribute( mulvisualitem::TVisualAttribute aName, int aValue,int aAttributeFlags = 0 );
+
+ /**
+ * Add new attribute to visual item
+ *
+ * @param aName name of attribute
+ * @param aValue value of attribute
+ * @param aAttributeFlags property of this attribute
+ */
+ OSN_IMPORT void SetAttribute( mulvisualitem::TVisualAttribute aName, const TDesC& aValue ,int aAttributeFlags = 0 );
+
+ /**
+ * Add new attribute to visual item
+ *
+ * @param aName name of attribute
+ * @param aValue value of attribute
+ * @param aAttributeFlags property of this attribute
+ * @param aAttributeOwership If the value is EDoesOwn then the ownership
+ * of the attribute transfered to the visual item else not.
+ */
+ OSN_IMPORT void SetAttribute( mulvisualitem::TVisualAttribute aName, IMulVariantType* aValue,
+ int aAttributeFlags = 0,TAttributeOwnership aAttributeOwership = EDoesOwn );
+
+ /**
+ * Return Value of specified attribute
+ *
+ * @param aName name of attribute need to retrived
+ * @return Value of attribute
+ */
+ OSN_IMPORT IMulVariantType* Attribute( mulvisualitem::TVisualAttribute aName ) const;
+
+ /**
+ * Return Value of specified attribute as integer
+ *
+ * @param aName name of attribute need to retrived
+ * @return Value of attribute
+ */
+ OSN_IMPORT int AttributeAsInt( mulvisualitem::TVisualAttribute aName ) const;
+
+ /**
+ * Return Value of specified attribute as String
+ *
+ * @param aName name of attribute need to retrived
+ * @return Value of attribute
+ */
+ OSN_IMPORT const TDesC& AttributeAsString( mulvisualitem::TVisualAttribute aName ) const;
+
+ /**
+ * Return the existing attributes of the visual item
+ * @return Vector of the names of the existing attributes
+ */
+ OSN_IMPORT const std::vector<mulvisualitem::TVisualAttribute> Attributes() const;
+
+
+ /**
+ * Return the bool value if attribute is dirty(updated and not redrawn)
+ * @return bool Value of attribute dirty status
+ */
+ OSN_IMPORT bool IsDirty( mulvisualitem::TVisualAttribute aAttr ) const;
+
+
+ /**
+ * Return the flag of the attributes
+ * @param aName name of attribute need to retrived
+ * @return Value of flag of the attribute
+ */
+ int Flag( mulvisualitem::TVisualAttribute aName );
+
+ /**
+ * Remove attribute from visual item - required by garbage collector
+ *
+ * @param aName Attribute name to be removed
+ */
+ void RemoveAttribute( mulvisualitem::TVisualAttribute aName );
+
+ /**
+ * Sets the dirty flag for a Visual attribute
+ * @param aDirty sets dirty flag to true/false
+ * @return void
+ */
+ void SetDirty(mulvisualitem::TVisualAttribute aAttr, bool aDirty);
+
+
+ /**
+ * Resets the dirty flag for a Visual attribute from input Visual item
+ * @param const MulVisualItem& Visual item with input dirty flags
+ * @return void
+ */
+ void ResetDirtyAttribute(const MulVisualItem& aVisualItem);
+
+
+private:
+
+ std::map< mulvisualitem::TVisualAttribute, MulAttribute* > mVisualItem;
+ // Attribute flags - indicates which attributes are dirty(need redrawing)
+ // Using 2 attributes to store 36 attributes (refer TVisualAttribute)
+ unsigned int mBitAttrFlag1; // stores dirty bits of first 18 attributes
+ unsigned int mBitAttrFlag2; // stores dirty bits of second 18 attributes
+ };
+
+ } // namespace Alf
+
+#endif //MULVISUALITEM_H
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_datamodel_api/mul_datamodel_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<api id="8618a03bd07fa81f7fc7a78830f5d71e" dataversion="1.0">
+<name>mul datamodel api</name>
+<description>DataModel API</description>
+<type>c++</type>
+<subsystem>muldatamodel</subsystem>
+<libs><lib name="muldatamodel.lib"/>
+</libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_sliderwidget_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: Slider widget API
+*
+*/
+
+#include <platform_paths.hrh>
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+
+../inc/mul/imulsliderwidget.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/imulsliderwidget.h)
+../inc/mul/imulslidermodel.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/imulslidermodel.h)
+../inc/mul/mulsliderproductids.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/mulsliderproductids.h)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_sliderwidget_api/inc/mul/imulslidermodel.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2007 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: Model interface with utilities for slider widget.
+*
+*/
+
+
+#ifndef I_MULSLIDERMODEL_H
+#define I_MULSLIDERMODEL_H
+
+
+//WidgetModel Includes
+#include <alf/ialfmodel.h>
+#include <mul/mulvisualitem.h>
+//#include <mul/imulsliderwidget.h>
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+enum sliderTemplate
+ {
+ ESliderTemplate1,
+ ESliderTemplate2,
+ ESliderTemplate3,
+ ESliderTemplate4,
+ ESliderTemplate5,
+ ESliderTemplate6,
+ ESliderTemplate7,
+ ESliderTemplate8,
+ ESliderTemplate9,
+ ESliderTemplateNone
+ };
+namespace mulslidermodel
+ {
+ static const IfId ident =
+ {
+ 0, "mulslidermodel"
+ };
+ }
+
+/**
+ * An interface of the slider model.
+ */
+class IMulSliderModel : public IAlfModel
+ {
+
+public:
+
+ /**
+ * Getter for the type identifier of this interface.
+ *
+ * @return A descriptor to identify the type of this interface.
+ */
+ static inline const IfId& type()
+ {
+ return mulslidermodel::ident;
+ }
+
+ /**
+ * Change slider related attributes within the model.
+ *
+ * @param aSliderItem Slider data to be changed.
+ *
+ */
+ virtual void SetData(const MulVisualItem& aSliderItem) = 0;
+
+ /**
+ * Return a collection of all the slider attributes.
+ *
+ * @return A visual item containing the slider attributes.
+ */
+ virtual const MulVisualItem& Data() const = 0;
+
+ /**
+ * Set the value of the primary thumb.
+ *
+ * @param aValue Position of the primary thumb.
+ *
+ */
+ virtual void SetPrimaryValue(int aValue) = 0;
+
+ /**
+ * Return the value of the primary thumb of the slider.
+ *
+ * @return Value of the primary thumb.
+ *
+ */
+ virtual int PrimaryValue() const = 0;
+
+ /**
+ * Set the value of the secondary thumb.
+ *
+ * @param aValue Position of the secondary thumb.
+ *
+ */
+ virtual void SetSecondaryValue(int aValue) = 0;
+
+ /**
+ * Return the value of the secondary thumb of the slider.
+ *
+ * @return Value of the secondary thumb.
+ *
+ */
+ virtual int SecondaryValue() const = 0;
+
+ /**
+ * Return the total number of ticks.
+ *
+ * @return Number of ticks (int)
+ *
+ */
+ virtual int TotalTicks() const = 0;
+
+
+ /**
+ * Set Template that will be used to represent data.
+ *
+ * @param aTemplateId Template associated with the widget.
+ *
+ */
+
+ virtual void SetTemplate( sliderTemplate aTemplateId) = 0;
+ /**
+ * Get Template that will be used to represent data.
+ *
+ * @param aTemplateId Template associated with the widget.
+ *
+ */
+ virtual sliderTemplate GetTemplate() = 0;
+ /**
+ * API to set text on the right side of Slider.
+ *
+ * @param aRightText - Text that has to be Displayed.
+ *
+ */
+
+ virtual void SetRightText(char* aRightText) = 0;
+ /**
+ * API to Get text on the right side of Slider.
+ *
+ */
+
+ virtual const char* GetRightText() = 0;
+ /**
+ * API to set text on the Left side of Slider.
+ *
+ * @param aLeftText - Text that has to be Displayed.
+ *
+ */
+
+ virtual void SetLeftText(char* aLeftText) = 0;
+ /**
+ * API to Get text on the Left side of Slider.
+ *
+ */
+ virtual const char* GetLeftText() = 0;
+ /**
+ * API to set the Percentage of Slider movement on Track.
+ *
+ * @param aPercText - Text that has to be Displayed.
+ *
+ */
+ virtual void SetPercentText(char* aPercText) = 0;
+ /**
+ * API to indicate the percentage movement of Thumb on Track.
+ *
+ */
+ virtual const char* GetPercentText() = 0;
+ /**
+ * API to set the Minimum value of Track.
+ *
+ * @param aMinRange - Minimum value for the start of the track.
+ *
+ */
+ virtual void SetMinRange(int aMinRange) = 0;
+ /**
+ * API to retrieve the Minimum value of Track.
+ *
+ */
+ virtual int MinRange()const = 0;
+ /**
+ * API to set the Maximum value of Track.
+ *
+ * @param aMaxRange - Maximum value for the start of the track.
+ *
+ */
+ virtual void SetMaxRange(int aMaxRange) = 0;
+ /**
+ * API to retrieve the Maximum value of Track.
+ *
+ */
+
+ virtual int MaxRange()const = 0;
+ /**
+ * API to set Tick value for Slider.
+ *
+ * @param aTick - Interger value for representing the tick.
+ *
+ */
+ virtual void SetTick(int aTick) = 0;
+ /**
+ * API to retrieve the tick value.
+ *
+ */
+ virtual int Tick()const = 0;
+ };
+
+ } // namespace Alf
+
+#endif // I_MULSLIDERMODEL_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_sliderwidget_api/inc/mul/imulsliderwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 2007 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: Widget interface with utilities for slider widget.
+*
+*/
+
+#ifndef I_MUL_SLIDERWIDGET_H
+#define I_MUL_SLIDERWIDGET_H
+
+//WidgetModel includes
+#include <alf/ialfwidget.h>
+#include <alf/alfevent.h>
+#include <alf/alfwidgetevents.h>
+#include <alf/ialfwidgetfactory.h>
+#include <mul/imulslidermodel.h>
+#include <alf/alflayout.h>
+#include<alf/ialfwidgeteventhandler.h>
+//osn includes
+#include <osn/osndefines.h>
+#include <osn/ustring.h>
+
+namespace Alf
+ {
+namespace mulsliderwidget
+ {
+ /**
+ * @namespace mulsliderwidget
+ *
+ * ident specifies the unique identifier for the grid widget.
+ */
+ static const IfId ident =
+ {
+ 0, "mulsliderwidget"
+ };
+ static const Utf8* const KBaseElementName = "BaseElement";
+ }
+
+
+
+/**
+ * The data which can be used as last (optional) paramenter of
+ * IAlfWidgetFactory::createWidget function while creating the slider widget
+ * imperatively. If this data is not passed, default values are used
+ * to create visualization.
+ *
+ */
+class MulSliderInitData : public AlfCustomInitDataBase
+ {
+public:
+ /**
+ * mBaseElementLoadId visualization base element is created
+ * using Load ID.
+ */
+ const char* mBaseElementLoadId;
+
+ /* mBaseElementData pointed to baseElement custom data
+ * All baseelement related data are in this class
+ */
+
+ AlfCustomInitDataBase *mBaseElementData;
+ };
+
+
+/**
+ * Interface for the slider widget.
+ *
+ *
+ * Default visualization of slider contains following components.
+ * <ul>
+ * <li>Handle (The position of the handle shows the current tick position)</li>
+ * <li>Track (Place holder for Handle)</li>
+ * </ul>
+ *
+ *
+ * A slider widget is used along with photos,coverflow and list widget.
+ * <ul>
+ * <li> template 1 is used i.e. in 2D coverflow as a navigational component.
+ *
+ * <li> template 3 is used i.e. in Photos as a pop-up zoom slider.
+ *
+ * <li> template 7 is used i.e. in Video Centre list view as a progressive
+ * downloading track counter/progress bar.
+ * There is no potrait version of this template.
+ *
+ * </ul>
+ * The communication between slider and the widgets happens by means of an
+ * event ETypePrimaryValueChange from slider and in response widgets directly
+ * update slider's model.
+ * Slider handles both Key and Pointer Events.
+ *
+ * KeyEvents : EStdKeyRightArrow,EStdKeyLeftArrow,EEventKeyDown,EEventKeyUp.
+ * PointerEvents : EButton1Down,EDrag.
+ *
+ *
+ */
+class IMulSliderWidget: public IAlfWidget
+ {
+public:
+ /**
+ * Get the type of widget.
+ *
+ * @return The type of widget
+ */
+ static const IfId& type()
+ {
+ return mulsliderwidget::ident;
+ }
+
+ /**
+ * Gets the Base Element Name.
+ *
+ * @return The base element's name
+ */
+ static inline const char* baseElementName()
+ {
+ return mulsliderwidget::KBaseElementName;
+ }
+ /**
+ * Get the model for widget.
+ *
+ * @return model of the slider widget
+ */
+ virtual IMulSliderModel& SliderModel() = 0;
+
+ /**
+ * Set the transparency for the background of the slider widget.
+ *
+ * @param True, to set background as transparent
+ * @param False, to set background as opaque
+ */
+ virtual void MakeTransparent( bool aTransparent ) = 0;
+
+ /**
+ * Enable/Disable key handling .
+ *
+ * @param aVal: True, to handle keyevents by Application
+ * False, to handle keyevents as defined in the control
+ */
+ virtual void SetHandleKeyEvent( bool aVal ) = 0;
+ /**
+ * Hide or Show widget .
+ *
+ * @param aShow: True, Shows the widget
+ * False, Hides the widget
+ * @param aTransitionTime: Transition time to show/Hide.
+ */
+ virtual void ShowWidget(bool aShow, int aTransitionTime =0) = 0;
+ /**
+ * Returns the state of the Widget(Hide/show).
+ *
+ */
+ virtual bool IsHidden() = 0;
+
+ /**
+ * Returns the container layout.
+ *
+ */
+ virtual const CAlfLayout& ContainerLayout() = 0;
+ /**
+ * Add an observer to widget inorder to get event notifications
+ * from the widget. Widget can have multiple observersers.
+ *
+ * @param aObserver Observer of widget.
+ **/
+ virtual void AddEventHandler( IAlfWidgetEventHandler& aObserver) = 0;
+ /**
+ * Remove an observer to widget
+ *
+ * @param aObserver Observer of widget.
+ */
+ virtual void RemoveEventHandler( IAlfWidgetEventHandler& aObserver) = 0;
+ /**
+ * Destructor.
+ */
+ virtual ~IMulSliderWidget() {}
+
+ };
+
+ } // namespace Alf
+
+#endif // I_MUL_SLIDERWIDGET_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_sliderwidget_api/inc/mul/mulsliderproductids.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2007 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: Widget interface with utilities for slider widget.
+*
+*/
+
+#ifndef MUL_SLIDERPRODUCTIDS_H
+#define MUL_SLIDERPRODUCTIDS_H
+
+static const char* const KSliderWidget = "mulsliderwidget";
+static const char* const KSliderModel = "mulslidermodel";
+static const char* const KSliderVerticalElement =
+ "sliderverticalelement";
+static const char* const KSliderHorizontalElement =
+ "sliderhorizontalelement";
+static const char* const KSliderProgressbarElement =
+ "sliderprogressbarelement";
+#endif // MUL_SLIDERPRODUCTIDS_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_sliderwidget_api/mul_sliderwidget_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="89b9b8171e9bb98e77cedc47d0f546fc" dataversion="1.0">
+<name>mul sliderwidget api</name>
+<description>API for MulSliderWidget</description>
+<type>c++</type>
+<subsystem>mulsliderwidget</subsystem>
+<libs></libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_widget_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: widget API
+*
+*/
+
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+
+../inc/mul/imulwidget.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/imulwidget.h)
+../inc/mul/imulwidgetdef.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/imulwidgetdef.h)
+../inc/mul/imulmultiitemwidget.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/imulmultiitemwidget.h)
+../inc/mul/mulevent.h MW_LAYER_PLATFORM_EXPORT_PATH(mul/mulevent.h)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_widget_api/inc/mul/imulmultiitemwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,328 @@
+/*
+* Copyright (c) 2007 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: The base class for Multimedia multi-item widgets.
+ *
+*/
+
+
+#ifndef I_MULMULTIITEMWIDGET_H
+#define I_MULMULTIITEMWIDGET_H
+
+// Includes
+#include <mul/imulwidget.h>
+
+// Namespaces used
+using namespace osncore;
+
+namespace Alf
+ {
+
+ // Forward declaration
+ class IMulModelAccessor;
+
+ namespace mulmultiitemwidget
+ {
+ static const IfId Ident=
+ {
+ 0, "mulmultiitemwidget"
+ };
+ }
+
+ /*! @class IMulMultiItemWidget
+ * @brief An interface for all Multimedia multi-item widgets.
+ */
+ class IMulMultiItemWidget : public IMulWidget
+ {
+ public:
+
+ /*! @enum TMulWidgetPropertiesFlag
+ * This enumeration defines some properties for the widgets. These can
+ * be enabled or disabled for individual widget instances.
+ */
+ enum TMulWidgetPropertiesFlag
+ {
+ EMulWidgetFlagFastScroll = 0x0001, /*!< Enable fast scroll.*/
+ EMulWidgetFlagCyclic = 0x0002, /*!< Enable cyclic/looping effect on widget.*/
+ EMulWidgetFlagNaviScroll = 0x0004, /*!< Enable navi scroll support.*/
+ EMulWidgetFlagCenterFocus = 0x0008, /*!<Deprecated.*/
+ EMulWidgetFlagMultiSelect = 0x0010, /*!< Enable multiple marking/selection in widget. EMulWidgetMarkingMode must be enabled*/
+ EMulWidgetFlagVisible = 0x0020, /*!< Attribute is of type String.*/
+ EMulWidgetMarkingMode = 0x0040, /*!< Enable marking/selection in widget.Only one item can be marked with this flag*/
+ EMulWidgetFlagDrag = 0x0080, /*!< Enable draging support.*/
+ EMulWidgetImageScaleMode = 0x0100, /*!< Deprecated.*/
+ EMulWidgetFlagSwap = 0x0200, /*!< Applicable only for grid widget for swaping item instead of reorder.*/
+ EMulWidgetFlagSingleTap = 0x0800, /*!< Enable single tap item selection.*/
+ EMulWidgetTitleMarqueeOn = 0x1000, /*!< Enable title marquee for list widget.*/
+ EMulWidgetDoubleTap = 0x0400/*!< Enable double tap .*/
+ };
+
+ /*! @enum TMulAttributeDataType
+ * This enumeration defines the attribute data types
+ *
+ */
+ enum TMulAttributeDataType
+ {
+ EString = 1, /*!< Attribute is of type String.*/
+ EDate, /*!< Attribute is of type Date.*/
+ ENumeric /*!< Attribute is of type Numeric.*/
+ };
+ /*! @enum TMulReOrderMode
+ *
+ * This enumeration defines the Reorder mode
+ */
+ enum TMulReOrderMode
+ {
+ EReorderShiftOn =1, /*!< Switch On the Reorder Mode, and Type will be Shift */
+ EReorderSwapOn, /*!< Switch On the Reorder Mode, and Type will be Swap */
+ EReorderDone, /*!< Switch Off the Reorder Mode after committing the reorder changes.*/
+ EReorderCancel /*!< Switch Off the Reorder Mode, with Last Operation Cancel*/
+ };
+
+ /**
+ * Returns the type identifier of this interface.
+ *
+ * @return A descriptor to identify the type of this interface.
+ */
+ static inline const IfId& Type()
+ {
+ return mulmultiitemwidget::Ident;
+ }
+
+ /**
+ * Set a property or a group of properties. Properties not specified are not changed.
+ *
+ * @param aAnyFlag Property flag(s) to be set. To set more than one property,
+ * flags can be ORed.
+ * @throw Invalid argument, if unknown/undefined flag is passed.
+ * @throw Invalid argument, if the property is not supported by the widget.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Set the flag for selection.
+ *
+ * mListWidget->SetFlags( IMulMultiItemWidget::EMulWidgetFlagMultiSelect );
+ * @endcode
+ */
+ virtual void SetFlags(unsigned int aAnyFlag) = 0;
+
+ /**
+ * Clear a property or a group of properties. Properties not specified are not changed.
+ *
+ * @param aAnyFlag Property flag(s) to be cleared. To clear more than one property,
+ * the flags can be ORed.
+ * @throw Invalid argument, if unknown/undefined flag is passed.
+ * @throw Invalid argument, if the property is not supported by the widget.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Clear the flag for selection.
+ *
+ * mListWidget->ClearFlags( IMulMultiItemWidget::EMulWidgetFlagMultiSelect );
+ * @endcode
+ */
+ virtual void ClearFlags(unsigned int aAnyFlag) = 0;
+
+ /**
+ * Return the status of all the flags. The flags that are set have the
+ * corresponding bit ON.
+ *
+ * @return All enabled flag(s). The corresponding bit for enabled flag(s) are set to 1.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Get all flags status.
+ *
+ * int allFlags = mListWidget->GetFlags();
+ * @endcode
+ */
+ virtual unsigned int GetFlags() const = 0;
+
+ /**
+ * Returns the property state, whether flag is on or off for widget.
+ *
+ * @param aAnyFlag Flag to be cross-checked
+ * @return True if set, False if not set
+ *
+ * <B>Examples:</b>
+ * @code
+ * Check if the cyclic flag is set
+ *
+ * if( mListWidget->IsFlagSet( IMulMultiItemWidget::EMulWidgetFlagCyclic ) )
+ * {
+ * ...
+ * }
+ * @endcode
+ */
+ virtual bool IsFlagSet(TMulWidgetPropertiesFlag aAnyFlag) const = 0;
+
+ /**
+ * Provide an empty text for the widget. This text is shown if there is no
+ * data to be displayed in the widget. Widget makes a copy of the variable
+ * and it is safe to call it many times.
+ *
+ * @param aDefaultText Text to be displayed in empty widget
+ *
+ * <B>Examples:</b>
+ * @code
+ * Set the empty text to "No Images"
+ *
+ * mListWidget->SetEmptyText( UString("No Images") );
+ * @endcode
+ */
+ virtual void SetEmptyText( const UString& aDefaultText ) = 0;
+
+ /**
+ * Set the data model for this widget. Widget uses the data model via
+ * IMulModelBase interface because it needs to know only limited functionality
+ * about the data model.
+ *
+ * @param aModel Model to be set for widget.
+ * @param aOwnership Flag which conveys the widget whether it should take
+ * the ownersip of the model or not.
+ * @throw Logic error, if same accessor object passed again.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Create the data model using widget factory and assign it to a widget.
+ *
+ * mWidgetModel = widgetFactory.createModel<IMulModel> (KLoadNameModel);
+ *
+ * Set the default visualization for the list items. If the visualization is not
+ * specified there will be a panic when the model is assigned to the widget.
+ *
+ * mWidgetModel->SetTemplate( UString ( mulwidget::KTemplate6));
+ *
+ * Setting the data model to the widget.
+ *
+ * AddItems(10);
+ * mListWidget->SetModel( mWidgetModel);
+ * @endcode
+ */
+ // virtual void SetModel(IMulModelBase* aModel, bool aOwnership) = 0;
+
+ /**
+ * Set the state of the mark mode.
+ *
+ * @param aFlag True means mode is On, False means mode is Off.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Switch on the mark mode.
+ *
+ * mListWidget->SetMarkMode(true);
+ * @endcode
+ */
+ virtual void SetMarkMode(bool aFlag) = 0;
+
+ /**
+ * Returns the state of the mark mode.
+ *
+ * @return Status of the mark mode.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Check if the mark mode is On.
+ *
+ * if( mListWidget->IsMarkMode() )
+ * {
+ * ...
+ * }
+ * @endcode
+ */
+ virtual bool IsMarkMode()const = 0;
+
+ /**
+ * Set the state of the reorder mode.
+ *
+ * @param aFlag EReorderShiftOn : Switch on reorder mode in type shift.
+ * EReorderSwapOn : Switch on reorder mode in type swap.
+ * EReorderDone : Switch Off the reorder with operatoin done
+ * EReorderCancel : Switch off the reorder mode with cancel last operation.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Switch on the reorder mode.
+ *
+ * mListWidget->SetReorderMode(IMulMultiItemWidget::EReorderShiftOn);
+ * @endcode
+ */
+ virtual void SetReorderMode(IMulMultiItemWidget::TMulReOrderMode aReorderMode ) = 0;
+
+
+ /**
+ * Returns whether reorder mode on/off.
+ *
+ * @return Reorder Mode On/Off Status.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Check if the reorder mode is On.
+ *
+ * if( mListWidget->IsReorderModeOn() )
+ * {
+ * ...
+ * }
+ * @endcode
+ */
+ virtual bool IsReorderModeOn()const = 0 ;
+
+
+ /**
+ * During fast scroll mode, the widget displays an overlay with more info.
+ * Setter API for the overlay strip.
+ *
+ * @param aType Attribute data type
+ * @param aAttribute Attribute whose value will be shown in the overlay
+ * @param aFormat Format string for formatting the value of the attribute
+ *
+ * <B>Examples:</b>
+ * @code
+ * Set the overlay to display (Month, Year) as more info.
+ *
+ * mListWidget->SetOverlay( IMulMultiItemWidget::EDate,
+ * UString(mulvisualitem::KMulDetail),
+ * UString("") );
+ * @endcode
+ */
+ virtual void SetOverlay(TMulAttributeDataType aType, const UString& aAttribute, const UString& aFormat) = 0 ;
+
+ /**
+ * Sets the default image of the widget.
+ * This image will be shown when the actual image data is not available
+ *
+ * @param aTextureId texture id to be used for default image.
+ *
+ * <B>Examples:</b>
+ * @code
+ * Set default image in coverflow widget.
+ *
+ * mCoverFlowWidget->SetDefaultImage( 1000 );
+ *
+ * @endcode
+ */
+ virtual void SetDefaultImage(int aTextureId) = 0;
+
+ /**
+ * Virtual destructor.
+ */
+ virtual ~IMulMultiItemWidget()
+ {
+ }
+
+ };
+
+ } // namespace Alf
+
+#endif // I_MULMULTIITEMWIDGET_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_widget_api/inc/mul/imulwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2007 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: The base class for all Multimedia widgets.
+ *
+*/
+
+
+#ifndef I_MULWIDGET_H
+#define I_MULWIDGET_H
+
+#include <alf/alftypes.h>
+#include <alf/ialfwidgeteventhandler.h>
+#include <alf/ialfinterfacebase.h>
+#include <alf/ialfwidget.h>
+#include <alf/alflayout.h>
+#include <mul/mulvisualitem.h>
+#include <e32base.h>
+#include <gdi.h>
+#include <osn/ustring.h>
+
+using namespace osncore;
+
+// Include widget observer
+
+namespace Alf
+ {
+ class IMulModelAccessor;
+
+ namespace mulwidget
+ {
+ static const IfId Ident=
+ {
+ 0, "mulwidget"
+ };
+
+ enum TLogicalTemplate
+ {
+ KTemplateUnknown = 0,
+ KTemplate1 ,
+ KTemplate2,
+ KTemplate3,
+ KTemplate4,
+ KTemplate5,
+ KTemplate6,
+ KTemplate7,
+ KTemplate8,
+ KTemplate9,
+ KTemplate10,
+ KTemplate11,
+ KTemplate12,
+ KTemplate13,
+ KTemplate14
+ };
+ /*
+ static const char* const KTemplate1 = "logical_template_1";
+ static const char* const KTemplate2 = "logical_template_2";
+ static const char* const KTemplate3 = "logical_template_3";
+ static const char* const KTemplate4 = "logical_template_4";
+ static const char* const KTemplate5 = "logical_template_5";
+ static const char* const KTemplate6 = "logical_template_6";
+ static const char* const KTemplate7 = "logical_template_7";
+ static const char* const KTemplate8 = "logical_template_8";
+ static const char* const KTemplate9 = "logical_template_9";
+ static const char* const KTemplate10 = "logical_template_10";
+ static const char* const KTemplate11 = "logical_template_11";
+ static const char* const KTemplate12 = "logical_template_12";
+ static const char* const KTemplate13 = "logical_template_13";
+ static const char* const KTemplate14 = "logical_template_14";
+ */
+ }
+
+ /**
+ * An interface for all Multimedia widgets.
+ * Widgets consist of control and visualization elements.
+ * Model owned by the application.
+ *
+ * Interface paradigm would be used in a restrictive way.
+ * Controls are owned by Alfred environment.
+ * Widgets can be constructed using the widget factory.
+ * Widgets are owned and accessed using the Alfred
+ * environment.
+ */
+ class IMulWidget : public IAlfWidget // base class
+ {
+ public:
+
+ /*! @enum TMulVisualEffect
+ * This enumeration defines Visual effect that widget support
+ *
+ */
+ enum TMulVisualEffect
+ {
+ EHighlightTransition = 1 /*!< Highlight transition effect.*/
+ };
+
+ enum TMulVisualType
+ {
+ ETextVisual = 1, /*!< Color of the text in the widgets.*/
+ ECoverflowCounterVisual, /*!< Color of the Counter text in the Coverflow Widget.*/
+ EItemBackgroundBrush, /*!< Color of the Item brush in the Widget.*/
+ EThumbnailBackgroundBrush /*!< Color for the background of the thumbnail image. Currently used in list widget only.*/
+ };
+
+ /*! @enum TMulRotation
+ * This enumeration defines Rotation effect that widget supports
+ *
+ */
+ enum TMulRotation
+ {
+ ERotateLeft = 1, /*!< For left rotation*/
+ ERotateRight /*!< For right rotation*/
+ };
+
+ /**
+ * Getter for the type identifier of this interface.
+ *
+ * @return A descriptor to identify the type of this interface.
+ **/
+ static inline const IfId& Type()
+ {
+ return mulwidget::Ident;
+ }
+
+ /**
+ * Set the data model for this widget. Widget uses the data model via
+ * IMulModelAccessor interface. Does not take ownership of the accessor
+ * and there can be only one accessor to the widget at any point. This
+ * will remove the binding to previous accessor, if any. Before
+ * deleting the accessor application should remove the binding to
+ * widget by calling the api by passing NULL.
+ *
+ * @param aAccessor model to be set for widget
+ */
+ virtual void SetModel(IMulModelAccessor* aAccessor , bool aFlag = true) = 0;
+
+ /**
+ * Set the size and position of the widget.All parameter values are in pixels and are relevant
+ * to the parent of the widget.
+ *
+ * @param aLeftMargin margin for the left border (top left x co-ordinate value)
+ * @param aTopmargin margin for the top border (top left y co-ordinate value)
+ * @param aHeight height of widget
+ * @param aWidth width of widget
+ * @param aTransitionTime Transition Time in MilliSeconds
+ */
+ virtual void SetRect(int aLeftMargin, int aTopmargin, int aHeight,
+ int aWidth, int aTransitionTime =0) = 0;
+
+ /**
+ * To hide and unhide Widget.
+ *
+ * @param aShow value to hide/unhide the Widget
+ * @param aTransitionTime Transition Time in MilliSeconds
+ */
+ virtual void ShowWidget(bool aShow, int aTransitionTime =0) = 0;
+
+ /**
+ * Get the icon size from the template
+ *
+ * @param atemplateId Logical Template Id
+ * @param aAttribute Attribute name of the Icon
+ * @param aHeight Height of the Icon
+ * @param aWidth Width of the Icon
+ */
+ virtual void GetIconSize( mulwidget::TLogicalTemplate aTemplateId,
+ mulvisualitem::TVisualAttribute aAttribute, int& aHeight, int& aWidth) = 0;
+
+ /**
+ * Get the icon size from the template
+ *
+ * @param aAttribute Attribute name of the Icon
+ * @param aHeight Height of the Icon
+ * @param aWidth Width of the Icon
+ */
+ virtual void GetIconSize(
+ mulvisualitem::TVisualAttribute aAttribute, int& aHeight, int& aWidth) = 0;
+
+
+ /**
+ * Add an observer to widget inorder to get event notifications
+ * from the widget. Widget can have multiple observersers.
+ *
+ * @param aObserver Observer of widget.
+ **/
+ virtual void AddEventHandler( IAlfWidgetEventHandler& aObserver) = 0;
+
+ /**
+ * Remove an observer to widget
+ *
+ * @param aObserver Observer of widget.
+ */
+ virtual void RemoveEventHandler( IAlfWidgetEventHandler& aObserver) = 0;
+
+ /**
+ * Get the Container Layout for widget.
+ *
+ * @return Container layout of the widget. This can be used to set the position of widget.
+ */
+ virtual const CAlfLayout& ContainerLayout() = 0;
+
+
+ /**
+ * Set Transaction/Animation time for variaous visual effect.
+ *
+ * @param aVisualEffect Visual effect to which animation time/transation time to set
+ * @param aTransitionTime Transition Time in MilliSeconds
+ *
+ * <B>Examples:</b>
+ * @code
+ * Set the animation time.
+ *
+ * mListWidget->SetAnimationTime( TMulVisualEffect::EHighlightTransition, 1000 );
+ * @endcode
+ */
+ virtual void SetAnimationTime( TMulVisualEffect aVisualEffect, int aTransitionTime = 0 ) = 0;
+
+ /**
+ * Set the color and opacity of the visual for various visuals as per the widget.
+ * Also used to set the background transparent.
+ *
+ * @param aVisualType visual to which color is to be applied.
+ * @param aColor RGB color
+ *
+ * NOTE: TRgb with the alpha is mandatory .,if application doesnt sets the alpha results in the 0-opacity-Transparent.
+ * so applications always should use TRgb with alpha constructor: like- TRgb(TUint32 color,TInt alpha);
+ *
+ * <B>Examples: To Set the color and opacity of the thumbnail background </b>
+ * @code
+ * Set the color and alpha of the visual.0x008090 and 0 respectively.
+ *
+ * iMyWidget->SetVisualColor( TMulVisualColor::EThumbnailBackgroundColor, TRgb(0x008090,0) );
+ * Here 0(zero) implies opacity - 1.
+ * @endcode
+ *
+ * <B>Examples: To make the background Transparent </b>
+ * @code
+ * Set the color and alpha of the visual.0x008090 and 255 respectively.
+ *
+ * iMyWidget->SetVisualColor( TMulVisualColor::EThumbnailBackgroundColor, TRgb(0x008090,255) );
+ * Here 255 alpha implies Transparent Background.No matter what the color is.
+ * @endcode
+ *
+ */
+ virtual void SetVisualColor( TMulVisualType aVisualType , const TRgb& aColor ) = 0;
+
+
+ /**
+ *
+ Virtual destructor.
+ **/
+ virtual ~IMulWidget()
+ {
+ }
+
+ };
+
+ } // namespace Alf
+
+#endif // I_MULWIDGET_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_widget_api/inc/mul/imulwidgetdef.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,42 @@
+/*
+* 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: Widget definations
+*
+*/
+
+
+#ifndef I_MULWIDGETDEF_H_
+#define I_MULWIDGETDEF_H_
+
+namespace Alf
+ {
+
+class MulWidgetDef
+ {
+
+public: //enum
+ /** Marking enums */
+ enum TMulWidgetMarkingType
+ {
+ EMulMark=1,
+ EMulUnmark,
+ EMulMarkAll,
+ EMulUnmarkAll
+ };
+
+ };
+
+ }// namespace Alf
+
+#endif // I_MULWIDGETDEF_H_
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_widget_api/inc/mul/mulevent.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2006 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: Event class.
+*
+*/
+
+
+#ifndef T_MULEVENT_H
+#define T_MULEVENT_H
+
+namespace Alf
+{
+ enum TMulEventType
+ {
+ ETypeHighlight= 200, /*!< A message regarding an item getting highlighted.
+ * Data for the event will be the highlighted index(int).*/
+ ETypeSelect, /*!< a message regarding an item getting selected.
+ * Data for the event will be the selected index(int).*/
+ ETypeDoubleTap, /*!< a message regarding an item getting double tapped.
+ * Data for the event will be the selected index(int).*/
+ ETypeMark, /*!< a message regarding start/stop of marking.
+ * Data for the event will be marking state(TMulMarkState).*/
+ ETypeFastScroll, /*!< a message regarding start/stop of fast scrolling
+ * Data for the event will be fast scrolling state(TMulFastScrollState).*/
+ ETypePrimaryValueChange, /*!< a message regarding slider primary value getting changed
+ * Data for the event will be previous & current value
+ * encapsulated within TMulSliderPos.*/
+ ETypeSecondaryValueChange, /*!< a message regarding slider secondary value getting changed
+ * Data for the event will be previous & current value
+ * encapsulated within TMulSliderPos.*/
+ ETypeAction, /*!< a message regarding an action item being selected
+ * Data for the action event will be encapsulated within TMulActionItem.*/
+
+ ETypeRemove, /*!< a message regarding an item has to be removed.
+ * Data for the event will be the highlighted index(int).*/
+
+ ECustomEventMarqueeFinished, /*!< A message regarding marquee Finished.
+ * no custom data required.*/
+
+ ECustomEventMarqueeStart, /*!< A message regarding marquee started.
+ * no custom data required.*/
+
+ ECustomEventIconClick, /*!< A message regarding clicking on icon.
+ * no custom data required.*/
+
+ EMulEventReorder, /*!< Data for the event will be previous and current index
+ * encapsulated within MulReorderValues .*/
+
+ EMulEventSwap, /*!< Data for the event will be previous and current index
+ * encapsulated within MulReorderValues .*/
+
+ EMulEditorUpdated, /*!< A message regarding plain text editor of an item is changed.
+ * Data for the event will be the item index(int).*/
+
+ ECustomHighlightClearTransition, /*!< A message regarding transition after clear focus and before set focus finished.
+ * no custom data required.*/
+
+ ECustomHighlightFocusTransition, /*!< A message regarding transition after set focus finished.
+ *no custom data required.*/
+
+ ETypeItemMarked, /*!< a message regarding an item getting marked.
+ * Data for the event will be the marked index(int).*/
+
+ ETypeItemUnmarked, /*!< a message regarding an item getting unmarked.
+ * Data for the event will be the unmarked index(int).*/
+
+ ECustomEventTitleMarqueeFinished, /*!< A message regarding title marquee Finished.
+ * no custom data required.*/
+
+ ECustomEventDetailMarqueeStart, /*!< A message regarding detail marquee started.
+ * no custom data required.*/
+
+ ECustomEventContinuousScroll, /*!< A message regarding Continuous Scrolling.
+ * Data for the event is the View Start Position.*/
+
+ ESliderDrag, /*!< A message regarding Slider starting the drag
+ */
+
+ EVideoIconSelect, /*!< A message regarding there was tap on the video icon of the Coverflow widget full screen template.
+ * no custom data required.*/
+
+ ECustomEventVisiblePageIndexChanged, /*!< a message regarding change of visible page
+ * Data for the event will be the first index of the new visible page.*/
+
+ ETypeSwitchUiStateOnDrag, /*!< a message to switch off the ui when drag starts.
+ * no custom data required. This event is specific to coverflow widget*/
+
+ ECustomEventIconRelease, /*!< A message regarding release on icon.
+ * no custom data required. */
+
+ ETypePinch, /*!< A message regarding a multitouch pinch gesture identified in coverflow */
+
+ ETypeItemRemoved /*!< A message regarding a remove operation completed. Requested by photos for refreshing
+ the HDMI view when an item is deleted, No custom data */
+ };
+
+
+ /*! @enum TMulMarkState
+ * Marking state of the widget.
+ */
+ enum TMulMarkState
+ {
+ EMarkStart, /*!< A state which indicates that the marking has started.*/
+ EMarkStop /*!< A state which indicates that the marking has stopped.*/
+ };
+
+ /*! @enum TMulFastScrollState
+ * Fast Scroll State of the widget.
+ */
+ enum TMulFastScrollState
+ {
+ EScrollStart, /*!< A state which indicates that the fast scrolling has started.*/
+ EScrollSmallIcon, /*!< A state which indicates that the fast scrolling is using
+ * the smaller size of the thumbnails.*/
+ EScrollLargeIcon, /*!< A state which indicates that the fast scrolling is using
+ * the larger size of the thumbnails.*/
+ EScrollStop /*!< A state which indicates that the fast scrolling has stopped.*/
+ };
+
+ /*! @struct TMulSliderPos
+ * The structure holds the data change details of the slider. It stores both the previous
+ * value and current value of the slider thumb.
+ */
+ struct MulSliderPos
+ {
+ /* @var Original value of the slider thumb.*/
+ int mPreviousValue;
+
+ /* @var New value of the slider thumb.*/
+ int mCurrentValue;
+ };
+
+ struct MulReorderValues
+ {
+ /* @var old value of the item index.*/
+ int mOldIndex;
+
+ /* @var New value of the item index */
+ int mNewIndex;
+ };
+
+ struct MulDoubleTapData
+ {
+ TPoint mDoubleTapPoint;
+ TInt mTapVisualIndex;
+ MulDoubleTapData() {
+ mDoubleTapPoint.SetXY(0,0);
+ mTapVisualIndex = -1 ;
+ }
+ }; // end of structure
+
+
+}//namespacealf
+#endif // T_MULEVENT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_widget_api/inc/mul/muluiaccelinc.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2006 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: UIAccelerator Include File.
+*
+*/
+
+
+#ifndef MULUIACCELINC_H
+#define MULUIACCELINC_H
+
+#include "../../../../../../../antriksh/group/stdinc.mmh"
+
+#endif // MULUIACCELINC_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/mul_widget_api/mul_widget_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="8f1254bbe97dc5cf1f41aa8528ac7637" dataversion="1.0">
+<name>mul widget api</name>
+<description>API for mulwidget</description>
+<type>c++</type>
+<subsystem>mulwidget</subsystem>
+<libs></libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_container_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: ALF widget factory API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/osn/alfptrvector.h MW_LAYER_PLATFORM_EXPORT_PATH(osn/alfptrvector.h)
+../inc/osn/alfptrvectorimpl.h MW_LAYER_PLATFORM_EXPORT_PATH(osn/alfptrvectorimpl.h)
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_container_api/inc/osn/alfptrvector.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,214 @@
+/*
+* Copyright (c) 2007 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: vector implementation
+ *
+*/
+
+
+#ifndef ALF_PTRVECTOR_H
+#define ALF_PTRVECTOR_H
+
+
+#include <osn/osntypes.h>
+#include <osn/alfptrvectorimpl.h>
+
+namespace osncore
+{
+
+/**
+* @deprecated Use STL vector
+* @class AlfPtrVector alfptrvector.h "osn/alfptrvector.h"
+* Template class for a pointer vector
+*
+* @lib osncore.lib
+* @since S60 5.0
+* @status Draft
+* @interfaces AlfPtrVector
+*/
+template<class T>
+class AlfPtrVector: public IDeleter
+ {
+public:
+ /**
+ * @deprecated Use STL vector
+ * Default constructor for vector.
+ * By default contents are automatically deleted
+ * when destructor is called.
+ *
+ * @since S60 5.0
+ */
+ AlfPtrVector() : mImpl(*this),mDelItem(true) {}
+
+ /**
+ * @deprecated Use STL vector
+ * Constructor for vector with some default size.
+ * Size can be increased or decreased afterwards.
+ *
+ * @since S60 5.0
+ * @param aSize Default size of vector.
+ */
+ explicit AlfPtrVector(uint aSize) : mImpl(aSize,*this),mDelItem(true) {}
+
+ /**
+ * @deprecated Use STL vector
+ * Destructor.
+ */
+ ~AlfPtrVector() { if (mDelItem) { mImpl.clear(mDelItem); } }
+
+ /**
+ * @deprecated Use STL vector
+ * Returns the value of auto delete property.
+ *
+ * @since S60 5.0
+ * @return true or false.
+ */
+ bool autoDelete() { return mDelItem; }
+
+ /**
+ * @deprecated Use STL vector
+ * Sets the auto delete property of vector.
+ *
+ * @since S60 5.0
+ * @param aAutoDelete Value(true/false) of the property.Default value is true.
+ */
+ void setAutoDelete(bool aAutoDelete=true) { mDelItem = aAutoDelete; }
+
+ /**
+ * Deletes all items of vector.
+ *
+ * @since S60 5.0
+ */
+ void clear() { mImpl.clear(mDelItem); }
+
+ /**
+ * @deprecated Use STL vector
+ * Checks if there are some items in vector.
+ *
+ * @since S60 5.0
+ * @return true or false.
+ */
+ bool isEmpty() const { return mImpl.isEmpty(); }
+
+ /**
+ * @deprecated Use STL vector
+ * Returns number of items in vector.
+ *
+ * @since S60 5.0
+ * @return number of items in vector.
+ */
+ uint count() const { return mImpl.count(); }
+
+ /**
+ * @deprecated Use STL vector
+ * Returns the size in bytes occupied by vector.
+ *
+ * @since S60 5.0
+ * @return number of bytes used by vector.
+ */
+ uint size() const { return mImpl.size(); }
+
+ /**
+ * @deprecated Use STL vector
+ * Removes the item from vector at given position.
+ * Item will be automatically deleted if auto delete
+ * property is set to true.
+ *
+ * @since S60 5.0
+ * @param aPos Position of the item to be removed.
+ * @return true/false to indicate if item has been removed.
+ */
+ bool remove(uint aPos) { return mImpl.remove(aPos, mDelItem); }
+
+ /**
+ * @deprecated Use STL vector
+ * Resizes the vector to new size. Existing items in
+ * the vector will be restored if auto delete property is false.
+ *
+ * @since S60 5.0
+ * @param aSize New size in bytes.
+ * @return true/false to indicate if item has been resized.
+ */
+ bool resize(uint aSize) { return mImpl.resize(aSize, mDelItem); }
+
+ /**
+ * @deprecated Use STL vector
+ * Inserts a new item at given position in the vector.
+ *
+ * @since S60 5.0
+ * @param aPos Position at which item has to be inserted.
+ * @param aItem Pointer to the item to be inserted.
+ * @return true/false to indicate if the item has been inserted.
+ */
+ bool insert(uint aPos, T *aItem) { return mImpl.insert(aPos, aItem, mDelItem); }
+
+ /**
+ * @deprecated Use STL vector
+ * Returns pointer to the item at given position in the vector.
+ *
+ * @since S60 5.0
+ * @param aPos Position from which item is queried.
+ * @return Pointer to the item.
+ */
+ T *at(int aPos) const {return (T *)mImpl.at(aPos); }
+
+ /**
+ * @deprecated Use STL vector
+ * Returns pointer to the raw data used by vector to stroe the items.
+ *
+ * @since S60 5.0
+ * @return Pointer to data.
+ */
+ T **data() {return (T **)mImpl.data(); }
+
+ /**
+ * @deprecated Use STL vector
+ * Returns the position of the item in the vector.
+ *
+ * @since S60 5.0
+ * @param aItem Pointer to the item being searched in the vector.
+ * @return Position of item in the vector.-1 is returned if item is not found.
+ */
+ int findRef(T *aItem){return mImpl.findRef(aItem);}
+
+ /**
+ * @deprecated Use STL vector
+ * Returns the item at given index in the vector.
+ *
+ * @since S60 5.0
+ * @param aPos Position from which item has been queried.
+ * @return Pointer to the item at given position.
+ */
+ T* operator[](uint aPos) const { return (T *)mImpl.at(aPos); }
+
+private:
+ void deleteItem(void* aItem)
+ {
+ delete (T*) aItem;
+ }
+ AlfPtrVector(const AlfPtrVector&);
+ AlfPtrVector& operator=(const AlfPtrVector&);
+private:
+ /**
+ * Owned body
+ */
+ AlfPtrVectorImpl mImpl;
+ /**
+ * Auto delete
+ */
+ bool mDelItem;
+
+ };
+
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_container_api/inc/osn/alfptrvectorimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2007 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: vector implementation
+ *
+*/
+
+
+
+#ifndef ALFPTRVECTORIMPL_H
+#define ALFPTRVECTORIMPL_H
+
+#include <osn/osndefines.h>
+#include <osn/osntypes.h>
+
+namespace osncore
+{
+
+class IDeleter
+ {
+private:
+ friend class AlfPtrVectorImpl;
+ virtual void deleteItem(void* aItem)=0;
+ };
+
+
+/**
+ * @deprecated Use STL vector
+ * @class AlfPtrVectorImpl alfptrvectorimpl.h "osn/alfptrvectorimpl.h"
+ * Implementation class for AlfPtrVector
+ *
+ * @lib osncore.lib
+ * @since S60 5.0
+ * @status Draft
+ */
+class AlfPtrVectorImpl
+ {
+public: // constructors / destructor
+
+ /**
+ * @deprecated Use STL vector
+ * Constructor
+ *
+ * @since S60 5.0
+ * @param aDeleter
+ */
+ OSN_IMPORT AlfPtrVectorImpl( IDeleter& aDeleter );
+
+ /**
+ * @deprecated Use STL vector
+ * Constructor
+ *
+ * @since S60 5.0
+ * @param aSize
+ * @param aDeleter
+ */
+ OSN_IMPORT AlfPtrVectorImpl(uint aSize, IDeleter& aDeleter);
+
+ /**
+ * @deprecated Use STL vector
+ * Destructor
+ */
+ OSN_IMPORT ~AlfPtrVectorImpl();
+
+ /**
+ * @deprecated Use STL vector
+ * Clears the vector
+ *
+ * @since S60 5.0
+ * @param aDelItems determines whether the items are deleted
+ */
+ OSN_IMPORT void clear(bool aDelItems);
+
+ /**
+ * @deprecated Use STL vector
+ * Removes an item from the vector
+ *
+ * @since S60 5.0
+ * @param aCount the item to be deleted
+ * @param aDelItems determines whether the item is deleted
+ * @return true/false to indicate if item has been removed.
+ */
+ OSN_IMPORT bool remove(uint aCount, bool aDelItems);
+
+ /**
+ * @deprecated Use STL vector
+ * Resizes the vector to new size. Existing items in
+ * the vector will be restored if auto delete property is false.
+ *
+ * @since S60 5.0
+ * @param aSize New size in bytes.
+ * @param aDelItems determines whether the items are deleted
+ * @return true/false to indicate if item has been resized.
+ */
+ OSN_IMPORT bool resize(uint aSize, bool aDelItems);
+
+ /**
+ * @deprecated Use STL vector
+ * Inserts a new item at given position in the vector.
+ *
+ * @since S60 5.0
+ * @param aCount Position at which item has to be inserted.
+ * @param aItem Pointer to the item to be inserted.
+ * @param aDelItems determines whether the item is deleted, not used!
+ * @return true/false to indicate if the item has been inserted.
+ */
+ OSN_IMPORT bool insert(uint aCount, void *aItem, bool aDelItems);
+
+ /**
+ * @deprecated Use STL vector
+ * Returns the position of the item in the vector.
+ *
+ * @since S60 5.0
+ * @param aItem Pointer to the item being searched in the vector.
+ * @return Position of item in the vector.-1 is returned if item is not found.
+ */
+ OSN_IMPORT int findRef(void *aItem);
+
+public: // inliners
+ bool isEmpty() const { return mcount == 0; }
+ uint count() const { return mcount; }
+ uint size() const { return msize; }
+ void* at(uint aCount) const { return mdata[aCount]; }
+ void** data() { return mdata; }
+
+
+private:
+ AlfPtrVectorImpl& operator=(const AlfPtrVectorImpl&);
+
+ void** mdata;
+ uint msize;
+ uint mcount;
+ IDeleter& mDeleter;
+ };
+
+} // namespace core
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_container_api/osn_container_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<api id="09dbfd031919147959af91de80496440" dataversion="1.0">
+<name>osn container api</name>
+<description>Osn Container Classes API</description>
+<type>c++</type>
+<subsystem>osncore</subsystem>
+<libs><lib name="osncore.lib"/>
+</libs>
+<release category="sdk" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_global_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: OSN common API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/osn/osncommon.h MW_LAYER_PLATFORM_EXPORT_PATH(osn/osncommon.h)
+../inc/osn/osndefines.h MW_LAYER_PLATFORM_EXPORT_PATH(osn/osndefines.h)
+../inc/osn/osnnew.h MW_LAYER_PLATFORM_EXPORT_PATH(osn/osnnew.h)
+../inc/osn/osntypes.h MW_LAYER_PLATFORM_EXPORT_PATH(osn/osntypes.h)
+../inc/osn/osntypes.inl MW_LAYER_PLATFORM_EXPORT_PATH(osn/osntypes.inl)
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_global_api/inc/osn/osncommon.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2007 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: Most basic macro definitions
+ *
+*/
+
+
+
+#ifndef OSNCOMMON_H
+#define OSNCOMMON_H
+
+#include <osn/osndefines.h>
+#include <osn/osntypes.h>
+
+#ifndef __GNUC__
+#include <osn/osnnew.h>
+#endif
+#endif // OSNDEFINES_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_global_api/inc/osn/osndefines.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2007 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: Most basic macro definitions
+ *
+*/
+
+
+
+#ifndef OSNDEFINES_H
+#define OSNDEFINES_H
+
+
+
+/**
+ * Defines Keyword that can be used to check if OSN is in use
+ */
+#define __OSN__
+
+#if defined(__VC32__)
+#define OSN_IMPORT __declspec(dllexport)
+#define OSN_EXPORT __declspec(dllexport)
+#endif
+
+#if defined(__CW32__)
+#define OSN_IMPORT __declspec(dllexport)
+#define OSN_EXPORT __declspec(dllexport)
+#define OSN_NONSHARABLE_CLASS(x) class x
+#endif
+
+#if defined(__GNUC__)
+#define OSN_IMPORT
+#define OSN_EXPORT
+#define EXPORT_C
+#define IMPORT_C
+#endif
+
+#if defined(__GCC32__) || defined(__GCCE__)
+#define OSN_IMPORT
+#if !defined(__WINS__) && defined(_WIN32) // VC++ Browser Fix
+#define OSN_EXPORT
+#else
+#define OSN_EXPORT __declspec(dllexport)
+#endif
+#elif defined (__ARMCC_VERSION) // ARM RCVT
+#define OSN_IMPORT __declspec(dllimport)
+#define OSN_EXPORT __declspec(dllexport)
+#define OSN_NONSHARABLE_CLASS(x) class __declspec(notshared) x
+#endif
+
+
+#endif // OSNDEFINES_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_global_api/inc/osn/osnnew.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2007 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: operator new overloads
+ *
+*/
+
+
+
+#ifndef OSNNEW_H
+#define OSNNEW_H
+
+#ifdef __GNUC__
+#include <stdexcept>
+#endif
+#include <osn/osndefines.h>
+
+#ifndef __GNUC__
+namespace std
+ {
+ class bad_alloc;
+ }
+#endif
+enum newarg {EMM};
+
+typedef unsigned int size_t;
+
+/**
+ * Overloaded operator new.
+ *
+ * @since S60 5.0
+ * @param s size of the allocation
+ * @return void* pointer to allocated object.
+ */
+OSN_IMPORT void* operator new(size_t s,newarg) throw (std::bad_alloc);
+
+/**
+ * Overloaded operator delete.
+ *
+ * @since S60 5.0
+ * @param ptr pointer to the object to be deleted
+ */
+OSN_IMPORT void operator delete(void* ptr,newarg)throw();
+
+/**
+ * Overloaded operator new[].
+ *
+ * @since S60 5.0
+ * @param s size of the allocation
+ * @return void* pointer to allocated object.
+ */
+OSN_IMPORT void* operator new[] (size_t s,newarg) throw (std::bad_alloc);
+
+/**
+ * Overloaded operator delete[].
+ *
+ * @since S60 5.0
+ * @param ptr pointer to the object to be deleted
+ */
+OSN_IMPORT void operator delete[](void* ptr,newarg)throw();
+
+
+#endif // OSNNEW_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_global_api/inc/osn/osntypes.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,723 @@
+/*
+* Copyright (c) 2007 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: Defines basic types.
+ *
+*/
+
+
+
+#ifndef OSNTYPES_H
+#define OSNTYPES_H
+
+namespace osncore
+{
+
+/**
+ * Defines a signed 8 bit integer.
+ */
+typedef signed char int8;
+
+/**
+ * Defines an unsigned 8 bit integer.
+ */
+typedef unsigned char uint8;
+
+/**
+ * Defines a signed 16 bit integer.
+ */
+typedef signed short int int16;
+
+/**
+ * Defines an unsigned 16 bit integer.
+ */
+typedef unsigned short int uint16;
+
+/**
+ * Defines an signed 32 bit integer.
+ */
+typedef signed long int int32;
+
+/**
+ * Defines an unsigned 32 bit integer.
+ */
+typedef unsigned long int uint32;
+
+/**
+ * Defines a signed 64 bit integer.
+ */
+typedef signed long long int64;
+
+/**
+ * Defines an unsigned 64 bit integer.
+ */
+typedef unsigned long long uint64;
+
+/**
+ * Defines a 32 bit floating point number.
+ */
+typedef float float32;
+
+/**
+ * Defines a 64 bit floating point number.
+ */
+typedef double float64;
+
+/**
+ * Defines an 8 bit character (usually ASCII).
+ */
+typedef char char8;
+
+/**
+ * Defines an system dependent unsigned int
+ * (in 32 bit system it is 4 bytes and in 16 bit system it is 2 bytes).
+ */
+typedef unsigned int uint;
+
+/**
+ * Defines an 8 bit unsigned char
+ */
+typedef unsigned char uchar;
+
+
+
+/**
+ * Defines a 16 bit character (usually unicode).
+ */
+#if defined(__VC32__)
+typedef uint16 char16; //here a uint16 is needed because the vc
+//version of L"..." returns an unsigned short
+#elif defined(__CW32__)
+typedef uint16 char16; //the same like for __VC32__
+#elif defined(__GCC32__)
+typedef __wchar_t char16; //when using gcc the wchar_t type must be
+//used or else L in front of ASCI strings
+//(e.g. L"xyz") can't be used to assign a
+//unicode string to a char16[]
+#elif defined(__ARMCC_VERSION) // RVCT ARM COMPILER
+typedef wchar_t char16;
+#elif defined(__GCCE__)
+typedef wchar_t char16;
+#elif defined(__GNUC__)
+typedef uint16 char16;
+#endif
+
+/**
+ * Defines a 32 bit boolean.
+ */
+typedef int32 bool32;
+
+/**
+ * Defines the return code data type.
+ */
+typedef int32 ReturnCode;
+
+
+class CPoint;
+
+/**
+ * @class CSize osntypes.h "osn/osntypes.h"
+ * Defines a two dimensional size data type.
+ *
+ * @since S60 5.0
+ * @status Draft
+ * @interfaces CSize
+ */
+class CSize
+ {
+public:
+ /**
+ * Default constructor, initializing the mX and mY members to zero.
+ */
+ inline CSize();
+
+ /**
+ * Parameterized constructor.
+ *
+ * @param aX The first dimension of the size ( usually the width ).
+ * @param aY The second dimension of the size ( usually the height ).
+ */
+ inline CSize( int32 aX, int32 aY );
+
+ /**
+ * Copy constructor.
+ *
+ * @param aSize The size object to be copied.
+ */
+ inline CSize( const CSize& aSize );
+
+ /**
+ * Gets a CPoint whose coordinates are the width and height of this
+ * CSize.
+ *
+ * @return The coordinates of this CSize converted to a point.
+ */
+ inline CPoint AsPoint();
+
+ /**
+ * Compares this CSize with the specified CSize for equality.
+ *
+ * For two CSizes to be equal, both their width and height values
+ * must be equal.
+ *
+ * @param aSize The CSize to be compared with this CSize.
+ *
+ * @return TRUE, if the sizes are equal, FALSE otherwise.
+ */
+ inline bool32 operator==( const CSize& aSize ) const;
+
+ /**
+ * Compares this CSize with the specified CSize for inequality.
+ *
+ * For two CSize to be unequal, either their width or height values
+ * must be different.
+ *
+ * @param aSize The CSize to be compared with this CSize.
+ *
+ * @return TRUE, if the sizes are different, FALSE
+ * otherwise.
+ */
+ inline bool32 operator!=( const CSize& aSize ) const;
+
+ /**
+ * CSize addition assignment operator.
+ *
+ * The operator adds the specified CSize to this CSize, and
+ * assigns the result back to this CSize.
+ *
+ * @param aSize The CSize to be added.
+ *
+ * @return A reference to this point object.
+ */
+ inline CSize& operator+=( const CSize& aSize );
+
+ /**
+ * CSize subtraction assignment operator.
+ *
+ * The operator substracts the specified CSize from this CSize,
+ * and assigns the result back to this CSize.
+ *
+ * @param aSize The CSize to be substracted.
+ *
+ * @return A reference to this point object.
+ */
+ inline CSize& operator-=( const CSize& aSize );
+
+ int32 mX; ///< The first dimension.
+ int32 mY; ///< The second dimension.
+ };
+
+/**
+ * CSize addition operator.
+ *
+ * Calculates the sum of two CSize objects
+ *
+ * @param aLeftHandSide The left addend.
+ * @param aRightHandSide The right addend.
+ *
+ * @return The sum.
+ *
+ */
+inline const CSize operator+( const CSize& aLeftHandSide,
+ const CSize& aRightHandSide );
+
+/**
+ * CSize substraction operator.
+ *
+ * Calculates the difference of two CSize objects
+ *
+ * @param aLeftHandSide The minuend.
+ * @param aRightHandSide The subtrahend.
+ *
+ * @return The difference.
+ *
+ */
+inline const CSize operator-( const CSize& aLeftHandSide,
+ const CSize& aRightHandSide );
+
+
+/**
+ * @class CPoint osntypes.h "osn/osntypes.h"
+ * Defines a two dimensional point data type.
+ *
+ * @since S60 5.0
+ * @status Draft
+ * @interfaces CPoint
+ */
+class CPoint
+ {
+public:
+ /**
+ * Default constructor, initializing the mX and mY members to zero.
+ */
+ inline CPoint( );
+
+ /**
+ * Parameterized constructor.
+ *
+ * @param aX The first coordinate of the point.
+ * @param aY The second coordinate of the point.
+ */
+ inline CPoint( int32 aX, int32 aY );
+
+ /**
+ * Copy constructor.
+ *
+ * @param aPoint The point object to be copied.
+ */
+ inline CPoint( const CPoint& aPoint );
+
+ /**
+ * Gets a CSize whose width and height are the coordinates of this
+ * CPoint.
+ *
+ * @return The width and height of this CPoint converted to a size.
+ */
+ inline CSize AsSize();
+
+ /**
+ * Compares two points for equality.
+ *
+ * For two points to be equal, both their x and y coordinate values
+ * must be equal.
+ *
+ * @param aPoint The point to be compared with this point.
+ *
+ * @return TRUE, if the points are equal, FALSE otherwise.
+ */
+ inline bool32 operator==( const CPoint& aPoint ) const;
+
+ /**
+ * Compares two points for inequality.
+ *
+ * For two points to be unequal, either their x or their y
+ * coordinate values must be different.
+ *
+ * @param aPoint The point to be compared with this point.
+ *
+ * @return TRUE, if the points are different, FALSE
+ * otherwise.
+ */
+ inline bool32 operator!=( const CPoint& aPoint ) const;
+
+ /**
+ * CPoint addition assignment operator.
+ *
+ * The operator adds the specified CPoint to this CPoint, and
+ * assigns the result back to this CPoint.
+ *
+ * @param aPoint The CPoint to be added.
+ *
+ * @return A reference to this point object.
+ */
+ inline CPoint& operator+=( const CPoint& aPoint );
+
+ /**
+ * CPoint subtraction assignment operator.
+ *
+ * The operator substracts the specified CPoint from this CPoint,
+ * and assigns the result back to this CPoint.
+ *
+ * @param aPoint The CPoint to be substracted.
+ *
+ * @return A reference to this point object.
+ */
+ inline CPoint& operator-=( const CPoint& aPoint );
+
+ int32 mX; ///< The x-coordinate position of the point.
+ int32 mY; ///< The y-coordinate position of the point.
+ };
+
+/**
+ * CPoint addition operator.
+ *
+ * Calculates the sum of two CPoint objects
+ *
+ * @param aLeftHandSide The left addend.
+ * @param aRightHandSide The right addend.
+ *
+ * @return The sum.
+ *
+ */
+inline const CPoint operator+( const CPoint& aLeftHandSide,
+ const CPoint& aRightHandSide );
+
+/**
+ * CPoint substraction operator.
+ *
+ * Calculates the difference of two CPoint objects
+ *
+ * @param aLeftHandSide The minuend.
+ * @param aRightHandSide The subtrahend.
+ *
+ * @return The difference.
+ *
+ */
+inline const CPoint operator-( const CPoint& aLeftHandSide,
+ const CPoint& aRightHandSide );
+
+/**
+ * @class CRect osntypes.h "osn/osntypes.h"
+ * Defines a two dimensional rectangle data type.
+ *
+ * @since S60 5.0
+ * @status Draft
+ * @interfaces CRect
+ */
+class CRect
+ {
+public:
+ /**
+ * Default constructor, initializing the coordinates of the top left
+ * corner and the size to ( 0,0 ).
+ */
+ inline CRect();
+
+ /**
+ * Parameterized constructor.
+ *
+ * @param aX The first coordinate of the rectangle's top left point.
+ * @param aY The second coordinate of the rectangle's top left
+ * point.
+ * @param aWidth The width of the rectangle.
+ * @param aHeight The height of the rectangle.
+ */
+ inline CRect( int32 aX, int32 aY, int32 aWidth, int32 aHeight );
+
+ /**
+ * Parameterized constructor.
+ *
+ * Constructs the rectangle with a point ( top left corner ) and a
+ * size.
+ *
+ * @param aTopLeft The top left point of the rectangle.
+ * @param aSize The size of the rectangle.
+ */
+ inline CRect( const CPoint& aTopLeft, const CSize& aSize );
+
+ /**
+ * Parameterized constructor.
+ *
+ * Constructs the rectangle with a size. The top left corner is set
+ * to (0,0).
+ *
+ * @param aSize The size of the rectangle.
+ */
+ inline CRect( const CSize& aSize );
+
+ /**
+ * Copy constructor.
+ *
+ * @param aRect The rectangle object to be copied.
+ */
+ inline CRect( const CRect& aRect );
+
+ /**
+ * Determines whether the area covered by the rectangle is zero.
+ *
+ * @return TRUE, if the rectangle is empty, FALSE
+ * otherwise.
+ */
+ inline bool32 IsEmpty() const;
+
+ /**
+ * Tests whether this rectangle overlaps with the specified
+ * rectangle.
+ *
+ * Two rectangles overlap if any point is located within both
+ * rectangles. There is no intersection if two adjacent sides touch
+ * without overlapping, or if either rectangle is empty.
+ *
+ * @param aRect The rectangle to compare with this rectangle for an
+ * intersection.
+ *
+ * @return TRUE, if the two rectangles overlap, FALSE
+ * otherwise.
+ */
+ inline bool32 Intersects( CRect aRect ) const;
+
+ /**
+ * Tests whether this normalized rectangle overlaps with the
+ * specified normalized rectangle.
+ *
+ * Two rectangles overlap if any point is located within both
+ * rectangles. There is no intersection if two adjacent sides touch
+ * without overlapping, or if either rectangle is empty.
+ * If one of the rectangles isn't normalized, then the function also
+ * returns FALSE,
+ *
+ * Because of performance reasons this function should favored over
+ * the Intersects function, when it is certain that both rectangles
+ * are normalized.
+ *
+ * @param aRect The rectangle to compare with this rectangle for an
+ * intersection.
+ *
+ * @return TRUE, if the two rectangles are normalized and
+ * overlap, FALSE otherwise.
+ */
+ inline bool32 FastIntersects( const CRect& aRect ) const;
+
+ /**
+ * Gets the normalized area of intersection between this rectangle
+ * and the specified rectangle, and assigns it to this rectangle.
+ *
+ * If the two rectangles do not intersect, then, on return, this
+ * rectangle is set to be empty.
+ *
+ * @param aRect The rectangle to be used with this rectangle to get
+ * the area of intersection.
+ */
+ inline void Intersection( CRect aRect );
+
+ /**
+ * Gets the normalized area of intersection between this normalized
+ * rectangle and the specified normalized rectangle, and assigns it
+ * to this rectangle.
+ *
+ * If the two rectangles do not intersect or are not normalized,
+ * then, on return, this rectangle is set to be empty.
+ *
+ * Because of performance reasons this function should be favored
+ * over the Intersection() function, when it is certain that both
+ * rectangles are normalized.
+ *
+ * @param aRect The rectangle to be used with this rectangle to get
+ * the area of intersection.
+ */
+ inline void FastIntersection( const CRect& aRect );
+
+ /**
+ * Ensures that the rectangle's width and height have positive
+ * values.
+ *
+ * For example, if the rectangle's co-ordinates are such that the
+ * top is below the bottom, or the right hand side is to the left of
+ * the left hand side, normalisation swaps the co-ordinates of the
+ * top and bottom or of the left and right.
+ */
+ inline void Normalize();
+
+ /**
+ * Tests whether the rectangle is normalized.
+ *
+ * A rectangle is normalized, when its width and height are both
+ * greater than or equal to zero.
+ */
+ inline bool32 IsNormalized() const;
+
+ /**
+ * Compares two rectangles for equality.
+ *
+ * For two rectangles to be equal, the coordinates of their top left
+ * corners and their sizes must be equal.
+ *
+ * @param aRect The rectangle to compare with this rectangle.
+ *
+ * @return TRUE, if the rectangles are equal, FALSE
+ * otherwise.
+ */
+ inline bool32 operator==( const CRect& aRect ) const;
+
+ /**
+ * Compares two rectangles for inequality.
+ *
+ * Two rectangles are unequal if the coordinates of their top left
+ * corners or their sizes differ.
+ *
+ * @param aRect The rectangle to compare with this rectangle.
+ *
+ * @return TRUE, if the rectangles are different, FALSE
+ * otherwise.
+ */
+ inline bool32 operator!=( const CRect& aRect ) const;
+
+ /**
+ * CPoint addition assignment operator.
+ *
+ * The operator moves this CRect's offset by the given point's
+ * coordinates.
+ *
+ * @param aPoint The CPoint to be added.
+ *
+ * @return A reference to this rectangle object.
+ */
+ inline CRect& operator+=( const CPoint& aPoint );
+
+ /**
+ * CPoint subtraction assignment operator.
+ *
+ * The operator moves this CRect's offset by the given point's
+ * coordinates.
+ *
+ * @param aPoint The CPoint to be substracted.
+ *
+ * @return A reference to this rectangle object.
+ */
+ inline CRect& operator-=( const CPoint& aPoint );
+
+ /**
+ * CSize addition assignment operator.
+ *
+ * The operator increases this CRect's size by the given size.
+ *
+ * @param aSize The CSize to be added.
+ *
+ * @return A reference to this rectangle object.
+ */
+ inline CRect& operator+=( const CSize& aSize );
+
+ /**
+ * CSize subtraction assignment operator.
+ *
+ * The operator decreases this CRect's size by the given size.
+ *
+ * @param aSize The CSize to be substracted.
+ *
+ * @return A reference to this rectangle object.
+ */
+ inline CRect& operator-=( const CSize& aSize );
+
+ int32 mX; ///< The position of the left-hand side of the
+ ///< rectangle.
+ int32 mY; ///< The position of the top side of the rectangle.
+ int32 mWidth; ///< The width of the rectangle.
+ int32 mHeight; ///< The height of the rectangle.
+ };
+
+/**
+ * CRect + CPoint addition operator.
+ *
+ * The operator copies the CRect and moves the copy's offset by the given
+ * point's coordinates.
+ *
+ * @param aRect The CRect addend.
+ * @param aPoint The CPoint to be added.
+ *
+ * @return The moved CRect.
+ *
+ */
+inline const CRect operator+( const CRect& aRect,
+ const CPoint& aPoint );
+
+/**
+ * CRect - CPoint subtraction operator.
+ *
+ * The operator copies the CRect and moves the copy's offset by the
+ * given point's coordinates.
+ *
+ * @param aRect The CRect addend.
+ * @param aPoint The CPoint to be substracted.
+ *
+ * @return The moved CRect.
+ *
+ */
+inline const CRect operator-( const CRect& aRect,
+ const CPoint& aPoint );
+
+/**
+ * CRect + CSize addition operator.
+ *
+ * The operator copies the CRect and resizes the copy by the given size.
+ *
+ * @param aRect The CRect addend.
+ * @param aSize The CSize to be added.
+ *
+ * @return The resized CRect.
+ *
+ * @ingroup Runtime
+ */
+inline const CRect operator+( const CRect& aRect,
+ const CSize& aSize );
+
+/**
+ * CRect - CSize subtraction operator.
+ *
+ * The operator copies the CRect and resizes the copy by the given size.
+ *
+ * @param aRect The CRect minuend.
+ * @param aSize The CSize to be substracted.
+ *
+ * @return The resized CRect.
+ *
+ * @ingroup Runtime
+ */
+inline const CRect operator-( const CRect& aRect,
+ const CSize& aSize );
+
+/**
+ * Defines maximum value for a int8 variable
+ */
+const int8 MAX_INT8 = 0x7f;
+
+/**
+ * Defines minimum value for a int8 variable
+ */
+const int8 MIN_INT8 = 0x80;
+
+/**
+ * Defines maximum value for a uint8 variable
+ */
+const uint8 MAX_UINT8 = 0xffu;
+
+/**
+ * Defines maximum value for a int16 variable
+ */
+const int16 MAX_INT16 = 0x7fff;
+
+/**
+ * Defines minimum value for a int16 variable
+ */
+const int16 MIN_INT16 = 0x8000;
+
+/**
+ * Defines maximum value for a uint16 variable
+ */
+const uint16 MAX_UINT16 = 0xffffu;
+
+/**
+ * Defines maximum value for a int32 variable
+ */
+const int32 MAX_INT32 = 0x7fffffff;
+
+/**
+ * Defines minimum value for a int32 variable
+ */
+const int32 MIN_INT32 = 0x80000000;
+
+/**
+ * Defines maximum value for a uint32 variable
+ */
+const uint32 MAX_UINT32 = 0xffffffffu;
+
+
+/**
+ * Maximum path/filename length including a NULL terminator. A char16*
+ * array of this size is guaranteed to accomodate all filenames returned
+ * by the system.
+ */
+const uint32 MAX_PATH_LENGTH = 257;
+
+/// Filename path delimiter.
+const char16 PATH_DELIMITER = '\\';
+
+/// Filename drive delimiter.
+const char16 DRIVE_DELIMITER = ':';
+
+/// Filename extension delimiter.
+const char16 EXTENSION_DELIMITER = '.';
+
+
+#include <osn/osntypes.inl>
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_global_api/inc/osn/osntypes.inl Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,576 @@
+/*
+* Copyright (c) 2007 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: Defines all inline functions of the osn types.
+ *
+*/
+
+
+#ifndef OSNTYPES_INL
+#define OSNTYPES_INL
+
+// ======== GLOBAL FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CSize operator+
+// -----------------------------------------------------------------------------
+//
+inline const CSize operator+( const CSize& aLeftHandSide,
+ const CSize& aRightHandSide )
+ {
+ return CSize( aLeftHandSide ) += aRightHandSide;
+ }
+
+// -----------------------------------------------------------------------------
+// CSize operator-
+// -----------------------------------------------------------------------------
+//
+inline const CSize operator-( const CSize& aLeftHandSide,
+ const CSize& aRightHandSide )
+ {
+ return CSize( aLeftHandSide ) -= aRightHandSide;
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint operator+
+// -----------------------------------------------------------------------------
+//
+inline const CPoint operator+( const CPoint& aLeftHandSide,
+ const CPoint& aRightHandSide )
+ {
+ return CPoint( aLeftHandSide ) += aRightHandSide;
+ }
+
+// -----------------------------------------------------------------------------
+// CSize operator-
+// -----------------------------------------------------------------------------
+//
+inline const CPoint operator-( const CPoint& aLeftHandSide,
+ const CPoint& aRightHandSide )
+ {
+ return CPoint( aLeftHandSide ) -= aRightHandSide;
+ }
+
+// -----------------------------------------------------------------------------
+// CRect + CPoint
+// Point addition.
+// -----------------------------------------------------------------------------
+//
+inline const CRect operator+( const CRect& aRect,
+ const CPoint& aPoint )
+ {
+ return CRect( aRect ) += aPoint;
+ }
+
+// -----------------------------------------------------------------------------
+// CRect - CPoint
+// Point substraction.
+// -----------------------------------------------------------------------------
+//
+inline const CRect operator-( const CRect& aRect,
+ const CPoint& aPoint )
+ {
+ return CRect( aRect ) -= aPoint;
+ }
+
+// -----------------------------------------------------------------------------
+// CRect + CSize
+// Size addition.
+// -----------------------------------------------------------------------------
+//
+inline const CRect operator+( const CRect& aRect,
+ const CSize& aSize )
+ {
+ return CRect( aRect ) += aSize;
+ }
+
+// -----------------------------------------------------------------------------
+// CRect - CSize
+// Size substraction.
+// -----------------------------------------------------------------------------
+//
+inline const CRect operator-( const CRect& aRect,
+ const CSize& aSize )
+ {
+ return CRect( aRect ) -= aSize;
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CSize::CSize
+// Default Constructor.
+// -----------------------------------------------------------------------------
+//
+inline CSize::CSize() :
+ mX( 0 ),
+ mY( 0 )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CSize::CSize
+// Parameterized constructor.
+// -----------------------------------------------------------------------------
+//
+inline CSize::CSize( int32 aX, int32 aY ) :
+ mX( aX ),
+ mY( aY )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CSize::CSize
+// Copy Constructor.
+// -----------------------------------------------------------------------------
+//
+inline CSize::CSize( const CSize& aSize ) :
+ mX( aSize.mX ),
+ mY( aSize.mY )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CSize::AsPoint
+// Assignment substraction.
+// -----------------------------------------------------------------------------
+//
+inline CPoint CSize::AsPoint()
+ {
+ return CPoint( mX, mY );
+ }
+
+// -----------------------------------------------------------------------------
+// CSize::operator==
+// Logical comparison.
+// -----------------------------------------------------------------------------
+//
+inline bool32 CSize::operator==( const CSize& aSize ) const
+ {
+ return ( mX == aSize.mX ) && ( mY == aSize.mY );
+ }
+
+// -----------------------------------------------------------------------------
+// CSize::operator!=
+// Logical comparison.
+// -----------------------------------------------------------------------------
+//
+inline bool32 CSize::operator!=( const CSize& aSize ) const
+ {
+ // call operator== and negate it (logically)
+ return !( *this == aSize );
+ }
+
+// -----------------------------------------------------------------------------
+// CSize::operator+=
+// Assignment addition.
+// -----------------------------------------------------------------------------
+//
+inline CSize& CSize::operator+=( const CSize& aSize )
+ {
+ mX += aSize.mX;
+ mY += aSize.mY;
+ return *this;
+ }
+
+// -----------------------------------------------------------------------------
+// CSize::operator-=
+// Assignment substraction.
+// -----------------------------------------------------------------------------
+//
+inline CSize& CSize::operator-=( const CSize& aSize )
+ {
+ mX -= aSize.mX;
+ mY -= aSize.mY;
+ return *this;
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::CPoint
+// Default Constructor.
+// -----------------------------------------------------------------------------
+//
+inline CPoint::CPoint() :
+ mX( 0 ),
+ mY( 0 )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::CPoint
+// Parameterized Constructor.
+// -----------------------------------------------------------------------------
+//
+inline CPoint::CPoint( int32 aX, int32 aY ) :
+ mX( aX ),
+ mY( aY )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::CPoint
+// Copy Constructor.
+// -----------------------------------------------------------------------------
+//
+inline CPoint::CPoint( const CPoint& aPoint ) :
+ mX( aPoint.mX ),
+ mY( aPoint.mY )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::AsSize
+// Assignment substraction.
+// -----------------------------------------------------------------------------
+//
+inline CSize CPoint::AsSize()
+ {
+ return CSize( mX, mY );
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::operator==
+// Logical comparison.
+// -----------------------------------------------------------------------------
+//
+inline bool32 CPoint::operator==( const CPoint& aPoint ) const
+ {
+ return ( mX == aPoint.mX ) && ( mY == aPoint.mY );
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::operator!=
+// Logical comparison.
+// -----------------------------------------------------------------------------
+//
+inline bool32 CPoint::operator!=( const CPoint& aPoint ) const
+ {
+ // call operator== and negate it (logically)
+ return !( *this == aPoint );
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::operator+=
+// Assignment addition.
+// -----------------------------------------------------------------------------
+//
+inline CPoint& CPoint::operator+=( const CPoint& aPoint )
+ {
+ mX += aPoint.mX;
+ mY += aPoint.mY;
+ return *this;
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::operator-=
+// Assignment substraction.
+// -----------------------------------------------------------------------------
+//
+inline CPoint& CPoint::operator-=( const CPoint& aPoint )
+ {
+ mX -= aPoint.mX;
+ mY -= aPoint.mY;
+ return *this;
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::CRect
+// Default Constructor.
+// -----------------------------------------------------------------------------
+//
+inline CRect::CRect() :
+ mX( 0 ),
+ mY( 0 ),
+ mWidth( 0 ),
+ mHeight( 0 )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::CRect
+// Parameterized Constructor.
+// -----------------------------------------------------------------------------
+//
+inline CRect::CRect( int32 aX, int32 aY, int32 aWidth, int32 aHeight ) :
+ mX( aX ),
+ mY( aY ),
+ mWidth( aWidth ),
+ mHeight( aHeight )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::CRect
+// Parameterized Constructor.
+// -----------------------------------------------------------------------------
+//
+inline CRect::CRect( const CPoint& aTopLeft, const CSize& aSize ) :
+ mX( aTopLeft.mX ),
+ mY( aTopLeft.mY ),
+ mWidth( aSize.mX ),
+ mHeight( aSize.mY )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::CRect
+// Parameterized Constructor.
+// -----------------------------------------------------------------------------
+//
+inline CRect::CRect( const CSize& aSize ) :
+ mX( 0 ),
+ mY( 0 ),
+ mWidth( aSize.mX ),
+ mHeight( aSize.mY )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::CRect
+// Copy Constructor.
+// -----------------------------------------------------------------------------
+//
+inline CRect::CRect( const CRect& aRect ) :
+ mX( aRect.mX ),
+ mY( aRect.mY ),
+ mWidth( aRect.mWidth ),
+ mHeight( aRect.mHeight )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::IsEmpty
+// Check for emptyness.
+// -----------------------------------------------------------------------------
+//
+inline bool32 CRect::IsEmpty() const
+ {
+ // is empty if either width or heigth are zero
+ return ( !mHeight ) || ( !mWidth );
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::Intersects
+// Checks whether two rects are intersecting.
+// -----------------------------------------------------------------------------
+//
+inline bool32 CRect::Intersects( CRect aRect ) const
+ {
+ if( IsEmpty() || aRect.IsEmpty() )
+ {
+ return false;
+ }
+
+ aRect.Normalize();
+
+ if( ( mWidth >= 0 ) && ( mHeight >= 0 ) )
+ {
+ return FastIntersects( aRect );
+ }
+ else if ( ( mWidth < 0 ) && ( mHeight < 0 ) )
+ {
+ return ( mX > aRect.mX ) &&
+ ( mY > aRect.mY ) &&
+ ( ( mX + mWidth ) < ( aRect.mX + aRect.mWidth ) ) &&
+ ( ( mY + mHeight ) < ( aRect.mY + aRect.mHeight ) );
+ }
+ else if ( ( mWidth >= 0 ) && ( mHeight < 0 ) )
+ {
+ return ( ( mX + mWidth ) > aRect.mX ) &&
+ ( mY > aRect.mY ) &&
+ ( mX < ( aRect.mX + aRect.mWidth ) ) &&
+ ( ( mY + mHeight ) < ( aRect.mY + aRect.mHeight ) );
+ }
+ else // ( mWidth < 0 ) && ( mHeight >= 0 )
+ {
+ return ( mX > aRect.mX ) &&
+ ( ( mY + mHeight ) > aRect.mY ) &&
+ ( ( mX + mWidth ) < ( aRect.mX + aRect.mWidth ) ) &&
+ ( mY < ( aRect.mY + aRect.mHeight ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::FastIntersects
+// Checks whether two normalized rects are intersecting.
+// -----------------------------------------------------------------------------
+//
+inline bool32 CRect::FastIntersects( const CRect& aRect ) const
+ {
+ return !( IsEmpty() || // Empty rects do not
+ aRect.IsEmpty() || // intersect.
+ !IsNormalized() || // Non-normalized rects are
+ !aRect.IsNormalized() || // ignored.
+ ( mX + mWidth ) <= aRect.mX || // Top or left side of aRect
+ ( mY + mHeight ) <= aRect.mY || // inside of this rect?
+ mX >= ( aRect.mX + aRect.mWidth ) || // Or the other way
+ mY >= ( aRect.mY + aRect.mHeight ) ); // around?
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::Intersection
+// Changes this rect to become the intersection rect of this rect and aRect.
+// -----------------------------------------------------------------------------
+//
+inline void CRect::Intersection( CRect aRect )
+ {
+ Normalize();
+ aRect.Normalize();
+
+ FastIntersection( aRect );
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::FastIntersection
+// Changes this rect to become the intersection rect of this rect and aRect.
+// Works only for normalized rectangles.
+// -----------------------------------------------------------------------------
+//
+inline void CRect::FastIntersection( const CRect& aRect )
+ {
+ // if not intersecting at all, the intersection area is zero.
+ if( !FastIntersects( aRect ) )
+ {
+ mX = 0;
+ mY = 0;
+ mWidth = 0;
+ mHeight = 0;
+ return;
+ }
+ // this rect's left side lies left of aRect's left side
+ if( mX < aRect.mX )
+ {
+ mWidth -= ( aRect.mX - mX ); // adjust this rect's width
+ mX = aRect.mX; // move this rect's left side
+ }
+ // this rect's top side lies above aRect's top side
+ if( mY < aRect.mY )
+ {
+ mHeight -= ( aRect.mY - mY ); // adjust this rect's height
+ mY = aRect.mY; // move this rect's top side
+ }
+ // this rect's right side lies right of aRect's right side
+ if( ( mX + mWidth ) > ( aRect.mX + aRect.mWidth ) )
+ {
+ mWidth = ( aRect.mX + aRect.mWidth ) - mX; // adjust this rect's width
+ }
+ // this rect's bottom side lies below aRect's bottom side
+ if( ( mY + mHeight ) > ( aRect.mY + aRect.mHeight ) )
+ {
+ mHeight = ( aRect.mY + aRect.mHeight ) - mY; // adjust this rect's
+ // height
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::Normalize
+// Makes sure the rect has positive width and height.
+// -----------------------------------------------------------------------------
+//
+inline void CRect::Normalize()
+ {
+ if( mWidth < 0 )
+ {
+ mX += mWidth;
+ mWidth = -mWidth;
+ }
+ if( mHeight < 0 )
+ {
+ mY += mHeight;
+ mHeight = -mHeight;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::IsNormalized
+// Tests whether is rectangle is normalized.
+// -----------------------------------------------------------------------------
+//
+inline bool32 CRect::IsNormalized() const
+ {
+ return ( mWidth >= 0 ) && ( mHeight >= 0 );
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::operator==
+// Logical comparison.
+// -----------------------------------------------------------------------------
+//
+inline bool32 CRect::operator==( const CRect& aRect ) const
+ {
+ return ( mY == aRect.mY ) &&
+ ( mX == aRect.mX ) &&
+ ( mHeight == aRect.mHeight ) &&
+ ( mWidth == aRect.mWidth );
+ }
+
+// -----------------------------------------------------------------------------
+// CRect::operator!=
+// Logical comparison.
+// -----------------------------------------------------------------------------
+//
+inline bool32 CRect::operator!=( const CRect& aRect ) const
+ {
+ // is empty, if either width or height are zero
+ return !( *this == aRect );
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::operator+=
+// Point addition.
+// -----------------------------------------------------------------------------
+//
+inline CRect& CRect::operator+=( const CPoint& aPoint )
+ {
+ mX += aPoint.mX;
+ mY += aPoint.mY;
+ return *this;
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::operator-=
+// Point substraction.
+// -----------------------------------------------------------------------------
+//
+inline CRect& CRect::operator-=( const CPoint& aPoint )
+ {
+ mX -= aPoint.mX;
+ mY -= aPoint.mY;
+ return *this;
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::operator+=
+// Size addition.
+// -----------------------------------------------------------------------------
+//
+inline CRect& CRect::operator+=( const CSize& aSize )
+ {
+ mWidth += aSize.mX;
+ mHeight += aSize.mY;
+ return *this;
+ }
+
+// -----------------------------------------------------------------------------
+// CPoint::operator-=
+// Size substraction.
+// -----------------------------------------------------------------------------
+//
+inline CRect& CRect::operator-=( const CSize& aSize )
+ {
+ mWidth -= aSize.mX;
+ mHeight -= aSize.mY;
+ return *this;
+ }
+
+#endif // OSNTYPES_INL__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_global_api/osn_global_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<api id="3ce5eb61ce2d1af0afe84ad5ab9ffd98" dataversion="1.0">
+<name>osn global api</name>
+<description>osn global api</description>
+<type>c++</type>
+<subsystem>osncore</subsystem>
+<libs><lib name="osncore.lib"/>
+</libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_string_api/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2006 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: File that exports the files belonging to
+: OSN String API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/osn/ustring.h MW_LAYER_PLATFORM_EXPORT_PATH(osn/ustring.h)
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_string_api/inc/osn/ustring.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,449 @@
+/*
+* Copyright (c) 2007 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: String class
+*
+*/
+
+
+
+
+#ifndef USTRING_H
+#define USTRING_H
+
+#include <osn/osndefines.h>
+#include <stdexcept>
+#include <memory>
+#include <string>
+
+using namespace std;
+
+namespace osncore
+{
+
+class UStringImpl;
+
+typedef char Utf8;
+typedef unsigned short Utf16;
+typedef unsigned long Unicode;
+
+/**
+ * @class UString ustring.h "osn/ustring.h"
+ * Class encapsulates utf-8 encoded string. UString has a character based API thus
+ * e.g length will return number of charaters. Unicode operations for utf8 encoded
+ * string can be done using glib unicode manipulation functions and/or using non-member functions for
+ * UString type.
+ *
+ * @lib osncore.lib
+ * @since S60 5.0
+ * @status Draft
+ * @interfaces UString
+ */
+class UString
+ {
+public:
+ /**
+ * UString exception class
+ * @since S60 5.0
+ */
+ class InvalidUtf8: public invalid_argument
+ {
+ public:
+
+ InvalidUtf8(): invalid_argument("invalid"){}
+ /**
+ * Gets the invalid utf string
+ * @since S60 5.0
+ * @return the class name (InvalidUtf8) as a C-style string.
+ */
+ OSN_IMPORT virtual const char* what()const throw();
+ };
+public:
+ /**
+ * Default constructor.
+ */
+ OSN_IMPORT UString();
+
+ /**
+ * Construct a UString as a copy of given null terminated string.
+ *
+ * @since S60 5.0
+ * @exception std::bad_alloc
+ * @param aStr Utf-8 encoded string
+ */
+ OSN_IMPORT explicit UString(const Utf8* aStr);
+
+ /**
+ * Construct a UString as a copy of given string
+ * with byte length of the source buffer.
+ * Because a length is provided, source doesn't need to be null terminated.
+ *
+ * @since S60 5.0
+ * @exception std::bad_alloc
+ * @param aStr Utf-8 encoded string
+ * @param aByteCount Byte count of Utf-8 encoded string
+ */
+ OSN_IMPORT explicit UString(const Utf8* aStr, int aByteCount);
+
+ /**
+ * Construct a UString from unicode code point. If Unicode is invalid,
+ * @since S60 5.0
+ * @exception std::bad_alloc
+ * @param aCodePoint Unicode code point
+ */
+ OSN_IMPORT explicit UString(Unicode aCodePoint);
+
+ /**
+ * UString copy constructor
+ * @since S60 5.0
+ * @exception std::bad_alloc
+ * @param aUString Copy source
+ */
+ OSN_IMPORT UString(const UString& aUString);
+
+ /**
+ * Copy assignment
+ *
+ * @since S60 5.0
+ * @param aRhs Assignment source
+ */
+ OSN_IMPORT UString& operator=(const UString& aRhs);
+
+ /**
+ * Copy assignment
+ *
+ * @since S60 5.0
+ * @param aRhs Assignment source
+ */
+ OSN_IMPORT UString& operator=(const Utf8* aRhs);
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~UString();
+
+ /**
+ * Checks whether string is empty.
+ *
+ * @since S60 5.0
+ * @return True if string doesn't have content.
+ */
+ OSN_IMPORT bool isEmpty()const;
+
+ /**
+ * Returns the length of the string in characters.
+ *
+ * @since S60 5.0
+ * @return Length
+ */
+ OSN_IMPORT long getCharLength()const;
+
+ /**
+ * Returns the length of the string in bytes
+ *
+ * @since S60 5.0
+ * @return Bytes
+ */
+ OSN_IMPORT long getByteLength()const;
+
+ /**
+ * Returns utf8 type string
+ *
+ * @since S60 5.0
+ * @return utf8 type string
+ */
+ OSN_IMPORT const Utf8* getUtf8()const;
+
+ /**
+ * Compares two strings using strcmp(). Note that this is not linguistic comparison nor case insensitive.
+ *
+ * @since S60 5.0
+ * @param aUString UString object to compare
+ * @return < 0 if this compares before aRhs, 0 if they compare equal, > 0 if this compares after aRhs.
+ */
+ OSN_IMPORT int compare(const UString& aUString)const;
+
+ /**
+ * Compares two strings using strcmp(). Note that this is not linguistic comparison nor case insensitive.
+ *
+ * @since S60 5.0
+ * @param aStr String to compare
+ * @return < 0 if this compares before aRhs, 0 if they compare equal, > 0 if this compares after aRhs.
+ */
+ OSN_IMPORT int compare(const Utf8* aStr)const;
+
+ /**
+ * Compares two strings for ordering using the linguistically correct rules for the current locale.
+ * When sorting a large number of strings, it will be significantly faster
+ * to obtain collation keys with g_utf8_collate_key()from libglib and compare the keys
+ * with strcmp() when sorting instead of sorting the original strings.
+ *
+ * @since S60 5.0
+ * @param aUString UString object to compare
+ * @return < 0 if this compares before aRhs, 0 if they compare equal, > 0 if this compares after aRhs.
+ */
+ OSN_IMPORT int compareC(const UString& aUString)const;
+
+ /**
+ * Compares two strings for ordering using the linguistically correct rules for the current locale.
+ * When sorting a large number of strings, it will be significantly faster
+ * to obtain collation keys with g_utf8_collate_key() from libglib and compare the keys
+ * with strcmp() when sorting instead of sorting the original strings.
+ * If aStr is invalid utf8, UString::InvalidUtf8 exception is thrown.
+ *
+ *
+ * @since S60 5.0
+ * @param aStr String to compare
+ * @return < 0 if this compares before aRhs, 0 if they compare equal, > 0 if this compares after aRhs.
+ */
+ OSN_IMPORT int compareC(const Utf8* aStr)const;
+
+
+ /**
+ * Compares two strings using strcmp()
+ *
+ * @since S60 5.0
+ * @param aRhs UString object to compare
+ * @return true if they compare equal.
+ */
+ OSN_IMPORT bool operator==(const UString& aRhs)const;
+
+ /**
+ * Compares two strings using strcmp()
+ *
+ * @since S60 5.0
+ * @param aRhs String to compare
+ * @return true if they compare equal.
+ */
+ OSN_IMPORT bool operator==(const Utf8* aRhs) const;
+
+ /**
+ * Adds a string onto the end of string, expanding it if necessary.
+ *
+ * @since S60 5.0
+ * @exception std::bad_alloc
+ * @param aUString String object to append
+ */
+ OSN_IMPORT void append(const UString& aUString);
+
+ /**
+ * Adds a string onto the end of string, expanding it if necessary.
+ *
+ * @since S60 5.0
+ * @exception std::bad_alloc
+ * @param aStr String to append
+ */
+ OSN_IMPORT void append(const Utf8* aStr);
+
+ /**
+ * Inserts aStr into string, expanding it if necessary.
+ * If aPos is -1, bytes are inserted at the end of the string.
+ *
+ * @since S60 5.0
+ * @exception std::bad_alloc
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @param aPos The character position to insert the copy of the string
+ * @param aStr The string to insert
+ */
+ OSN_IMPORT void insert(long aPos, const Utf8* aStr);
+
+ /**
+ * Inserts aStr into string, expanding it if necessary. Because length is
+ * provided, aStr may contain embedded nulls and need not be null terminated.
+ * If aPos is -1, bytes are inserted at the end of the string.
+ *
+ * @since S60 5.0
+ * @exception std::bad_alloc
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @param aPos The character position to insert the copy of the string
+ * @param aStr The string to insert
+ * @param aCharCount Character count.
+ */
+ OSN_IMPORT void insert(long aPos, const Utf8* aStr, long aCharCount);
+
+ /**
+ * Replace a substring with a given string, expanding it if necessary
+ *
+ * @since S60 5.0
+ * @exception std::bad_alloc
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @param aPos The charater position to replace the string
+ * @param aStr The string to insert
+ */
+ OSN_IMPORT void replace(long aPos, const Utf8* aStr);
+
+ /**
+ * Replace a substring with a given string, expanding it if necessary. Because length is
+ * provided, aStr may contain embedded nulls and need not be null terminated.
+ * If aLength is < 0, length is assumed to be aStr's length.
+ *
+ * @since S60 5.0
+ * @exception std::bad_alloc
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @param aPos The character position to replace the string
+ * @param aStr The string to insert
+ * @param aCharCount Character count.
+ */
+ OSN_IMPORT void replace(long aPos, const Utf8* aStr, long aCharCount);
+
+ /**
+ * Erase a substring
+ *
+ * @since S60 5.0
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @param aPos The character position to start erasing from
+ * @param aCharCount number of characters to erase.
+ */
+ OSN_IMPORT void erase(long aPos, long aCharCount);
+
+ /**
+ * Returns unicode at given position in string
+ *
+ * @since S60 5.0
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @param aPos The requested position
+ */
+ OSN_IMPORT Unicode operator[](long aPos);
+
+ /**
+ * Checks whether string is null.
+ *
+ * @since S60 5.0
+ * @return True if string is null.
+ */
+ OSN_IMPORT bool isNull()const;
+
+private: // data
+
+ /**
+ * Implementation.
+ */
+ auto_ptr<UStringImpl> mImpl;
+ };
+
+
+/**
+ * @class UtfProxy ustring.h "osn/ustring.h"
+ * Proxy class to ease utf encoded string memory management.
+ *
+ * @lib osncore.lib
+ * @since S60 5.0
+ * @status Draft
+ */
+template<typename T>
+class UtfProxy
+ {
+public:
+ /**
+ * Constructor for templated UtfProxy class
+ */
+ explicit UtfProxy(T* aString):iUtf(aString){}
+
+ /**
+ * Destructor
+ */
+ OSN_IMPORT ~UtfProxy();
+
+ /**
+ * Raw data
+ *
+ * @return const pointer to templated class
+ * @since S60 5.0
+ */
+ const T* getUtf()const{return iUtf;}
+private:
+ /**
+ * Default constructor disabled
+ */
+ UtfProxy();
+ /**
+ * Copy constructor disabled
+ */
+ UtfProxy(const UtfProxy& a);
+ /**
+ * Assignment disabled
+ */
+ UtfProxy& operator=(const UtfProxy& a);
+
+private:
+ /**
+ * pointer to templated class
+ */
+ T* iUtf;
+ };
+
+typedef UtfProxy<Utf16> Utf16Proxy;
+typedef UtfProxy<Utf8> Utf8Proxy;
+
+// Non member functions for UString type
+
+/**
+ * Convert a string from UTF-8 to UTF-16. A 0 word will be added to the result after the converted text.
+ *
+ * @since S60 5.0
+ * @param aSourceUtf8 Non empty string object.
+ * @return auto_ptr to proxy object holding converted string.
+ */
+OSN_IMPORT auto_ptr<Utf16Proxy> toUtf16(const UString& aSourceUtf8);
+
+/**
+ * Converts a string to int.If no conversion could be performed, UString::InvalidUtf8 exception is returned.
+ *
+ * @since S60 5.0
+ * @param aSource source string
+ * @return integer
+ */
+OSN_IMPORT int toInt(const UString& aSource);
+
+/**
+ * Normalize a unnormalized text. Characters are decomposed by canonical equivalence e.g û -> u^
+ *
+ * @since S60 5.0
+ * @param aSource source string
+ * @return auto_ptr holding UString object.
+ */
+OSN_IMPORT auto_ptr<UString> normalizeNFD(const UString& aSource);
+
+/**
+ * Normalize a unnormalized text. Does canonical decomposition,followed by canonical composition.
+ * Resulting text is to be a canonical equivalent to the original unnormalized text.
+ *
+ * @since S60 5.0
+ * @param aSource source string
+ * @return auto_ptr holding UString object.
+ */
+OSN_IMPORT auto_ptr<UString> normalizeNFC(const UString& aSource);
+
+/**
+ * Normalize a unnormalized text. Does compatibility decomposition.
+ * Resulting text is to be a compatibility equivalent to the original unnormalized text.
+ *
+ * @since S60 5.0
+ * @param aSource source string
+ * @return auto_ptr holding UString object.
+ */
+OSN_IMPORT auto_ptr<UString> normalizeNFKD(const UString& aSource);
+
+/**
+ * Normalize a unnormalized text. Does compatibility decomposition,followed by compatibility composition.
+ * Resulting text is to be a compatibility equivalent to the original unnormalized text.
+ *
+ * @since S60 5.0
+ * @param aSource source string
+ * @return auto_ptr holding UString object.
+ */
+OSN_IMPORT auto_ptr<UString> normalizeNFKC(const UString& aSource);
+}
+
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmuifw_plat/osn_string_api/osn_string_api.metaxml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<api id="2bf6d4a10c5a142720bc77f4aeef6c87" dataversion="1.0">
+<name>osn string api</name>
+<description>osn string api</description>
+<type>c++</type>
+<subsystem>osncore</subsystem>
+<libs><lib name="osncore.lib"/>
+</libs>
+<release category="domain" sinceversion="5.0"/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/group/alfcontainerwidget.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2007 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 is the project specification file for alfcontainerwidget.
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET alfcontainerwidget.dll
+TARGETTYPE PLUGIN
+UID 0x10009d8d 0x200100FE
+
+
+
+
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+// Common project specification for container widget ECom plugin
+// and static container widget library meant to be linked against EUnit unit tests.
+#include "mmp_common.inc"
+
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY libc.lib
+LIBRARY alfwidgetutils.lib
+LIBRARY alfwidgetmodel.lib
+
+#define ALF_LINK_STDCPP_DLL
+// following include must be after definition
+
+LIBRARY libpthread.lib
+LIBRARY libstdcpp.lib
+LIBRARY alfclient.lib
+LIBRARY osncore.lib
+SOURCEPATH ../src
+LANG SC
+
+START RESOURCE 200100fe.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET alfcontainerwidget.rsc
+#endif
+END
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/group/alfcontainerwidgetstatic.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2007 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: Project definition file for project alfcontainerwidgetstatic
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET alfcontainerwidgetstatic.lib
+TARGETTYPE lib
+UID 0x00000000 0x0332F1CB // Random UID
+
+
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+// Common project specification for container widget ECom plugin
+// and static container widget library meant to be linked against EUnit unit tests.
+#include "mmp_common.inc"
+
+#define ALF_LINK_STDCPP_DLL
+// following include must be after definition
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2007 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 file provides the information required for building the
+* whole of a alfcontainerwidget.
+*
+*/
+
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+alfcontainerwidget.mmp
+
+PRJ_TESTEXPORTS
+
+
+PRJ_TESTMMPFILES
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/group/mmp_common.inc Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,20 @@
+/*
+============================================================================
+ Name : mmp_common.inc
+ Author :
+ Copyright :
+ Description : Common project specification for container widget ECom plugin
+ and static container widget library meant to be linked against EUnit unit tests.
+============================================================================
+*/
+
+USERINCLUDE ../inc
+MW_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH ../src
+SOURCE alfcontainerwidgetfactoryplugin.cpp
+SOURCE alfcontainerwidget.cpp
+SOURCE alfcontainerwidgetexception.cpp
+SOURCE alfcontainercontrol.cpp
+
+USERINCLUDE ../../../inc
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/inc/alfcontainercontrol.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2007 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: Container widget control class.
+*
+*/
+
+
+#ifndef ALFCONTAINERCONTROL_H_
+#define ALFCONTAINERCONTROL_H_
+
+#include <alf/alfwidgetcontrol.h>
+
+namespace Alf
+{
+
+/**
+ * Control class of the container widget.
+ *
+ * This class implements logic of the container widget.
+ *
+ * Container widget automatically creates an AlfContainerControl object
+ * for it's control. It is not possible to construct this control through
+ * AlfContainerWidgetFactoryPlugin.
+ */
+class AlfContainerControl : public CAlfWidgetControl
+{
+public:
+
+ /**
+ * Default constructor
+ *
+ * @param aEnv UI Accelerator Toolkit environment where this container widget
+ * is created.
+ */
+ AlfContainerControl(CAlfEnv& aEnv);
+
+ /**
+ * Default destructor
+ */
+ virtual ~AlfContainerControl();
+
+ /**
+ * Handles events sent to widget control.
+ *
+ * @since S60 ?S60_version
+ * @param aEvent The event to be handled.
+ * @return True if the event is handled, false elsevhere.
+ */
+ virtual AlfEventStatus handleEvent( const TAlfEvent& aEvent );
+};
+
+}
+
+#endif /*ALFCONTAINERCONTROL_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/inc/alfcontainerwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,267 @@
+/*
+* Copyright (c) 2007 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: Widget interface with utilities for container widget.
+*
+*/
+
+
+#ifndef ALFCONTAINERWIDGET_H
+#define ALFCONTAINERWIDGET_H
+
+#include "alf/ialfcontainerwidget.h"
+#include <alf/alflayout.h>
+
+// Forward declarations
+class CAlfEnv;
+
+namespace Alf
+{
+
+// Forward declarations
+class AlfWidget;
+
+/**
+ * Container widget implementation.
+ *
+ * Container widget can be used to contain other widgets in an arbitrary layout.
+ * To create a container widget see CAlfContainerWidgetFactoryPlugin class.
+ *
+ * Container widget creates a control group with ID 0 and stores it's control
+ * in it. It will also append all added widget controls into the same control group
+ * unless the added widget control is added to its own control group.
+ */
+class AlfContainerWidget : public IAlfContainerWidget
+{
+public:
+
+ /**
+ * Default constructor.
+ *
+ * Use CAlfContainerWidgetFactoryPlugin::CreateProduct() to instantiate a container
+ * widget.
+ *
+ * @param aWidgetName The widget name or ID to be assigned to this widget.
+ * @param aContainer Container widget in which this container is contained.
+ * @param aEnv UI Accelerator Environment instance to which the widget is created.
+ * @param aNode Runtime declaration of the widget
+ * @param aFilePath Path to XML file describing the presentation of the widget
+ */
+ AlfContainerWidget( const char* aWidgetName,
+ IAlfContainerWidget& aContainer,
+ CAlfEnv& aEnv,
+ DuiNode* aNode,
+ const char* aFilePath);
+
+ /**
+ * Default destructor.
+ */
+ virtual ~AlfContainerWidget();
+
+ // From Alf::IAlfWidget base class
+
+ /**
+ * Getter for the control. The ownership is not passed.
+ *
+ * @since S60 5.0
+ * @return The control of this widget, or NULL if the control is not specified.
+ */
+ virtual CAlfWidgetControl* control() const;
+
+ /**
+ * getter for the parent container. The ownership is not passed.
+ * @return the parent container or NULL if the widget is the root-widget.
+ */
+ virtual IAlfContainerWidget* parent() const;
+
+ /**
+ * Setter for the control. The control is owned by the Alfred environment.
+ * The previously set control can be destroyed when new control is set.
+ *
+ * The set control is added to the control group of this container widget.
+ * The set control is removed from it's previous control group.
+ *
+ * @since S60 5.0
+ * @param aControl The control for this widget.
+ * @param aDeletePreviousControl A boolean to indicate whether the previously set control
+ * is to be destroyed when this method is called.
+ */
+ virtual void setControl(CAlfWidgetControl* aControl, bool aDeletePreviousControl = true);
+
+ /**
+ * Getter for the model. The ownership is not passed.
+ *
+ * @since S60 5.0
+ * @return The model of this widget, or NULL if the model is not specified.
+ */
+ virtual IAlfModel* model();
+
+ /**
+ * Setter for the model. Ownership is passed and the old model is released.
+ *
+ * @since S60 5.0
+ * @param aModel The model for this widget.
+ * @param aTakeOwnership Whether takes ownership of model or not
+ */
+ virtual void setModel(IAlfModel* aModel, bool aTakeOwnership = true);
+
+ /**
+ * Get the name of the widget instance.
+ *
+ * @since S60 5.0
+ * @return Widget name
+ */
+ virtual const char* widgetName() const;
+
+ /**
+ * Sets/Releases the Focus from child widget of container.
+ * Does not set the actual focused status in roster.
+ *
+ * @since S60 5.0
+ * @param aFocus boolean value for focused status
+ */
+ virtual void setChildFocus(bool aFocus);
+
+ /**
+ * Sets the presentation for the widget using presentation XML file.
+ * Destroys any existing presentation.
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @exception AlfWidgetException if no visualization node available
+ * in Presentation XML or if no control
+ * is associated with the widget.
+ * @exception bad_alloc
+ * @since S60 ?S60_version
+ * @return void.
+ */
+ virtual void setPresentation(const char* aFilePath);
+
+ // From Alf::IAlfContainerWidget base class
+
+ /**
+ * Returns total number of widgets contained by this container.
+ *
+ * @return int Total number of widgets.
+ */
+ virtual int widgetCount() const;
+
+ /**
+ * Adds a child widget to the container.
+ *
+ * Ownership of the widget is transferred to this container
+ * object.
+ *
+ * The control of the added widget is appended to the control group of
+ * this container widget unless the control already is appended to
+ * another control group.
+ *
+ * @param aWidget Child widget to be added to container.
+ */
+ virtual void addWidget(IAlfWidget& aWidget);
+
+ /**
+ * Returns child widget at given index.
+ *
+ * If index is not found returns null.
+ *
+ * @param aIndex Index of widget to be returned.
+ * @return Widget at given index or null if not found.
+ */
+ virtual IAlfWidget* getWidget(int aIndex) const;
+
+ /**
+ * Returns the child index, when given the child widget.
+ *
+ * @param aWidget child widget, which index is returned
+ * @return the index of the child widget, or -1, if widget is not child of this container.
+ */
+ virtual int getWidgetIndex(IAlfWidget& aWidget) const;
+
+ /**
+ * Removes the child widget from given index.
+ *
+ * This will destroy the widget object at the given index.
+ *
+ * @param aIndex Index from which widget has to be removed.
+ */
+ virtual void removeWidget(int aIndex);
+
+ /**
+ * Sets the base layout of container widget.
+ *
+ * @param aLayout New base layout of container widegt.
+ */
+ virtual void applyLayout(IAlfLayoutManager& aLayout);
+
+ // From Alf::IAlfInterfaceBase base class
+
+ /**
+ * Interface getter.
+ * Derived classes should always call the base class method
+ * from the overridden MakeInterface.
+ *
+ * @since S60 5.0
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+private:
+ /**
+ * Constructs widget from declaration.
+ *
+ * @param aNode declaration node.
+ */
+ void constructComponentsFromNode();
+
+ /**
+ * Constructs widget from declaration.
+ *
+ * @param aNode declaration node.
+ */
+ void processTreeRecursively();
+
+ /**
+ * Constructs widget using the presentation XML.
+ *
+ * @param aFilePath Path to XML file describing the presentation of the widget.
+ */
+ void constructFromPresentationXML(const char *aFilePath);
+
+ /**
+ * Constructs control for widget
+ *
+ */
+ void constructDefault();
+
+ /**
+ * Sets default layout mgr.
+ */
+ void setDefaultLayoutManager();
+private:
+
+ /** Pointer to the adaptee AlfWidget - object. */
+ auto_ptr<AlfWidget> mWidget;
+
+ /**
+ * UI Accelerator Environment where this widget is used.
+ * Not owned.
+ */
+ CAlfEnv& mEnv;
+
+};
+
+}
+
+#endif /*ALFCONTAINERWIDGET_H*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/inc/alfcontainerwidgetexception.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2007 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: Container widget exception class.
+*
+*/
+
+
+#ifndef ALFCONTAINERWIDGETEXCEPTION_H
+#define ALFCONTAINERWIDGETEXCEPTION_H
+
+// INCLUDES
+#include <alf/alfexception.h>
+#include <osn/ustring.h>
+
+namespace Alf
+ {
+
+/**
+ * Error codes used with AlfContainerWidgetException.
+ *
+ * There is an offset in AlfContainerWidgetException error codes, so that
+ * AlfContainerWidget specific exceptions can be separated from
+ * osncore::AlfException base exceptions and exceptions of other widgets.
+ */
+enum TAlfContainerWidgetErrorCode
+ {
+ /**
+ * Error occured in construction or initialization of the container
+ * widget.
+ */
+ EInitializationError = 500
+ };
+
+/**
+ * AlfContainerWidgetException is a base class for all container widget
+ * exceptions.
+ *
+ */
+class AlfContainerWidgetException : public osncore::AlfException
+ {
+public:
+ // Constructors and destructor
+
+ /**
+ * Constructor with AlfContainerWidget specific error code.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfContainerWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ */
+ AlfContainerWidgetException(int aError) throw();
+
+ /**
+ * Constructor with AlfContainerWidget specific error code
+ * and additional information.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfContainerWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ * @param aInfo Optional additional information or NULL.
+ */
+ AlfContainerWidgetException(int aError, const char* aInfo) throw();
+
+ /**
+ * Constructor with AlfContainerWidget specific error code,
+ * additional information, source file and line of code.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfContainerWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ * @param aInfo Optional additional information or NULL.
+ * @param aFileAndLine Optional file and line information or NULL.
+ */
+ AlfContainerWidgetException(int aError, const char* aInfo, const char* aFileAndLine) throw();
+
+ /**
+ * Default destructor.
+ */
+ virtual ~AlfContainerWidgetException() throw();
+
+ /**
+ * Returns the description of the exception.
+ * @ret The description of the exception.
+ */
+ const char* what() const throw();
+
+private:
+
+ /**
+ * Error description
+ */
+ osncore::UString mDescription;
+
+ };
+
+ } // Namespace Alf
+
+#endif // ALFCONTAINERWIDGETEXCEPTION_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/inc/alfcontainerwidgetfactoryplugin.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2007 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: Factory plugin implementation that can construct container widgets.
+*
+*/
+
+
+#ifndef ALFCONTAINERWIDGETFACTORYPLUGIN_H
+#define ALFCONTAINERWIDGETFACTORYPLUGIN_H
+
+// INCLUDES
+#include <alf/ialffactoryplugin.h>
+
+namespace Alf
+{
+
+/**
+ * AlfContainerWidgetFactoryPlugin is a widget factory plugin implementation
+ * that can be used to create container widgets.
+ *
+ * Can be used to create container widgets and associated products.
+ */
+class AlfContainerWidgetFactoryPlugin : public IAlfFactoryPlugin
+ {
+public:
+ // Constructors and destructor
+
+ /**
+ * Default Symbian constructor to create the factory plugin.
+ */
+ static AlfContainerWidgetFactoryPlugin* newL();
+
+ // From base class MAlfPluginFactory
+
+ /**
+ * Create container widget factory product.
+ * @since Series 60 5.0
+ * @param aProduct Product to create.
+ * @param aInitData Initialization data for product
+ * @return Instance or NULL
+ */
+ IAlfInterfaceBase* createProduct( const char* aProduct, void* aInitData );
+
+ /**
+ * Count available products this factory can produce.
+ *
+ * @since S60 5.0
+ * @return Product count
+ */
+ int productCount() const;
+
+ /**
+ * Fetch product info by index
+ *
+ * @param aIndex List index
+ * @since S60 5.0
+ * @return Descriptor describing product
+ */
+ const char* productInfo(int aIndex) const;
+
+ // From base class IAlfInterfaceBase
+
+ /**
+ * Creates interface based on the given type.
+ *
+ * @since Series 60 5.0
+ * @param aType Interface type to create.
+ * @return Requested interface.
+ */
+ IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+ };
+
+} // Namespace Alf
+
+#endif // ALFCONTAINERWIDGETFACTORYPLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/src/200100fe.rss Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 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: container widget rss file.
+*
+*/
+
+#include <ecom/registryinfo.rh>
+#include "alf/alfecompluginfactoryuid.rh"
+
+
+RESOURCE REGISTRY_INFO theInfo
+{
+dll_uid = 0x200100FE;
+interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KFactoryPluginUid;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x200100FF;
+ version_no = 1;
+ display_name = "";
+ default_data = "container";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/src/alfcontainercontrol.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2007 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: Container widget control class.
+*
+*/
+
+
+// Local Includes
+#include "../inc/alfcontainercontrol.h"
+
+// AlfClient Includes
+#include <alf/alfevent.h>
+
+// Widget Model
+#include <alf/alfwidgetevents.h>
+
+using namespace Alf;
+
+AlfContainerControl::AlfContainerControl(CAlfEnv& aEnv)
+ : CAlfWidgetControl(aEnv)
+ {
+ }
+
+AlfContainerControl::~AlfContainerControl()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// From base class IAlfWidgetControl
+// Handles events sent to widget control.
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus AlfContainerControl::handleEvent( const TAlfEvent& aEvent )
+ {
+ AlfEventStatus ret = CAlfWidgetControl::handleEvent(aEvent);
+
+ if(ret == EEventNotHandled && aEvent.IsKeyEvent())
+ {
+ if(aEvent.KeyEvent().iScanCode == EStdKeyRightArrow ||
+ aEvent.KeyEvent().iScanCode == EStdKeyDownArrow )
+ {
+ if(aEvent.Code() == EEventKey)
+ {
+ TAlfEvent focusNext(EEventFocusNextWidget);
+ return CAlfWidgetControl::processEvent(focusNext);
+ }
+ }
+ else if(aEvent.KeyEvent().iScanCode == EStdKeyLeftArrow ||
+ aEvent.KeyEvent().iScanCode == EStdKeyUpArrow)
+ {
+ if(aEvent.Code() == EEventKey)
+ {
+ TAlfEvent focusPrevious(EEventFocusPreviousWidget);
+ return CAlfWidgetControl::processEvent(focusPrevious);
+ }
+ }
+ }
+
+ return ret;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/src/alfcontainerwidget.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 2007 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: Widget interface with utilities for container widget.
+*
+*/
+
+
+#include "alfcontainerwidget.h"
+#include "alfcontainercontrol.h"
+#include "alfcontainerwidgetexception.h"
+#include <libc/stdio.h>
+#include <libc/string.h>
+#include "alf/alfwidget.h"
+#include <alf/alfenv.h>
+#include <alf/alfmetric.h>
+#include <alf/alfgridlayoutmanager.h>
+#include <alf/ialfgridlayoutpolicy.h>
+
+#include "alf/attrproperty.h"
+
+namespace Alf
+{
+
+AlfContainerWidget::AlfContainerWidget(
+ const char* aWidgetName,
+ IAlfContainerWidget& aContainer,
+ CAlfEnv& aEnv,
+ DuiNode* /*aNode*/,
+ const char* /*aFilePath*/)
+ : mWidget(0),
+ mEnv(aEnv)
+ {
+ mWidget.reset(new (EMM) AlfWidget(aWidgetName, aContainer, aEnv));
+
+
+
+ constructDefault();
+ setDefaultLayoutManager();
+
+ }
+
+AlfContainerWidget::~AlfContainerWidget()
+ {
+ }
+
+CAlfWidgetControl* AlfContainerWidget::control() const
+ {
+ return mWidget->control();
+ }
+
+IAlfContainerWidget* AlfContainerWidget::parent() const
+ {
+ return mWidget->parent();
+ }
+
+void AlfContainerWidget::setControl(CAlfWidgetControl* aControl, bool aDeletePreviousControl)
+ {
+ mWidget->setControl(aControl, aDeletePreviousControl);
+ }
+
+IAlfModel* AlfContainerWidget::model()
+ {
+ return 0;
+ }
+
+void AlfContainerWidget::setModel(IAlfModel* /*aModel*/, bool /*aTakeOwnership*/)
+ {
+
+ }
+
+const char* AlfContainerWidget::widgetName() const
+ {
+ return mWidget->widgetName();
+ }
+
+void AlfContainerWidget::setChildFocus(bool /*aFocus*/)
+ {
+
+ }
+
+
+//---------------------------------------------------------------------------
+// Creates the presentation for the widget from XML. Destroys any existing
+// presentation.
+//---------------------------------------------------------------------------
+//
+void AlfContainerWidget::setPresentation (const char* aFilePath)
+ {
+ if(mWidget.get())
+ {
+ mWidget->setPresentation(aFilePath);
+ }
+ }
+
+int AlfContainerWidget::widgetCount() const
+ {
+ return mWidget->widgetCount();
+ }
+
+void AlfContainerWidget::addWidget(IAlfWidget& aWidget)
+ {
+ mWidget->addWidget(aWidget);
+ }
+
+IAlfWidget* AlfContainerWidget::getWidget(int aIndex) const
+ {
+ return mWidget->getWidget(aIndex);
+ }
+
+int AlfContainerWidget::getWidgetIndex(IAlfWidget& aWidget) const
+ {
+ return mWidget->getWidgetIndex(aWidget);
+ }
+
+void AlfContainerWidget::removeWidget(int aIndex)
+ {
+ mWidget->removeWidget(aIndex);
+ }
+
+void AlfContainerWidget::applyLayout(IAlfLayoutManager& aLayout)
+ {
+ mWidget->applyLayout(aLayout);
+ }
+
+IAlfInterfaceBase* AlfContainerWidget::makeInterface(const IfId& aType)
+ {
+ // Type cast to IAlfWidget
+ if(!strcmp(aType.mImplementationId, IAlfWidget::type().mImplementationId))
+ {
+ return static_cast<IAlfWidget*>(this);
+ }
+
+ // Type cast to IAlfContainerWidget
+ if(!strcmp(aType.mImplementationId, IAlfContainerWidget::type().mImplementationId))
+ {
+ return static_cast<IAlfContainerWidget*>(this);
+ }
+
+ return mWidget->makeInterface ( aType );
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfContainerWidget::constructDefault()
+ {
+ // Create control for the container widget
+ auto_ptr<AlfContainerControl> control(new (EMM) AlfContainerControl(mEnv));
+ setControl(control.get());
+ control.release();
+
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfContainerWidget::setDefaultLayoutManager()
+ {
+ // Default layout manager provided by the container widget
+ auto_ptr<AlfGridLayoutManager> layoutManager(new (EMM) AlfGridLayoutManager());
+ this->applyLayout(*layoutManager.get());
+ AlfGridLayoutManager* lm = layoutManager.release();
+
+ IAlfGridLayoutPolicy* gridPolicy = IAlfInterfaceBase::makeInterface<IAlfGridLayoutPolicy>(lm);
+ gridPolicy->fillWeights(IAlfGridLayoutPolicy::EGridDimensionColumn, 1, TAlfMetric(1, EAlfUnitWeight));
+ gridPolicy->fillWeights(IAlfGridLayoutPolicy::EGridDimensionRow, 1, TAlfMetric(1, EAlfUnitWeight));
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfContainerWidget::constructComponentsFromNode()
+ {
+ constructDefault();
+
+ //check, if the layoutmanager is already set.
+ IAlfLayoutManager* layoutManager = IAlfInterfaceBase::makeInterface<IAlfLayoutManager>(control());
+ if (!layoutManager)
+ {
+ setDefaultLayoutManager();
+ }
+ }
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfContainerWidget::processTreeRecursively()
+ {
+ }
+
+//---------------------------------------------------------------------------
+//---------------------------------------------------------------------------
+//
+void AlfContainerWidget::constructFromPresentationXML(const char* /*aFilePath*/ )
+ {
+ constructDefault();
+ setDefaultLayoutManager();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/src/alfcontainerwidgetexception.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2007 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: Container widget exception class.
+*
+*/
+
+
+#include "alfcontainerwidgetexception.h"
+
+using namespace Alf;
+
+AlfContainerWidgetException::AlfContainerWidgetException(int aError) throw()
+ : osncore::AlfException(aError)
+ {
+ }
+
+AlfContainerWidgetException::AlfContainerWidgetException(int aError, const char* aInfo) throw()
+ : osncore::AlfException(aError, aInfo)
+ {
+ mDescription = osncore::UString(aInfo);
+ }
+
+AlfContainerWidgetException::AlfContainerWidgetException(int aError, const char* aInfo, const char* aFileAndLine) throw()
+ : osncore::AlfException(aError, aInfo, aFileAndLine)
+ {
+ mDescription = osncore::UString(aInfo);
+ mDescription.append(aFileAndLine);
+ }
+
+AlfContainerWidgetException::~AlfContainerWidgetException() throw()
+ {
+ }
+
+const char* AlfContainerWidgetException::what() const throw()
+ {
+ return mDescription.getUtf8();
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfcontainerwidget/src/alfcontainerwidgetfactoryplugin.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2007 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: AlfContainerWidgetFactoryPlugin implementation
+*
+*/
+
+#include <osn/osnnew.h>
+#include <ecom/implementationproxy.h>
+#include "alf/ialfcontainerwidget.h"
+#include "alf/alfwidget.h"
+#include <libc/string.h>
+#include "alfcontainerwidget.h"
+#include "alfcontainerwidgetexception.h"
+#include "alfcontainerwidgetfactoryplugin.h"
+
+using namespace Alf;
+
+// UID of the container widget factory plugin.
+const TInt KContainerWidgetFactoryPluginUid = {0x200100FF};
+
+// Amount of products produced by this factory.
+const int KProductCount = 1;
+
+AlfContainerWidgetFactoryPlugin* AlfContainerWidgetFactoryPlugin::newL()
+ {
+ return new (ELeave) AlfContainerWidgetFactoryPlugin();
+ }
+
+IAlfInterfaceBase* AlfContainerWidgetFactoryPlugin::createProduct(const char* aProduct, void* aInitData)
+ {
+ IAlfInterfaceBase* ret(0);
+
+ if(!strcmp(aProduct, IAlfContainerWidget::type().mImplementationId))
+ {
+ // Typecast the initialization data
+ AlfWidgetInitData* initData = (AlfWidgetInitData*) aInitData;
+
+ // Throw exception if init data is null
+ if(initData == 0)
+ {
+ ALF_THROW(AlfContainerWidgetException, EInitializationError, "Container widget initialization data was NULL.");
+ }
+
+ // Assert that widget id in the initialization data is correct.
+ if(initData->mWidgetId == 0)
+ {
+ ALF_THROW(AlfContainerWidgetException, EInitializationError, "Widget ID was NULL.");
+ }
+
+ // Assert that the UI Accelerator Toolkit Environment in the initialization data is correct.
+ if(initData->mEnv == 0)
+ {
+ ALF_THROW(AlfContainerWidgetException, EInitializationError, "Environment instance was NULL.");
+ }
+
+ // Assert that container widget pointer in the initialization data is correct.
+ if(initData->mContainerWidget == 0)
+ {
+ ALF_THROW(AlfContainerWidgetException, EInitializationError, "Container widget instance was NULL.");
+ }
+
+ // Create container widget
+ ret = new (EMM) AlfContainerWidget(
+ initData->mWidgetId, *initData->mContainerWidget, *initData->mEnv, initData->mNode, initData->mFilePath);
+ }
+
+ return ret;
+ }
+
+int AlfContainerWidgetFactoryPlugin::productCount() const
+ {
+ return KProductCount;
+ }
+
+const char* AlfContainerWidgetFactoryPlugin::productInfo(int aIndex) const
+ {
+ switch(aIndex)
+ {
+ case 0: return ialfcontainerwidget::ident.mImplementationId;
+ default: break;
+ }
+
+ return 0;
+ }
+
+IAlfInterfaceBase* AlfContainerWidgetFactoryPlugin::makeInterface(const IfId& aType)
+ {
+ if(!strcmp(aType.mImplementationId, IAlfFactoryPlugin::type().mImplementationId))
+ {
+ return static_cast<IAlfFactoryPlugin*>(this);
+ }
+
+ return 0;
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( KContainerWidgetFactoryPluginUid,
+ AlfContainerWidgetFactoryPlugin::newL )
+ };
+
+// Entry point for ECom architecture to resolve the instantiation method pointer
+// for a given implementation UID.
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+ return ImplementationTable;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/group/alfscrollbarwidget.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2007 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: Project definition file
+*
+*/
+#include <platform_paths.hrh>
+
+#define ALF_LINK_STDCPP_DLL
+
+TARGET alfscrollbarwidget.dll
+TARGETTYPE PLUGIN
+
+UID 0x10009d8d 0x20010105
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+
+SOURCEPATH ../src
+SOURCE alfscrollbarwidgetfactoryplugin.cpp
+SOURCE alfscrollbarwidget.cpp
+SOURCE alfscrollbarcontrol.cpp
+SOURCE alfscrollbarmodel.cpp
+SOURCE alfscrollbardefaultbaseelement.cpp
+SOURCE alfscrollbarlongtaptimer.cpp
+
+
+MW_LAYER_SYSTEMINCLUDE
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+USERINCLUDE ../inc
+USERINCLUDE ../../../inc
+
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+LIBRARY osncore.lib
+LIBRARY alfclient.lib
+LIBRARY alfwidgetmodel.lib
+LIBRARY alfwidgetutils.lib
+LIBRARY charconv.lib
+LIBRARY libc.lib
+LIBRARY cone.lib
+LIBRARY gdi.lib
+LIBRARY libpthread.lib
+LIBRARY aknlayout2hierarchy.lib
+LIBRARY aknlayout2scalable.lib
+LIBRARY avkon.lib
+LIBRARY cdlengine.lib
+LIBRARY estlib.lib
+LIBRARY libstdcpp.lib
+
+#ifdef RD_TACTILE_FEEDBACK
+LIBRARY touchfeedback.lib
+#endif // RD_TACTILE_FEEDBACK
+
+LANG SC
+START RESOURCE 20010105.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET alfscrollbarwidget.rsc
+#endif
+END
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2009 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: Build information file for scrollbar widget
+*
+*/
+
+#include <platform_paths.hrh>
+
+
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+//../internal/tsrc/TestScrollBar/rom/testscrollbar.iby CORE_MW_LAYER_IBY_EXPORT_PATH(testscrollbar.iby)
+PRJ_MMPFILES
+alfscrollbarwidget.mmp
+
+
+PRJ_TESTMMPFILES
+
+PRJ_TESTEXPORTS
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/inc/alfscrollbarcontrol.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2009 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: Control interface with utilities for scrollbar widget.
+*
+*/
+
+#ifndef ALF_SCROLLBARCONTROL_H
+#define ALF_SCROLLBARCONTROL_H
+
+//WidgetModel Includes
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfwidgeteventhandler.h>
+#include <touchfeedback.h>
+
+//Osn Includes
+#include <osn/ustring.h>
+
+//Internal Includes
+
+using namespace osncore;
+using namespace Alf;
+
+// Forward declarations
+//class TAlfCustomEventCommand;
+
+const float roundOff = 0.5;
+namespace Alf
+ {
+// Forward declaration
+class AlfScrollBarControl : public CAlfWidgetControl
+ {
+public:
+
+ /**
+ * Constructor.
+ */
+ AlfScrollBarControl ( CAlfEnv& aEnv );
+
+ /**
+ * Class Destructor.
+ * @since S60 ?S60_version
+ */
+ virtual ~AlfScrollBarControl();
+
+ /**
+ * Sets whether or not tactile feedback is enabled.
+ *
+ * @param aEnabled Whether or not tactile is enabled.
+ */
+ void EnableTactileFeedback( bool aEnabled );
+
+ /**
+ * Generates the feedback based on the events recieved
+ *
+ */
+ void TactileEffectOnTouchandHold();
+
+ /**
+ * Generates the feedback based on the events recieved
+ *
+ * @param aEvent Events recieved by the widget on Drag
+ */
+ void TactileEffectOnDrag(TAlfEvent& aEvent);
+
+ /**
+ * Generates the feedback based on the thumb release
+ * or drag on thumb is stopped
+ */
+ void TactileEffectOnRelease();
+
+
+ /**
+ * Returns the state of tactile feedback whether it is enabled/disabled.
+ *
+ */
+ bool IsTactileFeedbackEnabled();
+
+ // From Base class CAlfControl
+
+ /**
+ * Notifies the owner that the layout of a visual has been recalculated.
+ * Called only when the EAlfVisualFlagLayoutUpdateNotification flag has
+ * been set for the visual.
+ *
+ * @param aVisual Visual that has been laid out.
+ */
+ void VisualLayoutUpdated ( CAlfVisual& aVisual );
+
+ /**
+ * Returns top level layout. Returns NULL if this control does not
+ * implement the IAlfHostAPI interface or if there is no base layout.
+ *
+ * @return Pointer to top level layout, or NULL if not available.
+ */
+ CAlfLayout* ContainerLayout ( const CAlfControl* aConnected ) const;
+
+ // From base class CAlfWidgetControl
+
+ /**
+ * @see IAlfWidgetControl
+ */
+ AlfEventStatus handleEvent( const TAlfEvent& aEvent );
+
+
+private:
+
+ /**
+ * Rounds float to int
+ *
+ * @param aFloatValue float value
+ * @return int
+ */
+ inline int roundFloatToInt ( float aFloatValue )
+ {
+ return(int)(aFloatValue + roundOff);
+ }
+
+private:
+
+ /**
+ * Default contructor
+ */
+ AlfScrollBarControl();
+
+ /**
+ * height of the Layout.
+ */
+ int mLayoutHeight;
+
+ /**
+ * width of the Layout.
+ */
+ int mLayoutWidth;
+
+ /**
+ * tactile is enabled or not.
+ */
+ bool mEnableTactile;
+
+ /**
+ * Tactile effect for drag started
+ */
+ bool mDragTactileFeedbackStarted;
+
+ /**
+ * Tactile feedback instance
+ */
+ MTouchFeedback *mTactilefdbInstance;
+
+ }; // class AlfScrollBarControl
+
+ } // namespace Alf
+
+#endif //ALF_SCROLLBARCONTROL_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/inc/alfscrollbardefaultbaseelement.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,451 @@
+/*
+* Copyright (c) 2007 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: Header file for presentation elements.
+ *
+*/
+
+
+#ifndef ALF_SCROLLBAR_DEFAULT_BASEELEMENT_H
+#define ALF_SCROLLBAR_DEFAULT_BASEELEMENT_H
+
+//INCLUDES
+#include "alf/alfelement.h"
+#include <alf/alflayout.h>
+#include <alf/alfimagevisual.h>
+
+#include <alf/ialfwidgeteventhandler.h>
+#include <alf/ialfscrollbardefaultbaseelement.h>
+#include "ialfscrollbarbaseelementinternal.h"
+
+#include "alfscrollbarmodel.h"
+#include <AknLayout2Def.h>
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+enum TOperation
+ {
+ ENop, // Nothing is going on.
+ EMoveItem // Item is begin moved.
+ };
+// Forward declarations
+class IAlfWidgetEventHandler;
+class CAlfWidgetControl;
+class AlfScrollBarLongTapTimer;
+
+/**
+ * Default Base Element of the Scrollbar.
+ */
+class AlfScrollBarDefaultBaseElement :
+ public IAlfScrollBarDefaultBaseElement,
+ public AlfElement,
+ public IAlfWidgetEventHandler,
+ public IAlfScrollBarBaseElementInternal
+ {
+public:
+
+ /**
+ * Constructor
+ * @param aControl Widget control.
+ * @param aName Name of the item element.
+ * @param aCustomData .
+ * @param mNode .
+ * @since S60 ?S60_version
+ */
+ AlfScrollBarDefaultBaseElement (
+ CAlfWidgetControl& aControl,
+ const char* aName,
+ DuiNode* mNode = NULL,
+ AlfCustomInitDataBase* aCustomData=NULL);
+
+ /**
+ * Destructor
+ */
+ virtual ~AlfScrollBarDefaultBaseElement();
+
+ //--------------------------------------------------------------------------
+ // APIs from the IAlfScrollBarDefaultBaseElement for controlling the
+ // visualization of the scrollbar
+ //--------------------------------------------------------------------------
+
+ /**
+ * Sets the animation time for the thumb movement.
+ * Controls the movement of the thumb in the context of scroll
+ * @since S60 ?S60_version
+ * @param Animation time in milliseconds
+ */
+ void setThumbAnimationTime(int aTime);
+
+ /**
+ * Gets the Thumb animation time.
+ * @since S60 ?S60_version
+ * @return Animation time.
+ */
+ int getThumbAnimationTime() const;
+
+ /**
+ * Sets the Opacity of thumb. This is relative to widget opacity.
+ * Default value is 1.0. The value of aOpacity should be between 0.0 to 1.0
+ * @since S60 ?S60_version
+ * @param Opacity of the thumb
+ */
+ void setThumbOpacity(float aOpacity);
+
+ /**
+ * Gets the Opacity of thumb.
+ * @since S60 ?S60_version
+ * @return: Thumb opacity
+ */
+ float getThumbOpacity() const;
+
+ /**
+ * Sets the Opacity of widget.
+ * Default value of scrollbar opacity is 1.0.
+ *
+ * @param aOpacity Opacity of the scrollbar. The value should be between 0.0
+ * to 1.0.
+ *
+ * @exception AlfException
+ */
+ void setOpacity(float aOpacity);
+
+ /**
+ * Gets the Opacity of widget.
+ *
+ * @return: Thumb opacity
+ */
+ float getOpacity() const;
+
+ //--------------------------------------------------------------------------
+ // APIs from the IAlfScrollBarBaseElement
+ //--------------------------------------------------------------------------
+
+
+
+ //--------------------------------------------------------------------------
+ // Overriden Apis from IAlfWidgetEventHandlers
+ //--------------------------------------------------------------------------
+ //
+
+ /**
+ * Used to identify event handlers that are capable of handling
+ * a specified key or custom event.
+ * Pointer event handlers cannot be identified directly,
+ * since they are dependent on the presentation.
+ * Therefore, pointer event handlers should be associated with
+ * a custom event ID that can be used to simulate the actual pointer event.
+ * @since S60 ?S60_version
+ * @param aEvent The event.
+ * @param aControl
+ * @return <code>ETrue</code> if the event can be processed.
+ * Otherwise <code>EFalse</code>.
+ */
+ bool accept(CAlfWidgetControl& aControl, const TAlfEvent& aEvent) const;
+
+ /**
+ * @see IAlfWidgetEventHandler
+ */
+ virtual AlfEventHandlerType eventHandlerType();
+
+ /**
+ * @see IAlfWidgetEventHandler
+ */
+ virtual AlfEventHandlerExecutionPhase eventExecutionPhase();
+
+ /**
+ * Called when an input event is being offered to this event handler.
+ * The return value is used to indicate if the event was processed.
+ * Processed events may not be offered to other event handlers.
+ * @since S60 ?S60_version
+ * @param aControl The parent control of this event handler.
+ * @param aEvent The event.
+ * @return <code>ETrue</code> if the event was processed.
+ * Otherwise <code>EFalse</code>.
+ */
+ virtual AlfEventStatus offerEvent(
+ CAlfWidgetControl& aControl,
+ const TAlfEvent& aEvent );
+
+ /**
+ * Defines the widget states, where the event handler is active.
+ * By default, if this method is not called, the event handler is expected
+ * to be active in all states.
+ * @param aStates A bitmask defining the widget states, where the event
+ * handler is active. The low 16 bits are reserved for the states
+ * defined by the framework in <TODO: add reference>. The high 16 bits are
+ * available for states defined by the client code.
+ */
+ void setActiveStates(unsigned int aStates);
+
+ /**
+ * Sets AlfWidgetEventHandlerInitData to event handler.
+ * @param aData A data structure which contains for example id of the event
+ * handler.
+ */
+ virtual void setEventHandlerData(
+ const AlfWidgetEventHandlerInitData& /*aData*/ )
+ {
+
+ }
+
+ /**
+ * Returns AlfWidgetEventHandlerInitData.
+ * @return A pointer to AlfWidgetEventHandlerInitData structure
+ * which contains for example id of the event handler.
+ */
+ virtual AlfWidgetEventHandlerInitData* eventHandlerData()
+ {
+ return NULL;
+ }
+
+ /**
+ * Friend class for timer functions.
+ *
+ */
+ friend class AlfScrollBarLongTapTimer;
+
+ //--------------------------------------------------------------------------
+ //Overriden Apis from IAlfScrollBarBaseElementInternal
+ //--------------------------------------------------------------------------
+ //
+
+ /**
+ * Notified when the base layout of scrollbar changes .
+ * Relayouts all the visuals with respect to the new size.
+ */
+ void baseLayoutSizeChanged();
+
+ /**
+ * Send the corresponding Custom events to the scrollbar eventhandlers
+ * according to the visual clicked.
+ */
+ bool processPointerEvent(TAlfEvent * aPntrEvent);
+
+ /**
+ * Creates the Visualization of scrollbar
+ *
+ */
+ void createVisualization();
+
+ /**
+ * Updates the Visualization of scrollbar
+ *
+ */
+ void updateVisualization();
+
+ /**
+ * Destroy the Visualization of scrollbar
+ *
+ */
+ void destroyVisualization();
+
+ /**
+ * Returns pointer to AlfScrollBarModel
+ *
+ */
+ void initializeScrollModel();
+
+ /**
+ * handles longTap event
+ */
+ AlfEventStatus handleLongTapEvent();
+
+ // ---------------------------------------------------------------------------
+ // From class IAlfInterfaceBase.
+ //
+ // ---------------------------------------------------------------------------
+ //
+ /**
+ * Getter for interfaces provided by the widget.
+ * @since S60 ?S60_version
+ * @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);
+
+
+ //--------------------------------------------------------------------------
+ // Internal member functions AlfScrollBarDefaultBaseElement
+ //--------------------------------------------------------------------------
+ //
+
+ /**
+ * handles the pointerDown event
+ */
+ bool handlePointerDownEvent(TAlfEvent * aPntrEvent);
+
+ /**
+ * Sends pageup or pagedown event according to hit point on track
+ */
+ AlfEventStatus trackVisualHit(CAlfVisual * aHitVisual);
+
+ /**
+ * handles the pointerUp event
+ */
+ void handlePointerUpEvent();
+
+ /**
+ * Initializes the scrollbar layouts with LCT layout data
+ */
+ void initializeLayout();
+
+ /**
+ * Initializes the scrollbar Tracklayout with LCT layout data
+ */
+ void initializeTrackLayout();
+
+ /**
+ * Initializes the scrollbar Thumblayout with LCT layout data
+ */
+ void initializeThumbLayout();
+
+ /**
+ * Sets position and Size on the Visual/layout
+ * @param aVisual Visual/Layout on which position and size is being set
+ * @param aXVal Position X value
+ * @param aYVal Position Y value
+ * @param aWidth Width
+ * @param aHeight Height
+ */
+ void setPositionAndSize(CAlfVisual * aVisual,
+ int aXVal, int aYVal,
+ int aWidth, int aHeight);
+
+ /**
+ * Set skin images on scrollbar track
+ */
+ void setTrackImage();
+
+ /**
+ * Set skin images on scrollbar thumb
+ */
+ void setThumbImage();
+
+ /**
+ * Changes the scrollbar track image, based on the flag state
+ * @param aPressed false for normal graphics,
+ * true for pressed graphics
+ */
+ void changeTrackImage(bool aPressed = false);
+
+ /**
+ * Changes the scrollbar thumb image, based on the flag state
+ * @param aPressed false for normal graphics,
+ * true for pressed graphics
+ */
+ void changeThumbImage(bool aPressed = false);
+
+ /**
+ * Calculates the StepSize and thumbLength
+ */
+ void calculateStepSizeAndThumbLength();
+
+ /**
+ * Calculates minimum and maximum thumbLength
+ */
+ void setThumbMinMaxLength();
+
+
+private:
+
+ /**
+ * handles the scroll bar click event
+ *
+ */
+ AlfEventStatus handleScrollBarClickedEvent(
+ const TAlfEvent& aEvent );
+ /**
+ * Creates the visual template hirarchy of scrollbar.
+ */
+ void createDefaultBaseElement();
+
+ /**
+ * Sets LctLayoutData on the Visual/layout
+ * @param aRect Parent rect of the visual
+ * @param aWindowLineLayout TAknWindowLineLayout handle which has the LCT values
+ * to be set
+ * @param aVisual Visual/Layout on which LctLayoutData is being set
+ */
+ void setLCTData(const TRect& aRect ,
+ TAknWindowLineLayout& aWindowLineLayout,CAlfVisual * aVisual);
+
+ /**
+ * Initialize drag flags and store drag start point
+ */
+ bool initializeThumbDragData( const TPoint& aPointerPos );
+
+ /**
+ * Stop drag
+ */
+ bool stopDrag(CAlfVisual* aHitVisual, TInt aAnimTime);
+
+ /**
+ * changes the graphics of scrollbar to pressed/normal
+ */
+ void changeGraphics();
+
+ /**
+ * checks whether it is scrollbar trackVisual or not
+ */
+ bool isScrollbarTrackVisual(CAlfVisual *aVisual);
+
+ /**
+ * changes the graphics of scrollbar to pressed/normal
+ */
+ bool isScrollbarThumbVisual(CAlfVisual *aVisual);
+
+ /*
+ * Instance of ScrollBarLongTapTimer.
+ */
+ auto_ptr<AlfScrollBarLongTapTimer> mLongTapTimer;
+
+ /*
+ * holds the value if minimum thumb size.
+ */
+ TAlfMetric mThumbMinSize;
+
+ /*
+ * holds that value of minimum thumb size specified by the user.
+ */
+ TAlfMetric mUserThumbMinSize;
+
+ /*
+ * Flag set to true if minimum thumbsize is set.
+ */
+ bool mIsMinSizeFlagSet;
+
+ /*
+ * Flag set to true if longTapObserver is set.
+ */
+ bool mIsLongTapObserverSet;
+
+ /*
+ * pointer to scrollbarThumbLCTData.
+ */
+ struct ScrollbarThumbLCTData *mLCTData;
+
+ /*
+ * pointer to ScrollBarDefaultLCTBaseElementData.
+ */
+ struct ScrollBarBaseElementData *mData;
+
+ }; // end of class AlfScrollBarDefaultBaseElement
+
+ } // end of namespace Alf
+
+#endif //ALF_SCROLLBAR_DEFAULT_BASEELEMENT_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/inc/alfscrollbarlongtaptimer.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2007 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: Timer for creating longtap event
+*
+*/
+
+#ifndef __ALF_SCROLLBARLLONGTAPTIMER_H__
+#define __ALF_SCROLLBARLLONGTAPTIMER_H__
+
+#include <e32std.h>
+#include <e32base.h>
+#include <alf/ialfscrollbardefaultbaseelement.h>
+
+namespace Alf
+ {
+
+// Forward declarations
+class AlfScrollBarBaseElement;
+
+class AlfScrollBarLongTapTimer: public CActive
+ {
+
+ enum TState
+ {
+ //To indicate the event is in running state.
+ ERunning,
+
+ //To indicate the event is in stopped state.
+ EStopped
+ };
+public:
+/**
+ * Constructor
+ * @param aBaseElement .
+ * @since S60 ?S60_version
+ */
+ AlfScrollBarLongTapTimer(IAlfScrollBarDefaultBaseElement* aBaseElement);
+
+/**
+ * Destructor
+ */
+ ~AlfScrollBarLongTapTimer();
+
+/**
+ * Start the Timer.
+ */
+ void Start();
+
+ /**
+ * Stops the Timer.
+ */
+ void Stop();
+
+ /**
+ * user code runs under this active object.
+ */
+ void RunL();
+
+ /**
+ * Implements cancellation of an outstanding request.
+ */
+ void DoCancel();
+
+private:
+ RTimer iTimer;
+ TState iState;
+
+ /**
+ * Instance of IAlfScrollBarBaseElement.
+ */
+ IAlfScrollBarDefaultBaseElement* iBaseElement;
+
+ /**
+ * Instance of TAlfEvent.
+ */
+ TAlfEvent* mEvent;
+ };
+
+ }
+
+#endif // __ALF_SCROLLBARLLONGTAPTIMER_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/inc/alfscrollbarmodel.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,369 @@
+/*
+* Copyright (c) 2009 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: Model Interface with utilities for scrollbar widget.
+*
+*/
+
+#ifndef ALF_SCROLLBARMODEL_H
+#define ALF_SCROLLBARMODEL_H
+
+// Widget Model and Exported API includes
+#include <alf/ialfscrollbarmodel.h>
+
+// OsnCore includes
+#include <osn/alfptrvector.h>
+#include <osn/ustring.h>
+
+// Namespace
+using namespace osncore;
+
+namespace Alf
+ {
+
+//Forward Declarations
+class AlfModel;
+class AlfScrollBarWidget;
+
+
+
+/**
+ * ScrollBar model implementation.
+ *
+ * Implements utility methods to create and update
+ * the data hierarchy of a scrollbar.
+ */
+class AlfScrollBarModel : public IAlfScrollBarModel
+ {
+public:
+
+ /**
+ * Constructor.
+ */
+ AlfScrollBarModel(IAlfVariantType* aDataSource = NULL);
+
+ /**
+ * Destructor.
+ */
+ ~AlfScrollBarModel();
+
+ /** From base class IAlfModel
+ *
+ */
+
+ /**
+ * Add a new observer to be notified of any changes in the model.
+ *
+ * @param aObserver The model change observer to be added.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void addModelChangeObserver(IAlfModelChangeObserver& aObserver);
+
+ /**
+ * Remove an observer which is added to get notified of any changes
+ * in the model.
+ *
+ * @param aObserver The model change observer to be removed.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void removeModelChangeObserver(IAlfModelChangeObserver& aObserver);
+
+ /**
+ * API to change the model completely at one short.
+ *
+ * @see IAlfModel
+ * @param aData The new data.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void setData(IAlfVariantType* aData);
+
+ /**
+ * Change a given of data fields in the model . All model change
+ * observers are notified about the change.
+ *
+ * @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 to be set.
+ * @since S60 ?S60_version
+ */
+ void updateData(int aNumContainerIndices,
+ int* aContainerIndices,
+ IAlfVariantType* aData);
+
+ /**
+ * Add a number of data fields in the model data. All model change
+ * observers are notified about the change.
+ *
+ * @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.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void addData(int aNumContainerIndices,
+ int* aContainerIndices,
+ IAlfVariantType* aData);
+
+ /**
+ * Remove a number of data fields in the model data. All model change
+ * observers are notified about the change.
+ *
+ * @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.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void removeData(int aNumContainerIndices, int* aContainerIndices);
+
+ /**
+ * API for executing batch operations
+ *
+ * @param aOperationsArray An RPOinterArray containing the list of
+ * operations to be executed in batch.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void executeOperations(AlfPtrVector<AlfModelOperation>& aOperationsArray);
+
+ /**
+ * API for executing one operation at a Time
+ *
+ * @param aOperation An Operation to be executed on the model.
+ * @since S60 ?S60_version
+ */
+ void executeOperation(AlfModelOperation* aOperation);
+
+ /**
+ * Clears the Model.
+ *
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void clearModel();
+
+ /**
+ * Get the root data object of this model.
+ *
+ * @return The root data object.
+ * @since S60 ?S60_version
+ */
+ IAlfVariantType* data() const;
+
+ // From base class IAlfInterfaceBase
+
+ IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+ // From base class IAlfScrollBarModel
+
+ /**
+ * Create the default data structure for a ScrollBar widget.
+ *
+ * @param aTotalLengthInSteps
+ * @param aViewLengthInSteps
+ * @param aViewStartPosition
+ *
+ *
+ * @return void
+ * @exception std::bad_alloc
+ * @since S60 ?S60_version
+ */
+ void initializeData(int aTotalLengthInSteps,
+ int aViewLengthInSteps,
+ int aViewStartPosition);
+
+ /**
+ * Sets the TotalLength for the Scrollbar. Does not notify observers about this.
+ *
+ * @param aTotalLength TotalLength value
+ *
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ void setTotalLength(int aTotalLength);
+
+ /**
+ * Sets the View Length for the Scrollbar. Does not notify observers
+ * about this.
+ *
+ * @param aViewSize
+ *
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ void setViewLength(int aViewSize);
+
+ /**
+ * Sets the View Start Position for the Scrollbar. Does not notify
+ * observers about this.
+ *
+ * @param aViewStartPosition
+ *
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ void setViewStartPosition(int aViewStartPosition);
+
+ /**
+ * Sets the TotalLength for the Scrollbar. Does not notify observers about this.
+ *
+ * @param aTotalLength TotalLength value
+ * @param aViewLength view length value
+ * @param aViewStartPosition view start position
+ *
+ * @return void.
+ * @since S60 ?S60_version
+ */
+ void changeData(int aTotalLength,int aViewLength, int aViewStartPosition);
+
+ /**
+ * Length of the document or viewable data.
+ *
+ * Arbitrary units are used, but the same units as the rest of the model.
+ * This length is best current estimate of the length of the entire
+ * viewable data in this model's direction.(i.e, vertical, horizontal).
+ * It represents physical extent (e.g. could be pixels), not logical
+ * size of the data. It is understood to represent the physical laid out
+ * size of the data if it were possible to view it all at once.
+ *
+ * @return length in arbitrary units of the viewable data
+ * @since S60 ?S60_version
+ */
+ int getTotalLength() const;
+
+ /**
+ * Length of the view.
+ *
+ * For horizontal models, this is the width of the view.
+ * For veritcal, this is the height of the view.
+ *
+ * Note the units are arbitrary but uniform with the rest of the model.
+ * Note that this measure is proportional to the physical width or height
+ * of the view. This metric is sometimes called the Thumb size.
+ *
+ * @return position of the start of the view
+ * @since S60 ?S60_version
+ */
+ int getViewLength() const;
+ /**
+ * Position in arbitrary units of the start of the currently viewed data.
+ *
+ * For horizontal models, this is the position of the left of the view
+ * relative to the far left end of the document.
+ * For vertical, this is the position of the top of the view from the top
+ * of the viewable data.
+ *
+ * Note the units are arbitrary but uniform with the rest of the model.
+ * Position is in physical space as if the entire data were laid out.
+ * This metric is sometimes called the Thumb position.
+ *
+ * @return position of the start of the view
+ * @since S60 ?S60_version
+ */
+ int getViewStartPosition() const;
+
+ /**
+ * Updates the model according to the values passed.
+ *
+ * @param aTotalLengthInSteps
+ * @param aViewLength
+ * @param aViewStartPosition
+ *
+ * @return void.
+ * @since S60 ?S60_version
+ *
+ */
+ void updateScrollBarModel(int aTotalLengthInSteps,
+ int aViewLength,
+ int aViewStartPosition);
+ /**
+ * Updates visualization of scrollbar according
+ * to the model values.
+ */
+ void updateScrollBarVisualization();
+
+ /**
+ * Stores the scrollbar widget pointer in model
+ */
+ void storeWidget(AlfScrollBarWidget* aWidget);
+
+private:
+
+ /**
+ * This function validates view length passed and changes it if required
+ *
+ * @param aViewLength - in/out param
+ *
+ * @return bool false, if the data was not valid and changes were made
+ * else returns true
+ */
+ bool validateViewLength(int & aViewLength);
+
+ /**
+ * This function validates view start position passed and changes it if
+ * required
+ *
+ * @param aViewStartPos - in/out param
+ *
+ * @return bool false, if the data was not valid and changes were made
+ * else returns true
+ */
+ bool validateViewStartPos(int & aViewStartPos);
+
+ /**
+ * This function validates total length passed and changes it if
+ * required. This validation can change aViewLength, aViewStartPos
+ * too if reuired.
+ *
+ * @param aTotalLength - in/out param
+ * @param aViewLength - in/out param
+ * @param aViewStartPos - in/out param
+ *
+ * @return bool false, if the data was not valid and changes were made
+ * else returns true
+ */
+ bool validateAllData(int & aTotalLength,
+ int & aViewLength,
+ int & aViewStartPos);
+
+ /**
+ * Private method to create the ScrollBar Widget.
+ *
+ * @param aDataSource Model for the ScrollBar
+ * @return void
+ * @since S60 ?S60_version
+ *
+ */
+ void construct ( IAlfVariantType* aDataSource );
+
+ /*
+ * pointer to scrollbarmodelData.
+ */
+ struct ScrollbarModelDataImpl *mModelData;
+
+ AlfModel* mModel; //Owned
+ AlfScrollBarWidget* mScrollWidget;
+ }; // class AlfScrollBarModel
+
+ } // End of namespace Alf
+
+#endif // ALF_SCROLLBARMODEL_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/inc/alfscrollbarwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2009 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: Widget interface with utilities for scrollbar widget.
+ *
+*/
+
+
+
+#ifndef ALF_SCROLLBARWIDGET_H
+#define ALF_SCROLLBARWIDGET_H
+
+
+// WidgetModel Includes
+#include <alf/ialfwidgeteventhandler.h>
+#include "alf/alfwidget.h"
+#include <alf/alfexceptions.h>
+
+// Widget Includes
+#include <alf/ialfscrollbarwidget.h>
+#include <alf/ialfscrollbarmodel.h>
+
+
+// Forward Declarations
+class CAlfEnv;
+
+// From namespace Alf
+namespace Alf
+ {
+ // Forward Declarations
+ class CAlfWidgetControl;
+ class IAlfModel;
+ }
+
+//From name space duiuimodel
+namespace duiuimodel
+ {
+class DuiNode;
+ }
+
+namespace Alf
+ {
+
+ /**
+ * A basic scrollbar widget implementation.
+ * Contains methods for creating the default
+ * building blocks for the scrollbar widget.
+ */
+class AlfScrollBarWidget : public IAlfScrollBarWidget
+ {
+public:
+
+ /**
+ * Creator Method.
+ *
+ * @param aEnv The environment for the widget.
+ * @param aContainer The container widget where this widget is contained.
+ * @param aWidgetId The name of the widget. Not Owned.
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @param aCustomData Custom data. Not Owned.
+ * @param aNode Node. Not Owned.
+ * @return AlfScrollBarWidget , or NULL if it does not create
+ */
+ static AlfScrollBarWidget* create(CAlfEnv& aEnv,
+ IAlfContainerWidget& aContainer,
+ const char* aWidgetId,
+ DuiNode *aNode=NULL,
+ const char* aFilePath=NULL,
+ AlfCustomInitDataBase* aCustomData=NULL);
+
+ /**
+ * Virtual Destructor.
+ */
+ virtual ~AlfScrollBarWidget();
+
+ // From IAlfInterfaceBase
+ /**
+ * Getter for interfaces provided by the scrollbar widget class.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+ // From IAlfWidget
+
+ /**
+ * Return the control
+ */
+ CAlfWidgetControl* control() const;
+
+ /**
+ * getter for the parent container. The ownership is not passed.
+ * @param none
+ * @return the parent container or NULL if the widget is the root-widget.
+ */
+ virtual IAlfContainerWidget* parent() const;
+
+ /**
+ * Setter for the control. The control is owned by the Alfred environment.
+ *
+ * @since S60 ?S60_version
+ * @param aControl The control for this widget.
+ * @param aDeletePreviousControl delete previous control.TRUE by default.
+ * @return void.
+ */
+ void setControl(CAlfWidgetControl* aControl,
+ bool aDeletePreviousControl = true);
+
+ /**
+ * Gets the model.
+ */
+ IAlfModel* model();
+
+ /**
+ * Sets the model.
+
+ * @return void.
+ */
+ void setModel(IAlfModel* aModel, bool /*param*/);
+
+ /**
+ * Return the widget name
+ */
+ const char* widgetName() const;
+
+ /**
+ * sets the focus to the child.
+
+ * @return void.
+ */
+ void setChildFocus(bool /*aFocus*/);
+
+
+
+ /**
+ * Sets the presentation for the widget using presentation XML file.
+
+ * Destroys any existing presentation.
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @exception AlfWidgetException if no visualization node available
+ * in Presentation XML or if no control
+ * is associated with the widget.
+ * @exception bad_alloc
+ * @since S60 ?S60_version
+ * @return void.
+ */
+ virtual void setPresentation(const char* aFilePath);
+
+ /**
+ * Sets whether or not tactile feedback is enabled.
+ *
+ * @param aFlag Whether or not tactile is enabled.
+ */
+ void enableTactile(bool aFlag);
+
+ /**
+ * Returns the state of tactile feedback whether it is enabled/disabled.
+ *
+ */
+ bool IsTactileEnabled();
+
+protected:
+
+ /**
+ * C++ constructor.
+ *
+ * @param aEnv The environment for the widget.
+ * @param aContainer The container widget where this widget is contained.
+ * @param aWidgetId The name of the widget. Not Owned.
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @param aCustomData Custom data.
+ * @param aNode Node. Not Owned.
+ */
+ AlfScrollBarWidget(CAlfEnv& aEnv,
+ IAlfContainerWidget& aContainer,
+ const char* aWidgetId,
+ DuiNode *aNode=NULL,
+ const char *aFilePath=NULL,
+ AlfCustomInitDataBase* aCustomData=NULL);
+
+ /**
+ * Methods to create different default elements and control of scroll bar.
+ *
+ * @param aEnv The environment for the widget.
+ * @return void.
+ */
+ void constructDefault(CAlfEnv& aEnv);
+
+ /**
+ * Creates the default control.
+ *
+ * @param aEnv The environment for the widget.
+ * @return The Control.
+ */
+ CAlfWidgetControl *constructDefaultControl(CAlfEnv& aEnv);
+
+private:
+
+ /**
+ * Base widget. Own.
+ */
+ auto_ptr<AlfWidget> mWidget;
+
+ IAlfScrollBarModel * mScrollModel;
+ CAlfWidgetControl * mScrollControl;
+ }; // class AlfScrollBarWidget
+
+ } // namespace Alf
+
+#endif // C_ALFSCROLLBARWIDGET_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/inc/alfscrollbarwidgetfactoryplugin.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2007-2007 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: Scroollbar Widget factory plugin header
+*
+*/
+
+#ifndef ALF_SCROLLBARWIDGETFACTORYPLUGIN_H
+#define ALF_SCROLLBARWIDGETFACTORYPLUGIN_H
+
+// Includes
+#include <ecom/implementationproxy.h>
+#include <alf/ialffactoryplugin.h>
+#include <osn/osndefines.h>
+
+namespace Alf
+ {
+
+class IfId;
+
+ /**
+ * Plugin factory to create widget factory
+ *
+ * @lib alfwidgetfactory.dll
+ * @since S60 5.0
+ */
+class AlfScrollBarWidgetFactoryPlugin: public IAlfFactoryPlugin
+ {
+
+public:
+
+ /**
+ * Two-phased Symbian constructor.
+ */
+ static AlfScrollBarWidgetFactoryPlugin* NewL();
+
+ /**
+ * Destructor
+ */
+ virtual ~AlfScrollBarWidgetFactoryPlugin();
+
+ // from IAlfFactoryPlugin
+
+ /**
+ * Create factory product.
+ * @since Series 60 5.0
+ * @param aProduct Product to create.
+ * @param aInitData Initialization data for product
+ * @return Instance or NULL
+ */
+ IAlfInterfaceBase* createProduct ( const char* aProduct, void* aInitData );
+
+ /**
+ * Count available products
+ *
+ * @since S60 5.0
+ * @return Product count
+ */
+ int productCount() const;
+
+ /**
+ * Fetch product info by index
+ *
+ * @param aIndex List index
+ * @since S60 5.0
+ * @return Descriptor describing product
+ */
+ const char* productInfo ( int aIndex ) const;
+
+ /**
+ * From IAlfInterfaceBase.
+ * Creates interface based on the given type.
+ */
+ IAlfInterfaceBase* makeInterface ( const IfId& aType );
+ };
+
+ } // namespace Alf
+
+ /**
+ * Exported factory function required by ECOM-framework
+ */
+ OSN_IMPORT const TImplementationProxy* ImplementationGroupProxy(
+ TInt& aTableCount );
+
+#endif //ALF_SCROLLBARWIDGETFACTORYPLUGIN_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/inc/ialfscrollbarbaseelementinternal.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2007 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: interface for the scrollbar base element internal functions.
+*
+*/
+
+#ifndef I_ALFSCROLLBARBASEELEMENTINTERNAL_H
+#define I_ALFSCROLLBARBASEELEMENTINTERNAL_H
+
+//Widget Model include
+#include <alf/ialfinterfacebase.h>
+
+//Toolkit include
+#include <alf/alfevent.h>
+
+namespace Alf
+ {
+
+/**
+ * @namespace alfscrollbarbaseelementinternal
+ *
+ * ident specifies the unique identifier for the scrollbar base-element
+ * internal interface.
+ */
+namespace alfscrollbarbaseelementinternal
+ {
+ static const IfId ident =
+ {
+ 0,"scrollbarbaseelementinternal"
+ };
+ }
+
+/**
+ * An internal interface to be used by custom scrollbar base element writer.
+ *
+ * An interface which should be implemented by all the base elements of
+ * scrollbar (e.g. AlfScrollBarDefaltBaseElement, AlfScrollBarArrowBAseElement,
+ * AlfScrollBarDefaltLctBaseElement). The interface is exported for the
+ * developers who wants to create their custom scrollbar base element.
+ * The functions of this interface are not supposed to be called by scrollbar
+ * widget users directly. These functions are called by different part of
+ * scrollbar widget (e.g. scrollbar control, long tap pointer event timer).
+ *
+ */
+class IAlfScrollBarBaseElementInternal : public IAlfInterfaceBase
+ {
+
+public:
+
+ /**
+ * Getter for the type identifier of this interface.
+ * Usage:
+ * @code
+ * IAlfElement* element;
+ * IAlfScrollBarBaseElementInternal* elementInternal =
+ * static_cast<IAlfScrollBarBaseElementInternal*> (
+ * element->makeInterface (IAlfScrollBarBaseElementInternal::type() ) );
+ * @endcode
+ * @see \link IAlfInterfaceBase \endlink for
+ * \link IAlfInterfaceBase::makeInterface \endlink
+ * The above code provides all the interfaces of ScrollBar base element.
+ * @since S60 ?S60_version
+ * @return Identifier of this interface.
+ */
+ static inline const IfId& type()
+ {
+ return alfscrollbarbaseelementinternal :: ident;
+ }
+
+ /**
+ * baseLayoutSizeChanged.
+ * This function is called by scrollbar control to notify scrollbar base
+ * element the base layout size has been changed ( and so the base element
+ * should relayout its internal visualization).
+ *
+ * @since S60 ?S60_version
+ */
+ virtual void baseLayoutSizeChanged()=0;
+
+ /**
+ * Send the corresponding Custom events to the scrollbar eventhandlers
+ * according to the visual clicked.
+ *
+ */
+ virtual bool processPointerEvent(TAlfEvent * aPntrEvent)=0;
+
+ /**
+ * creates the visualization
+ *
+ */
+ virtual void createVisualization() = 0;
+
+ /**
+ * Destroys the visualization
+ *
+ */
+ virtual void updateVisualization() = 0;
+
+ /**
+ * updates the visualization
+ *
+ */
+ virtual void destroyVisualization() = 0;
+
+ /**
+ * Returns pointer to AlfScrollBarModel
+ */
+ virtual void initializeScrollModel() = 0;
+
+ /**
+ * Handles Longtap event
+ */
+ virtual AlfEventStatus handleLongTapEvent() = 0;
+
+ /**
+ *virtual Destructor.
+ *
+ */
+ virtual ~IAlfScrollBarBaseElementInternal() {}
+
+ }; // end of class IAlfScrollBarBaseElementInternal
+
+ } // end of namespace Alf
+
+#endif // I_ALFSCROLLBARBASEELEMENTINTERNAL_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/src/20010105.rss Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 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: Scrollbar widget Resource file
+*
+*/
+
+#include <ecom/registryinfo.rh>
+#include "alf/alfecompluginfactoryuid.rh"
+
+
+RESOURCE REGISTRY_INFO theInfo
+{
+dll_uid = 0x20010105;
+interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KFactoryPluginUid;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x20010106;
+ version_no = 1;
+ display_name = "";
+ default_data = "scrollbarwidget||scrollbarmodel||scrollbardefaultbaseelement";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/src/alfscrollbarcontrol.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,267 @@
+/*
+* 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: Control Implementation with utilities for scrollbar widget.
+*
+*/
+
+// Toolkit includes
+#include <alf/alfenv.h>
+#include <alf/alfroster.h>
+#include <alf/alfdisplay.h>
+
+// Widget model includes
+#include <alf/alfwidgetevents.h>
+#include <alf/alfcontrolgroup.h>
+
+// Widget includes
+#include <alf/ialfscrollbardefaultbaseelement.h>
+#include "ialfscrollbarbaseelementinternal.h"
+
+// Internal includes
+#include "alfscrollbarcontrol.h"
+#include "alfscrollbarwidget.h"
+
+
+// namespaces
+using namespace osncore;
+using namespace alfscrollbarwidget;
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarControl::AlfScrollBarControl(CAlfEnv& aEnv) :
+ CAlfWidgetControl(aEnv)
+ {
+ mLayoutHeight = -1; //this means that the first draw is yet to happen.
+ mLayoutWidth = -1; //this means that the first draw is yet to happen.
+ disableState(IAlfWidgetControl::Focusable);
+ mTactilefdbInstance = NULL;
+ mDragTactileFeedbackStarted = false;
+ mEnableTactile = false; // Next statement will make it true
+ EnableTactileFeedback(true);
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarControl::~AlfScrollBarControl()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+//
+// enableTactileFeedback
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarControl::EnableTactileFeedback(bool aEnabled)
+ {
+ if (!mTactilefdbInstance)
+ {
+ mEnableTactile = aEnabled;
+ mTactilefdbInstance = MTouchFeedback::Instance();
+ }
+ }
+
+//-----------------------------------------------------------------------------
+//
+// TouchTactileEffectOnTouch
+//-----------------------------------------------------------------------------
+
+void AlfScrollBarControl::TactileEffectOnTouchandHold()
+ {
+ if (mTactilefdbInstance)
+ {
+ mTactilefdbInstance->InstantFeedback(ETouchFeedbackSlider);
+ }
+ }
+
+//-------------------------------------------------------------------------------
+//
+//
+//--------------------------------------------------------------------------------
+
+void AlfScrollBarControl::TactileEffectOnDrag(TAlfEvent& aEvent)
+{
+ if (mTactilefdbInstance)
+ {
+ CCoeControl* ccoecntrl = static_cast<CCoeControl*>(Display()->ObjectProvider());
+ TInt intensity = 50;
+ TTimeIntervalMicroSeconds32 timespan = 400000;
+ mTactilefdbInstance->StartFeedback(ccoecntrl,ETouchContinuousSlider,&aEvent.PointerEvent(),intensity,timespan);
+ mDragTactileFeedbackStarted = true;
+ }
+}
+
+//-------------------------------------------------------------------------------
+//
+// TouchTactileEffectOnRelease
+//--------------------------------------------------------------------------------
+//
+void AlfScrollBarControl::TactileEffectOnRelease()
+{
+ if (mTactilefdbInstance)
+ {
+ if ( mDragTactileFeedbackStarted )
+ {
+ // Touch Release on Thumb after drag
+ CCoeControl* ccoecntrl = static_cast<CCoeControl*>(Display()->ObjectProvider());
+ mTactilefdbInstance->StopFeedback(ccoecntrl);
+ mDragTactileFeedbackStarted = false;
+ }
+ else
+ {
+ // Touch Release on thumb
+ mTactilefdbInstance->InstantFeedback(ETouchFeedbackSlider);
+ }
+ }
+}
+
+// ---------------------------------------------------------------------------
+//
+// getTactileFeedbackState
+//
+// ---------------------------------------------------------------------------
+bool AlfScrollBarControl::IsTactileFeedbackEnabled()
+ {
+ return mEnableTactile;
+ }
+
+// ---------------------------------------------------------------------------
+// From Base class CAlfControl
+// Notifies the owner that the layout of a visual has been recalculated.
+// Called only when the EAlfVisualFlagLayoutUpdateNotification flag has
+// been set for the visual.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarControl::VisualLayoutUpdated(CAlfVisual& aVisual)
+ {
+ if((mLayoutWidth == -1 && roundFloatToInt(
+ aVisual.Size().ValueNow().iX) == 0) ||
+ (mLayoutHeight == -1 && roundFloatToInt(
+ aVisual.Size().ValueNow().iY) == 0))
+ {
+ return; /*No size assigned yet*/
+ }
+ else
+ {
+ //do nothing
+ }
+
+ if(mLayoutWidth == roundFloatToInt(aVisual.Size().ValueNow().iX) &&
+ mLayoutHeight == roundFloatToInt(aVisual.Size().ValueNow().iY))
+ {
+ //return; /* No change in layout size */
+ }
+ else
+ {
+ //do nothing
+ }
+
+ mLayoutWidth = roundFloatToInt(aVisual.Size().ValueNow().iX);
+ mLayoutHeight = roundFloatToInt(aVisual.Size().ValueNow().iY);
+ IAlfElement* baseelement = findElement ("BaseElement");
+ IAlfScrollBarBaseElementInternal* elementInternal = NULL;
+ if(baseelement)
+ {
+ elementInternal =
+ static_cast<IAlfScrollBarBaseElementInternal*> (
+ baseelement->makeInterface(IAlfScrollBarBaseElementInternal::type()));
+ }
+ else
+ {
+ // do nothing
+ }
+
+ if(elementInternal)
+ {
+ elementInternal->baseLayoutSizeChanged();
+ }
+ else
+ {
+ //do nothing
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Returns top level layout.
+// ---------------------------------------------------------------------------
+//
+CAlfLayout* AlfScrollBarControl::ContainerLayout(
+ const CAlfControl* /*aConnected*/) const
+ {
+ //Return the root layout of the control
+ return(static_cast<CAlfLayout*> (&Visual(0)));
+ }
+
+// ---------------------------------------------------------------------------
+// From base class CAlfWidgetControl
+// Handle Alfred events.
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus AlfScrollBarControl::handleEvent( const TAlfEvent& aEvent )
+ {
+ IAlfElement *base = findElement("BaseElement");
+
+ if(aEvent.IsCustomEvent())
+ {
+ if(aEvent.CustomParameter() == EEventMissedPointerUp)
+ {
+ if(base)
+ {
+ IAlfWidgetEventHandler* element =
+ static_cast<IAlfWidgetEventHandler*> (
+ base->makeInterface(IAlfWidgetEventHandler::type()));
+ if(element)
+ {
+ element->offerEvent(*this,aEvent);
+ }
+
+ }
+ }
+ }
+ else if(aEvent.IsPointerEvent())
+ {
+ // if the type of base element is scrollbardefaultbaseelement, then
+ // convert the event to custom event
+ if(base)
+ {
+
+ if(base->makeInterface(
+ IAlfScrollBarDefaultBaseElement::type()) != NULL)
+ {
+ TAlfEvent customevent(EEventScrollBarClicked,(TInt )&aEvent);
+ return CAlfWidgetControl::processEvent(customevent);
+ }
+ else // other elements (like AlfElement) dont understand custom events
+ { // Let them handle the original event in their own way
+ return CAlfWidgetControl::handleEvent(aEvent);
+ }
+ }
+ }
+ //ScrollBar should not handle any key event
+ else
+ {
+ return EEventNotHandled;
+ }
+
+ return EEventNotHandled;
+ }
+
+ }//End of namespace Alf
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/src/alfscrollbardefaultbaseelement.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1355 @@
+/*
+* Copyright (c) 2007 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: The implementation for presentation elements.
+*
+*/
+
+//Toolkit Includes
+#include <alf/alfimagevisual.h>
+#include <alf/alfevent.h>
+#include <alf/alfenv.h>
+#include <AknUtils.h>
+//AknLayout2 includes
+#include <aknlayoutscalable_uiaccel.cdl.h>
+
+// Alfred Client includes
+#include <alf/alfroster.h>
+#include <alf/alfdisplay.h>
+
+//Widget Model Includes
+#include <alf/alflayout.h>
+#include "alf/alfelement.h"
+#include <alf/alfwidgeteventhandler.h>
+#include <alf/alfwidgetenvextension.h>
+#include <alf/ialfmodel.h>
+
+//scrollbar widget includes
+#include <alf/alfscrollevents.h>
+#include "alfscrollbardefaultbaseelement.h"
+#include "alfscrollbarwidget.h"
+#include "alfscrollbarcontrol.h"
+#include "alfscrollbarmodel.h"
+#include "alfscrollbarlongtaptimer.h"
+
+#include <math.h>
+
+enum
+ {
+ EReleased,
+ ETrackPressed,
+ EThumbPressed
+ };
+
+// EPSILON is an small constant used to compare two real values
+const float KEpsilon = 0.000001;
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// A function to compare two real values. The difference less than aEpsilon
+// is assumed negligible.
+// ---------------------------------------------------------------------------
+//
+inline int realCompare(float aReal1, float aReal2, float aEpsilon)
+ {
+ if (Abs(aReal1-aReal2) < aEpsilon)
+ {
+ return 0;
+ }
+ else if ((aReal1-aReal2) > 0)
+ {
+ return 1;
+ }
+ else
+ {
+ return -1;
+ }
+ };
+
+struct ScrollBarBaseElementData
+ {
+ TOperation mOperation; // Thumb Drag
+ CAlfVisual* mVisual; // Hit visual
+ TPoint mDragPoint; // Current pointer value
+ TPoint mLongTapPos; // Long Tap Point
+ int mDragStartStep; // Value of view start position when drag starts
+ int mCurrentState; // track or thumb clicked state indicator
+ bool mLongTapStarted; // Long Tap Timer started ( true if started)
+
+ int mViewLength; // For avoiding thumb length calculation
+ // everytime when model data changes
+ // Stores current viewLength
+
+ int mTotalLength; // For avoiding thumb length calculation
+ // everytime when model data changes
+ // Stores current spanLength
+
+ float mWidgetOpacity; // default value =1.0.
+ float mThumbOpacity; // default value =1.0. thumb will eventually have
+ // opacity=iWidgetOpacity*iThumbOpacity.
+
+ int mThumbAnimationTime; // thumb animation time in milliseconds.
+ float mThumbLength; // Length of scrollbar thumb
+ float mThumbMinLength; // Minimum Length of thumb
+ float mThumbMaxLength; // Maximum Length of thumb
+ float mStepSize; // Step Size
+ bool mThumbSizeChanged; // flag to indicate whether thumbSize is Changed.
+ int mExtendedTouch; // extended area width.
+ AlfScrollBarModel* mScrollbarModel; // Pointer to scrollbar model
+
+ CAlfLayout* mRootLayout ; // Layouts and visuals
+ CAlfLayout* mTrackLayout ;
+ CAlfLayout* mExtendedTrackLayout;
+ CAlfLayout* mThumbLayout ;
+ CAlfLayout* mExtendedThumbLayout;
+
+ CAlfImageVisual* mTrackTopImage ;
+ CAlfImageVisual* mTrackMiddleImage ;
+ CAlfImageVisual* mTrackEndImage ;
+
+ CAlfImageVisual* mThumbTopImage ;
+ CAlfImageVisual* mThumbMiddleImage ;
+ CAlfImageVisual* mThumbEndImage ;
+ };//End of struct ScrollBarBaseElementData
+
+struct ScrollbarThumbLCTData
+ {
+ TInt left; //used to specify left value
+ TInt top; //used to specify top value
+ TInt right; //used to specify right value
+ TInt bottom; //used to specify bottom value
+ TInt height; //used to specify height value
+ TInt width; //used to specify width value
+ };
+
+// ---------------------------------------------------------------------------
+// C++ default constructor.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarDefaultBaseElement::AlfScrollBarDefaultBaseElement(
+ CAlfWidgetControl& aControl,
+ const char* aName,
+ DuiNode* /*mNode*/,
+ AlfCustomInitDataBase* /*aCustomData*/)
+ : mData(NULL)
+ {
+ try
+ {
+ // Base class (AlfElement) construct
+ construct(aControl, aName);
+
+ mLongTapTimer.reset(
+ new (EMM) AlfScrollBarLongTapTimer(this));
+
+ mIsLongTapObserverSet=EFalse;
+ //For Imperative construct
+ createDefaultBaseElement();
+ }
+ catch(AlfException& e)
+ {
+ aControl.removeElement(*this);
+ throw;
+ }
+ // AlfScrollBarDefaultBaseElement is an event handler too so it
+ // should be added to the control
+ aControl.addEventHandler(this);
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarDefaultBaseElement::~AlfScrollBarDefaultBaseElement()
+ {
+
+ if(mData)
+ {
+ delete mData;
+ }
+ else
+ {
+
+ }
+ if(mLCTData)
+ {
+ delete mLCTData;
+ }
+ else
+ {
+
+ }
+ }//End of Destructor
+
+//--------------------------------------------------------------------------
+// APIs from the IAlfScrollBarDefaultBaseElement for controlling the
+// visualization of the scrollbar
+//--------------------------------------------------------------------------
+
+
+// ---------------------------------------------------------------------------
+// Sets the thumb animation time.
+// @aTime : Time in miliseconds
+// @exception : for aTime less then O.0 miliseconds
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::setThumbAnimationTime ( int aTime )
+ {
+ // Sanity check
+ if (aTime < 0)
+ {
+ ALF_THROW(AlfException, EInvalidArgument, "AnimationTime is invalid");
+ }
+ else
+ {
+ // do nothing
+ }
+
+ if(mData->mThumbAnimationTime != aTime)
+ {
+ mData->mThumbAnimationTime = aTime;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfScrollBarWdget.
+// ---------------------------------------------------------------------------
+//
+int AlfScrollBarDefaultBaseElement::getThumbAnimationTime() const
+ {
+ return mData->mThumbAnimationTime;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets opacity value for the Thumb.
+// Thumb opacity is relative to the track.
+// @param : aOpacity float value between 0.0 to 1.0
+// @exception : value of aOpacity more than 1.0 and less than 0.0
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::setThumbOpacity (float aOpacity)
+ {
+ // Sanity check
+ if (realCompare(aOpacity, 0.0, KEpsilon) < 0
+ || realCompare(aOpacity, 1.0, KEpsilon) > 0)
+ {
+ ALF_THROW(AlfException, EInvalidArgument, "Opacity is invalid");
+ }
+ else
+ {
+ // do nothing
+ }
+ // if there is a change, update the visualization
+ if (aOpacity != mData->mThumbOpacity)
+ {
+ mData->mThumbOpacity = aOpacity;
+ const TAlfTimedValue opacity(mData->mThumbOpacity * mData->mWidgetOpacity);
+ if(mData->mThumbLayout)
+ {
+ mData->mThumbLayout->SetOpacity(opacity);
+ control().Visual(0).UpdateChildrenLayout();
+ }
+ }
+ }//End of setThumbOpacity
+
+// ---------------------------------------------------------------------------
+// Returns Thumb opacity is relative to the track.
+// ---------------------------------------------------------------------------
+//
+float AlfScrollBarDefaultBaseElement::getThumbOpacity() const
+ {
+ return mData->mThumbOpacity;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets opacity value for the widget.
+//
+// @param : aOpacity float value between 0.0 to 1.0
+// @exception : value of aOpacity more than 1.0 and less than 0.0
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::setOpacity (float aOpacity)
+ {
+ // Sanity check
+ if (realCompare(aOpacity, 0.0, KEpsilon) < 0
+ || realCompare(aOpacity, 1.0, KEpsilon) > 0)
+ {
+ ALF_THROW(AlfException, EInvalidArgument, "Opacity is invalid");
+ }
+ else
+ {
+ // do nothing
+ }
+ // if there is a change, update the visualization
+ if (aOpacity != mData->mWidgetOpacity)
+ {
+ mData->mWidgetOpacity = aOpacity;
+ const TAlfTimedValue opacity(mData->mWidgetOpacity);
+ if(mData->mTrackLayout)
+ {
+ mData->mRootLayout->SetOpacity(opacity);
+ control().Visual(0).UpdateChildrenLayout();
+ }
+ }
+ }//End of setThumbOpacity
+
+// ---------------------------------------------------------------------------
+// Returns Widget opacity is relative to the track.
+// ---------------------------------------------------------------------------
+//
+float AlfScrollBarDefaultBaseElement::getOpacity() const
+ {
+ return mData->mWidgetOpacity;
+ }
+
+//--------------------------------------------------------------------------
+// APIs from the IAlfScrollBarBaseElement
+//--------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------
+// Gets called when the parent layout is relayouted.
+// resets all the anchor points and updates the visualization
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::baseLayoutSizeChanged()
+ {
+ initializeLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// processPointerEvent generates custom events
+// according the focus visual .
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarDefaultBaseElement::processPointerEvent(TAlfEvent * aPntrEvent)
+ {
+ // retrieve pointer event (NULL check not required here)
+ // Get the hit visual
+ CAlfVisual *focusvisual =aPntrEvent->Visual();
+
+ if ( aPntrEvent->IsPointerEvent() )
+ {
+ if (aPntrEvent->PointerEvent().iType == TPointerEvent::EButton1Down)
+ {
+ bool ret = handlePointerDownEvent(aPntrEvent);
+ return ret;
+ }
+ else if (aPntrEvent->PointerEvent().iType == TPointerEvent::EDrag)
+ {
+ if(!mData->mOperation)
+ {
+ // Drag during tap and hold on track
+ if(mIsLongTapObserverSet)
+ {
+ mData->mLongTapPos=aPntrEvent->PointerEvent().iParentPosition;
+ }
+ else
+ {
+ //Do Nothing.
+ }
+ }
+ else
+ {
+ // Drag on thumb
+ if(mIsLongTapObserverSet &&
+ mData->mVisual && (isScrollbarThumbVisual(focusvisual)) )
+ {
+ mData->mLongTapPos= aPntrEvent->PointerEvent().iParentPosition ;
+ }
+ else
+ {
+ // Do nothing
+ }
+ int dist = aPntrEvent->PointerEvent().iParentPosition.iY - mData->mDragPoint.iY;
+ int steps = ceil(dist / mData->mStepSize) + mData->mDragStartStep;
+
+ // checking steps to avoid negative value, incase of max scrollbar length
+ if( steps > mData->mScrollbarModel->getTotalLength() - mData->mScrollbarModel->getViewLength())
+ {
+ steps = mData->mScrollbarModel->getTotalLength() - mData->mScrollbarModel->getViewLength();
+ }
+ else if(steps < 0 )
+ {
+ steps = 0;
+ }
+ if(steps != mData->mScrollbarModel->getViewStartPosition())
+ {
+ // send tactile sensitive event
+ //control().processEvent(TAlfEvent(EEventScrollBarDrag));
+ TAlfEvent customevent(EEventDragVertical,(TInt )steps);
+ control().processEvent(customevent);
+ }
+ // Tactile Feedback for Thumb drag
+ AlfScrollBarControl& slbrcntrl = static_cast<AlfScrollBarControl&>(control());
+ slbrcntrl.TactileEffectOnDrag(*aPntrEvent);
+ }
+ }
+
+ else if(aPntrEvent->PointerUp() )
+ {
+ mData->mLongTapStarted = false;
+ handlePointerUpEvent();
+ }
+ else
+ {
+ //Do Nothing.
+ }
+ }
+
+ return true;
+ }//End of processPointerEvent
+
+void AlfScrollBarDefaultBaseElement::createVisualization()
+ {
+ initializeScrollModel();
+ CAlfWidgetControl *ctrl = &control();
+
+ // Create Root Layout
+ mData->mRootLayout = CAlfLayout::AddNewL(*((CAlfControl*)ctrl),NULL);
+ mData->mRootLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);
+ mData->mRootLayout->SetFlag( EAlfVisualFlagAutomaticLocaleMirroringEnabled );
+
+ // Create Track Layout
+ mData->mTrackLayout = CAlfLayout::AddNewL(*((CAlfControl*)ctrl),mData->mRootLayout);
+ mData->mTrackLayout->SetFlag( EAlfVisualFlagAutomaticLocaleMirroringEnabled );
+ mData->mExtendedTrackLayout = CAlfLayout::AddNewL(*((CAlfControl*)ctrl),mData->mTrackLayout);
+
+ if(mData->mTrackLayout)
+ {
+ mData->mTrackTopImage = CAlfImageVisual::AddNewL(
+ *((CAlfControl*)ctrl),mData->mTrackLayout);
+ mData->mTrackMiddleImage = CAlfImageVisual::AddNewL(
+ *((CAlfControl*)ctrl),mData->mTrackLayout);
+ mData->mTrackEndImage = CAlfImageVisual::AddNewL(
+ *((CAlfControl*)ctrl),mData->mTrackLayout);
+
+ if(mData->mTrackTopImage &&
+ mData->mTrackMiddleImage &&
+ mData->mTrackEndImage)
+ {
+ setTrackImage();
+ }
+
+ // Create Thumb Visuals
+ mData->mThumbLayout = CAlfLayout::AddNewL(*((CAlfControl*)ctrl),
+ mData->mRootLayout);
+ mData->mThumbLayout->SetFlag( EAlfVisualFlagAutomaticLocaleMirroringEnabled );
+ mData->mExtendedThumbLayout = CAlfLayout::AddNewL(*((CAlfControl*)ctrl),
+ mData->mThumbLayout);
+
+ if(mData->mThumbLayout)
+ {
+ mData->mThumbTopImage = CAlfImageVisual::AddNewL(
+ *((CAlfControl*)ctrl),mData->mThumbLayout);
+ mData->mThumbMiddleImage = CAlfImageVisual::AddNewL(
+ *((CAlfControl*)ctrl),mData->mThumbLayout);
+ mData->mThumbEndImage = CAlfImageVisual::AddNewL(
+ *((CAlfControl*)ctrl),mData->mThumbLayout);
+
+ if(mData->mThumbTopImage &&
+ mData->mThumbMiddleImage &&
+ mData->mThumbEndImage)
+ {
+ setThumbImage();
+ }
+ }
+ }
+ }
+
+void AlfScrollBarDefaultBaseElement::updateVisualization()
+ {
+ calculateStepSizeAndThumbLength();
+ if(mData->mViewLength != mData->mScrollbarModel->getViewLength() || mData->mTotalLength != mData->mScrollbarModel->getTotalLength())
+ {
+ mData->mViewLength = mData->mScrollbarModel->getViewLength();
+ mData->mTotalLength = mData->mScrollbarModel->getTotalLength();
+ initializeThumbLayout();
+ }
+ TAlfRealPoint thumbPos;
+ thumbPos.iX = mData->mThumbLayout->Pos().iX.ValueNow();
+ thumbPos.iY = ceil(mData->mStepSize * mData->mScrollbarModel->getViewStartPosition());
+ mData->mThumbLayout->SetPos(thumbPos,mData->mThumbAnimationTime);
+ }
+
+void AlfScrollBarDefaultBaseElement::destroyVisualization()
+ {
+ mData->mRootLayout->RemoveAndDestroyAllD();
+ delete mData;
+ delete mLCTData;
+ createDefaultBaseElement();
+ }
+
+// ---------------------------------------------------------------------------
+// From class MAlfInterfaceBase.
+// Getter for interfaces provided by the scrollbar widget.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfScrollBarDefaultBaseElement::makeInterface(
+ const IfId& aType)
+ {
+ UString param (aType.mImplementationId);
+ if (param ==
+ IAlfScrollBarDefaultBaseElement::type().mImplementationId)
+ {
+ return static_cast<IAlfScrollBarDefaultBaseElement*>(this);
+ }
+ else if (param == IAlfWidgetEventHandler::type().mImplementationId)
+ {
+ return static_cast<IAlfWidgetEventHandler*>(this);
+ }
+
+ else if (param ==
+ IAlfScrollBarBaseElementInternal::type().mImplementationId)
+ {
+ return static_cast<IAlfScrollBarBaseElementInternal*>(this);
+ }
+ else
+ {
+ //do nothing
+ }
+ return AlfElement::makeInterface(aType);
+ }
+
+// ---------------------------------------------------------------------------
+// handles the pointerDown event
+//
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarDefaultBaseElement::handlePointerDownEvent(TAlfEvent * aPntrEvent)
+ {
+ CAlfVisual * focusvisual = aPntrEvent->Visual();
+ AlfEventStatus result = EEventNotHandled;
+
+ if (focusvisual)
+ {
+ mData->mVisual = focusvisual;
+
+ // Register with the Roster to receive drag Event
+ control().Display()->Roster().SetPointerEventObservers(
+ EAlfPointerEventReportDrag ,control());
+
+ if(!mData->mOperation)
+ {
+ mIsLongTapObserverSet = ETrue;
+ mData->mLongTapPos = aPntrEvent->PointerEvent().iParentPosition;
+ mData->mLongTapStarted = true;
+ control().processEvent(TAlfEvent(EEventScrollBarTouchDown));
+ mLongTapTimer->Start();
+ }
+
+ // Pointer down on track
+ if (isScrollbarTrackVisual(focusvisual))
+ {
+ mData->mLongTapStarted = true;
+ return trackVisualHit(focusvisual);
+ }
+
+ // Pointer down on thumb
+ else if (isScrollbarThumbVisual(focusvisual))
+ {
+ if(!mData->mOperation)
+ {
+ initializeThumbDragData( aPntrEvent->PointerEvent().iParentPosition);
+ AlfScrollBarControl& slbrcntrl = static_cast<AlfScrollBarControl&>(control());
+ slbrcntrl.TactileEffectOnTouchandHold();
+ }
+ result = EEventHandled;
+ }
+ }
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// Sends drag Up or Down event, according to the hit position
+// on track
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus AlfScrollBarDefaultBaseElement::trackVisualHit(CAlfVisual * /*aHitVisual*/)
+ {
+ //Get Co-Ordinates of the click event
+ //Find the thumb Anchor Layout.
+ TAlfTimedPoint thumbVisPos = mData->mThumbLayout->Pos();
+ TAlfTimedPoint thumbVisSize =mData->mThumbLayout->Size();
+ TAlfRealRect rct= mData->mTrackLayout->DisplayRect() ;
+ //Check if click was above/below of thumb
+ if (mData->mLongTapPos.iY - rct.iTl.iY < thumbVisPos.iY.ValueNow())
+ {
+ if(mData->mLongTapStarted)
+ {
+ //control().processEvent(TAlfEvent(EEventScrollBarDrag));
+ control().processEvent(TAlfEvent (EEventScrollPageUp));
+ }
+ }
+ else if (mData->mLongTapPos.iY - rct.iTl.iY > (thumbVisPos.iY.ValueNow() +
+ thumbVisSize.iY.ValueNow()) )
+ {
+ if(mData->mLongTapStarted)
+ {
+ //control().processEvent(TAlfEvent(EEventScrollBarDrag));
+ control().processEvent(TAlfEvent(EEventScrollPageDown));
+ }
+ }
+ else
+ {
+ if(mIsLongTapObserverSet)
+ {
+ // Stop the long tap timer
+ mLongTapTimer->Stop();
+ mData->mLongTapStarted = false;
+ //mIsLongTapObserverSet = EFalse;
+ }
+ else
+ {
+ //Do Nothing.
+ }
+ }
+ return EEventHandled;
+ }
+
+// ---------------------------------------------------------------------------
+// handles the pointerUp event
+//
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::handlePointerUpEvent()
+ {
+ // if thumb or track is clicked, change the graphics
+ if(mData->mCurrentState == ETrackPressed || mData->mCurrentState == EThumbPressed)
+ {
+ mData->mCurrentState = EReleased;
+ changeGraphics();
+ }
+
+ if(mData->mOperation)
+ {
+ //Somehow missed the Up event
+ stopDrag(NULL,0);
+ AlfScrollBarControl& slbrcntrl = static_cast<AlfScrollBarControl&>(control());
+ slbrcntrl.TactileEffectOnRelease();
+ }
+ if(mIsLongTapObserverSet)
+ {
+ // Stop the long tap timer
+ mLongTapTimer->Stop();
+
+ // Un-register with the roster for long tap events
+ control().Display()->Roster().SetPointerEventObservers(0,
+ control());
+ mIsLongTapObserverSet = EFalse;
+ }
+ }
+
+AlfEventStatus AlfScrollBarDefaultBaseElement::handleLongTapEvent()
+ {
+ AlfEventStatus ret= EEventNotHandled;
+
+ if (isScrollbarTrackVisual(mData->mVisual))
+ {
+ mData->mLongTapStarted = true;
+ ret = trackVisualHit(mData->mVisual);
+ // Long tap Tactile feedback
+ AlfScrollBarControl& slbrcntrl = static_cast<AlfScrollBarControl&>(control());
+ slbrcntrl.TactileEffectOnTouchandHold();
+ }
+ return ret;
+ }
+
+//--------------------------------------------------------------------------
+//Overriden Apis from IAlfWidgetEventHandlers
+//--------------------------------------------------------------------------
+//
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarDefaultBaseElement::accept(
+ CAlfWidgetControl& /*aControl*/,
+ const TAlfEvent& aEvent ) const
+ {
+ // Scrollbar baseElement handles only EEventScrollBarClicked
+ // and EEventScrollBarClicked cusbtom events
+ // EEventScrollBarClicked event come from scrollbar control and
+ // EEventScrollBarModelChanged event comes from scrollable widget
+ if (aEvent.CustomParameter() == EEventScrollBarClicked ||
+ aEvent.CustomParameter() == EEventScrollBarModelChanged)
+ {
+ return true;
+ }
+ return false;
+ }
+
+IAlfWidgetEventHandler::AlfEventHandlerType AlfScrollBarDefaultBaseElement::eventHandlerType()
+ {
+ return IAlfWidgetEventHandler::EPresentationEventHandler;
+ }
+
+IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase AlfScrollBarDefaultBaseElement::eventExecutionPhase()
+ {
+ return IAlfWidgetEventHandler::ETunnellingPhaseEventHandler;
+ }
+
+AlfEventStatus AlfScrollBarDefaultBaseElement::offerEvent(
+ CAlfWidgetControl& /*aControl*/,
+ const TAlfEvent& aEvent )
+ {
+ AlfEventStatus ret= EEventNotHandled;
+ // Dont do event handling incase widget & thumb opacity is zero
+ if(mData->mWidgetOpacity && mData->mThumbOpacity )
+ {
+ if (aEvent.IsCustomEvent())
+ {
+ switch(aEvent.CustomParameter())
+ {
+ // The event is coming from scrollbale widget
+ case EEventScrollBarModelChanged:
+ {
+ if( mData->mScrollbarModel)
+ {
+ ScrollModelChangedEventData* scrollEventData =
+ (ScrollModelChangedEventData*)aEvent.CustomEventData();
+
+ // Change the model which intern will update visualization
+ mData->mScrollbarModel->changeData(
+ scrollEventData->mSpan,
+ scrollEventData->mViewLength,
+ scrollEventData->mViewStartPos);
+ ret=EEventHandled;
+ }
+ }
+ break;
+
+ case EEventMissedPointerUp:
+ {
+ mData->mLongTapStarted = false;
+ ret=EEventHandled;
+ handlePointerUpEvent();
+ }
+ break;
+
+ case EEventScrollBarClicked:
+ {
+ ret = handleScrollBarClickedEvent(aEvent);
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+ return ret;
+ }
+
+ AlfEventStatus AlfScrollBarDefaultBaseElement::handleScrollBarClickedEvent(
+ const TAlfEvent& aEvent )
+ {
+ AlfEventStatus ret= EEventNotHandled;
+ TAlfEvent * pntrEvent=(TAlfEvent *)aEvent.CustomEventData();
+ if(pntrEvent)
+ {
+ // Get the hit visual
+ CAlfVisual *focusvisual = pntrEvent->Visual();
+ if(focusvisual &&
+ pntrEvent->PointerEvent().iType == TPointerEvent::EButton1Down)
+ {
+ // check if the click is made on thumb
+ if (isScrollbarThumbVisual(focusvisual))
+ {
+ mData->mCurrentState = EThumbPressed;
+ // Change the graphics to pressed one
+ changeGraphics();
+ }
+ else if (isScrollbarTrackVisual(focusvisual))
+ {
+ mData->mCurrentState = ETrackPressed;
+ // Change the graphics to pressed one
+ changeGraphics();
+ }
+ }
+ // Blocking event processing in case of maxthumblength,
+ // case 1 : revert back the graphics change incase of maxscrollbar length
+ if(pntrEvent->PointerUp() && mData->mScrollbarModel->getViewLength() >= mData->mScrollbarModel->getTotalLength())
+ {
+ handlePointerUpEvent();
+ }
+ // case 2 : process the event in all other case except max length
+ else if( mData->mScrollbarModel->getViewLength() != mData->mScrollbarModel->getTotalLength())
+ {
+ processPointerEvent(pntrEvent);
+ }
+ // case2 : do nothing incase of maxscrollbar length
+ else
+ {
+ // do nothing
+ }
+ ret = EEventHandled;
+ }
+ else
+ {
+ ret = EEventNotHandled;
+ }
+
+ return ret;
+ }
+
+void AlfScrollBarDefaultBaseElement::setActiveStates(
+ unsigned int /*aStates*/)
+ {
+ //do nothing
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfScrollBarBaseElementInternal.
+// ---------------------------------------------------------------------------
+//
+
+// ---------------------------------------------------------------------------
+// initializes scrollbar layout
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::initializeLayout()
+ {
+ setThumbMinMaxLength();
+ calculateStepSizeAndThumbLength();
+ initializeTrackLayout();
+ initializeThumbLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// initializes scrollbar Track layout
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::initializeTrackLayout()
+ {
+
+ TAknWindowLineLayout ExtendedTrackLayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aid_size_touch_aascroll_bar(0).LayoutLine();
+ // negative offset for the extended active area layout.
+ // Width values based on LCT data for extended touch
+ mData->mExtendedTouch = - (ExtendedTrackLayoutHandle.iW -
+ mData->mRootLayout->Size().iX.ValueNow());
+
+ // Create Track Visuals
+ if(mData->mTrackLayout)
+ {
+ TAknWindowLineLayout TrackLayoutHandle =
+ AknLayoutScalable_UiAccel:: hc_scroll_bg_pane(0).LayoutLine();
+
+ // Root layout rect, parent rect for track and thumb layout
+ TRect rootLayoutRect(0,
+ 0,
+ mData->mRootLayout->Size().iX.ValueNow(),
+ mData->mRootLayout->Size().iY.ValueNow());
+
+ TAknLayoutRect TracklayoutRect;
+ TracklayoutRect.LayoutRect(rootLayoutRect, TrackLayoutHandle);
+ mData->mTrackLayout->SetRect(TracklayoutRect.Rect(),0.0);
+
+ // set position and size for extended track layout
+ setPositionAndSize(mData->mExtendedTrackLayout,
+ mData->mExtendedTouch,0 ,
+ mData->mExtendedTouch,
+ mData->mTrackLayout->Size().iY.ValueNow());
+
+ if(mData->mTrackTopImage &&
+ mData->mTrackMiddleImage &&
+ mData->mTrackEndImage)
+ {
+ // parent rect for track images
+ TRect Trackrect(0,
+ 0,
+ mData->mTrackLayout->Size().iX.ValueNow(),
+ mData->mTrackLayout->Size().iY.ValueNow());
+
+ TAknWindowLineLayout TrackTopHandle =
+ AknLayoutScalable_UiAccel::hc_scroll_bg_pane_g1(0).LayoutLine();
+ setLCTData(Trackrect,TrackTopHandle,mData->mTrackTopImage);
+
+ TAknWindowLineLayout TrackMiddleHandle =
+ AknLayoutScalable_UiAccel::hc_scroll_bg_pane_g2(0).LayoutLine();
+ setLCTData(Trackrect,TrackMiddleHandle,mData->mTrackMiddleImage);
+
+ TAknWindowLineLayout TrackEndHandle =
+ AknLayoutScalable_UiAccel::hc_scroll_bg_pane_g3(0).LayoutLine();
+ setLCTData(Trackrect,TrackEndHandle,mData->mTrackEndImage);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// initializes scrollbar Thumb layout
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::initializeThumbLayout()
+ {
+ // Create Track Visuals
+ if(mData->mTrackLayout)
+ {
+ if(mData->mThumbLayout)
+ {
+ // Get thumb WindowLine Layout
+ TAknWindowLineLayout ThumbLayoutHandle =
+ AknLayoutScalable_UiAccel::hc_scroll_handle_pane(0).LayoutLine();
+
+ // Root layout rect, parent rect for track and thumb layout
+ TRect rootLayoutRect(0,
+ 0,
+ mData->mRootLayout->Size().iX.ValueNow(),
+ mData->mRootLayout->Size().iY.ValueNow());
+
+ TAknLayoutRect ThumblayoutRect;
+ ThumblayoutRect.LayoutRect(rootLayoutRect, ThumbLayoutHandle);
+
+ // set thumb height and thumb start position from model
+ mLCTData->height = mData->mThumbLength;
+
+ mLCTData->top =
+ ceil(mData->mStepSize * mData->mScrollbarModel->getViewStartPosition());
+
+ setPositionAndSize(mData->mThumbLayout,
+ ThumblayoutRect.Rect().iTl.iX,
+ mLCTData->top,
+ ThumblayoutRect.Rect().Size().iWidth,
+ mLCTData->height);
+ // Setting position and size for extended thumb layout
+ setPositionAndSize(mData->mExtendedThumbLayout ,
+ mData->mExtendedTouch ,
+ 0,
+ mData->mExtendedTouch,
+ mLCTData->height);
+
+ if(mData->mThumbTopImage &&
+ mData->mThumbMiddleImage &&
+ mData->mThumbEndImage)
+ {
+ // parent rect for thumb images
+ TRect ThumbRect(0,
+ 0,
+ mData->mThumbLayout->Size().iX.ValueNow(),
+ mData->mThumbLayout->Size().iY.ValueNow());
+
+ TAknWindowLineLayout ThumbTopHandle =
+ AknLayoutScalable_UiAccel::hc_scroll_handle_pane_g1(0).LayoutLine();
+ setLCTData(ThumbRect,ThumbTopHandle,mData->mThumbTopImage);
+
+ TAknWindowLineLayout ThumbMiddleHandle =
+ AknLayoutScalable_UiAccel::hc_scroll_handle_pane_g2(0).LayoutLine();
+ setLCTData(ThumbRect,ThumbMiddleHandle,mData->mThumbMiddleImage);
+
+ TAknWindowLineLayout ThumbEndHandle =
+ AknLayoutScalable_UiAccel::hc_scroll_handle_pane_g3(0).LayoutLine();
+ setLCTData(ThumbRect,ThumbEndHandle,mData->mThumbEndImage);
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// sets LCT Data (position and size) for the visual
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::setLCTData(const TRect& aRect ,
+ TAknWindowLineLayout& aWindowLineLayout,
+ CAlfVisual * aVisual)
+ {
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect(aRect, aWindowLineLayout);
+
+ setPositionAndSize(aVisual,layoutRect.Rect().iTl.iX,layoutRect.Rect().iTl.iY,
+ layoutRect.Rect().Size().iWidth,layoutRect.Rect().Size().iHeight);
+ }
+
+// ---------------------------------------------------------------------------
+// sets position and size for the visual
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::setPositionAndSize(CAlfVisual * aVisual,
+ int aXVal,int aYVal,
+ int aWidth,int aHeight)
+ {
+ TAlfRealPoint trackTopPnt(aXVal,aYVal);
+ TAlfRealSize trackTopSize(aWidth,aHeight);
+ aVisual->SetPos(trackTopPnt,0);
+ aVisual->SetSize(trackTopSize,0);
+ }
+
+// ---------------------------------------------------------------------------
+// initializes scrollbar model pointer for further reference
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::initializeScrollModel()
+ {
+ // Store the ScrollBar Model Pointer;
+ IAlfWidgetFactory& widgetFactory =AlfWidgetEnvExtension::widgetFactory(control().Env());
+ AlfScrollBarWidget* wdgt = static_cast<AlfScrollBarWidget*>(widgetFactory.findWidget(control().widget()->widgetName()));
+ //Get model pointer
+ IAlfScrollBarModel* model = static_cast<IAlfScrollBarModel*>(wdgt->model());
+ mData->mScrollbarModel = static_cast<AlfScrollBarModel*>(model);
+ }
+
+
+// ---------------------------------------------------------------------------
+// Set images for the track
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::setTrackImage()
+ {
+ TInt flags = EAlfTextureFlagSkinContent;
+ flags |= EAlfTextureFlagAutoSize;
+
+ // Create skin Image
+ TAlfImage trackTopImage(KAknsIIDQsnCpScrollBgTop,TSize(0,0),
+ EAspectRatioNotPreserved,NULL,
+ -1,-1,0.f,0.f,1.f,1.f,
+ (TAlfTextureFlags)flags);
+ TAlfImage trackMiddleImage(KAknsIIDQsnCpScrollBgMiddle, TSize(0,0),
+ EAspectRatioNotPreserved, NULL,
+ -1, -1, 0.f, 0.f, 1.f, 1.f,
+ (TAlfTextureFlags)flags);
+ TAlfImage trackEndImage(KAknsIIDQsnCpScrollBgBottom, TSize(0,0),
+ EAspectRatioNotPreserved, NULL,
+ -1, -1, 0.f, 0.f, 1.f, 1.f,
+ (TAlfTextureFlags)flags);
+ TAlfImage trackTopPressedImage(KAknsIIDQsnCpScrollBgTopPressed,TSize(0,0),
+ EAspectRatioNotPreserved,NULL,
+ -1,-1,0.f,0.f,1.f,1.f,
+ (TAlfTextureFlags)flags);
+ TAlfImage trackMiddlePressedImage(KAknsIIDQsnCpScrollBgMiddlePressed, TSize(0,0),
+ EAspectRatioNotPreserved, NULL,
+ -1, -1, 0.f, 0.f, 1.f, 1.f,
+ (TAlfTextureFlags)flags);
+ TAlfImage trackEndPressedImage(KAknsIIDQsnCpScrollBgBottomPressed, TSize(0,0),
+ EAspectRatioNotPreserved, NULL,
+ -1, -1, 0.f, 0.f, 1.f, 1.f,
+ (TAlfTextureFlags)flags);
+
+ // Set Image on visuals
+ mData->mTrackTopImage->SetImage(trackTopImage);
+ mData->mTrackMiddleImage->SetImage(trackMiddleImage);
+ mData->mTrackEndImage->SetImage(trackEndImage);
+ mData->mTrackTopImage->SetSecondaryImage(trackTopPressedImage);
+ mData->mTrackMiddleImage->SetSecondaryImage(trackMiddlePressedImage);
+ mData->mTrackEndImage->SetSecondaryImage(trackEndPressedImage);
+ }//End of setImage
+
+// ---------------------------------------------------------------------------
+// Set images for the thumb
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::setThumbImage()
+ {
+ TInt flags = EAlfTextureFlagSkinContent;
+ flags |= EAlfTextureFlagAutoSize;
+
+ TAlfImage thumbTopImage(KAknsIIDQsnCpScrollHandleTop,TSize(0,0),
+ EAspectRatioNotPreserved,NULL,
+ -1,-1,0.f,0.f,1.f,1.f,
+ (TAlfTextureFlags)flags);
+ TAlfImage thumbMiddleImage(KAknsIIDQsnCpScrollHandleMiddle, TSize(0,0),
+ EAspectRatioNotPreserved, NULL,
+ -1, -1, 0.f, 0.f, 1.f, 1.f,
+ (TAlfTextureFlags)flags);
+ TAlfImage thumbEndImage(KAknsIIDQsnCpScrollHandleBottom, TSize(0,0),
+ EAspectRatioNotPreserved, NULL,
+ -1, -1, 0.f, 0.f, 1.f, 1.f,
+ (TAlfTextureFlags)flags);
+ TAlfImage thumbTopPressedImage(KAknsIIDQsnCpScrollHandleTopPressed,TSize(0,0),
+ EAspectRatioNotPreserved,NULL,
+ -1,-1,0.f,0.f,1.f,1.f,
+ (TAlfTextureFlags)flags);
+ TAlfImage thumbMiddlePressedImage(KAknsIIDQsnCpScrollHandleMiddlePressed, TSize(0,0),
+ EAspectRatioNotPreserved, NULL,
+ -1, -1, 0.f, 0.f, 1.f, 1.f,
+ (TAlfTextureFlags)flags);
+ TAlfImage thumbEndPressedImage(KAknsIIDQsnCpScrollHandleBottomPressed, TSize(0,0),
+ EAspectRatioNotPreserved, NULL,
+ -1, -1, 0.f, 0.f, 1.f, 1.f,
+ (TAlfTextureFlags)flags);
+
+ mData->mThumbTopImage->SetImage(thumbTopImage);
+ mData->mThumbMiddleImage->SetImage(thumbMiddleImage);
+ mData->mThumbEndImage->SetImage(thumbEndImage);
+ mData->mThumbTopImage->SetSecondaryImage(thumbTopPressedImage);
+ mData->mThumbMiddleImage->SetSecondaryImage(thumbMiddlePressedImage);
+ mData->mThumbEndImage->SetSecondaryImage(thumbEndPressedImage);
+
+ }//End of setImage
+// ---------------------------------------------------------------------------
+// change images for the track
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::changeTrackImage(bool aPressed)
+ {
+ if(aPressed)
+ {
+ TAlfTimedValue alpha(1.0, 0.0);
+ mData->mTrackTopImage->SetSecondaryAlpha(alpha);
+ mData->mTrackMiddleImage->SetSecondaryAlpha(alpha);
+ mData->mTrackEndImage->SetSecondaryAlpha(alpha);
+ }
+ else
+ {
+ TAlfTimedValue alpha(0.0, 0.0);
+ mData->mTrackTopImage->SetSecondaryAlpha(alpha);
+ mData->mTrackMiddleImage->SetSecondaryAlpha(alpha);
+ mData->mTrackEndImage->SetSecondaryAlpha(alpha);
+
+ }
+ }
+// ---------------------------------------------------------------------------
+// change images for the thumb
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::changeThumbImage(bool aPressed)
+ {
+ if(aPressed)
+ {
+ TAlfTimedValue alpha(1.0,0.0);
+ mData->mThumbTopImage->SetSecondaryAlpha(alpha);
+ mData->mThumbMiddleImage->SetSecondaryAlpha(alpha);
+ mData->mThumbEndImage->SetSecondaryAlpha(alpha);
+ }
+ else
+ {
+ TAlfTimedValue alpha(0.0,0.0);
+ mData->mThumbTopImage->SetSecondaryAlpha(alpha);
+ mData->mThumbMiddleImage->SetSecondaryAlpha(alpha);
+ mData->mThumbEndImage->SetSecondaryAlpha(alpha);
+ }
+ }
+// ---------------------------------------------------------------------------
+// calculates Step size and Thumb length
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::calculateStepSizeAndThumbLength()
+ {
+ int totalLength = mData->mScrollbarModel->getTotalLength();
+ int viewLength = mData->mScrollbarModel->getViewLength();
+ int viewStartPos = mData->mScrollbarModel->getViewStartPosition();
+
+ TAlfTimedPoint size = mData->mRootLayout->Size();
+ mData->mThumbLength = ((float)viewLength /
+ (float)totalLength) * size.iY.ValueNow();
+
+ if(mData->mThumbMinLength != 0)
+ {
+ if(mData->mThumbLength<mData->mThumbMinLength)
+ {
+ mData->mThumbLength = mData->mThumbMinLength;
+ }
+ else if(mData->mThumbLength>mData->mThumbMaxLength)
+ {
+ mData->mThumbLength = mData->mThumbMaxLength;
+ }
+ else
+ {
+
+ }
+ }
+ else
+ {
+
+ }
+
+ if(totalLength != viewLength)
+ {
+ mData->mStepSize = (size.iY.ValueNow() - mData->mThumbLength) /
+ (totalLength - viewLength);
+ }
+ else
+ {
+ mData->mStepSize = 0.0;
+ }
+ }
+// ---------------------------------------------------------------------------
+// set maximum and minimum thumblength value from LCT data
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::setThumbMinMaxLength()
+ {
+ TAknWindowLineLayout ThumbMinLengthHandle =
+ AknLayoutScalable_UiAccel::
+ aid_size_min_handle_cp002(0).LayoutLine();
+
+ TAknWindowLineLayout ThumbMaxLengthHandle =
+ AknLayoutScalable_UiAccel::
+ aid_hc_size_max_handle(0).LayoutLine();
+
+ // Since LCT data corresponding to this is very small (20),
+ // we are hardcoding the value as 30,this has to be removed
+ // once if we get the correct LCT data
+ // mData->mThumbMinLength = 30;
+ mData->mThumbMinLength = ThumbMinLengthHandle.iH;
+ mData->mThumbMaxLength = mData->mRootLayout->Size().iY.ValueNow() -
+ ThumbMaxLengthHandle.ib;
+ }
+
+// ---------------------------------------------------------------------------
+// createDefaultBaseElement, initializes class member variables
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::createDefaultBaseElement()
+ {
+
+ mData = new (EMM) ScrollBarBaseElementData();
+ mData->mOperation = ENop;
+ mData->mVisual = NULL;
+ mData->mDragPoint = TPoint(0,0);
+ mData->mLongTapPos = TPoint(0,0);
+ mData->mDragStartStep = 0;
+ mData->mViewLength = 0;
+ mData->mThumbLength = 0;
+ mData->mThumbMinLength = 0;
+ mData->mThumbMaxLength = 0;
+ mData->mStepSize = 0;
+ mData->mThumbSizeChanged = false;
+ mData->mWidgetOpacity = 1.0;
+ mData->mThumbOpacity = 1.0;
+ mData->mLongTapStarted = false;
+ mData->mCurrentState = EReleased;
+ mData->mTrackLayout = NULL;
+ mData->mTrackTopImage = NULL ;
+ mData->mTrackMiddleImage = NULL ;
+ mData->mTrackEndImage = NULL ;
+ mData->mThumbLayout = NULL ;
+ mData->mThumbTopImage = NULL ;
+ mData->mThumbMiddleImage = NULL ;
+ mData->mThumbEndImage = NULL ;
+ mData->mExtendedTouch = 0;
+ mData->mScrollbarModel = NULL;
+ mData->mThumbAnimationTime = 0;
+
+ mLCTData = new ( EMM ) ScrollbarThumbLCTData();
+ mLCTData->left=0;
+ mLCTData->top=0;
+ mLCTData->right=0;
+ mLCTData->bottom=0;
+ mLCTData->height=0;
+ mLCTData->width=0;
+
+ }//End of createDefaultBaseElement
+
+// ---------------------------------------------------------------------------
+// initializeThumbDragData
+//
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarDefaultBaseElement::initializeThumbDragData( const TPoint& aPointerPos )
+ {
+ if(mData->mVisual )
+ {
+ mData->mOperation = EMoveItem;
+ mData->mDragPoint = aPointerPos;
+ mData->mDragStartStep = mData->mScrollbarModel->getViewStartPosition();
+ }
+ else
+ {
+ // Do Nothing
+ }
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// stopDrag
+// Stop Dragging
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarDefaultBaseElement::stopDrag( CAlfVisual* /*aHitVisual*/,
+ TInt /*aAnimTime*/)
+ {
+ TRAPD(err,
+ control().Display()->Roster().SetPointerEventObservers(
+ 0,
+ control()));
+
+ if(err == KErrNone)
+ {
+ if(mData->mVisual)
+ {
+ mData->mVisual = NULL;
+ }
+ mData->mOperation = ENop;
+ return true;
+ }
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// changeGraphics
+// change the skin image graphics based on the pressedState
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarDefaultBaseElement::changeGraphics()
+ {
+ if(mData->mCurrentState == EReleased) // Normal graphics
+ {
+ changeTrackImage(false);
+ changeThumbImage(false);
+ }
+ else if(mData->mCurrentState == EThumbPressed || mData->mCurrentState == ETrackPressed) // Pressed graphics
+ {
+ if(mData->mCurrentState == EThumbPressed)
+ {
+ // set the index for pressed graphics (thumb and track)
+ changeTrackImage(true);
+ changeThumbImage(true);
+ }
+ else if (mData->mCurrentState == ETrackPressed)
+ {
+ // set the index for pressed graphics (track)
+ changeTrackImage(true);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// isScrollbarTrackVisual
+// checks whether the visual is scrollbar track visual or not
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarDefaultBaseElement::isScrollbarTrackVisual(CAlfVisual *aVisual)
+ {
+ if(aVisual == mData->mExtendedTrackLayout ||
+ aVisual == mData->mTrackTopImage ||
+ aVisual == mData->mTrackMiddleImage ||
+ aVisual == mData->mTrackEndImage)
+ {
+ return true;
+ }
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// isScrollbarThumbVisual
+// checks whether the visual is scrollbar thumb visual or not
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarDefaultBaseElement::isScrollbarThumbVisual(CAlfVisual *aVisual)
+ {
+ if(aVisual == mData->mExtendedThumbLayout ||
+ aVisual == mData->mThumbTopImage ||
+ aVisual == mData->mThumbMiddleImage ||
+ aVisual == mData->mThumbEndImage)
+ {
+ return true;
+ }
+ return false;
+ }
+
+ }//namespace Alf
+
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/src/alfscrollbarlongtaptimer.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2007 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: Timer for creating longtap event
+*
+*/
+#include "alfscrollbarlongtaptimer.h"
+#include <alf/ialfscrollbardefaultbaseelement.h>
+#include "ialfscrollbarbaseelementinternal.h"
+
+const int KInitialTimeInterval = 200000;
+const int KTimeInterval = 100000;
+
+namespace Alf
+ {
+
+//---------------------------------------------------------------------------
+// Constructor
+//---------------------------------------------------------------------------
+//
+AlfScrollBarLongTapTimer::AlfScrollBarLongTapTimer(
+ IAlfScrollBarDefaultBaseElement* aBaseElement):CActive(EPriorityStandard)
+ {
+ iTimer.CreateLocal();
+ iBaseElement = aBaseElement;
+ CActiveScheduler::Add(this);
+ iState = EStopped;
+ }
+
+//---------------------------------------------------------------------------
+// Destructor
+//---------------------------------------------------------------------------
+//
+AlfScrollBarLongTapTimer::~AlfScrollBarLongTapTimer()
+ {
+ Stop();
+ iTimer.Close();
+ }
+//---------------------------------------------------------------------------
+// Activates the timer.
+//---------------------------------------------------------------------------
+//
+void AlfScrollBarLongTapTimer::Start()
+ {
+ if (iState == ERunning)
+ return;
+ if (!IsActive())
+ {
+ iTimer.After(iStatus, TTimeIntervalMicroSeconds32(KInitialTimeInterval));
+ SetActive();
+ }
+ iState = ERunning;
+ }
+//---------------------------------------------------------------------------
+// stops the timer.
+//---------------------------------------------------------------------------
+//
+void AlfScrollBarLongTapTimer::Stop()
+ {
+ Cancel();
+ iState = EStopped;
+ }
+//---------------------------------------------------------------------------
+// Handles an active object's request completion event.
+//---------------------------------------------------------------------------
+//
+void AlfScrollBarLongTapTimer::RunL()
+ {
+ IAlfScrollBarBaseElementInternal* elementInternal =
+ static_cast<IAlfScrollBarBaseElementInternal*> (
+ iBaseElement->makeInterface(IAlfScrollBarBaseElementInternal::type()));
+
+ if (iState == ERunning)
+ {
+ iTimer.After(iStatus, TTimeIntervalMicroSeconds32(KTimeInterval));
+ SetActive();
+ }
+ if(elementInternal)
+ {
+ elementInternal->handleLongTapEvent();
+ }
+ }
+
+//---------------------------------------------------------------------------
+// Implements cancellation of an outstanding request.
+//---------------------------------------------------------------------------
+//
+void AlfScrollBarLongTapTimer::DoCancel()
+ {
+ iTimer.Cancel();
+ }
+
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/src/alfscrollbarmodel.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,554 @@
+/*
+* 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: Model implementation with utilities for scrollbar widget.
+*
+*/
+//User Includes
+#include "alfscrollbarmodel.h"
+#include "alfscrollbarwidget.h"
+
+//Widget includes
+#include <alf/ialfscrollbardefaultbaseelement.h>
+#include "ialfscrollbarbaseelementinternal.h"
+#include "alfscrollbardefaultbaseelement.h"
+
+#include <alf/ialfscrollbarwidget.h>
+#include <alf/alfmodel.h>
+#include <alf/alfexception.h>
+
+namespace Alf
+ {
+
+/*
+ * To store data required in the model class
+ */
+struct ScrollbarModelDataImpl
+ {
+ int mTotalLength;
+ int mViewLength;
+ int mViewStartPosition;
+ };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// C++ default constructor.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarModel::AlfScrollBarModel(IAlfVariantType* aDataSource):
+ mModel ( NULL )
+ {
+ construct ( aDataSource );
+
+ // Create an instance of model specific data
+ mModelData = new (EMM) ScrollbarModelDataImpl();
+
+ // Initialise model data with default values
+ mModelData->mTotalLength = 0;
+ mModelData->mViewLength = 0;
+ mModelData->mViewStartPosition = 0;
+
+ mScrollWidget = NULL;
+ }//End of AlfScrollBarModel function.
+
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarModel::~AlfScrollBarModel()
+ {
+ if(mModelData)
+ delete mModelData;
+
+ delete mModel;
+ }//End of ~AlfScrollBarModel function.
+
+
+// ---------------------------------------------------------------------------
+// Second Phase Constructor.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::construct ( IAlfVariantType* /*aDataSource */)
+ {
+
+ }//End of construct function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfModel.
+// Add a new observer to be notified of any changes in the model.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::addModelChangeObserver(
+ IAlfModelChangeObserver& /*aObserver*/)
+ {
+
+ }//End of addModelChangeObserver function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfModel.
+// Add a new observer to be notified of any changes in the model.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::removeModelChangeObserver(
+ IAlfModelChangeObserver& /*aObserver*/ )
+ {
+
+ }//End of function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfModel.
+// Api to change the model completely at one short.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::setData ( IAlfVariantType* /*aData*/ )
+ {
+
+ }//End of removeModelChangeObserver function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfModel.
+// Change a given of data fields in the model.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::updateData(
+ TInt /*aNumContainerIndices*/,
+ TInt* /*aContainerIndices*/,
+ IAlfVariantType* /*aData*/)
+ {
+ ALF_THROW(AlfException,EInvalidArgument,"updateData")
+ }//End of updateData function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfModel.
+// Add a number of data fields in the model data.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::addData(
+ TInt /*aNumContainerIndices*/,
+ TInt* /*aContainerIndices*/,
+ IAlfVariantType* /*aData*/)
+ {
+ ALF_THROW(AlfException,EInvalidArgument,"addData")
+ }//End of addData function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfModel.
+// Remove a number of data fields in the model data.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::removeData(
+ TInt /*aNumContainerIndices*/,
+ TInt* /*aContainerIndices*/ )
+ {
+ ALF_THROW(AlfException,EInvalidArgument,"removeData")
+ }//End of removeData function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfModel.
+// Api for executing batch operations.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::executeOperations(
+ AlfPtrVector<AlfModelOperation>& /*aOperationsArray*/)
+ {
+ ALF_THROW(AlfException,EInvalidArgument,"executeOperations")
+ }//End of executeOperations function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfModel.
+// Api for executing one operation at a Time.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::executeOperation(AlfModelOperation* /*aOperation*/)
+ {
+ ALF_THROW(AlfException,EInvalidArgument,"executeOperation")
+ }//End of executeOperation function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfModel.
+// Clears the Model.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::clearModel()
+ {
+
+ }//End of clearModel function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfModel.
+// Get the root data object of this model.
+// ---------------------------------------------------------------------------
+//
+IAlfVariantType* AlfScrollBarModel::data() const
+ {
+ return NULL;
+ }//End of data function.
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the scrollbar model.
+// ---------------------------------------------------------------------------
+IAlfInterfaceBase* AlfScrollBarModel::makeInterface(const IfId& aType)
+ {
+ IAlfInterfaceBase* ret ( 0 );
+ UString param ( aType.mImplementationId );
+
+ if ( param == IAlfScrollBarModel::type().mImplementationId )
+ {
+ ret = static_cast<IAlfScrollBarModel*>(this);
+ }
+ else if ( param == IAlfModel::type().mImplementationId )
+ {
+ ret = static_cast<IAlfModel*>(this);
+ }
+ else
+ {
+ //do nothing
+ }
+
+ return ret;
+ }//End of makeInterface function.
+
+// ---------------------------------------------------------------------------
+// From class IAlfScrollBarModel.
+// Create the default data structure for a ScrollBar widget.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::initializeData(
+ int aTotalLength,
+ int aViewLengthInSteps,
+ int aViewStartPosition)
+ {
+
+ validateAllData(aTotalLength,
+ aViewLengthInSteps,
+ aViewStartPosition);
+
+ // Initialise model with the data provided
+ mModelData->mTotalLength = aTotalLength;
+ mModelData->mViewLength = aViewLengthInSteps;
+ mModelData->mViewStartPosition = aViewStartPosition;
+
+ changeData(
+ mModelData->mTotalLength,
+ mModelData->mViewLength,
+ mModelData->mViewStartPosition);
+
+ }//End of function.
+
+// ---------------------------------------------------------------------------
+// Set Total Length .
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::setTotalLength(int aTotalLength)
+ {
+ int viewLength = getViewLength();
+ int viewStartPos = getViewStartPosition();
+
+ if (validateAllData(aTotalLength,
+ viewLength,
+ viewStartPos))
+ {
+ updateScrollBarModel(aTotalLength, -1, -1 );
+ }
+ else
+ {
+ updateScrollBarModel(aTotalLength, viewLength, viewStartPos);
+ }
+ }//End of setTotalLength function.
+
+// ---------------------------------------------------------------------------
+// Set ViewLength.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::setViewLength(int aViewLengthInSteps)
+ {
+ validateViewLength(aViewLengthInSteps);
+ updateScrollBarModel ( -1, aViewLengthInSteps, -1);
+
+ }//End of setViewLength function.
+
+
+// ---------------------------------------------------------------------------
+// Set Thumb Position.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::setViewStartPosition ( int aViewStartPosition )
+ {
+ validateViewStartPos(aViewStartPosition);
+ updateScrollBarModel (-1, -1, aViewStartPosition);
+ }//End of setViewStartPosition function.
+
+// ---------------------------------------------------------------------------
+// Changes all the data of model with new values.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::changeData(
+ int aTotalLength,
+ int aViewLength,
+ int aViewStartPosition )
+ {
+
+ validateAllData(aTotalLength,
+ aViewLength,
+ aViewStartPosition);
+
+ if(getViewStartPosition() == aViewStartPosition &&
+ getTotalLength() == aTotalLength &&
+ getViewLength() == aViewLength)
+ {
+ // nothing is changed
+ return ;
+ }
+ else
+ {
+ updateScrollBarModel(
+ aTotalLength,
+ aViewLength,
+ aViewStartPosition);
+ }
+
+
+ }//End of changeData function.
+
+// ---------------------------------------------------------------------------
+// getTotalLength.
+// ---------------------------------------------------------------------------
+//
+int AlfScrollBarModel::getTotalLength() const
+ {
+ return mModelData->mTotalLength;
+ }//End of getTotalLength function.
+
+
+// ---------------------------------------------------------------------------
+// Returns ViewLength.
+// ---------------------------------------------------------------------------
+//
+int AlfScrollBarModel::getViewLength() const
+ {
+
+ return mModelData->mViewLength;
+ }//End of getViewLength function.
+
+
+// ---------------------------------------------------------------------------
+// Returns ViewStartPosition.
+// ---------------------------------------------------------------------------
+//
+int AlfScrollBarModel::getViewStartPosition() const
+ {
+ return mModelData->mViewStartPosition;
+ }//End of getViewStartPosition function.
+
+// ---------------------------------------------------------------------------
+// Updates the ScrollBar visualization
+// according to the model data.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::updateScrollBarVisualization()
+ {
+ //updateVisualization with new model
+ IAlfElement* element = (mScrollWidget)->control()->findElement("BaseElement");
+ IAlfScrollBarDefaultBaseElement* defaultLCTBaseElement = static_cast<IAlfScrollBarDefaultBaseElement*> (
+ element->makeInterface (IAlfScrollBarDefaultBaseElement::type() ) );
+ AlfScrollBarDefaultBaseElement* baseElement = (AlfScrollBarDefaultBaseElement*)defaultLCTBaseElement;
+
+ baseElement->updateVisualization();
+ }
+
+// ---------------------------------------------------------------------------
+// Updates the ScrollBar model according to the parameters.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::updateScrollBarModel(
+ int aTotalLength,
+ int aViewLength,
+ int aViewStartPosition)
+ {
+ //change only if the parameters are non negative .
+
+ if(aTotalLength!=-1)
+ {
+ mModelData->mTotalLength = aTotalLength;
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+ if(aViewLength!=-1)
+ {
+ mModelData->mViewLength = aViewLength;
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+
+ if(aViewStartPosition!=-1)
+ {
+ mModelData->mViewStartPosition = aViewStartPosition;
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+ //updateVisualization with new model
+ updateScrollBarVisualization();
+ }//End of updateScrollBarModel function.
+
+// ---------------------------------------------------------------------------
+// validateViewLength
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarModel::validateViewLength(int & aViewLength)
+ {
+ bool ret = true;
+
+ if (aViewLength <= 0)
+ {
+ // Minimum view length
+ aViewLength = 1;
+ ret = false;
+ }
+ else
+ {
+ int totalLength = getTotalLength();
+ if (aViewLength > totalLength)
+ {
+ aViewLength = totalLength;
+ ret = false;
+ }
+ else
+ {
+ // do nothing
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// validateViewStartPos
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarModel::validateViewStartPos(int & aViewStartPos)
+ {
+ bool ret = true;
+
+ if (aViewStartPos < 0)
+ {
+ aViewStartPos = 0;
+ ret = false;
+ }
+ else
+ {
+ int totalLength = getTotalLength();
+ int viewLength = getViewLength();
+ if (aViewStartPos > (totalLength-viewLength))
+ {
+ // Maximum value
+ aViewStartPos = totalLength-viewLength;
+ ret = false;
+ }
+ else
+ {
+ // do nothing
+ }
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// validateAllData
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarModel::validateAllData(int & aTotalLength,
+ int & aViewLength,
+ int & aViewStartPos)
+ {
+ bool ret = true;
+ if (aTotalLength <= 0)
+ {
+ aTotalLength = 1;
+ ret = false;
+ }
+ else
+ {
+ // do nothing
+ }
+
+ // validate view length
+ if (aViewLength <= 0)
+ {
+ aViewLength = 1;
+ ret = false;
+ }
+ else if (aViewLength > aTotalLength)
+ {
+ // Setting maximum possible value of View Length
+ aViewLength = aTotalLength;
+ ret = false;
+ }
+ else
+ {
+ // do nothing
+ }
+
+ // validate view start pos
+ if (aViewStartPos < 0)
+ {
+ aViewStartPos = 0;
+ ret = false;
+ }
+ else if (aViewStartPos > (aTotalLength-aViewLength) )
+ {
+ // Setting maximum possible value of View Length
+ aViewStartPos = aTotalLength-aViewLength;
+ ret = false;
+ }
+ else
+ {
+ // do nothing
+ }
+
+ // No need to validate aFocusPos for now
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// StoreWidget
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarModel::storeWidget(AlfScrollBarWidget* aWidget)
+ {
+ mScrollWidget = aWidget;
+ }
+}//Namespace Alf
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/src/alfscrollbarwidget.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,307 @@
+/*
+* 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 for scrollbar widget.
+ *
+*/
+
+
+// Alfred Client includes
+#include <alf/alfenv.h>
+
+// Widget Model includes
+#include "alf/alfelement.h"
+#include <alf/alfexception.h>
+
+// Widget Includes
+#include <alf/ialfscrollbardefaultbaseelement.h>
+#include <alf/alfscrollbarproductids.h>
+// Internal includes
+
+#include "alfscrollbardefaultbaseelement.h"
+#include "alfscrollbarwidget.h"
+#include "alfscrollbarmodel.h"
+#include "alfscrollbarcontrol.h"
+#include <alf/alfwidgetenvextension.h>
+using namespace alfscrollbarwidget;
+
+using Alf::CommonWidgetEvent;
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// Creator Method.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarWidget* AlfScrollBarWidget :: create(
+ CAlfEnv& aEnv,
+ IAlfContainerWidget& aContainer,
+ const char* aWidgetId,
+ DuiNode *aNode,
+ const char *aFilePath,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ return (new( EMM ) AlfScrollBarWidget(aEnv,
+ aContainer, aWidgetId, aNode, aFilePath, aCustomData));
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarWidget::~AlfScrollBarWidget()
+ {
+ if(mScrollModel)
+ {
+ delete mScrollModel;
+ }
+ else
+ {
+
+ }
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidget.
+// Getter for the parent container. The ownership not passed.
+// ---------------------------------------------------------------------------
+//
+IAlfContainerWidget* AlfScrollBarWidget::parent() const
+ {
+ return mWidget->parent();
+ }
+
+
+// From class MAlfInterfaceBase.
+
+// ---------------------------------------------------------------------------
+// Getter for interfaces provided by the scrollbar widget.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfScrollBarWidget :: makeInterface(const IfId& aType)
+ {
+ UString param ( aType.mImplementationId );
+
+ if (param == IAlfScrollBarWidget::type().mImplementationId)
+ {
+ return static_cast<IAlfScrollBarWidget*>(this);
+ }
+ else if (param == IAlfWidget::type().mImplementationId)
+ {
+ return static_cast<IAlfWidget*>(this);
+ }
+ else
+ {
+ //do nothing
+ }
+
+ return mWidget->makeInterface(aType);
+ }
+
+
+// From class IAlfWidget.
+
+// ---------------------------------------------------------------------------
+// Getter for the control. The ownership is not passed.
+// ---------------------------------------------------------------------------
+//
+CAlfWidgetControl* AlfScrollBarWidget :: control() const
+ {
+ return mWidget->control();
+ }
+
+
+// ---------------------------------------------------------------------------
+// Setter for the control. The control is owned by the Alfred environment.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarWidget :: setControl(
+ CAlfWidgetControl* aControl, bool /*aDeletePreviousControl*/ )
+ {
+ mScrollControl = aControl;
+ mWidget->setControl(aControl);
+ }
+
+
+// ---------------------------------------------------------------------------
+// Getter for the model. The ownership is not passed.
+// ---------------------------------------------------------------------------
+//
+IAlfModel* AlfScrollBarWidget :: model()
+ {
+ return mScrollModel;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Setter for the model. Ownership is passed and the old model is released.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarWidget :: setModel( IAlfModel* aModel, bool /*aTakeOwnerShip*/)
+ {
+ IAlfElement* baseelement = control()->findElement ("BaseElement");
+ if(baseelement)
+ {
+ IAlfScrollBarBaseElementInternal* elementInternal =
+ static_cast<IAlfScrollBarBaseElementInternal*> (
+ baseelement->makeInterface(
+ IAlfScrollBarBaseElementInternal::type()));
+
+ if(aModel==NULL)
+ {
+ if(elementInternal)
+ {
+ elementInternal->destroyVisualization();
+ }
+ delete mScrollModel;
+ mScrollModel = NULL;
+ }
+ else
+ {
+ if(mScrollModel)
+ {
+ delete mScrollModel;
+ mScrollModel = NULL;
+
+ mScrollModel = static_cast<IAlfScrollBarModel*>( aModel->makeInterface(
+ IAlfScrollBarModel::type()));
+ AlfScrollBarModel* scrollBarModel = (AlfScrollBarModel*)mScrollModel;
+ // Store the widget pointer in model
+ scrollBarModel->storeWidget(this);
+
+ if(mScrollModel && elementInternal)
+ {
+ elementInternal->initializeScrollModel();
+ elementInternal->updateVisualization();
+ }
+ }
+ else
+ {
+ mScrollModel =static_cast<IAlfScrollBarModel*>( aModel->makeInterface(
+ IAlfScrollBarModel::type()));
+ AlfScrollBarModel* scrollBarModel = (AlfScrollBarModel*)mScrollModel;
+ scrollBarModel->storeWidget(this);
+
+ if(mScrollModel && elementInternal)
+ {
+ elementInternal->createVisualization();
+ }
+ }
+
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Get the name of the widget instance.
+// ---------------------------------------------------------------------------
+//
+const char* AlfScrollBarWidget :: widgetName() const
+ {
+ return mWidget->widgetName();
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets/Releases the Focus from child widget of container.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarWidget :: setChildFocus(bool /*aFocus*/)
+ {
+ }
+
+
+//---------------------------------------------------------------------------
+// Creates the presentation for the widget from XML. Destroys any existing
+// presentation.
+//---------------------------------------------------------------------------
+//
+void AlfScrollBarWidget :: setPresentation(const char* /*aFilePath*/)
+ {
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// C++ default constructor.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarWidget :: AlfScrollBarWidget(
+ CAlfEnv& aEnv, IAlfContainerWidget& aContainer,
+ const char* aWidgetId, DuiNode * /*aNode*/,
+ const char * /*aFilePath*/,
+ AlfCustomInitDataBase* /*aCustomData*/)
+ {
+ mScrollModel = NULL;
+ mWidget.reset(new(EMM) AlfWidget(aWidgetId,aContainer,aEnv));
+ // Default Imperative Construction
+ constructDefault(aEnv);
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// Constructs default Visualization for widget.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarWidget :: constructDefault(CAlfEnv& aEnv)
+ {
+ const char* mBaseElementLoadId=KScrollBarDefaultBaseElement;
+
+ // Create Control
+ CAlfWidgetControl* ctrl = constructDefaultControl(aEnv);
+ setControl(ctrl);
+
+ // Create Element
+ IAlfWidgetFactory& widgetFactory = AlfWidgetEnvExtension::widgetFactory(control()->Env());
+
+ widgetFactory.createElement<IAlfElement>(mBaseElementLoadId,
+ baseElementName(),
+ *control());
+ }
+
+// ---------------------------------------------------------------------------
+// Construct and returns Scrollbar Control.
+// ---------------------------------------------------------------------------
+//
+CAlfWidgetControl *AlfScrollBarWidget :: constructDefaultControl(CAlfEnv& aEnv)
+ {
+ return(new(EMM) AlfScrollBarControl(aEnv) );
+ }
+
+// ---------------------------------------------------------------------------
+// Enables tactile feedback based on the flag state
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarWidget ::enableTactile(bool aFlag)
+ {
+ AlfScrollBarControl* scrollControl = (AlfScrollBarControl*)control();
+ scrollControl->EnableTactileFeedback(aFlag);
+ }
+
+// ---------------------------------------------------------------------------
+// Getter for tactile feedback state
+// ---------------------------------------------------------------------------
+//
+bool AlfScrollBarWidget ::IsTactileEnabled()
+ {
+ AlfScrollBarControl* scrollControl = (AlfScrollBarControl*)control();
+ return scrollControl->IsTactileFeedbackEnabled();
+ }
+
+ }//End of Alf
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/src/alfscrollbarwidgetfactoryplugin.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,299 @@
+/*
+* Copyright (c) 2009 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: Plugin factory implementation for scrollbar widget.
+*
+*/
+
+// WidgetModel Includes
+#include "alf/alfwidget.h"
+#include <alf/ialfwidget.h>
+
+// Symbian Includes
+#include <ecom/ecom.h>
+
+// OpenC Includes
+#include <libc/string.h>
+
+// Widget Includes
+#include <alf/ialfscrollbarwidget.h>
+#include <alf/alfscrollbarproductids.h>
+
+//Internal includes
+#include "alfscrollbarwidgetfactoryplugin.h"
+#include "alfscrollbarwidget.h"
+#include "alfscrollbarmodel.h"
+#include "alfscrollbardefaultbaseelement.h"
+
+using namespace osncore;
+
+namespace Alf
+ {
+const TInt KScrollBarWidgetFactoryPluginUid = {0x20010106};
+const int KProductCount = 3;
+
+
+// ---------------------------------------------------------------------------
+// Two-phased Symbian constructor.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarWidgetFactoryPlugin* AlfScrollBarWidgetFactoryPlugin::NewL()
+ {
+ return new (EMM) AlfScrollBarWidgetFactoryPlugin;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarWidgetFactoryPlugin::~AlfScrollBarWidgetFactoryPlugin()
+ {
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// Creates either a scrollbar widget or a scrollbar model.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfScrollBarWidgetFactoryPlugin::createProduct(
+ const char* aProduct,
+ void* aInitData)
+ {
+ IAlfInterfaceBase* ret (0);
+ if (aProduct == NULL)
+ {
+ // do nothing
+ }
+ else if (!strcmp(aProduct, KScrollBarWidget))
+ {
+ AlfWidgetInitData* initData = (AlfWidgetInitData*)aInitData;
+
+ if (initData == 0)
+ {
+ // Throw exception if init data is null
+ ALF_THROW(
+ AlfException,
+ ECommonError,
+ "Scrollbar widget initialization data was NULL.");
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+ if (initData->mWidgetId == 0)
+ {
+ // Assert that widget id in the initialization data is correct.
+ ALF_THROW(
+ AlfException,
+ ECommonError,
+ "Widget ID was NULL.");
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+ if (initData->mEnv == 0)
+ {
+ // Assert that the UI Accelerator Toolkit Environment
+ // in the initialization data is correct.
+ ALF_THROW(
+ AlfException,
+ ECommonError,
+ "Environment instance was NULL.");
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+ if (initData->mContainerWidget == 0)
+ {
+ // Assert that container widget pointer in the
+ // initialization data is correct.
+ ALF_THROW(
+ AlfException,
+ ECommonError,
+ "Container widget instance was NULL.");
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+ auto_ptr<AlfScrollBarWidget> widget(AlfScrollBarWidget::create(
+ *initData->mEnv,
+ *initData->mContainerWidget,
+ initData->mWidgetId,
+ initData->mNode,
+ initData->mFilePath,
+ initData->mCustomData));
+
+ ret = widget->makeInterface (IAlfScrollBarWidget::type());
+ widget.release();
+ }
+ else if (!strcmp(aProduct, KScrollBarModel))
+ {
+ auto_ptr<AlfScrollBarModel> model(new(EMM) AlfScrollBarModel(NULL));
+ ret = model->makeInterface (IAlfScrollBarModel::type());
+ model.release();
+ }
+ else if (!strcmp(aProduct, KScrollBarDefaultBaseElement))
+ {
+ AlfElementInitData* initData = (AlfElementInitData*) aInitData;
+ // TBD: Need to change the exceptions to scrollbar specific exceptions.
+ // Throw exception if init data is null
+ if (initData == 0)
+ {
+ ALF_THROW(
+ AlfException,
+ ECommonError,
+ "Scrollbar widget initialization data was NULL.");
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+ if (initData->mElementId == 0)
+ {
+ // Assert that element id in the initialization data is correct.
+ ALF_THROW(
+ AlfException,
+ ECommonError,
+ "Element ID was NULL.");
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+ if (initData->mControl == 0)
+ {
+ // Assert that the widget control is correct.
+ ALF_THROW(
+ AlfException,
+ ECommonError,
+ "Environment instance was NULL.");
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+ auto_ptr<AlfScrollBarDefaultBaseElement> element(
+ new(EMM) AlfScrollBarDefaultBaseElement(
+ (CAlfWidgetControl&)(*initData->mControl),
+ initData->mElementId,
+ initData->mNode,initData->mCustomData));
+
+ ret = element->makeInterface(IAlfScrollBarDefaultBaseElement::type());
+ element.release();
+ }
+ else
+ {
+ // Do Nothing
+ }
+
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From IAlfInterfaceBase.
+// Creates interface based on the given type.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfScrollBarWidgetFactoryPlugin::makeInterface(
+ const IfId& /*aType*/)
+ {
+ return NULL;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Returns the amount of products this factory can produce.
+// ---------------------------------------------------------------------------
+//
+int AlfScrollBarWidgetFactoryPlugin::productCount() const
+ {
+ return KProductCount;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Returns product information.
+// ---------------------------------------------------------------------------
+//
+const char* AlfScrollBarWidgetFactoryPlugin::productInfo (int aIndex) const
+ {
+ switch (aIndex)
+ {
+ case 0:
+ {
+ return KScrollBarWidget;
+ }
+
+ case 1:
+ {
+ return KScrollBarModel;
+ }
+
+ case 2:
+ {
+ return KScrollBarDefaultBaseElement;
+ }
+
+
+ default:
+ break;
+
+ }
+
+ return 0;
+ }
+
+ }// NameSpace
+
+
+// ---------------------------------------------------------------------------
+// OTHER EXPORTED FUNCTIONS.
+// ---------------------------------------------------------------------------
+//
+
+using namespace Alf;
+const TImplementationProxy ImplementationTable[] =
+ {
+#ifdef __EABI__
+ IMPLEMENTATION_PROXY_ENTRY (
+ KScrollBarWidgetFactoryPluginUid,
+ AlfScrollBarWidgetFactoryPlugin::NewL)
+#else
+ {
+ {KScrollBarWidgetFactoryPluginUid},
+ AlfScrollBarWidgetFactoryPlugin::NewL}
+#endif
+ };
+
+OSN_EXPORT const TImplementationProxy* ImplementationGroupProxy(
+ TInt& aTableCount)
+ {
+ aTableCount = sizeof (ImplementationTable) / sizeof (TImplementationProxy);
+
+ return ImplementationTable;
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/group/alfviewwidget.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2007 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: Project definition file
+*
+*/
+
+#include <platform_paths.hrh>
+
+
+
+TARGET alfviewwidget.dll
+TARGETTYPE PLUGIN
+UID 0x10009d8d 0x20010103
+
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+SOURCEPATH ../src
+SOURCE alfviewwidgetfactoryplugin.cpp
+SOURCE alfviewwidget.cpp
+SOURCE alfviewcontrol.cpp
+SOURCE alfviewwidgetexception.cpp
+
+
+USERINCLUDE ../../../inc
+USERINCLUDE ../inc
+
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+LIBRARY eikcore.lib
+LIBRARY cone.lib
+LIBRARY gdi.lib
+LIBRARY fbscli.lib
+LIBRARY alfclient.lib
+LIBRARY alfwidgetmodel.lib
+LIBRARY alfwidgetutils.lib
+LIBRARY osncore.lib
+LIBRARY charconv.lib
+LIBRARY libc.lib
+
+
+LIBRARY aknskins.lib
+LIBRARY aknskinsrv.lib
+LIBRARY aknswallpaperutils.lib
+LIBRARY aknicon.lib
+LIBRARY cdlengine.lib
+LIBRARY aknlayout2.lib
+LIBRARY aknlayout2scalable.lib
+
+LIBRARY eikcoctl.lib
+ LIBRARY libstdcpp.lib
+#define ALF_LINK_STDCPP_DLL
+// following include must be after definition
+LIBRARY libpthread.lib
+LANG SC
+START RESOURCE 20010103.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET alfviewwidget.rsc
+#endif
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 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: Build information file for project ?myapp
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+alfviewwidget.mmp
+
+PRJ_TESTMMPFILES
+
+PRJ_TESTEXPORTS
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/inc/alfviewcontrol.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2007 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: View Widget control Class Header.
+*
+*/
+
+
+#ifndef ALFVIEWCONTROL_H_
+#define ALFVIEWCONTROL_H_
+
+#include <alf/alfwidgetcontrol.h>
+
+namespace Alf
+ {
+class AlfViewWidget;
+
+/**
+ * Control class of the view widget.
+ *
+ * This class implements logic of the view widget.
+ *
+ * View widget automatically creates an CAlfViewControl object
+ * for it's control.
+ */
+class CAlfViewControl : public CAlfWidgetControl
+ {
+public:
+
+ /**
+ * Default constructor
+ *
+ * @param aEnv UI Accelerator Toolkit environment where this view widget
+ * is created.
+ * @param aViewWidget The view widget with which this control is associated with.
+ */
+ CAlfViewControl(CAlfEnv& aEnv, AlfViewWidget& aViewWidget);
+
+ /**
+ * Default destructor
+ */
+ virtual ~CAlfViewControl();
+
+ // From base class CAlfWidgetControl
+
+ /**
+ * Handles events sent to widget control.
+ *
+ * @since S60 ?S60_version
+ * @param aEvent The event to be handled.
+ * @return see AlfEventStatus.
+ */
+ virtual AlfEventStatus handleEvent(const TAlfEvent& aEvent);
+
+// New methods
+
+ /**
+ * Returns the view widget associated with this control.
+ * The widget() method returns the AlfWidget implementation class
+ * object that is used as an adapter in the AlfViewWidget object.
+ */
+ AlfViewWidget& viewWidget();
+
+private:
+
+ /** View widget in which this control is used */
+ AlfViewWidget& mViewWidget;
+
+ };
+
+ }
+
+#endif /*ALFVIEWCONTROL_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/inc/alfviewwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,550 @@
+/*
+* Copyright (c) 2007 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: Widget class header.
+*
+*/
+
+
+#ifndef ALFVIEWWIDGET_H
+#define ALFVIEWWIDGET_H
+
+#include "alf/alfwidget.h"
+#include <alf/ialfviewwidget.h>
+#include <AknsItemID.h>
+#include <alf/alfeventhandler.h>
+#include <alf/alfenv.h>
+
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+// Forward declarations
+class CAlfControlGroup;
+
+namespace dui
+ {
+ class DuiNode;
+ }
+
+namespace Alf
+{
+
+class AlfWidget;
+class AlfViewWidgetZOrderChangedObserver;
+
+/**
+ * View widget implementation.
+ *
+ * View widget can be used to contain other widgets in an arbitrary layout.
+ *
+ * View widget creates a control group with ID passed in its constructor and
+ * stores it's control in it.
+ */
+class AlfViewWidget : public IAlfViewWidget, public MAlfActionObserver,MAlfEventHandler
+{
+public:
+
+ /**
+ * Default constructor.
+ *
+ * Use AlfViewWidgetFactoryPlugin::CreateProduct() to instantiate a view
+ * widget. View widget will create a new control group from the ID passed to this
+ * constructor and append the view control into the control group.
+ *
+ * @exception AlfException Error code EInvalidArgument is thrown if a control group already
+ * exists with the given ID.
+ * @exception AlfViewWidgetException with Symbian Error code if the view
+ * is unable to register itself as an action observer in the
+ * Alfred Environment.
+ *
+ * @param aWidgetName Name of the constructed view widget.
+ * @param aControlGroupId ID of the control group to append the view widget control into.
+ * @param aEnv UI Accelerator Toolkit environment in which this widget is defined.
+ * @param aDisplay Display in which this widget is defined.
+ */
+ AlfViewWidget(const char* aWidgetName, int aControlGroupId, CAlfEnv& aEnv,
+ CAlfDisplay& aDisplay, DuiNode* aNode=NULL, const char *aFilePath=NULL);
+
+ /**
+ * Default destructor.
+ */
+ virtual ~AlfViewWidget();
+
+ // From Alf::IAlfWidget base class
+
+ /**
+ * Getter for the control. The ownership is not passed.
+ *
+ * @since S60 5.0
+ * @return The control of this widget, or NULL if the control is not specified.
+ */
+ virtual CAlfWidgetControl* control() const;
+
+ /**
+ * getter for the parent container. The ownership is not passed.
+ * @return the parent container or NULL if the widget is the root-widget.
+ */
+ virtual IAlfContainerWidget* parent() const;
+
+ /**
+ * Setter for the control. The control is owned by the Alfred environment.
+ * The previously set control can be destroyed when new control is set.
+ *
+ * The set control is added to the control group of this view widget.
+ * The set control is removed from it's previous control group.
+ *
+ * @since S60 5.0
+ * @param aControl The control for this widget.
+ * @param aDeletePreviousControl A boolean to indicate whether the previously set control
+ * is to be destroyed when this method is called.
+ */
+ virtual void setControl(CAlfWidgetControl* aControl, bool aDeletePreviousControl = true);
+
+ /**
+ * Getter for the model. The ownership is not passed.
+ *
+ * @since S60 5.0
+ * @return The model of this widget, or NULL if the model is not specified.
+ */
+ virtual IAlfModel* model();
+
+ /**
+ * Setter for the model. Ownership is passed and the old model is released.
+ *
+ * @since S60 5.0
+ * @param aModel The model for this widget.
+ * @param aTakeOwnership Whether takes ownership of model or not
+ */
+ virtual void setModel(IAlfModel* aModel, bool aTakeOwnership = true);
+
+ /**
+ * Get the name of the widget instance.
+ *
+ * @since S60 5.0
+ * @return Widget name
+ */
+ virtual const char* widgetName() const;
+
+ /**
+ * Sets/Releases the Focus from child widget of view.
+ * Does not set the actual focused status in roster.
+ *
+ * @since S60 5.0
+ * @param aFocus boolean value for focused status
+ */
+ virtual void setChildFocus(bool aFocus);
+
+ // From Alf::IAlfContainerWidget base class
+
+ /**
+ * Returns total number of widgets contained by this view.
+ *
+ * @return int Total number of widgets.
+ */
+ virtual int widgetCount() const;
+
+ /**
+ * Adds a child widget to the view.
+ *
+ * Ownership of the widget is transferred to this view
+ * object.
+ *
+ * @param aWidget Child widget to be added to view.
+ */
+ virtual void addWidget(IAlfWidget& aWidget);
+
+ /**
+ * Returns child widget at given index.
+ *
+ * If index is not found returns null.
+ *
+ * @param aIndex Index of widget to be returned.
+ * @return Widget at given index or null if not found.
+ */
+ virtual IAlfWidget* getWidget(int aIndex) const;
+
+ /**
+ * Returns the child index, when given the child widget.
+ *
+ * @param aWidget child widget, which index is returned
+ * @return the index of the child widget, or -1, if widget is not child of this container.
+ */
+ virtual int getWidgetIndex(IAlfWidget& aWidget) const;
+
+ /**
+ * Removes the child widget from given index.
+ *
+ * This will destroy the widget object at the given index.
+ *
+ * @param aIndex Index from which widget has to be removed.
+ */
+ virtual void removeWidget(int aIndex);
+
+ /**
+ * Sets the base layout of view widget.
+ *
+ * @param aLayout New base layout of view widegt.
+ */
+ virtual void applyLayout(IAlfLayoutManager& aLayout);
+
+ /**
+ * Sets the presentation for the widget using presentation XML file.
+ * Destroys any existing presentation.
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @exception AlfWidgetException if no visualization node available
+ * in Presentation XML or if no control
+ * is associated with the widget.
+ * @exception bad_alloc
+ * @since S60 ?S60_version
+ * @return void.
+ */
+ virtual void setPresentation(const char* aFilePath);
+
+
+ //--------------------------------------------------------------------------------------//
+ /* From IAlfViewWidget*/
+ //--------------------------------------------------------------------------------------//
+
+
+ /**
+ * API to show the view widget.
+ * @param aShow true if the view is to be shown, else false
+ * The view is not shown, till this api is called
+ * with true parameter.
+ * @since S60 ?S60_version
+ */
+ virtual void show(bool aShow = true);
+
+
+ /**
+ * API to make the view widget accept events.
+ *
+ * @param aAccept true if the view is to accept inputs, else false
+ * default value is true
+ * @since S60 ?S60_version
+ */
+ virtual void acceptEvents(bool aAccept = true);
+
+ /**
+ * API to hide/show Avkon status pane.
+ * If the AlfDisplay bound to the view widget does not occupy the
+ * entire client rectangle, this API has no effect.
+ *
+ * @param aEnable true to enable the status pane, else false
+ * the default value is true.
+ * @since S60 ?S60_version
+ */
+ virtual void enableStatusPane(bool aEnable = true);
+
+ /**
+ * API to hide/show Avkon control pane
+ * If the AlfDisplay bound to the view widget does not occupy the
+ * entire client rectangle, this API has no effect.
+ *
+ * @param aEnable true to enable the control pane, else false
+ * the default value is true.
+ * @since S60 ?S60_version
+ */
+ virtual void enableControlPane(bool aEnable = true);
+
+ /**
+ * API to enable/disable Avkon Skin to be used as view widget's background.
+ *
+ * @param aSkinBackground true if the view has to use Avkon Skin as background.
+ * false otherwise.
+ * @since S60 ?S60_version
+ */
+ virtual void useSkinBackground(bool aSkinBackground = true);
+
+ /**
+ * API to use Skin with the given ID to be used as view widget's background.
+ * Also enables skin background. See IAlfViewWidget::useSkinBackground()
+ *
+ * @param aID Skin id of the graphics to be used in the texture.
+ *
+ * @since S60 ?S60_version
+ */
+ virtual void setSkinBackground(TAknsItemID aSkinID);
+
+ /**
+ * API to check whether the view is shown
+ *
+ * @return true if the view is shown, else false
+ *
+ * @since S60 ?S60_version
+ */
+ virtual bool shown();
+
+ /**
+ * Returns the position of the view on the view stack.
+ * This tells the view Z-coordinate position relative to other views.
+ * Top-most view returns zero. Views under that have a growing
+ * number of position. If the view is hidden -1 is returned.
+ * Only view widgets are taken into consideration in the position calculation.
+ * Other control groups in the display roster are ignored. For example,
+ * position zero doesn't mean that the control group of this view would be
+ * top-most.
+ *
+ * Only top-most view is activate while all other views are being deactivate.
+ *
+ * @return Position of the view, -1 if view is hidden.
+ */
+ virtual int getViewStackPosition() const;
+
+ /**
+ * API to check whether the view accepts events
+ *
+ * @return true if the view accepts events, else false
+ *
+ * @since S60 ?S60_version
+ */
+ virtual bool eventsAccepted();
+
+ /**
+ * API to check whether the status pane is enabled
+ *
+ * @return true if the status pane is enabled, else false
+ *
+ * @since S60 ?S60_version
+ */
+ virtual bool statusPaneEnabled();
+
+ /**
+ * API to check whether the control pane is enabled
+ *
+ * @return true if the control pane is enabled, else false
+ *
+ * @since S60 ?S60_version
+ */
+ virtual bool controlPaneEnabled();
+
+ /**
+ * API to check whether skin info is being used for background
+ * or not
+ *
+ * @return true if the skin info is being used, else false
+ *
+ * @since S60 ?S60_version
+ */
+ virtual bool usingSkinBackground();
+
+ /**
+ * API to get the Avkon Skin ID being used as view widget's background.
+ * Use IAlfViewWidget::usingSkinBackground() to check if this is
+ * being used.
+ *
+ * @return Avkon Skin ID being used for view's background.
+ * Returns an ID with major and minor fields=-1 if
+ * this info was never set.
+ * See IAlfViewWidget::setSkinBackground()
+ *
+ * @since S60 ?S60_version
+ */
+ virtual TAknsItemID skinBackground();
+
+ // From Alf::IAlfInterfaceBase base class
+
+ /**
+ * Interface getter.
+ * Derived classes should always call the base class method
+ * from the overridden MakeInterface.
+ *
+ * @since S60 5.0
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+ // New methods
+
+ /**
+ * Called to notify the view of view activation (view becoming top most in
+ * z-order) or deactivation. The view can be deactivated multiple times
+ * in a row without being reactivated.
+ *
+ * This method is called internally by the view widget itself.
+ *
+ * @see getViewStackPosition()
+ *
+ * @param aIsActivated Indicates whether view widget is activated or not
+ */
+ void notifyViewActivated(bool aIsActivated);
+
+ //From MAlfActionObserver
+ /**
+ * @see MAlfActionObserver
+ */
+ void HandleActionL(const TAlfActionCommand& aActionCommand);
+
+ /**
+ * API to Set the display area of the view widget.
+ * This will set the alfdisplay area with param passed
+ * Client need to call this api with screen/apprect to make
+ * view full screen or application rect
+ *
+ * @param aDisplayRect: the area in which view widget should be
+ * displayed
+ *
+ * @since S60 ?S60_version
+ */
+ void setRect(const TRect& aDisplayRect);
+
+ /**
+ * Updates the array which contains the name of all the children widgets
+ *
+ * @param aChildName the name of a child widget
+ */
+ void setChildNameToDelete( UString aChildName );
+
+private:
+
+ /**
+ * Constructs widget from declaration.
+ *
+ * @param aEnv The environment for the widget.
+ * @param aNode declaration node.
+ */
+ void constructComponentsFromNode(CAlfEnv& aEnv);
+
+ /**
+ * Constructs widget using the presentation XML.
+ *
+ * @param aEnv The environment for the widget.
+ * @param aFilePath Path to XML file describing the presentation of the widget.
+ */
+ void constructFromPresentationXML(CAlfEnv& aEnv, const char *aFilePath);
+
+ /**
+ * Constructs default widget
+ *
+ * @param aEnv The environment for the widget.
+ */
+ void constructDefault(CAlfEnv& aEnv, bool aCreateLM = true);
+
+ /**
+ * Sets default layout mgr.
+ */
+ void setDefaultLayoutManager();
+
+ /**
+ * Utility function
+ */
+ void updateBackGroundImage();
+
+ /**
+ * Updates the status pane according to the view settings.
+ */
+ void updateStatusPane();
+
+ /**
+ * Updates the control pane according to the view settings.
+ */
+ void updateControlPane();
+
+ /**
+ * Finds the focused control of this view.
+ */
+ CAlfControl* focusedControl();
+
+ /**
+ * from MAlfEventHandler
+ */
+ TBool OfferEventL(const TAlfEvent& aEvent);
+
+private:
+
+ /**
+ * AlfWidget instance, owned.
+ */
+ auto_ptr<AlfWidget> mWidget;
+
+ /**
+ * UI Accelerator Environment where this widget is used.
+ * Not owned.
+ */
+ CAlfEnv* mEnv;
+
+ /**
+ * Display to be associated with the view.
+ * Not owned.
+ */
+ CAlfDisplay* mDisplay;
+
+ /**
+ * Control group to contain the view widget control in.
+ * Not owned.
+ */
+ CAlfControlGroup* mControlGroup;
+
+ /**
+ * Control group order changed observer object used to activate
+ * this view when necessary.
+ * Owned.
+ */
+ auto_ptr<AlfViewWidgetZOrderChangedObserver> mZOrderChangedObserver;
+
+ /**
+ * Control group resource ID.
+ */
+ TInt mControlGroupResourceId;
+
+ /**
+ * Flag to indicate if the view is being shown or not.
+ */
+ bool mShown;
+
+ /**
+ * Flag to indicate if the Avkon Control Pane is shown or not.
+ */
+ bool mControlPaneEnabled;
+
+ /**
+ * Flag to indicate if the Avkon Status Pane is shown or not.
+ */
+ bool mStatusPaneEnabled;
+
+ /**
+ * Flag to indicate if the view uses skin background or not.
+ */
+ bool mSkinEnabled;
+
+ /**
+ * ID for skin related information to be used for background.
+ */
+ TAknsItemID mSkinId;
+
+ /**
+ * Cache for ID of the child widget that is currently focused.
+ * This is used to restore focus to the correct child when the view
+ * is shown and to remember the focused child when the view is hidden.
+ */
+ std::string mFocusedChildWidgetID;
+
+ TRect mDisplayRect;
+
+ /**
+ * Stores the naame of all the children widgets
+ */
+ AlfPtrVector<UString> mChildWidgetName;
+
+ /**
+ * Flag to indicate whether AcquireFocus() has been called on one
+ * of the controls.
+ */
+ TBool mHasFocus;
+ };
+
+ }
+
+#endif /*ALFVIEWWIDGET_H*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/inc/alfviewwidgetexception.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2007 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: View widget exception class.
+*
+*/
+
+
+#ifndef ALFVIEWWIDGETEXCEPTION_H
+#define ALFVIEWWIDGETEXCEPTION_H
+
+// INCLUDES
+#include <alf/alfexception.h>
+#include <osn/ustring.h>
+
+namespace Alf
+ {
+
+/**
+ * Error codes used with AlfViewWidgetException.
+ *
+ * There is an offset in AlfViewWidgetException error codes, so that
+ * AlfViewWidget specific exceptions can be separated from
+ * osncore::AlfException base exceptions and exceptions of other widgets.
+ */
+enum TAlfViewWidgetErrorCode
+ {
+ /**
+ * Error occured in construction or initialization of the view
+ * widget.
+ */
+ EInitializationError = 600,
+
+ /**
+ * Handle to status pane not found
+ */
+ EStatusPaneError,
+
+ /**
+ * Handle to control pane not found
+ */
+ EControlPaneError,
+
+ /**
+ * Control group id specified in the viewwidget constructor
+ * already reserved.
+ */
+ EControlGroupAlreadyExists
+ };
+
+/**
+ * AlfViewWidgetException is a base class for all view widget
+ * exceptions.
+ *
+ */
+class AlfViewWidgetException : public osncore::AlfException
+ {
+public:
+ // Constructors and destructor
+
+ /**
+ * Constructor with AlfViewWidget specific error code.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfViewWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ */
+ AlfViewWidgetException(int aError) throw();
+
+ /**
+ * Constructor with AlfViewWidget specific error code
+ * and additional information.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfViewWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ * @param aInfo Optional additional information or NULL.
+ */
+ AlfViewWidgetException(int aError, const char* aInfo) throw();
+
+ /**
+ * Constructor with AlfViewWidget specific error code,
+ * additional information, source file and line of code.
+ *
+ * Error code has to be one of the error codes specified in
+ * Alf::TAlfViewWidgetErrorCode or a system-wide error code
+ * represented by negative integer.
+ *
+ * @see osncore::AlfException::errorCode()
+ *
+ * @param aError Error code to describe the occured exception.
+ * @param aInfo Optional additional information or NULL.
+ * @param aFileAndLine Optional file and line information or NULL.
+ */
+ AlfViewWidgetException(int aError, const char* aInfo, const char* aFileAndLine) throw();
+
+ /**
+ * Default destructor.
+ */
+ virtual ~AlfViewWidgetException() throw();
+
+ /**
+ * Returns the description of the exception.
+ * @ret The description of the exception.
+ */
+ const char* what() const throw();
+
+private:
+
+ /**
+ * Error description
+ */
+ osncore::UString mDescription;
+
+ };
+
+ } // Namespace Alf
+
+#endif // ALFVIEWWIDGETEXCEPTION_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/inc/alfviewwidgetfactoryplugin.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2007 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: View Widget factory plugin header.
+*
+*/
+
+
+#ifndef ALFVIEWWIDGETFACTORYPLUGIN_H
+#define ALFVIEWWIDGETFACTORYPLUGIN_H
+
+#include <alf/ialffactoryplugin.h>
+
+namespace Alf
+{
+
+/**
+ * AlfViewWidgetFactoryPlugin is a widget factory plugin implementation
+ * that can be used to create view widgets.
+ *
+ * Can be used to create view widgets and associated products.
+ */
+class AlfViewWidgetFactoryPlugin : public IAlfFactoryPlugin
+ {
+public:
+ // Constructors and destructor
+
+ /**
+ * Default Symbian constructor to create the factory plugin.
+ */
+ static AlfViewWidgetFactoryPlugin* newL();
+
+ // From base class IAlfPluginFactory
+
+ /**
+ * Create view widget factory product.
+ * @since Series 60 5.0
+ * @param aProduct Product to create.
+ * @param aInitData Initialization data for product
+ * @return Instance or NULL
+ */
+ IAlfInterfaceBase* createProduct( const char* aProduct, void* aInitData );
+
+ /**
+ * Count available products this factory can produce.
+ *
+ * @since S60 5.0
+ * @return Product count
+ */
+ int productCount() const;
+
+ /**
+ * Fetch product info by index
+ *
+ * @param aIndex List index
+ * @since S60 5.0
+ * @return Descriptor describing product
+ */
+ const char* productInfo(int aIndex) const;
+
+ // From base class IAlfInterfaceBase
+
+ /**
+ * Creates interface based on the given type.
+ *
+ * @since Series 60 5.0
+ * @param aType Interface type to create.
+ * @return Requested interface.
+ */
+ IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+ };
+
+ } // Namespace Alf
+
+#endif // ALFVIEWWIDGETFACTORYPLUGIN_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/src/20010103.rss Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2009 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: View widget rss file.
+*
+*/
+#include <ecom/registryinfo.rh>
+#include "alf/alfecompluginfactoryuid.rh"
+
+//#define DUIEXAMPLE
+
+RESOURCE REGISTRY_INFO theInfo
+{
+dll_uid = 0x20010103;
+interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KFactoryPluginUid;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x20010104;
+ version_no = 1;
+ display_name = "";
+#ifndef DUIEXAMPLE
+ default_data = "viewwidget";
+#else
+ default_data = "viewwidget";
+#endif
+ opaque_data = "";
+ }
+ };
+ }
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/src/alfviewcontrol.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2007 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: The implementation for presentation elements.
+*
+*/
+
+
+// Local Includes
+#include "alfviewcontrol.h"
+#include "alfviewwidget.h"
+
+// AlfClient Includes
+#include <alf/alfevent.h>
+
+// Widget Model
+#include <alf/alfwidgetevents.h>
+
+using namespace Alf;
+
+CAlfViewControl::CAlfViewControl(CAlfEnv& aEnv, AlfViewWidget& aViewWidget)
+ : CAlfWidgetControl(aEnv), mViewWidget(aViewWidget)
+ {
+ }
+
+CAlfViewControl::~CAlfViewControl()
+ {
+ while(mViewWidget.widgetCount())
+ {
+ mViewWidget.setChildNameToDelete(UString(mViewWidget.getWidget(0)->widgetName()));
+ mViewWidget.removeWidget(0);
+ }
+ }
+
+AlfEventStatus CAlfViewControl::handleEvent(const TAlfEvent& aEvent)
+ {
+ AlfEventStatus ret = CAlfWidgetControl::handleEvent(aEvent);
+ if(ret == EEventNotHandled && aEvent.IsKeyEvent())
+ {
+ if(aEvent.KeyEvent().iScanCode == EStdKeyRightArrow ||
+ aEvent.KeyEvent().iScanCode == EStdKeyDownArrow )
+ {
+ if(aEvent.Code() == EEventKey)
+ {
+ TAlfEvent focusNext(EEventFocusNextWidget);
+ return CAlfWidgetControl::processEvent(focusNext);
+ }
+ }
+ else if(aEvent.KeyEvent().iScanCode == EStdKeyLeftArrow ||
+ aEvent.KeyEvent().iScanCode == EStdKeyUpArrow)
+ {
+ if(aEvent.Code() == EEventKey)
+ {
+ TAlfEvent focusPrevious(EEventFocusPreviousWidget);
+ return CAlfWidgetControl::processEvent(focusPrevious);
+ }
+ }
+ }
+ return ret;
+ }
+
+AlfViewWidget& CAlfViewControl::viewWidget()
+ {
+ return mViewWidget;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/src/alfviewwidget.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,738 @@
+/*
+* Copyright (c) 2007 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: The implementation for presentation elements.
+*
+*/
+
+
+
+#include "alfviewwidget.h"
+#include "alfviewcontrol.h"
+#include <e32std.h>
+#include <assert.h>
+#include <memory>
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfenv.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfroster.h>
+#include <alf/alfmetric.h>
+#include "alf/alfwidget.h"
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfanchorlayoutmanager.h>
+#include <alf/alfgridlayout.h>
+#include <alf/ialfgridlayoutpolicy.h>
+#include <alf/alfwidgetenvextension.h>
+#include <alf/ialfwidgetfactory.h>
+
+#include <alf/alfutil.h>
+
+#include "alfviewwidgetexception.h"
+
+#include <eikbtgpc.h>
+#include <eikspane.h>
+#include <eikmenub.h>
+
+namespace Alf
+ {
+
+/**
+ * Observer class to observe changes in the relative order of control groups in associated
+ * roster object and to notify view object about possible view activation (view coming
+ * top-most) and deactivation.
+ *
+ * This class is a Symbian - specific implementation class.
+ */
+class AlfViewWidgetZOrderChangedObserver : public MAlfControlGroupOrderChangedObserver
+ {
+ public:
+
+ /**
+ * Default constructor
+ */
+ AlfViewWidgetZOrderChangedObserver(CAlfDisplay& aDisplay, AlfViewWidget& aView)
+ : iDisplay(aDisplay), iView(aView)
+ {
+ aDisplay.Roster().AddControlGroupOrderChangedObserverL(*this);
+ }
+
+ /**
+ * Default destructor
+ */
+ ~AlfViewWidgetZOrderChangedObserver()
+ {
+ int index = CAlfEnv::Static()->FindDisplayIndex(iDisplay);
+ if(index != -1)
+ {
+ iDisplay.Roster().RemoveControlGroupOrderChangedObserver(*this);
+ }
+ }
+
+ /**
+ * Callback method called by roster when control group order changes.
+ */
+ void NotifyControlGroupOrderChanged()
+ {
+ // If the associated view is on top, notify it about view activation
+ // and the view below it about view deactivation.
+ if(iView.getViewStackPosition() == 0)
+ {
+ AlfViewWidget* viewBelow = getViewFromStack(1);
+ if(viewBelow)
+ {
+ viewBelow->notifyViewActivated(false);
+ }
+
+ iView.notifyViewActivated(true);
+ }
+ }
+
+ private:
+
+ /**
+ * Utility method to return view from specified z-position on the view stack.
+ * Returns 0 if the index is out of bounds.
+ */
+ AlfViewWidget* getViewFromStack(int index)
+ {
+ int zPos = 0;
+
+ // Iterate through the control groups in the roster
+ for(int i = (iDisplay.Roster().Count() - 1); i >= 0; --i)
+ {
+ CAlfControlGroup& group = iDisplay.Roster().ControlGroup(i);
+
+ // Investigate whether this is a control group of a view widget
+ if(group.Count() > 0)
+ {
+ CAlfControl& control = group.Control(0);
+ CAlfViewControl* viewControl = dynamic_cast<CAlfViewControl*>(&control);
+ if(viewControl != 0)
+ {
+ // View widget found from the roster
+ if(zPos == index)
+ {
+ return &viewControl->viewWidget();
+ }
+ zPos++;
+ }
+ }
+ }
+
+ return 0;
+ }
+
+ /** Roster to which this callback object is added to. */
+ CAlfDisplay& iDisplay;
+
+ /** View widget that this observer notifies. */
+ AlfViewWidget& iView;
+
+ };
+
+
+AlfViewWidget::AlfViewWidget(const char* aWidgetName, int aControlGroupId, CAlfEnv& aEnv,
+ CAlfDisplay& aDisplay, DuiNode* aNode, const char *aFilePath) :
+ mEnv(&aEnv), mDisplay(&aDisplay), mControlGroup(0),
+ mZOrderChangedObserver(0),
+ mControlGroupResourceId(aControlGroupId),
+ mShown(false), mControlPaneEnabled(true), mStatusPaneEnabled(true),
+ mSkinEnabled(false), mSkinId(KAknsIIDQsnBgScreen), mHasFocus(false)
+ {
+ mChildWidgetName.setAutoDelete(true);
+ mWidget.reset(new (EMM) AlfWidget(aWidgetName));
+
+ TRAPD(err,aEnv.AddActionObserverL(this));
+ if(err!=KErrNone)
+ {
+ ALF_THROW(AlfViewWidgetException, err,
+ "CAlfEnv::AddActionObserverL() - failed.");
+ }
+
+ // By default, we use ClientRect() as the area of the view widget
+ TRect rect = ((CAknAppUi*)CEikonEnv::Static()->AppUi())->ClientRect();
+ mDisplayRect = TRect(rect);
+
+ mZOrderChangedObserver.reset(new (EMM) AlfViewWidgetZOrderChangedObserver(aDisplay, *this));
+
+ constructDefault(aEnv);
+
+ }
+
+AlfViewWidget::~AlfViewWidget()
+ {
+ //If the view widget is deleted before the AlfEnv is deleted,
+ //the control group needs to be destroyed.
+ if(mEnv->FindControlGroup(mControlGroupResourceId))
+ {
+ mEnv->DeleteControlGroup(mControlGroup->ResourceId());
+ }
+
+ mEnv->RemoveActionObserver(this);
+
+ IAlfWidget* childWidget = NULL;
+
+ IAlfWidgetFactory& factory = AlfWidgetEnvExtension::widgetFactory(*(CAlfEnv::Static()));
+ for(int i =0 ;i < mChildWidgetName.count();i++)
+ {
+ childWidget = factory.findWidget(mChildWidgetName.at(i)->getUtf8());
+ if(childWidget)
+ {
+ factory.destroyWidget(childWidget);
+ childWidget = NULL;
+ }
+ }
+ mChildWidgetName.clear();
+ }
+
+CAlfWidgetControl* AlfViewWidget::control() const
+ {
+ return mWidget->control();
+ }
+
+IAlfContainerWidget* AlfViewWidget::parent() const
+ {
+ return mWidget->parent();
+ }
+
+void AlfViewWidget::setControl(CAlfWidgetControl* aControl, bool aDeletePreviousControl)
+ {
+ CAlfWidgetControl* prevControl = mWidget->control();
+
+ // Set new control to the widget implementation.
+ // Never delete the previous control in this phase, so that we can
+ // still remove it from the control group if this call is succesfull.
+ mWidget->setControl(aControl, false);
+
+ // Remove the previous control from control group.
+ if(prevControl != 0)
+ {
+ assert(prevControl->ControlGroup() == mControlGroup);
+ if(aDeletePreviousControl)
+ {
+ mControlGroup->Remove(prevControl);
+ delete prevControl;
+ }
+ }
+
+ // Append the new control into the control group.
+ if(aControl)
+ {
+ TRAPD(err, mControlGroup->AppendL(aControl));
+ if(err != KErrNone)
+ {
+ mWidget->setControl(0, false);
+ ALF_THROW(AlfViewWidgetException, err, "CAlfControlGroup::AppendL() - failed.");
+ }
+ }
+ }
+
+void AlfViewWidget::setChildNameToDelete( UString aChildName )
+ {
+ UString* childName = new(EMM)UString(aChildName.getUtf8());
+ mChildWidgetName.resize(mChildWidgetName.count()+1);
+ mChildWidgetName.insert(mChildWidgetName.count(),childName);
+ }
+
+IAlfModel* AlfViewWidget::model()
+ {
+ return 0;
+ }
+
+void AlfViewWidget::setModel(IAlfModel* /*aModel*/, bool /*aTakeOwnership*/)
+ {
+ //Do nothing.
+ }
+
+const char* AlfViewWidget::widgetName() const
+ {
+ return mWidget->widgetName();
+ }
+
+void AlfViewWidget::setChildFocus(bool /*aFocus*/)
+ {
+
+ }
+
+//---------------------------------------------------------------------------
+// Creates the presentation for the widget from XML. Destroys any existing
+// presentation.
+//---------------------------------------------------------------------------
+//
+void AlfViewWidget::setPresentation (const char* aFilePath)
+ {
+ if(mWidget.get())
+ {
+ mWidget->setPresentation(aFilePath);
+ }
+ }
+
+int AlfViewWidget::widgetCount() const
+ {
+ return mWidget->widgetCount();
+ }
+
+void AlfViewWidget::addWidget(IAlfWidget& aWidget)
+ {
+ mWidget->addWidget(aWidget);
+ }
+
+IAlfWidget* AlfViewWidget::getWidget(int aIndex) const
+ {
+ return mWidget->getWidget(aIndex);
+ }
+
+int AlfViewWidget::getWidgetIndex(IAlfWidget& aWidget) const
+ {
+ return mWidget->getWidgetIndex(aWidget);
+ }
+
+void AlfViewWidget::removeWidget(int aIndex)
+ {
+ mWidget->removeWidget(aIndex);
+ }
+
+void AlfViewWidget::applyLayout(IAlfLayoutManager& aLayout)
+ {
+ mWidget->applyLayout(aLayout);
+ }
+
+IAlfInterfaceBase* AlfViewWidget::makeInterface(const IfId& aType)
+ {
+ // Type cast to IAlfWidget
+ if(!strcmp(aType.mImplementationId, IAlfWidget::type().mImplementationId))
+ {
+ return static_cast<IAlfWidget*>(this);
+ }
+
+ // Type cast to IAlfContainerWidget
+ if (!strcmp(aType.mImplementationId, IAlfContainerWidget::type().mImplementationId))
+ {
+ return static_cast<IAlfContainerWidget*>(this);
+ }
+
+ // Type cast to IAlfViewWidget
+ if(!strcmp(aType.mImplementationId, IAlfViewWidget::type().mImplementationId))
+ {
+ return static_cast<IAlfViewWidget*>(this);
+ }
+
+ return mWidget->makeInterface(aType);
+ }
+
+void AlfViewWidget::notifyViewActivated(bool aIsActivated)
+ {
+ if(aIsActivated)
+ {
+ // Update control pane, status pane and background according to state of the view.
+ updateStatusPane();
+ updateControlPane();
+ // When a view is activated, it sets the size of the display to full screen
+ // This is done so that the view widget gets pointer events in the entire screen
+ TRect screenRect(TPoint(0,0), TSize(AlfUtil::ScreenSize()));
+ control()->Env().PrimaryDisplay().SetVisibleArea(screenRect);
+ setRect(mDisplayRect);
+
+ // Restore the focus here
+ IAlfWidget* focusedWidget = 0;
+ focusedWidget = AlfWidgetEnvExtension::widgetFactory(*mEnv).findWidget(mFocusedChildWidgetID.c_str());
+ if(focusedWidget == 0 && widgetCount() > 0)
+ {
+ focusedWidget = getWidget(0);
+ }
+ if(!mHasFocus)
+ {
+ mHasFocus = true;
+ if(focusedWidget != 0)
+ {
+ focusedWidget->control()->AcquireFocus();
+ }
+ else
+ {
+ control()->AcquireFocus();
+ }
+ }
+ }
+ else
+ {
+ // Cache and release the focus here
+ // FocusedControl function is not exported from the toolkit
+ CAlfControl* focusedCtrl = focusedControl();
+ if(focusedCtrl)
+ {
+ CAlfWidgetControl* focusedWidgetControl = dynamic_cast<CAlfWidgetControl*>(focusedCtrl);
+ if(focusedWidgetControl != 0)
+ {
+ mFocusedChildWidgetID = focusedWidgetControl->widget()->widgetName();
+ }
+ focusedCtrl->RelinquishFocus();
+ }
+ mHasFocus = false;
+ }
+ }
+
+CAlfControl* AlfViewWidget::focusedControl()
+ {
+ CAlfControl* focusedconnection = control();
+
+ // Iterate through the focused connections and return the control
+ // that has the focus.
+ while(focusedconnection != 0)
+ {
+ if(focusedconnection->Focus())
+ {
+ // There should be no connections leading outside from the control
+ // group of the view.
+ assert(focusedconnection->ControlGroup() == mControlGroup);
+ return focusedconnection;
+ }
+ focusedconnection = focusedconnection->FocusedConnection();
+ }
+
+ return 0;
+ }
+
+void AlfViewWidget::show(bool aShow)
+ {
+ mShown = aShow;
+ if (aShow)
+ {
+ TRAPD(err, mDisplay->Roster().ShowL(*mControlGroup));
+ if (err != KErrNone)
+ {
+ ALF_THROW(AlfViewWidgetException, err, "AlfViewWidget::show(): View Widget Show failed");
+ }
+ }
+ else
+ {
+ // Notify this view that it is being deactivated.
+ notifyViewActivated(false);
+
+ // Hide the control group
+ mDisplay->Roster().Hide(*mControlGroup);
+ }
+ }
+
+void AlfViewWidget::acceptEvents(bool aAccept)
+ {
+ assert(mControlGroup);
+ mControlGroup->SetAcceptInput(aAccept);
+ }
+
+void AlfViewWidget::enableStatusPane(bool aEnable)
+ {
+ if(aEnable != mStatusPaneEnabled)
+ {
+ mStatusPaneEnabled = aEnable;
+
+ // Update status pane and background image state if this view is active.
+ if(getViewStackPosition() == 0)
+ {
+ updateStatusPane();
+ }
+ }
+ }
+
+void AlfViewWidget::enableControlPane(bool aEnable)
+ {
+ if (aEnable != mControlPaneEnabled)
+ {
+ mControlPaneEnabled=aEnable;
+
+ // Update control pane and background image state if this view is active.
+ if(getViewStackPosition() == 0)
+ {
+ updateControlPane();
+ }
+ }
+ }
+
+void AlfViewWidget::useSkinBackground(bool aSkinBackground)
+ {
+ if(mSkinEnabled != aSkinBackground)
+ {
+ mSkinEnabled = aSkinBackground;
+ updateBackGroundImage();
+ }
+
+ }
+
+void AlfViewWidget::setSkinBackground(TAknsItemID aSkinID)
+ {
+ mSkinEnabled = true;
+ mSkinId = aSkinID;
+ updateBackGroundImage();
+ }
+
+bool AlfViewWidget::shown()
+ {
+ return mShown;
+ }
+
+int AlfViewWidget::getViewStackPosition() const
+ {
+ int ret = 0;
+ const CAlfRoster& roster = mDisplay->Roster();
+
+ // Iterate through the control groups in the roster
+ for(int i = (roster.Count() - 1); i >= 0; --i)
+ {
+ CAlfControlGroup& group = roster.ControlGroup(i);
+
+ // Compare the control group with this view's control group
+ if(mControlGroup == &group)
+ {
+ return ret;
+ }
+
+ // Investigate whether this is a control group of a view widget
+ if(group.Count() > 0)
+ {
+ CAlfControl& control = group.Control(0);
+ if(dynamic_cast<CAlfViewControl*>(&control) != 0)
+ {
+ ret++;
+ }
+ }
+ }
+
+ return -1;
+ }
+
+bool AlfViewWidget::eventsAccepted()
+ {
+ assert(mControlGroup);
+ return mControlGroup->AcceptInput();
+ }
+
+bool AlfViewWidget::statusPaneEnabled()
+ {
+ return mStatusPaneEnabled;
+ }
+
+bool AlfViewWidget::controlPaneEnabled()
+ {
+ return mControlPaneEnabled;
+ }
+
+bool AlfViewWidget::usingSkinBackground()
+ {
+ return mSkinEnabled;
+ }
+
+TAknsItemID AlfViewWidget::skinBackground()
+ {
+ return mSkinId;
+ }
+
+// ---------------------------------------------------------------------------
+// Constructs components from node
+// ---------------------------------------------------------------------------
+//
+void AlfViewWidget::constructComponentsFromNode(CAlfEnv& aEnv)
+ {
+ constructDefault(aEnv, false);
+
+ //check, if the layoutmanager is already set.
+ IAlfLayoutManager* layoutManager =
+ IAlfInterfaceBase::makeInterface<IAlfLayoutManager>(control());
+ if (!layoutManager)
+ {
+ setDefaultLayoutManager();
+ }
+ }
+
+//---------------------------------------------------------------------------
+// Constructs widget using the presentation XML. Other widget parts
+// are default.
+//---------------------------------------------------------------------------
+//
+void AlfViewWidget::constructFromPresentationXML(CAlfEnv& aEnv, const char* /**aFilePath*/)
+ {
+ constructDefault(aEnv, true);
+ }
+
+// ---------------------------------------------------------------------------
+// Imperative construction
+// ---------------------------------------------------------------------------
+//
+void AlfViewWidget::constructDefault(CAlfEnv& aEnv, bool aCreateLM)
+ {
+ TRAPD( err,
+ mControlGroup = &aEnv.NewControlGroupL(mControlGroupResourceId);
+ );
+
+ if(err != KErrNone)
+ {
+ if (err == KErrAlreadyExists)
+ {
+ ALF_THROW(AlfViewWidgetException,
+ EControlGroupAlreadyExists, "AlfViewWidget::AlfViewWidget() - Tried to create a control group with already existing ID.");
+ }
+ else
+ {
+ ALF_THROW(AlfViewWidgetException,
+ err, "AlfViewWidget::AlfViewWidget() - Control group creation failed.");
+ }
+ }
+
+ // Create control for the view widget
+ auto_ptr<CAlfViewControl> control( new (EMM) CAlfViewControl(aEnv, *this) );
+ setControl(control.get());
+ control.release();
+
+ if (aCreateLM)
+ {
+ setDefaultLayoutManager();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Imperative createDefaultLayoutManager
+// ---------------------------------------------------------------------------
+//
+void AlfViewWidget::setDefaultLayoutManager()
+ {
+ // A root layout covering the entire display is created to grab all pointer events in the screen
+ // Note that this layout is just dummy and does not do any actual layouting
+ CAlfControl* ctrl = (CAlfControl*)control();
+ CAlfLayout* fullDisplayLayout = CAlfLayout::AddNewL(*ctrl);
+
+ // Default layout manager provided by the view widget
+ auto_ptr<AlfAnchorLayoutManager> layoutManager(new (EMM) AlfAnchorLayoutManager());
+ this->applyLayout(*layoutManager.get());
+
+ layoutManager.release();
+ }
+
+void AlfViewWidget::updateStatusPane()
+ {
+ /*CEikStatusPane *sp = CEikonEnv::Static()->AppUiFactory()->StatusPane();
+ if(sp)
+ {
+ sp->MakeVisible(mStatusPaneEnabled);
+// mDisplay->SetVisibleArea(CEikonEnv::Static()->AppUiFactory()->ClientRect());
+ }*/
+ }
+
+void AlfViewWidget::updateControlPane()
+ {
+ /*CEikButtonGroupContainer* cba= CEikonEnv::Static()->AppUiFactory()->Cba();
+ if(cba)
+ {
+ cba->MakeVisible(mControlPaneEnabled);
+// mDisplay->SetVisibleArea(CEikonEnv::Static()->AppUiFactory()->ClientRect());
+ }*/
+
+ }
+
+void AlfViewWidget::updateBackGroundImage()
+ {
+ TAknsItemID skinId=KAknsIIDQsnBgScreen;
+ // Do background related stuff only if the view is showing
+ if(mSkinEnabled )
+ {
+ skinId=mSkinId;
+ }
+ if(mShown)
+ {
+ TAlfDisplayBackgroundItem bgItem(mDisplay->VisibleArea(),skinId);
+ RArray<TAlfDisplayBackgroundItem> bgItemArray;
+ bgItemArray.Append(bgItem);
+ TRAPD(err,mDisplay->SetBackgroundItemsL(bgItemArray));
+ if(err!=KErrNone)
+ {
+ ALF_THROW(AlfViewWidgetException, err,"Skin Background could not be set");
+ }
+ bgItemArray.Reset();
+ }
+
+ }
+
+
+void AlfViewWidget::HandleActionL(const TAlfActionCommand& aActionCommand)
+ {
+ if(KAlfActionIdDeviceLayoutChanged == aActionCommand.Id())
+ {
+ TAlfCustomEventCommand command(KAlfActionIdDeviceLayoutChanged);
+ control()->Env().Send(command,0);
+ if(mShown && getViewStackPosition() == 0)
+ {
+ TRect screenRect(TPoint(0,0), TSize(AlfUtil::ScreenSize()));
+
+ // SetVisibleArea() only have an effect if the application is on foreground!
+ control()->Env().PrimaryDisplay().SetVisibleArea(screenRect);
+ }
+
+ }
+
+ else if(KAlfActionIdForegroundGained == aActionCommand.Id())
+ {
+
+ TRect screenRect(TPoint(0,0), TSize(AlfUtil::ScreenSize()));
+
+ // SetVisibleArea() only have an effect if the application is on foreground!
+
+ control()->Env().PrimaryDisplay().SetVisibleArea(screenRect);
+
+
+ }
+
+ }
+
+TBool AlfViewWidget::OfferEventL(const TAlfEvent& /*aEvent*/)
+ {
+/* if(aEvent.IsCustomEvent() && aEvent.CustomParameter() == KAlfActionIdDeviceLayoutChanged)
+ {
+ if(mShown && getViewStackPosition() == 0)
+ {
+ //need to do this to overwrite the displayrect done by menuApp
+ // TRect rect= control()->Env().PrimaryDisplay().VisibleArea();
+ // control()->Env().PrimaryDisplay().SetVisibleArea(mDisplayRect);
+ updateBackGroundImage();
+ }
+ return ETrue;
+ }
+ */ return EFalse;
+ }
+
+void AlfViewWidget::setRect(const TRect& aRect)
+ {
+ mDisplayRect = aRect;
+
+ IAlfLayoutManager* layoutManager = IAlfInterfaceBase::makeInterface<IAlfLayoutManager>(control());
+ if (layoutManager)
+ {
+ // Set the area of the root layout of the view widget to the one specified
+ CAlfLayout& layout = layoutManager->getLayout();
+ layout.SetFlag(EAlfVisualFlagManualLayout);
+ TAlfRealRect rect(mDisplayRect);
+ layout.SetRect(rect);
+ }
+
+ TRect visibleRect = control()->Env().PrimaryDisplay().VisibleArea();
+ TRect screenRect(TPoint(0,0), TSize(AlfUtil::ScreenSize()));
+
+ if(visibleRect != screenRect && getViewStackPosition() == 0)
+ {
+ // the display area is required to be full screen, for the pointer grab to work
+ // check here whether the display area is full screen. If not, set it to full screen
+ control()->Env().PrimaryDisplay().SetVisibleArea(screenRect);
+ }
+ }
+
+ } //Alf
+
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/src/alfviewwidgetexception.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2007 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: View widget exception class.
+*
+*/
+
+
+#include "alfviewwidgetexception.h"
+
+using namespace Alf;
+
+AlfViewWidgetException::AlfViewWidgetException(int aError) throw()
+ : osncore::AlfException(aError)
+ {
+ }
+
+AlfViewWidgetException::AlfViewWidgetException(int aError, const char* aInfo) throw()
+ : osncore::AlfException(aError, aInfo)
+ {
+ mDescription = osncore::UString(aInfo);
+ }
+
+AlfViewWidgetException::AlfViewWidgetException(int aError, const char* aInfo, const char* aFileAndLine) throw()
+ : osncore::AlfException(aError, aInfo, aFileAndLine)
+ {
+ mDescription = osncore::UString(aInfo);
+ mDescription.append(aFileAndLine);
+ }
+
+AlfViewWidgetException::~AlfViewWidgetException() throw()
+ {
+ }
+
+const char* AlfViewWidgetException::what() const throw()
+ {
+ return mDescription.getUtf8();
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfviewwidget/src/alfviewwidgetfactoryplugin.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2009 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: view widget factory pluging implementation.
+*
+*/
+
+
+#include <ecom/implementationproxy.h>
+#include <osn/osnnew.h>
+#include <alf/ialfviewwidget.h>
+#include <alf/alfexception.h>
+#include "alfviewwidget.h"
+#include "alfviewwidgetexception.h"
+#include "alfviewwidgetfactoryplugin.h"
+
+using namespace Alf;
+
+// UID of the view widget factory plugin.
+const TInt KViewWidgetFactoryPluginUid = {0x20010104};
+
+// Amount of products produced by this factory.
+const int KProductCount = 1;
+
+AlfViewWidgetFactoryPlugin* AlfViewWidgetFactoryPlugin::newL()
+ {
+ return new (EMM) AlfViewWidgetFactoryPlugin();
+ }
+
+IAlfInterfaceBase* AlfViewWidgetFactoryPlugin::createProduct(const char* aProduct, void* aInitData)
+ {
+ AlfViewWidget* ret(0);
+
+ if(!strcmp(aProduct, IAlfViewWidget::type().mImplementationId))
+ {
+ // Typecast the initialization data
+ AlfViewWidgetInitData* initData = (AlfViewWidgetInitData*) aInitData;
+
+ // Throw exception if init data is null
+ if(initData == 0)
+ {
+ ALF_THROW(AlfViewWidgetException, EInitializationError, "View widget initialization data was NULL.");
+ }
+
+ // Assert that the UI Accelerator Toolkit Environment in the initialization data is correct.
+ if(initData->mEnv == 0)
+ {
+ ALF_THROW(AlfViewWidgetException, EInitializationError, "Environment instance in view widget initialization data was NULL.");
+ }
+
+ // Assert that widget id in the initialization data is correct.
+ if(initData->mWidgetId == 0)
+ {
+ ALF_THROW(AlfViewWidgetException, EInitializationError, "Widget ID in view widget initialization data was NULL.");
+ }
+
+
+ // Assert that display pointer in the initialization data is correct.
+ if(initData->mDisplay == 0)
+ {
+ ALF_THROW(AlfViewWidgetException, EInitializationError, "Display instance in view widget initialization data was NULL.");
+ }
+
+ // Create container widget
+ ret = new (EMM) AlfViewWidget(initData->mWidgetId, initData->mControlGroupId, *initData->mEnv,
+ *initData->mDisplay, initData->mNode, initData->mFilePath);
+ }
+
+ return static_cast<IAlfViewWidget*>(ret);
+ }
+
+int AlfViewWidgetFactoryPlugin::productCount() const
+ {
+ return KProductCount;
+ }
+
+const char* AlfViewWidgetFactoryPlugin::productInfo(int aIndex) const
+ {
+ switch(aIndex)
+ {
+ case 0: return alfviewwidget::ident.mImplementationId;
+ default: break;
+ }
+
+ return 0;
+ }
+
+IAlfInterfaceBase* AlfViewWidgetFactoryPlugin::makeInterface(const IfId& aType)
+ {
+ if(!strcmp(aType.mImplementationId, IAlfFactoryPlugin::type().mImplementationId))
+ {
+ return static_cast<IAlfFactoryPlugin*>(this);
+ }
+
+ return 0;
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( KViewWidgetFactoryPluginUid,
+ AlfViewWidgetFactoryPlugin::newL )
+ };
+
+// Entry point for ECom architecture to resolve the instantiation method pointer
+// for a given implementation UID.
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+ return ImplementationTable;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/bwins/mulutilityu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,17 @@
+EXPORTS
+ ?IsLandscape@MulUtility@Alf@@SA_NXZ @ 1 NONAME ; bool Alf::MulUtility::IsLandscape(void)
+ ?IsQwerty@MulUtility@Alf@@SA_NXZ @ 2 NONAME ; bool Alf::MulUtility::IsQwerty(void)
+ ??0MulVisualUtility@Alf@@QAE@XZ @ 3 NONAME ; Alf::MulVisualUtility::MulVisualUtility(void)
+ ?IsSVGImage@MulImageVisualAttributeSetter@Alf@@QAE_NABVUString@osncore@@@Z @ 4 NONAME ; bool Alf::MulImageVisualAttributeSetter::IsSVGImage(class osncore::UString const &)
+ ?LoadImageFromSvg@MulImageVisualAttributeSetter@Alf@@QAEXABVUString@osncore@@AAVCAlfImageVisual@@@Z @ 5 NONAME ; void Alf::MulImageVisualAttributeSetter::LoadImageFromSvg(class osncore::UString const &, class CAlfImageVisual &)
+ ?parseLCTInfo@MulVisualUtility@Alf@@QAEXABULCTPair@2@PAVCAlfLayout@@@Z @ 6 NONAME ; void Alf::MulVisualUtility::parseLCTInfo(struct Alf::LCTPair const &, class CAlfLayout *)
+ ?AbsolutePath@MulUtility@Alf@@SA_NAAVUString@osncore@@@Z @ 7 NONAME ; bool Alf::MulUtility::AbsolutePath(class osncore::UString &)
+ ?data@MulVisualUtility@Alf@@QBEABULCTData@2@XZ @ 8 NONAME ; struct Alf::LCTData const & Alf::MulVisualUtility::data(void) const
+ ??0MulImageVisualAttributeSetter@Alf@@QAE@XZ @ 9 NONAME ; Alf::MulImageVisualAttributeSetter::MulImageVisualAttributeSetter(void)
+ ?IsPoolResource@MulUtility@Alf@@SA_NABVUString@osncore@@@Z @ 10 NONAME ; bool Alf::MulUtility::IsPoolResource(class osncore::UString const &)
+ ?LoadImageFromTexture@MulImageVisualAttributeSetter@Alf@@QAEXHAAVCAlfImageVisual@@@Z @ 11 NONAME ; void Alf::MulImageVisualAttributeSetter::LoadImageFromTexture(int, class CAlfImageVisual &)
+ ??1MulImageVisualAttributeSetter@Alf@@UAE@XZ @ 12 NONAME ; Alf::MulImageVisualAttributeSetter::~MulImageVisualAttributeSetter(void)
+ ??1MulVisualUtility@Alf@@QAE@XZ @ 13 NONAME ; Alf::MulVisualUtility::~MulVisualUtility(void)
+ ?setAttributeValue@MulImageVisualAttributeSetter@Alf@@EAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 14 NONAME ; void Alf::MulImageVisualAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ?parseLCTTextInfo@MulVisualUtility@Alf@@QAEXXZ @ 15 NONAME ; void Alf::MulVisualUtility::parseLCTTextInfo(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/eabi/mulutilityu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,28 @@
+EXPORTS
+ _ZN3Alf10MulUtility11IsLandscapeEv @ 1 NONAME
+ _ZN3Alf10MulUtility12AbsolutePathERN7osncore7UStringE @ 2 NONAME
+ _ZN3Alf10MulUtility14IsPoolResourceERKN7osncore7UStringE @ 3 NONAME
+ _ZN3Alf10MulUtility8IsQwertyEv @ 4 NONAME
+ _ZN3Alf16MulVisualUtility12parseLCTInfoERKNS_7LCTPairEP10CAlfLayout @ 5 NONAME
+ _ZN3Alf16MulVisualUtility16parseLCTTextInfoEv @ 6 NONAME
+ _ZN3Alf16MulVisualUtilityC1Ev @ 7 NONAME
+ _ZN3Alf16MulVisualUtilityC2Ev @ 8 NONAME
+ _ZN3Alf16MulVisualUtilityD1Ev @ 9 NONAME
+ _ZN3Alf16MulVisualUtilityD2Ev @ 10 NONAME
+ _ZN3Alf29MulImageVisualAttributeSetter10IsSVGImageERKN7osncore7UStringE @ 11 NONAME
+ _ZN3Alf29MulImageVisualAttributeSetter16LoadImageFromSvgERKN7osncore7UStringER15CAlfImageVisual @ 12 NONAME
+ _ZN3Alf29MulImageVisualAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 13 NONAME
+ _ZN3Alf29MulImageVisualAttributeSetter20LoadImageFromTextureEiR15CAlfImageVisual @ 14 NONAME
+ _ZN3Alf29MulImageVisualAttributeSetterC1Ev @ 15 NONAME
+ _ZN3Alf29MulImageVisualAttributeSetterC2Ev @ 16 NONAME
+ _ZN3Alf29MulImageVisualAttributeSetterD0Ev @ 17 NONAME
+ _ZN3Alf29MulImageVisualAttributeSetterD1Ev @ 18 NONAME
+ _ZN3Alf29MulImageVisualAttributeSetterD2Ev @ 19 NONAME
+ _ZNK3Alf16MulVisualUtility4dataEv @ 20 NONAME
+ _ZTI16CKeyBoardUtility @ 21 NONAME ; #<TI>#
+ _ZTI17CQwertySubscriber @ 22 NONAME ; #<TI>#
+ _ZTIN3Alf29MulImageVisualAttributeSetterE @ 23 NONAME ; #<TI>#
+ _ZTV16CKeyBoardUtility @ 24 NONAME ; #<VT>#
+ _ZTV17CQwertySubscriber @ 25 NONAME ; #<VT>#
+ _ZTVN3Alf29MulImageVisualAttributeSetterE @ 26 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 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: Build information file for project ?myapp
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+PRJ_EXPORTS
+
+../rom/mulutility.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mulutility.iby)
+
+
+PRJ_MMPFILES
+
+mulxmlutility.mmp
+
+
+PRJ_TESTMMPFILES
+
+
+
+PRJ_TESTEXPORTS
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/group/mulxmlutility.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2007 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: Project definition file
+*
+*/
+
+
+#include <platform_paths.hrh>
+//#include "../../../group/stdinc.mmh" //for STL includes
+
+TARGET mulutility.dll
+TARGETTYPE dll
+UID 0x1000008D 0x2000FA83
+
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+SOURCEPATH ../src
+SOURCE mulimagevisualattributesetter.cpp
+SOURCE mulutility.cpp
+SOURCE mulkeyboardutility.cpp
+SOURCE mulvisualutility.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../../mullogging/inc
+USERINCLUDE ../../../inc
+
+
+MW_LAYER_SYSTEMINCLUDE
+
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+// Alf Libraries
+LIBRARY alfclient.lib
+LIBRARY alfwidgetmodel.lib
+LIBRARY alfwidgetutils.lib
+
+
+// Osn Libraries
+LIBRARY osncore.lib
+
+// STL Libraries
+LIBRARY libstdcpp.lib
+
+
+// System Libraries
+LIBRARY aknskins.lib
+LIBRARY charconv.lib
+LIBRARY euser.lib
+LIBRARY ecom.lib
+LIBRARY eikcore.lib
+LIBRARY avkon.lib
+LIBRARY cone.lib
+LIBRARY aknlayout2.lib
+LIBRARY aknlayout2scalable.lib
+LIBRARY aknlayout2hierarchy.lib
+LIBRARY cdlengine.lib
+
+LIBRARY libc.lib
+LIBRARY libpthread.lib
+LIBRARY estor.lib
+LIBRARY mulmodelutility.lib
+LIBRARY mullogging.lib
+LIBRARY alfresourcepool.lib //for resource pool
+
+LIBRARY efsrv.lib // for rfile,rfs
+
+LANG SC
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/imulembedablewidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* 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: Interface for embedabld widget
+*
+*/
+
+
+#ifndef I_MULEMBEDABLEWIDGET_H
+#define I_MULEMBEDABLEWIDGET_H
+#include <mul/mulvisualitem.h>
+#include <alf/ialfwidgeteventhandler.h>
+namespace Alf
+ {
+
+/** @class IMulEmbedableWidget
+ * @brief Interface for Embedable widget.
+ *
+ * Every widget that can be embeded need to implement this interface.
+ * Parent widget will use this interface to access embeded widget.
+ */
+class IMulEmbedableWidget
+ {
+public:
+
+ /**
+ * Set/Update data of Embeded widget.
+ * Parent widget will provides its own visual item as parameter
+ * embeded widget will have to construct new visual item from provided visual item
+ * and remove unwanted attributes and call update on singel item model.
+ *
+ * @param aItem Parent widget's data in visual item format
+ */
+ virtual void SetData(const MulVisualItem& aItem) = 0;
+
+
+ /**
+ * Return data in format of visual item.
+ * Parent will used this api to update its own data model.
+ *
+ * @return Data of embeded widget
+ */
+ virtual const MulVisualItem& Data() = 0;
+
+ /**
+ * Add as eventhandler for embeded widget.
+ * Parent will use this api to add itself and client as event handler of child widget.
+ *
+ * @param aHandler Event handler
+ */
+ virtual void AddEventHandler( IAlfWidgetEventHandler& aHandler ) = 0;
+
+ /**
+ * Remove as eventhandler form embeded widget.
+ * Parent can remvoe itself and client as event handler using this api
+ *
+ * @param aHandler Event handler
+ */
+ virtual void RemoveEventHandler( IAlfWidgetEventHandler& aHandler ) = 0;
+
+ /**
+ * Return container layout of embeded widget
+ * Parent can use this api to show or hide widget and position child widget.
+ *
+ * @return Layout of embeded widget.
+ */
+ virtual const CAlfLayout& ContainerLayout() = 0;
+
+ };
+
+
+ } // namespace Alf
+
+#endif // I_MULEMBEDABLEWIDGET_H
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/imulmodelobserver.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* 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 I_MULMODEOBSERVER_H
+#define I_MULMODEOBSERVER_H
+
+#include <alf/ialfmodelchangeobserver.h>
+
+namespace Alf
+ {
+
+//Forward Declaration
+class IMulVariantType;
+
+/**
+ * Observer interface to provide notification about model state change.
+ * Widget needs to implement this interface to get highlight or marking change event.
+ */
+class IMulModelObserver //: public IAlfModelChangeObserver
+ {
+
+public: //enum
+
+ /**
+ *Changed state of model
+ */
+ enum TMulChangedState
+ {
+ EHighlightChanged = 1,
+ EMarkingChanged,
+ EDataWindowUpdated,
+ EItemsInserted,
+ EItemsRemoved,
+ EItemUpdated,
+ ETemplateChanged,
+ EModelRefreshed
+ };
+
+public: //method
+
+ /**
+ * Notify observer about IMulModel state change.
+ * Observer will be notified when highlight or marking is changed from model.
+ *
+ * @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)
+ */
+ virtual void ModelStateChanged( TMulChangedState aState, IMulVariantType& aData ) = 0;
+
+ };
+
+ } // Namespace Alf
+
+#endif //I_MULMODEOBSERVER_H
+
+//End of file
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/mulassert.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,95 @@
+/*
+* 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 for Assert Macros
+*
+*/
+
+
+#ifndef MULASSERT_H_
+#define MULASSERT_H_
+
+#include <stdexcept>
+#include <e32std.h>
+
+/**
+ * Assert macro.
+ * It checks expression if expression is evaluated false then panic with specified code.
+ *
+ * @param x Result after expression is evaluated
+ * @param y Error code for Assertion fail
+ */
+#define __MUL_ASSERT(x,y) __ASSERT_ALWAYS(x,User::Panic(y,0))
+
+
+
+/**
+ * Assert Macro for debug version.
+ * It checks expression if expression is evaluated false then panic with specified code.
+ *
+ * @param x bool result after expression is evaluated
+ * @param y Error code for Assertion fail
+ */
+#define __MUL_ASSERT_DEBUG(x,y) __ASSERT_DEBUG(x,User::Panic(y,0))
+
+namespace Alf
+ {
+
+/**
+* Assert function.
+* It takes tamplate argument that is used kind of expceton that need to be thrown.
+* It checks expression if expression is evaluated false then it throws logic exception.
+*
+* @param aExpression bool result after expression is evaluated
+* @param aExceptionString description of error
+*/
+template<class X>
+static void MUL_ASSERT(bool aExpression, const char* aExceptionString)
+ {
+ if( !aExpression )
+ {
+ throw X(aExceptionString);
+ }
+ }
+
+
+
+/**
+ * Assert function for debug version.
+ * It takes tamplate argument that is used kind of expceton that need to be thrown.
+ * It checks expression if expression is evaluated false then it throws logic exception.
+ *
+ * @param aExpression bool result after expression is evaluated
+ * @param aExceptionString description of error
+ */
+template<class X>
+static void MUL_ASSERT_DEBUG(bool aExpression, const char* aExceptionString)
+ {
+#ifdef _DEBUG
+
+ if( !aExpression )
+ {
+ throw X( aExceptionString );
+ }
+
+#endif // _DEBUG
+ }
+
+
+
+ } // namespace Alf
+
+#endif // MULASSERT_H_
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/mulimagevisualattributesetter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2007 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: Custmized image attribute setter for MulWidgets
+ *
+*/
+
+
+#ifndef MULIMAGEVISUALATTRIBUTESETTER_H
+#define MULIMAGEVISUALATTRIBUTESETTER_H
+
+#include <osn/osndefines.h>
+#include "alf/alfimagevisualattributesetter.h"
+
+namespace Alf
+ {
+
+class MulImageVisualAttributeSetterImpl;
+/**
+ * The implementation of the attribute setter.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class MulImageVisualAttributeSetter : public AlfImageVisualAttributeSetter
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aType Type of the attribute setter.
+ */
+ OSN_IMPORT MulImageVisualAttributeSetter();
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT virtual ~MulImageVisualAttributeSetter();
+
+private: // from AlfImageVisualAttributeSetter
+
+ void handleStaticDataAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData);
+
+ void handleStaticAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+ void setAttributeValue ( CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData );
+
+ void handleDynamicDataAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData);
+
+ void handleDynamicAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer);
+
+public: //new method
+
+ /**
+ * Checks the given file path is of SVG image or not
+ *
+ * @param aImagePath Path of the image file,which need to be checked for SVG file format.
+ */
+ OSN_IMPORT bool IsSVGImage(const UString& aImagePath);
+
+ /**
+ * Load Image visual with image provided from file path
+ *
+ * @param aSvgFilePath path of Image
+ * @param aImageVisual visual on with image to be loaded
+ */
+ OSN_IMPORT void LoadImageFromSvg(const UString& aSvgFilePath,CAlfImageVisual& aImageVisual );
+
+ /**
+ * Apply texture on Image visual
+ *
+ * @param aTextureId Texture id
+ * @param aImageVisual visual on with image to be loaded
+ */
+ OSN_IMPORT void LoadImageFromTexture( int aTextureId,CAlfImageVisual& aImageVisual );
+
+private: // data
+
+ auto_ptr<MulImageVisualAttributeSetterImpl> mImpl;
+ auto_ptr<AlfImageVisualAttributeSetter> mImageAttrSetter;
+ IAlfMap* mData;
+ };
+
+} // namespace Alf
+
+#endif // MULIMAGEVISUALATTRIBUTESETTER_H
+
+//end of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/mulitemdefinitions.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* 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: header for defining all the common variables
+*
+*/
+
+
+
+
+#ifndef __MULITEMDEFINITIONS_H__
+#define __MULITEMDEFINITIONS_H__
+
+namespace Alf
+ {
+
+ // Defines the values for visual for states highlight/non-highlight.
+ // portrait / landscape
+ enum MulItemType
+ {
+ ENonHighlight = 0,
+ EHighlight
+ };
+
+ } //namespace Alf
+
+#endif //MULITEMDEFINITIONS
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/mulkeyboardutility.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* 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: Utility class for keyboard handling
+ *
+*/
+
+
+#ifndef MULKEYBOARDUTILITY_H_
+#define MULKEYBOARDUTILITY_H_
+
+#include <e32base.h>
+#include <e32std.h>
+#include <e32property.h>
+#include <centralrepository.h>
+#include <AknFepInternalCRKeys.h>
+#include <AvkonInternalCRKeys.h> // KAknQwertyInputModeActive
+#include <coemain.h>
+
+ class CQwertySubscriber : public CActive
+ {
+ public:
+ CQwertySubscriber(TCallBack aCallBack, RProperty& aProperty);
+ ~CQwertySubscriber();
+
+ public: // New functions
+
+ void SubscribeL();
+ void StopSubscribe();
+
+ private: // from CActive
+
+ void RunL();
+ void DoCancel();
+
+ private:
+ TCallBack iCallBack;
+ RProperty& iProperty;
+ };
+
+class CKeyBoardUtility: public CCoeStatic
+{
+ public:
+ static CKeyBoardUtility* NewL();
+ private:
+ static TInt QwertyModeChangeNotification(TAny* aObj);
+ private:
+ ~CKeyBoardUtility();
+ CKeyBoardUtility();
+ bool bQwerty;
+ /** Qwerty Notification */
+ CQwertySubscriber* iQwertyModeStatusSubscriber;
+ RProperty iQwertyModeStatusProperty;
+ void HandleQwertyModeChangeNotification();
+ public:
+ bool IsQwerty();
+};
+#endif //MULKEYBOARDUTILITY_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/mulleave.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,67 @@
+/*
+* 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 for Leave to Throw macro
+*
+*/
+
+
+#ifndef MULLEAVE_H
+#define MULLEAVE_H
+
+#include <stdexcept>
+
+namespace Alf
+ {
+
+static const char* const KLeaveError = "Leave occured";
+
+class MulLeave
+ {
+
+public:
+
+ static void ThrowOnError( int aError )
+ {
+ switch ( aError )
+ {
+ case KErrNone:
+ {
+ // do nothing
+ break;
+ }
+
+ case KErrNoMemory:
+ {
+ throw std::bad_alloc();
+ }
+
+ // add other errors here if specific exception need to throw
+ case KErrGeneral: // fall through
+ default:
+ {
+ throw std::logic_error( KLeaveError );
+ }
+ }
+ }
+ };
+
+ } // namespace Alf
+
+#define THROW_IF_LEAVES(code) TRAPD( _leave_error, { code; } ); \
+ Alf::MulLeave::ThrowOnError( _leave_error );
+
+#endif // MULLEAVE_H
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/multemplateinterface.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,136 @@
+/*
+* 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: xml parser header
+*
+*/
+
+
+#ifndef MULTEMPLATEINTERFACE_H
+#define MULTEMPLATEINTERFACE_H
+
+#include <alf/ialfmap.h>
+#include <osn/ustring.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alflayout.h>
+
+//#include "mulplaintexteditor.h"
+
+namespace duiuimodel
+ {
+ class DuiNode;
+ }
+using namespace duiuimodel;
+
+namespace Alf
+ {
+
+//Forward declarations
+class MulXmlUtility;
+class IAlfMap;
+
+class MulTemplateInterface
+ {
+
+public:
+
+ /**
+ * Display Area.
+ *
+ * @returns the display are of the control.
+ */
+ virtual TRect Displayarea() = 0;
+
+ /**
+ * Data for the item.
+ *
+ * @aItemIndex index of the item.
+ * @returns data map of the item at the index.
+ */
+ virtual IAlfMap* RootData(int aItemIndex) = 0;
+
+ /**
+ * Get the xml utility.
+ *
+ * @returns MulXmlUtility.
+ */
+ virtual MulXmlUtility& GetMulXmlUtlity() = 0;
+
+ /**
+ * Get the path where the xmls are stored.
+ *
+ * @returns the path.
+ */
+ virtual UString ResourcePath() = 0;
+
+ /**
+ * Gets the template Attribute Name.
+ */
+ virtual UString TemplateAttribute() = 0;
+
+ /**
+ * Gets the embedded widget load name.
+ */
+ virtual UString EmbedWidgetName() = 0;
+
+ /**
+ * Checks if the visual passed as argument belongs to the highlighted item
+ *
+ * @param aVisual The visual to be checked if it belongs to the highlighted item.
+ * @returns True: If aVisual corresponds to highlight item. otherwise, False.
+ */
+ virtual bool IsHighlightVisual(CAlfVisual& aVisual) = 0;
+
+ /**
+ * Return image scale mode
+ *
+ * @return Scale mode
+ */
+ virtual CAlfImageVisual::TScaleMode ScaleMode() = 0;
+
+ /**
+ * Return images should be scaled or not
+ *
+ * @return true if scaling should be applied, else false
+ */
+ virtual bool ApplyScaleMode() = 0;
+
+ /**
+ * Gets the plain text editor control
+ *
+ * @return MulPlainTextEditor wraped in layout.
+ */
+ //virtual MulPlainTextEditor* PlainTextEditor() = 0;
+
+ /**
+ * Gets the root node of the current template.
+ *
+ * @return DuiNode pointer.
+ */
+ virtual DuiNode* TemplateRootNode() = 0;
+
+ virtual bool IsHomogeneous() = 0;
+
+
+ /**
+ * To Get the background is transparent or not.
+ */
+ virtual bool BackGroundTransparency() = 0;
+
+
+ }; //class
+
+ } // namespace
+
+#endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/mului.hrh Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2007 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: Defines flags to enable debug macros
+*
+*/
+
+
+#ifndef MULUI_HRH
+#define MULUI_HRH
+
+//Enable performance logs
+#undef MUL_DEBUG_PERFORMANCE
+//#define MUL_DEBUG_PERFORMANCE
+
+
+#endif //MULUI_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/mulutility.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,95 @@
+/*
+* 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 for utility class
+*
+*/
+
+
+#ifndef MULUTILITY_H_
+#define MULUTILITY_H_
+
+#include <stdexcept>
+#include <string>
+#include <e32cmn.h>
+#include <osn/osndefines.h>
+#include "mulkeyboardutility.h"
+
+namespace osncore
+ {
+ class UString;
+ }
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+static void MUL_ASSERT(bool aExpression, const char* aExceptionString)
+ {
+ if( aExpression )
+ {
+ throw std::logic_error(aExceptionString);
+ }
+ }
+
+class MulUtility
+ {
+public:
+ /**
+ * Converts the relative path to the absolute path.
+ *
+ * @param aRelativePath Which needs to be changed to the absolutepath.
+ * @return true , if aRelativepath changed to Absoulte path or else false
+ */
+ OSN_IMPORT static bool AbsolutePath(UString& aRelativePath);
+
+ /**
+ * Checks which orienatation the application is in and returns true if it is in
+ * Landscape orientation otherwise returns false
+ *
+ */
+ OSN_IMPORT static bool IsLandscape();
+
+ /**
+ * Checks if the given string tag is a pool resource or not
+ *
+ * @param aImageTag Path of the image file,which needs to be checked for resource tag format.
+ */
+ OSN_IMPORT static bool IsPoolResource(const UString& aImageTag);
+
+ /**
+ * Checks if current KeyBoard is QWERTY
+ * @return true if KeyBoard is QWERTY else false.
+ */
+ OSN_IMPORT static bool IsQwerty();
+
+private:
+ /**
+ * Checks the file for its existence
+ *
+ * @param afilePath File to be checked.
+ * @return true, In case file exists or else false.
+ */
+ static bool IsFileExists(/*const char* afilePath*/const TDesC& aFilePath);
+
+
+
+ };
+
+ } // namespace Alf
+
+#endif // MULUTILITY_H_
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/mulvisualutility.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,728 @@
+/*
+* 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: Utility class for widgets visualization in terms of LCT data
+*
+*/
+
+
+#ifndef MULVISUALUTILITY_H_
+#define MULVISUALUTILITY_H_
+
+#include <alf/alflayout.h>
+#include <osn/ustring.h>
+
+// Avkon Includes
+#include <aknlayout2hierarchy.h>
+#include <AknUtils.h>
+#include <AknsConstants.h>
+
+// OpenC Includes
+#include <libc/string.h>
+#include <libc/stdlib.h>
+
+#include <vector>
+using namespace osncore;
+
+namespace Alf
+ {
+
+enum TMulCurrentOrientation
+ {
+ EMulPortrait,
+ EMulLandScape
+ };
+/**
+ * Different visual types
+ */
+enum TMulLCTVisualType
+ {
+ EVisualImage = 0,
+ EVisualText
+ };
+
+/**
+ * Different attribute types
+ */
+enum TMulCustomAttributeType
+ {
+ EAttributeNone,
+ EAttributeCategory,
+ EAttributeOpacity,
+ EAttributeStyle,
+ EAttributeFontthemecolor,
+ EAttributeHAlign,
+ EAttributeVAlign
+ };
+
+/**
+ * Different Category types
+ */
+enum TMulAttributeCategoryType
+ {
+ ECategoryInvalid,
+ ECategoryData,
+ ECategoryStaticData
+ };
+
+/**
+ * Co-ordinate data
+ */
+struct LCTData
+ {
+ int mPosX;
+ int mPosY;
+ int mWidth;
+ int mHeight;
+ int mFontId;
+ };
+
+/**
+ * LCT Id and variety
+ */
+struct LCTPair
+ {
+ UString mLctId;
+ int mVariety;
+ };
+
+// ---------------------------------------------------------------------------
+// Class to hold attributes name and value
+// ---------------------------------------------------------------------------
+//
+class CustomAttributeStructure
+ {
+public:
+
+ /**
+ * Constructor
+ *
+ * @param aName Name of the Attribute
+ * @param aTargetVal Value the Attribute
+ * @param aAttributeType Name of the Attribute
+ * @param aCategoryType Name of the Attribute
+ *
+ *
+ */
+ CustomAttributeStructure(const UString& aName, const UString& aTargetVal,
+ TMulCustomAttributeType aAttributeType = EAttributeNone,
+ TMulAttributeCategoryType aCategoryType = ECategoryInvalid):
+ mName(aName),
+ mTargetVal(aTargetVal),
+ mAttributeType(aAttributeType),
+ mCategoryType(aCategoryType)
+
+ {
+ mLctPair.mLctId = UString("");
+ mLctPair.mVariety = -1;
+ }
+
+ /**
+ * Constructor
+ *
+ * @param aName Name of the Attribute
+ * @param aLctInfo LCT information of the custom attribute
+ * @param aAttributeType Name of the Attribute
+ * @param aCategoryType Name of the Attribute
+ *
+ *
+ */
+ CustomAttributeStructure(const UString& aName, const LCTPair& aLctInfo,
+ TMulCustomAttributeType aAttributeType = EAttributeNone,
+ TMulAttributeCategoryType aCategoryType = ECategoryInvalid):
+ mName(aName),
+ mTargetVal(""),
+ mAttributeType(aAttributeType),
+ mCategoryType(aCategoryType)
+
+ {
+ mLctPair.mLctId = aLctInfo.mLctId;
+ mLctPair.mVariety = aLctInfo.mVariety;
+ }
+
+ /**
+ * Sets the name of the custom attribute
+ *
+ * @param aName Name of the custom attribute
+ * @return nothing
+ *
+ */
+ void SetName(const UString& aName) {mName = aName;}
+
+ /**
+ * Sets the value the custom attribute
+ *
+ * @param aTarget Value of the custom attribute
+ * @return nothing
+ *
+ */
+ void SetTargetValue(const UString& aTarget) {mTargetVal = aTarget; }
+
+ /**
+ * Get the name of attribute
+ *
+ *
+ * @return Name of the attribute
+ *
+ */
+ const UString GetName() const {return mName; }
+
+ /**
+ * Get the value of the attribute
+ *
+ *
+ * @return Value of the attribute
+ *
+ */
+ const UString GetTargetvalue() const {return mTargetVal;}
+
+ /**
+ * Sets the attribute type the custom attribute
+ *
+ * @param aAttributeType Attribute type of the custom attribute
+ * @return nothing
+ *
+ */
+ void SetAttributeType(TMulCustomAttributeType aAttributeType) {mAttributeType = aAttributeType;}
+
+ /**
+ * Sets the Category type the custom attribute
+ *
+ * @param aCategoryType Category type of the custom attribute
+ * @return nothing
+ *
+ */
+ void SetCategoryType(TMulAttributeCategoryType aCategoryType) {mCategoryType = aCategoryType;}
+
+ /**
+ * Get the attribute type of the attribute
+ *
+ *
+ * @return TMulCustomAttributeType
+ *
+ */
+ TMulCustomAttributeType AttributeType() const {return mAttributeType;}
+
+ /**
+ * Get the category type of the attribute
+ *
+ *
+ * @return TMulAttributeCategoryType
+ *
+ */
+ TMulAttributeCategoryType CategoryType()const {return mCategoryType;}
+
+ /**
+ * Get the LCT information of attribute
+ *
+ *
+ * @return LCTPair
+ *
+ */
+ const LCTPair& GetLctPair()
+ {
+ return mLctPair;
+ }
+
+private:
+
+ /**
+ * Attribute name
+ */
+ UString mName;
+
+ /**
+ * Attribute value
+ */
+ UString mTargetVal;
+
+ /**
+ * Attribute type
+ */
+ TMulCustomAttributeType mAttributeType;
+
+ /**
+ * Attribute Category type
+ */
+ TMulAttributeCategoryType mCategoryType;
+
+ /**
+ * LCT Id and variety
+ */
+ LCTPair mLctPair;
+ };
+
+
+// ---------------------------------------------------------------------------
+// Class to hold a visual's attributes
+// ---------------------------------------------------------------------------
+//
+class LCTVisualStructure
+ {
+public:
+
+ /**
+ * Default Constructor
+ *
+ */
+ LCTVisualStructure()
+ {
+
+ }
+
+ /**
+ * Destructor
+ *
+ */
+ ~LCTVisualStructure()
+ {
+ for(int i =0; i < mAttributeStructure.size(); i++)
+ {
+ delete mAttributeStructure[i];
+ }
+ mAttributeStructure.clear();
+ }
+
+ /**
+ * Sets the LCT Id of the visual Structure (part of LCT information of Visual Structure)
+ *
+ * @param aId LCT Id of Visual Structure
+ * @return nothing
+ *
+ */
+ void SetLCTId(const UString& aId) {mLctPair.mLctId = aId;}
+
+ /**
+ * Sets the Variety Id of the visual Structure (part of LCT information of Visual Structure)
+ *
+ * @param aId Variety Id of Visual Structure
+ * @return nothing
+ *
+ */
+ void SetVarietyId(int aId) {mLctPair.mVariety = aId;}
+
+ /**
+ * Gets the LCT Id of the visual Structure (part of LCT information of Visual Structure)
+ *
+ * @return nothing
+ *
+ */
+ const UString GetLCTId() const {return mLctPair.mLctId; }
+
+ /**
+ * Gets the Variety Id of the visual Structure (part of LCT information of Visual Structure)
+ *
+ * @return nothing
+ *
+ */
+ const int GetVarietyId() const {return mLctPair.mVariety;}
+
+ /**
+ * Sets the type of visual this structure contains (can be either image/text)
+ *
+ * @param aVisualType EVisualImage/EVisualText
+ * @return nothing
+ *
+ */
+ void SetVisualType(const TMulLCTVisualType aVisualType) {mVisualType = aVisualType; }
+
+ /**
+ * Gets the visual type of the visual Structure
+ *
+ * @return TMulLCTVisualType
+ *
+ */
+ TMulLCTVisualType VisualType()const { return mVisualType;}
+
+ /**
+ * Adds a Custom attribute structure to this visual structure
+ *
+ * @param aAttr Custom Attribute structure to be added
+ *
+ *
+ */
+ void AddAttribute(CustomAttributeStructure* aAttr)
+ {
+ if(aAttr)
+ mAttributeStructure.push_back(aAttr);
+ }
+
+ /**
+ * Gets a Custom attribute structure at a specified index in this visual structure
+ *
+ * @param aIndex Index at which the attribute struct desired
+ * @return CustomAttributeStructure, NULL if no attribute is found
+ *
+ */
+ const CustomAttributeStructure* GetAttribute(int aIndex) const
+ {
+ if(aIndex >=0 && aIndex < mAttributeStructure.size())
+ return mAttributeStructure[aIndex];
+ else
+ return NULL;
+ }
+
+ /**
+ * Gets a Custom attribute structure by name in this visual structure
+ *
+ * @param aAttrName Name of the attribute struct desired
+ * @return CustomAttributeStructure, NULL if no attribute is found
+ *
+ *
+ */
+ const CustomAttributeStructure* GetAttributeByName(const UString& aAttrName) const
+ {
+ for (vector<CustomAttributeStructure*>::const_iterator it = mAttributeStructure.begin();
+ it!=mAttributeStructure.end(); ++it)
+ {
+ if(!strcmp(((*it)->GetName()).getUtf8(),aAttrName.getUtf8()))
+ return *it;
+ }
+ return NULL;
+ }
+
+ /**
+ * Gets the current attribute count
+ *
+ * @return total number of attributes
+ *
+ */
+ int AttributeCount() const
+ {
+ return mAttributeStructure.size();
+ }
+
+ /**
+ * Sets the Id of the visual Structure
+ *
+ * @param aId Identifier of Visual Structure
+ * @return nothing
+ *
+ */
+ void SetId(const UString& aId) {mId = aId;}
+
+ /**
+ * Gets the Id of the visual Structure
+ *
+ * @return Identifier of the visual structure
+ *
+ */
+ UString GetId() const { return mId; }
+
+ void SetPositions(int x,int y)
+ {
+ mX = x;
+ mY = y;
+ }
+ void SetDimensions(int width,int height)
+ {
+ mW = width;
+ mH = height;
+ }
+ int PositionX() const {return mX;}
+ int PositionY() const {return mY;}
+ int Width() const {return mW;}
+ int Height() const {return mH;}
+ /**
+ * Gets the LCT Information of the visual Structure
+ *
+ * @return LCTPair
+ *
+ */
+ const LCTPair& GetLctPair()
+ {
+ return mLctPair;
+ }
+
+
+private:
+
+ /**
+ * Class to hold attributes name and value
+ *
+ */
+ UString mId;
+
+ /**
+ * LCT Id and variety
+ */
+ LCTPair mLctPair;
+
+ /**
+ * Type of Visual
+ */
+ TMulLCTVisualType mVisualType;
+
+ /**
+ * Array of attribute structures (owned)
+ *
+ */
+ std::vector<CustomAttributeStructure*> mAttributeStructure;
+ int mX,mY,mW,mH;
+ };
+
+// ---------------------------------------------------------------------------
+// Custom data type to hold information about different visuals
+// ---------------------------------------------------------------------------
+//
+class LCTElementStructure
+ {
+public:
+
+ /**
+ * Destructor
+ *
+ */
+ ~LCTElementStructure()
+ {
+ for(int i =0; i < mVS.size(); ++i)
+ {
+ delete mVS[i];
+ }
+ mVS.clear();
+ }
+
+ /**
+ * Adds a Visual structure to this Element structure
+ *
+ * @param aVStructure VisualStructure to be added
+ * @return nothing
+ *
+ */
+ void AddVisualStructure(LCTVisualStructure* aVStructure)
+ {
+ if(aVStructure)
+ mVS.push_back(aVStructure);
+ }
+
+ /**
+ * Gets a Visual structure at a specified index in this visual structure
+ *
+ * @param aIndex Index at which the attribute struct desired
+ * @return LCTVisualStructure, NULL if no structure is found
+ *
+ */
+ const LCTVisualStructure* GetVisualStruture(int aIndex)
+ {
+ if(aIndex >=0 && aIndex < mVS.size())
+ return mVS[aIndex];
+ else
+ return NULL;
+ }
+
+ /**
+ * Gets a Visual structure with specified name
+ *
+ * @param aVisualName name of the visual structure
+ * @return LCTVisualStructure, NULL if no structure is found
+ *
+ */
+ const LCTVisualStructure* GetVisualStrutureByName(const UString& aVisualName) const
+ {
+ for (vector<LCTVisualStructure*>::const_iterator it = mVS.begin();
+ it!=mVS.end(); ++it)
+ {
+ if(!strcmp(((*it)->GetId()).getUtf8(),aVisualName.getUtf8()))
+ return *it;
+ }
+ //if attribute by this name is not found
+ return NULL;
+ }
+
+ /**
+ * Gets a Visual structure count
+ *
+ * @param nothing
+ * @return int visual structure count
+ *
+ */
+ int VisualCount()
+ {
+ return mVS.size();
+ }
+
+ /**
+ * Sets the visual structure Id
+ *
+ * @param aId
+ * @return nothing
+ *
+ */
+ void SetId(const UString& aId) {mId = aId;}
+
+ /**
+ * Gets the visual structure Id
+ *
+ * @param nothing
+ * @return UString
+ *
+ */
+ UString GetId() const { return mId; }
+
+ void SetPositions(int x,int y)
+ {
+ mX = x;
+ mY = y;
+ }
+ void SetDimensions(int width,int height)
+ {
+ mW = width;
+ mH = height;
+ }
+ int PositionX() const {return mX;}
+ int PositionY() const {return mY;}
+ int Width() const {return mW;}
+ int Height() const {return mH;}
+ /**
+ * Sets the LCT Id
+ *
+ * @param aId
+ * @return nothing
+ *
+ */
+ void SetLCTId(const UString& aId) {mLctPair.mLctId = aId;}
+
+ /**
+ * Sets the Variety Id
+ *
+ * @param aId
+ * @return nothing
+ *
+ */
+ void SetVarietyId(int aId) {mLctPair.mVariety = aId;}
+
+ /**
+ * Returns the LCT Id
+ *
+ * @param nothing
+ * @return UString
+ *
+ */
+ const UString GetLCTId() const {return mLctPair.mLctId; }
+
+ /**
+ * Returns the Variety Id
+ *
+ * @param nothing
+ * @return int
+ *
+ */
+ const int GetVarietyId() const {return mLctPair.mVariety;}
+
+ /**
+ * Returns the LCT Pair structure
+ *
+ * @param nothing
+ * @return LCTPair
+ *
+ */
+ const LCTPair& GetLctPair()
+ {
+ return mLctPair;
+ }
+
+private:
+ /**
+ * Identifier for the element structure
+ */
+ UString mId;
+
+ /**
+ * LCT information of element
+ */
+ LCTPair mLctPair;
+
+ /**
+ * Array of children visual structure (owned)
+ */
+ vector<LCTVisualStructure*> mVS;
+
+ int mX,mY,mW,mH;
+ };
+
+
+
+class MulVisualUtility
+ {
+ public:
+ /**
+ * Default Constructor
+ */
+ OSN_IMPORT MulVisualUtility();
+
+ /**
+ * Destructor
+ */
+ OSN_IMPORT ~MulVisualUtility();
+
+ /**
+ * Accessor function for the LCT data
+ *
+ * @return LCTData internal data that contains the coordinate information
+ */
+ OSN_IMPORT const LCTData& data() const ;
+
+ /**
+ * Uses the passed LCTPair and populates the LCT related information
+ * as its internal Data.
+ *
+ * @param aPair LCTPair to be parsed
+ * @param aParentLayout ParentLayout wit respect to which the
+ * coordinate calculation has to be made
+ * @return nothing
+ */
+ OSN_IMPORT void parseLCTInfo(const LCTPair& aPair, CAlfLayout* aParentLayout= NULL);
+
+ /**
+ * Uses the passed LCTPair and populates the LCT related information
+ * as its internal Data.
+ *
+ * @ :: yet to implement
+ * @return nothing
+ */
+ OSN_IMPORT void parseLCTTextInfo();
+
+ private:
+ /**
+ * Internal function to concert LCT IDs into absolute data
+ */
+ void readLCTData();
+
+ /**
+ * Internal function to concert LCT IDs into absolute data for text
+ */
+ void readLCTTextData();
+
+ bool isParentRelative(int aVal) const;
+
+ private:
+ /**
+ * LCT data, Owned
+ */
+ auto_ptr <LCTData> mData;
+
+ /**
+ * LCT id
+ */
+ UString mLCTId;
+
+ /**
+ * Variety id
+ */
+ int mVarietyId;
+ };
+
+ }
+ //namespace Alf
+
+#endif /*MULVISUALUTILITY_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/rom/mulutility.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* 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: Single item Data model iby file.
+*
+*/
+
+
+#ifndef __MULUTILITY_IBY__
+#define __MULUTILITY_IBY__
+
+file=EPOCROOT##epoc32\release\armv5\urel\mulutility.dll \sys\bin\mulutility.dll
+#endif // __MULUTILITY_IBY__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/src/mulimagevisualattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,360 @@
+/*
+* Copyright (c) 2007 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: Attribute setter implementation for mulimage visual.
+ *
+*/
+
+
+// Class header
+#include "../inc/mulimagevisualattributesetter.h"
+
+// Alf headers
+#include "alf/alfattribute.h"
+#include <alf/alfattributeexception.h>
+#include <alf/alfvisualexception.h>
+#include "alf/alfattributecontainer.h"
+#include <alf/alfimagevisual.h>
+#include <alf/alftexture.h>
+#include <alf/alfenv.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfbrusharray.h>
+#include <alf/alfframebrush.h>
+#include <alf/alfimageloaderutil.h>
+#include <alf/alfbitmapprovider.h>
+#include <alf/alfresourcepool.h> //for resource pooling
+#include <alf/alfwidgetenvextension.h> //for resource pooling
+// Osn headers
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+//#include <osn/osnlogicerror.h>
+// Std headers
+#include <libc/string.h>
+#include <utf.h>
+// DUI headers
+#include "alf/attrproperty.h"
+
+//for logs
+#include "mullog.h"
+#include "mulutility.h"
+
+using namespace osncore;
+
+using namespace duiuimodel::imagevisualattributes;
+using namespace duiuimodel::commonvisualattributes;
+using namespace duiuimodel::layoutattributes;
+
+namespace Alf
+ {
+
+class MulImageVisualAttributeSetterImpl
+ {
+public:
+ MulImageVisualAttributeSetterImpl();
+ ~MulImageVisualAttributeSetterImpl();
+public:
+ //Keep track of loaded texture for imagevisuals.
+ //Texture manager doesn't unload the texture from memory untill Env is deleted.
+ //Hence need to unload them once attribute setter is deleted.
+ AlfPtrVector<CAlfTexture> mLoadedTextures;
+ //Env needed to access TextureManager while unloading textures.
+ CAlfEnv* mEnv;
+ };
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+MulImageVisualAttributeSetterImpl::MulImageVisualAttributeSetterImpl()
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetterImpl::MulImageVisualAttributeSetterImpl");
+ //Do not delete textures here as they may be in use by the visuals that have not been deleted.
+ mLoadedTextures.setAutoDelete (false);
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+MulImageVisualAttributeSetterImpl::~MulImageVisualAttributeSetterImpl()
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetterImpl::~MulImageVisualAttributeSetterImpl");
+ //Unload all loaded textures created by this attributesetter to free up the memory.
+ for (int i =0; i<mLoadedTextures.count ();i++)
+ {
+ CAlfTexture* texture = mLoadedTextures[i];
+ mEnv->TextureManager().UnloadTexture (texture->Id ());
+ }
+ mLoadedTextures.clear ();
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+ OSN_EXPORT MulImageVisualAttributeSetter::MulImageVisualAttributeSetter()
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::MulImageVisualAttributeSetter");
+ mImpl.reset(new (EMM) MulImageVisualAttributeSetterImpl());
+ mImageAttrSetter.reset(new (EMM) AlfImageVisualAttributeSetter());
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulImageVisualAttributeSetter::~MulImageVisualAttributeSetter()
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::~MulImageVisualAttributeSetter");
+ }
+
+// ---------------------------------------------------------------------------
+// Sets Attribute Value. Delegates based on attribute Category.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulImageVisualAttributeSetter::setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData )
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::setAttributeValue");
+ mData = aData;
+ CAlfImageVisual* imageVisual = dynamic_cast<CAlfImageVisual*>(&aVisual);
+ if (!imageVisual)
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfImageVisualAttributeSetter")
+ }
+ AlfCommonVisualAttributeSetter::setAttributeValue(aVisual,aContainer, aData);
+ }
+// ---------------------------------------------------------------------------
+// HandleStaticDataAttribute
+// ---------------------------------------------------------------------------
+//
+void MulImageVisualAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::handleStaticDataAttribute");
+ CAlfImageVisual* imageVisual = dynamic_cast<CAlfImageVisual*>(&aVisual);
+ if ( !imageVisual)
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "CAlfImageVisualAttributeSetter")
+ }
+
+ if ( !aData) ALF_THROW ( AlfDataException, EInvalidVariantDataType, "CAlfTextVisualAttributeSetter" )
+
+ const char* dataField = aAttr.getDataField ();
+ if ( !dataField) ALF_THROW ( AlfDataException, EInvalidAttribute, "CAlfTextVisualAttributeSetter" )
+
+ IAlfVariantType* data = aData->item (UString( dataField ));
+ const char* attrName = aAttr.name ();
+ if ( data)
+ {
+ if( !strcmp(attrName, KImagePath))
+ {
+ if ( data->type ()== IAlfVariantType::EString)
+ {
+ if ( IsSVGImage (data->string ()))
+ {
+ LoadImageFromSvg(data->string (),*imageVisual);
+ }
+ else if (MulUtility::IsPoolResource(data->string ()))
+ {
+ //using resource pooling mechanism for image visual
+ ResourcePool& pool = AlfWidgetEnvExtension::resourcePool(imageVisual->Env());
+ imageVisual->SetImage(pool.getImageResource((data->string ().getUtf8())));
+ }
+ else
+ {
+ //AlfImageVisualAttributeSetter::handleStaticDataAttribute(aVisual,aAttr,aContainer,aData);
+ mImageAttrSetter->setAttributeValue(aVisual,&aContainer,aData);
+ }
+ }
+ else if ( data->type ()== IAlfVariantType::EInt)
+ {
+ LoadImageFromTexture(data->integer(),*imageVisual);
+ }
+ }
+ else if( !strcmp(attrName, KSecondaryImagePath))
+ {
+ if ( data->type ()== IAlfVariantType::EString)
+ {
+ if ( IsSVGImage (data->string ()))
+ {
+ LoadImageFromSvg(data->string (),*imageVisual);
+ }
+ else if (MulUtility::IsPoolResource(data->string ()))
+ {
+ //using resource pooling mechanism for image visual
+ ResourcePool& pool1 = AlfWidgetEnvExtension::resourcePool(imageVisual->Env());
+ imageVisual->SetImage(pool1.getImageResource((data->string ().getUtf8())));
+ }
+ else
+ {
+ mImageAttrSetter->setAttributeValue(aVisual,&aContainer,aData);
+ }
+ }
+ else if ( data->type ()== IAlfVariantType::EInt)
+ {
+ LoadImageFromTexture(data->integer(),*imageVisual);
+ }
+ }
+ else
+ {
+ mImageAttrSetter->setAttributeValue(aVisual,&aContainer,aData);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// handleStaticAttribute
+// ---------------------------------------------------------------------------
+//
+void MulImageVisualAttributeSetter::handleStaticAttribute( CAlfVisual& aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer )
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::handleStaticAttribute");
+ CAlfImageVisual* imageVisual = dynamic_cast<CAlfImageVisual*>(&aVisual);
+ if ( !imageVisual)
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfImageVisualAttributeSetter")
+ }
+
+ const char* attrName = aAttr.name ();
+ if( !strcmp(attrName, KImagePath))
+ {
+ if ( IsSVGImage ( aAttr.stringValue()))
+ {
+ LoadImageFromSvg( aAttr.stringValue(),*imageVisual);
+ }
+
+ else
+ {
+ mImageAttrSetter->setAttributeValue(aVisual,&aContainer,mData);
+ }
+ }
+ else if( !strcmp(attrName, KSecondaryImagePath))
+ {
+ if ( IsSVGImage (aAttr.stringValue()))
+ {
+ LoadImageFromSvg(aAttr.stringValue(),*imageVisual);
+ }
+
+ else
+ {
+ mImageAttrSetter->setAttributeValue(aVisual,&aContainer,mData);
+ }
+ }
+ else
+ {
+ mImageAttrSetter->setAttributeValue(aVisual,&aContainer,mData);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// handleDynamicDataAttribute
+// ---------------------------------------------------------------------------
+//
+void MulImageVisualAttributeSetter::handleDynamicDataAttribute(CAlfVisual &aVisual,
+ AlfAttribute& /*aAttr*/,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData)
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::handleDynamicDataAttribute");
+ mImageAttrSetter->setAttributeValue(aVisual,&aContainer,aData);
+ }
+
+// ---------------------------------------------------------------------------
+// handleDynamicDataAttribute
+// ---------------------------------------------------------------------------
+//
+void MulImageVisualAttributeSetter::handleDynamicAttribute(CAlfVisual &aVisual,
+ AlfAttribute& /*aAttr*/,
+ AlfAttributeContainer& aContainer)
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::handleDynamicAttribute");
+ mImageAttrSetter->setAttributeValue(aVisual,&aContainer,mData);
+ }
+
+// ---------------------------------------------------------------------------
+// IsSVGImage
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool MulImageVisualAttributeSetter::IsSVGImage(const UString& aImagePath)
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::IsSVGImage");
+ TPtrC8 src((TUint8*)aImagePath.getUtf8());
+ HBufC* srcBuf = HBufC::NewLC(src.Length());
+
+ srcBuf->Des().Copy(src);
+ srcBuf->Des().LowerCase();
+
+ _LIT(KSvgFile,".svg");
+
+ bool retval = ( KErrNotFound != srcBuf->FindC(KSvgFile));
+
+ CleanupStack::PopAndDestroy( srcBuf );
+
+ return retval;
+ }
+
+// ---------------------------------------------------------------------------
+// LoadImageFromSvg
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulImageVisualAttributeSetter::LoadImageFromSvg(const UString& aSvgFilePath,
+ CAlfImageVisual& aImageVisual )
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::LoadImageFromSvg");
+ TPtrC8 src((TUint8*)aSvgFilePath.getUtf8());
+ HBufC* imagePath = CnvUtfConverter::ConvertToUnicodeFromUtf8L (src);
+ CleanupStack::PushL( imagePath );
+
+ CAlfImageLoaderUtil imgLoaderUtil;
+ imgLoaderUtil.SetSize (TSize (50, 50));
+
+ MAlfBitmapProvider* iSvgBitMapProv= imgLoaderUtil.CreateSVGImageLoaderL (*imagePath);
+ CAlfTexture &texture = aImageVisual.Env().TextureManager().CreateTextureL (
+ KAlfAutoGeneratedTextureId,
+ iSvgBitMapProv,
+ EAlfTextureFlagDefault);
+
+ aImageVisual.SetScaleMode (CAlfImageVisual::EScaleFit);
+ aImageVisual.SetImage (TAlfImage (texture));
+
+ CleanupStack::PopAndDestroy(imagePath);
+ }
+
+// ---------------------------------------------------------------------------
+// LoadImageFromTexture
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulImageVisualAttributeSetter::LoadImageFromTexture( int aTextureId,
+ CAlfImageVisual& aImageVisual )
+ {
+ MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::LoadImageFromTexture");
+ //Seems like the Env's Texture Manager is not returning a copy. And When Env gets deleted the texture is destroyed
+ //So ownership is not with the client
+ const CAlfTexture* texture = aImageVisual.Env().TextureManager().Texture (aTextureId);
+ if(!texture)
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter" )
+ }
+ aImageVisual.SetImage (TAlfImage (*texture));
+ }
+
+
+}// Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/src/mulkeyboardutility.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,139 @@
+/*
+* 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: Utility class for keyboard handling
+ *
+*/
+
+
+// includes
+#include <w32std.h>
+#include <eikdef.h>
+#include <eikenv.h>
+#include <AknUtils.h>
+
+#include "mulkeyboardutility.h"
+
+const TUid KUidKeyBoardUtility = {0x02D811B8} ;
+
+CQwertySubscriber::CQwertySubscriber(TCallBack aCallBack, RProperty& aProperty)
+ : CActive(EPriorityNormal), iCallBack(aCallBack), iProperty(aProperty)
+{
+ CActiveScheduler::Add(this);
+}
+
+ CQwertySubscriber::~CQwertySubscriber()
+{
+ Cancel();
+}
+
+ void CQwertySubscriber::SubscribeL()
+{
+ if (!IsActive())
+ {
+ iProperty.Subscribe(iStatus);
+ SetActive();
+ }
+}
+
+void CQwertySubscriber::StopSubscribe()
+{
+ Cancel();
+}
+
+void CQwertySubscriber::RunL()
+{
+ if (iStatus.Int() == KErrNone)
+ {
+ iCallBack.CallBack();
+ SubscribeL();
+ }
+}
+
+void CQwertySubscriber::DoCancel()
+{
+ iProperty.Cancel();
+}
+
+CKeyBoardUtility* CKeyBoardUtility:: NewL()
+{
+ CKeyBoardUtility* self = static_cast<CKeyBoardUtility*>( CCoeEnv::Static( KUidKeyBoardUtility ) ) ;
+ if(!self)
+ {
+ self = new( ELeave ) CKeyBoardUtility() ;
+ }
+ return self ;
+}
+
+
+CKeyBoardUtility::CKeyBoardUtility():CCoeStatic(KUidKeyBoardUtility, CCoeStatic::EThread /*or EApp*/ )
+{
+ bQwerty = EFalse;
+ User::LeaveIfError(iQwertyModeStatusProperty.Attach(KCRUidAvkon, KAknQwertyInputModeActive));
+ iQwertyModeStatusSubscriber = new (ELeave) CQwertySubscriber(TCallBack(QwertyModeChangeNotification, this), iQwertyModeStatusProperty);
+ iQwertyModeStatusSubscriber->SubscribeL();
+}
+
+CKeyBoardUtility::~CKeyBoardUtility()
+{
+
+ // Qwerty Notify clean-up
+ if (iQwertyModeStatusSubscriber)
+ {
+ iQwertyModeStatusSubscriber->StopSubscribe();
+ }
+ iQwertyModeStatusProperty.Close();
+ delete iQwertyModeStatusSubscriber;
+}
+
+TInt CKeyBoardUtility::QwertyModeChangeNotification(TAny* aObj)
+{
+ if (aObj != NULL)
+ {
+ static_cast<CKeyBoardUtility*>(aObj)->HandleQwertyModeChangeNotification();
+ return KErrNone;
+ }
+ else
+ {
+ return KErrArgument;
+ }
+}
+
+void CKeyBoardUtility::HandleQwertyModeChangeNotification()
+{
+ TInt value = 0;
+ iQwertyModeStatusProperty.Get(value);
+ if(value > 0)
+ {
+ bQwerty = ETrue;
+ }
+ else
+ {
+ bQwerty = EFalse;
+ }
+}
+
+bool CKeyBoardUtility::IsQwerty()
+{
+ TInt value = 0;
+ iQwertyModeStatusProperty.Get(value);
+ if(value > 0)
+ {
+ bQwerty = true;
+ }
+ else
+ {
+ bQwerty = false;
+ }
+ return bQwerty;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/src/mulutility.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,171 @@
+/*
+* 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 for utility class
+*
+*/
+
+// Includes
+
+// Class header
+#include "mulutility.h"
+
+#include "mul/mulmodelutility.h"
+#include "mulassert.h"
+#include <osn/ustring.h>
+#include <f32file.h>
+#include <eikenv.h>
+#include <aknappui.h>
+#include <AknUtils.h>
+
+// Local includes
+#include "mulassert.h"
+//for logs
+#include "mullog.h"
+namespace Alf
+ {
+
+//-----------------------------------------------------------------------------
+// AbsolutePath
+//-----------------------------------------------------------------------------
+//
+OSN_EXPORT bool MulUtility::AbsolutePath(UString& aRelativePath)
+ {
+ MUL_LOG_INFO("aakash::MulUtility::AbsolutePath");
+ bool result = false;
+ aRelativePath.insert(0,"c:");
+ HBufC* relBuffer =NULL;
+
+ TRAPD(err, relBuffer = HBufC::NewL(aRelativePath.getCharLength()))
+ __MUL_ASSERT(err == KErrNone ,_L("Bad Alloc"));
+
+ try
+ {
+ TPtr ptr = relBuffer->Des() ;
+ MulModelUtility::ConvertUStringToTDes(aRelativePath,ptr);
+
+ if(IsFileExists(*relBuffer))
+ {
+ result = true;
+ }
+ else
+ {
+ aRelativePath.replace(0,"z");
+ MulModelUtility::ConvertUStringToTDes(aRelativePath,ptr);
+ if(IsFileExists(*relBuffer))
+ {
+ result = true;
+ }
+ else
+ {
+ aRelativePath.erase(0,2);
+ }
+ }
+
+ }
+ catch(...)
+ {
+
+ }
+ delete relBuffer;
+ return result;
+ }
+
+//-----------------------------------------------------------------------------
+// IsLandscape
+//-----------------------------------------------------------------------------
+//
+OSN_EXPORT bool MulUtility::IsLandscape()
+ {
+ MUL_LOG_INFO("aakash::MulUtility::IsLandscape");
+ CAknAppUiBase::TAppUiOrientation
+ orientation = static_cast<CAknAppUi*>((CEikonEnv::Static()->EikAppUi()))->Orientation();
+
+
+ if (orientation == CAknAppUiBase::EAppUiOrientationLandscape)
+ {
+ return true;
+
+ }
+
+ else if (orientation == CAknAppUiBase::EAppUiOrientationUnspecified )
+ {
+ AknLayoutUtils::TAknCbaLocation cbaLocation = AknLayoutUtils::CbaLocation();
+ if ( (cbaLocation == AknLayoutUtils::EAknCbaLocationRight) ||
+ (cbaLocation == AknLayoutUtils::EAknCbaLocationLeft) )
+ {
+ //landscape
+ return true;
+ }
+ else
+ {
+ // Portrait
+ return false;
+ }
+ }
+ return false;
+
+ }
+
+//-----------------------------------------------------------------------------
+// IsFileExists
+//-----------------------------------------------------------------------------
+//
+bool MulUtility::IsFileExists(/*const char* afilePath*/const TDesC& aFilePath)
+ {
+ MUL_LOG_INFO("aakash::MulUtility::IsFileExists");
+ bool result(false);
+
+
+ RFs fSession;
+ TInt fsError = fSession.Connect();
+ __MUL_ASSERT(fsError == KErrNone,_L("File Session unable to connect"));
+
+ RFile chkFile;
+ TInt errCode = chkFile.Open(fSession,aFilePath,EFileRead);
+ if(KErrPathNotFound != errCode)
+ {
+ result = true;
+ }
+ chkFile.Close();
+ fSession.Close();
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// IsPoolResource
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool MulUtility::IsPoolResource(const UString& aImageTag)
+ {
+ TPtrC8 src((TUint8*)aImageTag.getUtf8());
+ _LIT8(KMulTag,"MUL_RP");
+
+ return ( KErrNotFound != src.FindC(KMulTag));
+ }
+//----------------------------------------------------------------------------
+//IsQwerty
+//----------------------------------------------------------------------------
+OSN_EXPORT bool MulUtility::IsQwerty()
+ {
+ CKeyBoardUtility* iKBUtility = CKeyBoardUtility::NewL();
+ if(iKBUtility)
+ {
+ return iKBUtility->IsQwerty();
+ }
+ return false;
+ }
+
+ } // namespace ends
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/src/mulvisualutility.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,201 @@
+/*
+* 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: Utility class for widgets visualization in terms of LCT data
+ *
+*/
+
+
+// includes
+// Class header
+#include "mulvisualutility.h"
+
+// Alf headers
+#include "alf/alfanchorlayoutattributesetter.h"
+#include "alf/alfattribute.h"
+#include "alf/alfattributecontainer.h"
+#include <alf/alfenv.h>
+#include "alf/alftextvisualattributesetter.h"
+#include "alf/alfvisualtemplate.h"
+#include <alf/alfutil.h>
+
+// DUI headers for xml parser
+
+#include "alf/attrproperty.h"
+
+#include<aknlayoutscalable_uiaccel.cdl.h>
+
+// Local headers
+#include "mulimagevisualattributesetter.h"
+#include "mulassert.h"
+#include "mulutility.h"
+#include "mullog.h" //for logs
+using namespace duiuimodel;
+
+
+namespace Alf
+{
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVisualUtility::MulVisualUtility()
+ {
+ mData.reset(new (EMM) LCTData);
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVisualUtility::~MulVisualUtility()
+ {
+ // Nothing to destroy
+ }
+
+
+// ---------------------------------------------------------------------------
+// parseLCTInfo
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulVisualUtility::parseLCTInfo(const LCTPair& aPair, CAlfLayout* aParentLayout)
+ {
+ TAknWindowLineLayout componentLayout;
+ TAknLayoutRect layoutRect;
+ UString lctId = aPair.mLctId;
+ TSize parentSize (0,0) ;
+ if(aParentLayout )
+ {
+ parentSize = aParentLayout->Size().Target().AsSize();
+ }
+ else
+ {
+ TSize size = AlfUtil::ScreenSize();
+ TAknWindowLineLayout parentLayout;
+ TAknLayoutRect layout;
+ bool isLandscape = MulUtility::IsLandscape();
+ if(!isLandscape)
+ {
+ parentLayout = AknLayoutScalable_UiAccel::main_pane(5).LayoutLine();
+ }
+ else
+ {
+ parentLayout = AknLayoutScalable_UiAccel::main_pane(6).LayoutLine();
+ }
+
+ layout.LayoutRect( TRect(size), parentLayout );
+ parentSize.iWidth = layout.Rect().Width();
+ parentSize.iHeight = layout.Rect().Height();
+ }
+
+ if(!lctId.compare(UString("uiaccel_main_aa_gridscroll_pane")))
+ {
+ componentLayout = AknLayoutScalable_UiAccel::main_aa_gridscroll_pane(aPair.mVariety).LayoutLine();
+
+ }
+ if(!lctId.compare(UString("uiaccel_aagrid_gene_pane")))
+ {
+ componentLayout = AknLayoutScalable_UiAccel::aagrid_gene_pane(aPair.mVariety).LayoutLine();
+
+
+ }
+ if(!lctId.compare(UString("uiaccel_aagrid_cell_image_pane")))
+ {
+ componentLayout = AknLayoutScalable_UiAccel::aagrid_cell_image_pane(aPair.mVariety, 0, 0 ).LayoutLine();
+
+ }
+ if(!lctId.compare(UString("uiaccel_aa_scroll_pane_cp001")))
+ {
+ componentLayout = AknLayoutScalable_UiAccel::aa_scroll_pane_cp001(aPair.mVariety).LayoutLine();
+
+ }
+
+ if(!lctId.compare(UString("uiaccel_aagrid_cell_image_pane_g1")) )
+ {
+ componentLayout = AknLayoutScalable_UiAccel::aagrid_cell_image_pane_g1(aPair.mVariety).LayoutLine();
+ }
+
+ if(!lctId.compare(UString("uiaccel_aagrid_cell_image_pane_g2")) )
+ {
+ componentLayout = AknLayoutScalable_UiAccel::aagrid_cell_image_pane_g2(aPair.mVariety).LayoutLine();
+ }
+
+ if(!lctId.compare(UString("uiaccel_aagrid_cell_image_pane_g3")) )
+ {
+ componentLayout = AknLayoutScalable_UiAccel::aagrid_cell_image_pane_g3(aPair.mVariety).LayoutLine();
+ }
+
+ if(!lctId.compare(UString("uiaccel_aagrid_cell_image_pane_g4")) )
+ {
+ componentLayout = AknLayoutScalable_UiAccel::aagrid_cell_image_pane_g4(aPair.mVariety).LayoutLine();
+ }
+
+
+ layoutRect.LayoutRect( TRect(parentSize), componentLayout );
+
+ mData->mPosX = layoutRect.Rect().iTl.iX;
+ mData->mPosY = layoutRect.Rect().iTl.iY;
+ mData->mWidth = layoutRect.Rect().Width();
+ mData->mHeight = layoutRect.Rect().Height();
+
+ }
+
+// ---------------------------------------------------------------------------
+// parseLCTInfo
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulVisualUtility::parseLCTTextInfo()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the structure containing width, height etc info
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const LCTData& MulVisualUtility::data() const
+ {
+ return *(mData.get());
+ }
+
+// ---------------------------------------------------------------------------
+// Internal function to convert LCT IDs into absolute data for text
+// ---------------------------------------------------------------------------
+//
+void MulVisualUtility::readLCTTextData()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Internal function to concert LCT IDs into absolute data
+// ---------------------------------------------------------------------------
+//
+void MulVisualUtility::readLCTData()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Internal function
+// ---------------------------------------------------------------------------
+//
+bool MulVisualUtility::isParentRelative(int /*aVal*/) const
+ {
+ return false;
+ }
+
+} // namespace Alf
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/bwins/gesturehelperu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,23 @@
+EXPORTS
+ ??0CGestureControl@GestureHelper@@IAE@XZ @ 1 NONAME ; GestureHelper::CGestureControl::CGestureControl(void)
+ ??1CGestureControl@GestureHelper@@UAE@XZ @ 2 NONAME ; GestureHelper::CGestureControl::~CGestureControl(void)
+ ??1CGestureHelper@GestureHelper@@UAE@XZ @ 3 NONAME ; GestureHelper::CGestureHelper::~CGestureHelper(void)
+ ?Cancel@CGestureHelper@GestureHelper@@QAEXXZ @ 4 NONAME ; void GestureHelper::CGestureHelper::Cancel(void)
+ ?ConstructL@CGestureControl@GestureHelper@@IAEXAAVMGestureObserver@2@AAVCAlfEnv@@AAVCAlfDisplay@@H@Z @ 5 NONAME ; void GestureHelper::CGestureControl::ConstructL(class GestureHelper::MGestureObserver &, class CAlfEnv &, class CAlfDisplay &, int)
+ ?HandlePointerEventL@CGestureHelper@GestureHelper@@QAEHABUTPointerEvent@@@Z @ 6 NONAME ; int GestureHelper::CGestureHelper::HandlePointerEventL(struct TPointerEvent const &)
+ ?InitAlfredPointerCaptureL@CGestureHelper@GestureHelper@@QAEXAAVCAlfEnv@@AAVCAlfDisplay@@H@Z @ 7 NONAME ; void GestureHelper::CGestureHelper::InitAlfredPointerCaptureL(class CAlfEnv &, class CAlfDisplay &, int)
+ ?IsHoldingEnabled@CGestureControl@GestureHelper@@QBEHXZ @ 8 NONAME ; int GestureHelper::CGestureControl::IsHoldingEnabled(void) const
+ ?IsHoldingEnabled@CGestureHelper@GestureHelper@@QBEHXZ @ 9 NONAME ; int GestureHelper::CGestureHelper::IsHoldingEnabled(void) const
+ ?NewL@CGestureHelper@GestureHelper@@SAPAV12@AAVMGestureObserver@2@@Z @ 10 NONAME ; class GestureHelper::CGestureHelper * GestureHelper::CGestureHelper::NewL(class GestureHelper::MGestureObserver &)
+ ?NewLC@CGestureControl@GestureHelper@@SAPAV12@AAVMGestureObserver@2@AAVCAlfEnv@@AAVCAlfDisplay@@H@Z @ 11 NONAME ; class GestureHelper::CGestureControl * GestureHelper::CGestureControl::NewLC(class GestureHelper::MGestureObserver &, class CAlfEnv &, class CAlfDisplay &, int)
+ ?OfferEventL@CGestureControl@GestureHelper@@UAEHABVTAlfEvent@@@Z @ 12 NONAME ; int GestureHelper::CGestureControl::OfferEventL(class TAlfEvent const &)
+ ?OfferEventL@CGestureHelper@GestureHelper@@QAEHABVTAlfEvent@@@Z @ 13 NONAME ; int GestureHelper::CGestureHelper::OfferEventL(class TAlfEvent const &)
+ ?SetHoldingEnabled@CGestureControl@GestureHelper@@QAEXH@Z @ 14 NONAME ; void GestureHelper::CGestureControl::SetHoldingEnabled(int)
+ ?SetHoldingEnabled@CGestureHelper@GestureHelper@@QAEXH@Z @ 15 NONAME ; void GestureHelper::CGestureHelper::SetHoldingEnabled(int)
+ ?VisualByCoordinates@HitTest@GestureHelper@@SAPAVCAlfVisual@@ABVCAlfControl@@ABVTPoint@@@Z @ 16 NONAME ; class CAlfVisual * GestureHelper::HitTest::VisualByCoordinates(class CAlfControl const &, class TPoint const &)
+ ?IsDoubleTapEnabled@CGestureControl@GestureHelper@@QBEHXZ @ 17 NONAME ; int GestureHelper::CGestureControl::IsDoubleTapEnabled(void) const
+ ?IsDoubleTapEnabled@CGestureHelper@GestureHelper@@QBEHXZ @ 18 NONAME ; int GestureHelper::CGestureHelper::IsDoubleTapEnabled(void) const
+ ?SetDoubleTapEnabled@CGestureControl@GestureHelper@@QAEXH@Z @ 19 NONAME ; void GestureHelper::CGestureControl::SetDoubleTapEnabled(int)
+ ?SetDoubleTapEnabled@CGestureHelper@GestureHelper@@QAEXH@Z @ 20 NONAME ; void GestureHelper::CGestureHelper::SetDoubleTapEnabled(int)
+ ?AddObserver@CGestureHelper@GestureHelper@@QAEXPAVMGestureObserver@2@@Z @ 21 NONAME ; void GestureHelper::CGestureHelper::AddObserver(class GestureHelper::MGestureObserver *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/eabi/gesturehelperu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,31 @@
+EXPORTS
+ _ZN13GestureHelper14CGestureHelper11OfferEventLERK9TAlfEvent @ 1 NONAME
+ _ZN13GestureHelper14CGestureHelper17SetHoldingEnabledEi @ 2 NONAME
+ _ZN13GestureHelper14CGestureHelper19HandlePointerEventLERK13TPointerEvent @ 3 NONAME
+ _ZN13GestureHelper14CGestureHelper25InitAlfredPointerCaptureLER7CAlfEnvR11CAlfDisplayi @ 4 NONAME
+ _ZN13GestureHelper14CGestureHelper4NewLERNS_16MGestureObserverE @ 5 NONAME
+ _ZN13GestureHelper14CGestureHelper6CancelEv @ 6 NONAME
+ _ZN13GestureHelper14CGestureHelperD0Ev @ 7 NONAME
+ _ZN13GestureHelper14CGestureHelperD1Ev @ 8 NONAME
+ _ZN13GestureHelper14CGestureHelperD2Ev @ 9 NONAME
+ _ZN13GestureHelper15CGestureControl10ConstructLERNS_16MGestureObserverER7CAlfEnvR11CAlfDisplayi @ 10 NONAME
+ _ZN13GestureHelper15CGestureControl11OfferEventLERK9TAlfEvent @ 11 NONAME
+ _ZN13GestureHelper15CGestureControl17SetHoldingEnabledEi @ 12 NONAME
+ _ZN13GestureHelper15CGestureControl5NewLCERNS_16MGestureObserverER7CAlfEnvR11CAlfDisplayi @ 13 NONAME
+ _ZN13GestureHelper15CGestureControlC1Ev @ 14 NONAME
+ _ZN13GestureHelper15CGestureControlC2Ev @ 15 NONAME
+ _ZN13GestureHelper15CGestureControlD0Ev @ 16 NONAME
+ _ZN13GestureHelper15CGestureControlD1Ev @ 17 NONAME
+ _ZN13GestureHelper15CGestureControlD2Ev @ 18 NONAME
+ _ZN13GestureHelper7HitTest19VisualByCoordinatesERK11CAlfControlRK6TPoint @ 19 NONAME
+ _ZNK13GestureHelper14CGestureHelper16IsHoldingEnabledEv @ 20 NONAME
+ _ZNK13GestureHelper15CGestureControl16IsHoldingEnabledEv @ 21 NONAME
+ _ZTIN13GestureHelper15CGestureControlE @ 22 NONAME ; #<TI>#
+ _ZTVN13GestureHelper15CGestureControlE @ 23 NONAME ; #<VT>#
+ _ZThn32_N13GestureHelper15CGestureControl11OfferEventLERK9TAlfEvent @ 24 NONAME ; #<thunk>#
+ _ZN13GestureHelper14CGestureHelper19SetDoubleTapEnabledEi @ 25 NONAME
+ _ZN13GestureHelper15CGestureControl19SetDoubleTapEnabledEi @ 26 NONAME
+ _ZNK13GestureHelper14CGestureHelper18IsDoubleTapEnabledEv @ 27 NONAME
+ _ZNK13GestureHelper15CGestureControl18IsDoubleTapEnabledEv @ 28 NONAME
+ _ZN13GestureHelper14CGestureHelper11AddObserverEPNS_16MGestureObserverE @ 29 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/group/all.cmd Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,20 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Command file for building gesturehelper for winscw and armv5 platforms
+rem
+
+call wins
+call twins
+call arm
+call tarm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/group/arm.cmd Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,18 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Command file for building gesturehelper for armv5 platform
+rem
+
+call bldmake bldfiles
+call abld build armv5 urel
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 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: Build information
+*
+*/
+
+#include <platform_paths.hrh>
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+
+../rom/gesturehelper.iby CORE_MW_LAYER_IBY_EXPORT_PATH(gesturehelper.iby)
+PRJ_MMPFILES
+gesturehelper.mmp
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/group/clean.cmd Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,18 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Command file to clean gesturehelper build for winscw and armv5 platform
+rem
+
+call abld reallyclean
+call abld test reallyclean
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/group/freeze.cmd Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,25 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Command file for freezing def files
+rem
+
+call clean
+call wins
+call arm
+call attrib -r ..\bwins\*.def
+call attrib -r ..\eabi\*.def
+call abld freeze winscw
+call abld freeze armv5
+call clean
+call all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/group/gesturehelper.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 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: Project definition file
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET gesturehelper.dll
+TARGETTYPE dll
+UID 0x0 0x20010978
+
+
+CAPABILITY CAP_CLIENT_DLL
+VENDORID VID_DEFAULT
+
+USERINCLUDE ../inc
+SYSTEMINCLUDE ../inc // public includes use other gesture helper headers as system include
+
+MW_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH ../src
+
+SOURCE gesture.cpp
+SOURCE gesturecontrol.cpp
+SOURCE gesturehelper.cpp
+SOURCE gesturehelperimpl.cpp
+SOURCE gesturerecogniser.cpp
+SOURCE hittest.cpp
+SOURCE pointarray.cpp
+SOURCE pointercapturer.cpp
+SOURCE utils.cpp
+
+LIBRARY alfclient.lib
+LIBRARY avkon.lib
+LIBRARY cone.lib
+LIBRARY ws32.lib
+LIBRARY euser.lib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/group/tarm.cmd Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,18 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Command file for gesturehelper test build for armv5 platform
+rem
+
+call bldmake bldfiles
+call abld test build armv5 urel
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/group/twins.cmd Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,19 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Command file for gesturehelper test build for winscw platform
+rem
+
+call bldmake bldfiles
+call abld test build winscw udeb
+call move /y \epoc32\release\winscw\udeb\t_gesture*.dll \epoc32\release\winscw\udeb\z\sys\bin\
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/group/wins.cmd Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,18 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Command file for building gesturehelper for winscw platform
+rem
+
+call bldmake bldfiles
+call abld build winscw udeb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/rom/gesturehelper.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008-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: Gesture helper iby file
+*
+*/
+
+#ifndef _GESTUREHELPER_IBY_
+#define _GESTUREHELPER_IBY_
+
+#include <data_caging_paths_for_iby.hrh>
+
+file=ABI_DIR\BUILD_DIR\gesturehelper.dll SHARED_LIB_DIR\gesturehelper.dll
+
+#endif // _GESTUREHELPER_IBY_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/gesture.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,930 @@
+/*
+* Copyright (c) 2008-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: Gesture class
+*
+*/
+
+#include "gesture.h"
+
+#include <e32math.h>
+
+#include "gesturedefs.h"
+#include "utils.h"
+
+using namespace GestureHelper;
+
+/**
+ * Point array for which only x axis is relevant
+ */
+class TXAxisPointArray : public TPointArray
+ {
+public:
+ TXAxisPointArray( const RArray< TPointEntry >& aPoints )
+ : TPointArray( aPoints ) {}
+
+ // from TPointArray
+ TPoint operator[]( TInt aIndex ) const
+ {
+ return TPoint( Raw( aIndex ).iX, 0 );
+ }
+ };
+
+/**
+ * Point array for which only y axis is relevant
+ */
+class TYAxisPointArray : public TPointArray
+ {
+public:
+ TYAxisPointArray( const RArray< TPointEntry >& aPoints )
+ : TPointArray( aPoints ) {}
+
+ // from TPointArray
+ TPoint operator[]( TInt aIndex ) const
+ {
+ return TPoint( 0, Raw( aIndex ).iY );
+ }
+ };
+
+namespace
+ {
+ /** @return the current time */
+ TTime CurrentTime()
+ {
+ TTime time;
+ time.UniversalTime();
+ return time;
+ }
+
+ /**
+ * @param aRelevantAxis See @ref MGestureEvent::Code
+ * @return gesture code by analysing the sequence of points
+ */
+ TGestureCode CodeFromPoints( const RArray< TPointEntry >& aPoints,
+ MGestureEvent::TAxis aRelevantAxis )
+ {
+ // select the correct filter based on aRelevantAxis
+ // these filter_ objects are array decorators that will eliminate either
+ // x, y or neither coordinate of each point
+ TXAxisPointArray filterY( aPoints );
+ TYAxisPointArray filterX( aPoints );
+ TPointArray filterNone( aPoints );
+ TPointArray& filter =
+ aRelevantAxis == MGestureEvent::EAxisHorizontal ? static_cast< TPointArray& >( filterY ) :
+ aRelevantAxis == MGestureEvent::EAxisVertical ? static_cast< TPointArray& >( filterX ) :
+ /* otherwise EAxisBoth */ filterNone;
+
+ // currently the gesture recogniser does not have any state, so it is fast
+ // to instantiate. The call is not static however, to allow the recogniser
+ // to be replaced by a more complicated implementation that has state.
+ // then it may make sense to make the recogniser a member variable.
+ return TGestureRecogniser().GestureCode( filter, aRelevantAxis );
+ }
+
+ /**
+ * @param aPoints Sequence of points representing 1st pointer movement
+ * @param aSecondaryPoints Sequence of points representing 2nd pointer movement
+ * @param aPreviousDistance contains the previous distance aftre this function execution
+ * @return gesture code by analysing the sequence of points
+ */
+ TGestureCode MultiTouchCode( const RArray< TPointEntry >& aPoints,
+ const RArray< TPointEntry >& aSecondaryPoints, TInt aPreviousDistance, TBool aIsFirstPinch )
+ {
+ TPointArray filter(aPoints);
+ TPointArray secondaryFilter(aSecondaryPoints);
+ return TGestureRecogniser().MultiTouchGestureCode( filter, secondaryFilter, aPreviousDistance, aIsFirstPinch );
+ }
+ } // unnamed namespace
+
+// ----------------------------------------------------------------------------
+// constructor
+// ----------------------------------------------------------------------------
+//
+CGesture::CGesture()
+ {
+ iPinchStartDistance = -1;
+ iPinchEndDistance = -1;
+ iPinchDetected = EFalse ;
+ }
+
+// ----------------------------------------------------------------------------
+// destructor
+// ----------------------------------------------------------------------------
+//
+CGesture::~CGesture()
+ {
+ iPoints.Close();
+ iSecondaryPoints.Close();
+ }
+
+// ----------------------------------------------------------------------------
+// AsStartEventL
+// ----------------------------------------------------------------------------
+//
+CGesture* CGesture::AsStartEventLC() const
+ {
+ __ASSERT_DEBUG( 0 < iPoints.Count(), Panic( EGesturePanicIllegalLogic ) );
+ CGesture* gesture = new ( ELeave ) CGesture;
+ CleanupStack::PushL( gesture );
+ User::LeaveIfError( gesture->AddPoint( iPoints[0].iPos ) );
+ return gesture;
+ }
+
+// ----------------------------------------------------------------------------
+// ResetToLastPoint
+// ----------------------------------------------------------------------------
+//
+void CGesture::ResetToLastPoint(TBool aSetPointerZero,TBool aSetToZero)
+ {
+ TPointEntry lastEntry(TPoint(0,0),TTime());
+ if( aSetToZero )
+ {
+ __ASSERT_DEBUG( 0 < iPoints.Count(), Panic( EGesturePanicIllegalLogic ) );
+ lastEntry = LastPoint( iPoints);
+ }
+ else
+ {
+ __ASSERT_DEBUG( 0 < iSecondaryPoints.Count(), Panic( EGesturePanicIllegalLogic ) );
+ lastEntry = LastPoint( iSecondaryPoints);
+ }
+ Reset();
+ if( aSetPointerZero )
+ {
+ iPoints.Append(lastEntry);
+ }
+ else
+ {
+ iSecondaryPoints.Append(lastEntry);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// LastPoint
+// ----------------------------------------------------------------------------
+//
+inline const TPointEntry CGesture::LastPoint( const RArray< TPointEntry >& aPoints ) const
+ {
+ return aPoints[aPoints.Count() - 1];
+ }
+
+// ----------------------------------------------------------------------------
+// IsPinchToleranceHigh
+// ----------------------------------------------------------------------------
+//
+inline TBool CGesture::IsHighPinchTolerance() const
+ {
+
+ if( iPinchEndDistance == -1 )
+ {
+ return ETrue;
+ }
+ else
+ {
+ TInt currentDistance = TGestureRecogniser().Length( LastPoint(iPoints).iPos, LastPoint(iSecondaryPoints).iPos );
+ // if previously zooming out and current distance corresponds to zooming in or viceversa
+ if( ( iZoomState == EZoomOut && currentDistance < iPinchStartDistance) ||
+ ( iZoomState == EZoomIn && currentDistance > iPinchStartDistance))
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+// ----------------------------------------------------------------------------
+// Reset
+// ----------------------------------------------------------------------------
+//
+void CGesture::Reset()
+ {
+ iPoints.Reset();
+ iSecondaryPoints.Reset();
+ iHoldingState = ENotHolding;
+ iState = ENotActive;
+ iHoldingPointIndex = 0;
+ iVisual = NULL;
+ iIsDoubleTap = EFalse;
+ iPinchStartDistance = -1;
+ iPinchEndDistance = -1;
+ iPinchDetected = EFalse;
+ iZoomState = ENoZoom;
+ }
+
+// ----------------------------------------------------------------------------
+// IsEmpty
+// ----------------------------------------------------------------------------
+//
+TBool CGesture::IsEmpty() const
+ {
+ return iPoints.Count() == 0;
+ }
+
+// ----------------------------------------------------------------------------
+// IsMultiTouch
+// ----------------------------------------------------------------------------
+//
+TBool CGesture::IsMultiTouch() const
+ {
+ return iSecondaryPoints.Count() == 0;
+ }
+
+// ----------------------------------------------------------------------------
+// Add a point to the sequence of points that together make up the gesture
+// ----------------------------------------------------------------------------
+//
+TInt CGesture::AddPoint( const TPoint& aPoint )
+ {
+ if ( !IsLatestPoint( aPoint ) )
+ {
+ return iPoints.Append( TPointEntry( aPoint, CurrentTime() ) );
+ }
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// AddSecondaryPoint
+// ----------------------------------------------------------------------------
+//
+TInt CGesture::AddSecondaryPoint( const TPoint& aPoint )
+ {
+ if ( !IsLatestSecondaryPoint( aPoint ) )
+ {
+ return iSecondaryPoints.Append( TPointEntry( aPoint, CurrentTime() ) );
+ }
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// SetVisual
+// ----------------------------------------------------------------------------
+//
+void CGesture::SetVisual( CAlfVisual* aVisual )
+ {
+ iVisual = aVisual;
+ }
+
+// ----------------------------------------------------------------------------
+// IsNearHoldingPoint
+// ----------------------------------------------------------------------------
+//
+TBool CGesture::IsNearHoldingPoint( const TPoint& aPoint ) const
+ {
+ return ToleranceRect( iPoints[ iHoldingPointIndex ].iPos ).Contains( aPoint );
+ }
+
+// ----------------------------------------------------------------------------
+// IsLatestPoint
+// ----------------------------------------------------------------------------
+//
+TBool CGesture::IsLatestPoint( const TPoint& aPoint ) const
+ {
+ if ( iPoints.Count() > 0 )
+ {
+ return aPoint == CurrentPos();
+ }
+ return EFalse;
+ }
+// ----------------------------------------------------------------------------
+// IsLatestSecondaryPoint
+// ----------------------------------------------------------------------------
+//
+TBool CGesture::IsLatestSecondaryPoint( const TPoint& aPoint ) const
+ {
+ if ( iSecondaryPoints.Count() > 0 )
+ {
+ return aPoint == iSecondaryPoints[ iSecondaryPoints.Count() - 1 ].iPos;
+ }
+ return EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// StartHolding
+// ----------------------------------------------------------------------------
+//
+void CGesture::StartHolding()
+ {
+ iHoldingState = EHoldStarting;
+
+ // remove all points that were introduced after holding started
+ for ( TInt i = iPoints.Count() - 1; i > iHoldingPointIndex; i-- )
+ {
+ iPoints.Remove( i );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// SetHoldingPoint
+// ----------------------------------------------------------------------------
+//
+void CGesture::SetHoldingPoint()
+ {
+ iHoldingPointIndex = iPoints.Count() - 1;
+ }
+
+// ----------------------------------------------------------------------------
+// ContinueHolding
+// ----------------------------------------------------------------------------
+//
+void CGesture::ContinueHolding()
+ {
+ iHoldingState = EHolding;
+ }
+
+// ----------------------------------------------------------------------------
+// SetSingleTouchActive
+// ----------------------------------------------------------------------------
+//
+void CGesture::SetSingleTouchActive()
+ {
+ __ASSERT_DEBUG( ENotActive == iState, Panic( EGesturePanicIllegalLogic ) );
+ iState = ESingleTouchActive;
+ }
+// ----------------------------------------------------------------------------
+// SetMultiTouchActive
+// ----------------------------------------------------------------------------
+//
+void CGesture::SetMultiTouchActive()
+ {
+ iState = EMultiTouchActive;
+ iIsMultiTouched = ETrue;
+ }
+// ----------------------------------------------------------------------------
+// SetSingleTouchReleased
+// ----------------------------------------------------------------------------
+//
+void CGesture::SetSingleTouchReleased()
+ {
+ // IsMovementStopped expects corresponding SetComplete to be called before SetRelease
+ __ASSERT_DEBUG( ESingleTouchComplete == iState, Panic( EGesturePanicIllegalLogic ) );
+ iState = ESingleTouchReleased;
+ iIsMultiTouched = EFalse;
+ }
+// ----------------------------------------------------------------------------
+// SetMultiTouchReleased
+// ----------------------------------------------------------------------------
+//
+void CGesture::SetMultiTouchReleased()
+ {
+ // IsMovementStopped expects corresponding SetComplete to be called before SetRelease
+ __ASSERT_DEBUG( EMultiTouchComplete == iState, Panic( EGesturePanicIllegalLogic ) );
+ iState = EMultiTouchReleased;
+ }
+
+/**
+ * @return elapsed time between aStartTime and aEndTime
+ */
+inline TTimeIntervalMicroSeconds32 Elapsed( const TTime& aStartTime,
+ const TTime& aEndTime )
+ {
+ return aEndTime.MicroSecondsFrom( aStartTime ).Int64();
+ }
+
+// ----------------------------------------------------------------------------
+// SetSingleTouchComplete
+// ----------------------------------------------------------------------------
+//
+void CGesture::SetSingleTouchComplete()
+ {
+ __ASSERT_DEBUG( iPoints.Count() > 0, Panic( EGesturePanicIllegalLogic ) );
+ iState = ESingleTouchComplete;
+ iCompletionTime = CurrentTime();
+ }
+
+// ----------------------------------------------------------------------------
+// SetMultiTouchComplete
+// ----------------------------------------------------------------------------
+//
+void CGesture::SetMultiTouchComplete()
+ {
+ __ASSERT_DEBUG( iSecondaryPoints.Count() > 0, Panic( EGesturePanicIllegalLogic ) );
+ iState = EMultiTouchComplete;
+ }
+
+// ----------------------------------------------------------------------------
+// SetCancelled
+// ----------------------------------------------------------------------------
+//
+void CGesture::SetCancelled()
+ {
+ iState = ECancelled;
+ }
+
+// ----------------------------------------------------------------------------
+// SetDoubleTap
+// ----------------------------------------------------------------------------
+//
+void CGesture::SetDoubleTap()
+ {
+ iIsDoubleTap = ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// IsTap
+// ----------------------------------------------------------------------------
+//
+TBool CGesture::IsTap() const
+ {
+ if(iIsMultiTouched)
+ {
+ return EFalse;
+ }
+ return CodeFromPoints( iPoints, EAxisBoth ) == EGestureTap;
+ }
+
+// ----------------------------------------------------------------------------
+// IsPinch
+// ----------------------------------------------------------------------------
+//
+TBool CGesture::IsPinch()
+ {
+ if (iPinchStartDistance == -1 )
+ {
+ iPinchStartDistance = TGestureRecogniser().Length( iPoints[0].iPos, iSecondaryPoints[0].iPos ) ;
+ }
+ // if there is a pinch detected in the last attempt then update the start distance.
+ // henceforth this new distance is used as reference for calculating the pinch.
+
+ if( iPinchDetected )
+ {
+ iPinchStartDistance = iPinchEndDistance;
+ }
+ iPinchDetected = MultiTouchCode( iPoints, iSecondaryPoints, iPinchStartDistance,IsHighPinchTolerance()) == EGesturePinch;
+ if( iPinchDetected )
+ {
+ // This end distance is updated the first time the pinch is detected.
+ // This is done the save the value of pinch end distnce for further refernce to
+ // update the pinch start distance next time any pointer position changes.
+ iPinchEndDistance = TGestureRecogniser().Length(
+ LastPoint(iPoints).iPos,LastPoint(iSecondaryPoints).iPos );
+ iZoomState = iPinchEndDistance > iPinchStartDistance ? EZoomOut : EZoomIn;
+ }
+ return iPinchDetected;
+ }
+
+/**
+ * Translates a non-holding code into a holding code
+ * @param aCode original gesture code
+ * @return a gesture code with hold flag applied
+ */
+inline TGestureCode Hold( TGestureCode aCode )
+ {
+ if ( aCode != EGestureStart &&
+ aCode != EGestureDrag &&
+ aCode != EGestureReleased &&
+ aCode != EGestureUnknown )
+ {
+ return static_cast< TGestureCode >( aCode | EFlagHold );
+ }
+ return aCode;
+ }
+
+// ----------------------------------------------------------------------------
+// Code
+// ----------------------------------------------------------------------------
+//
+TGestureCode CGesture::Code( TAxis aRelevantAxis ) const
+ {
+ switch ( iState )
+ {
+ case ESingleTouchActive:
+ // "start" event if only first point received
+ // need to check that not holding, in case user pressed stylus
+ // down, and activated holding without moving the stylus
+ if ( iPoints.Count() == 1 && !IsHolding() )
+ {
+ return EGestureStart;
+ }
+ // "drag" event if holding not started or holding started earlier
+ else if ( iHoldingState != EHoldStarting )
+ {
+ // select the correct filter based on aRelevantAxis
+ // these filter_ objects are array decorators that will eliminate either
+ // x, y or neither coordinate of each point
+ TXAxisPointArray filterY( iPoints );
+ TYAxisPointArray filterX( iPoints );
+ TPointArray filterNone( iPoints );
+ TPointArray& filter =
+ aRelevantAxis == MGestureEvent::EAxisHorizontal ? static_cast< TPointArray& >( filterY ) :
+ aRelevantAxis == MGestureEvent::EAxisVertical ? static_cast< TPointArray& >( filterX ) :
+ /* otherwise EAxisBoth */ filterNone;
+
+ return TGestureRecogniser().ValidateDrag( filter, aRelevantAxis );
+ }
+ // holding was just started
+ else
+ {
+ return Hold( CodeFromPoints( iPoints, aRelevantAxis ) );
+ }
+
+ case EMultiTouchActive:
+ // Only if there are some points in secondary array
+ if ( iSecondaryPoints.Count() == 1 && iPoints.Count() == 1 )
+ {
+ return EGestureMultiTouchStart;
+ }
+ else
+ {
+ return MultiTouchCode( iPoints, iSecondaryPoints, iPinchStartDistance,IsHighPinchTolerance() );
+ }
+
+ case ESingleTouchComplete:
+ {
+ if ( iIsDoubleTap )
+ {
+ return EGestureDoubleTap;
+ }
+
+ // If there was a mulitouch within the last gesture then ignore the tap
+ TGestureCode gestureCode = CodeFromPoints( iPoints, aRelevantAxis );
+ if( gestureCode == EGestureTap && iIsMultiTouched)
+ {
+ return EGestureUnknown;
+ }
+ return gestureCode;
+ }
+ case EMultiTouchComplete:
+ return MultiTouchCode( iPoints, iSecondaryPoints, iPinchStartDistance,IsHighPinchTolerance());
+
+ case ESingleTouchReleased:
+ return EGestureReleased;
+ case EMultiTouchReleased:
+ return EGestureMultiTouchReleased;
+
+ case ECancelled: // fallthrough
+ case ENotActive:
+ default:
+ return EGestureUnknown;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// IsHolding
+// ----------------------------------------------------------------------------
+//
+TBool CGesture::IsHolding() const
+ {
+ return iHoldingState >= EHoldStarting;
+ }
+
+// ----------------------------------------------------------------------------
+// StartPos
+// ----------------------------------------------------------------------------
+//
+TPoint CGesture::StartPos() const
+ {
+ // at least one point will be in the array during callback (pointer down pos)
+ return iPoints[ 0 ].iPos;
+ }
+
+// ----------------------------------------------------------------------------
+// CurrentPos
+// ----------------------------------------------------------------------------
+//
+TPoint CGesture::CurrentPos() const
+ {
+ // at least on point will be in the array during callback (pointer down pos)
+ return iPoints[ iPoints.Count() - 1 ].iPos;
+ }
+
+// ----------------------------------------------------------------------------
+// IsMovementStopped
+// ----------------------------------------------------------------------------
+//
+inline TBool CGesture::IsMovementStopped() const
+ {
+ // iCompletionTime is only only valid if client has called SetComplete
+ if ( iState >= ESingleTouchComplete )
+ {
+ return Elapsed( NthLastEntry( 1 ).iTime, iCompletionTime ).Int() > KSpeedStopTime;
+ }
+ return EFalse;
+ }
+
+namespace
+ {
+ const TInt KFloatingPointAccuracy = 0.000001;
+
+ /** @return percentage (0.0-1.0) how far aPos is from aEdge1 towards aEdge2 */
+ inline TReal32 Proportion( TReal32 aPos, TReal32 aEdge1, TReal32 aEdge2 )
+ {
+ if ( Abs( aEdge2 - aEdge1 ) > KFloatingPointAccuracy )
+ {
+ return ( aPos - aEdge1 ) / ( aEdge2 - aEdge1 );
+ }
+ return 0; // avoid division by zero
+ }
+
+ /** Edges (pixels) at which speed should be -100% or 100% */
+ NONSHARABLE_STRUCT( TEdges )
+ {
+ TReal32 iMin;
+ TReal32 iMax;
+ };
+
+ /**
+ * scale which allows different (coordinate -> percentage) mapping
+ * between -100% to 0% and 0 and 100%
+ */
+ NONSHARABLE_STRUCT( TScale )
+ {
+ TScale( TInt aZero, const TEdges& aEdges )
+ : iMin( aEdges.iMin ), iZero( aZero ), iMax( aEdges.iMax )
+ {
+ }
+
+ /** @return aPos as a percentage between -100% and 100% in aScale */
+ TReal32 Percent( TReal32 aPos ) const;
+
+ /// coordinate where speed is -100%
+ TReal32 iMin;
+ /// coordinate where speed is 0%
+ TReal32 iZero;
+ /// coordinate where speed is 100%
+ TReal32 iMax;
+ };
+
+ /** @convert aPos into a percentage between -100% and 100% in aScale */
+ TReal32 TScale::Percent( TReal32 aPos ) const
+ {
+ TReal32 percent;
+ if ( aPos < iZero )
+ {
+ // return negative percentages on the lower side of zero point
+ percent = -1 * Proportion( aPos, iZero, iMin );
+ }
+ else
+ {
+ percent = Proportion( aPos, iZero, iMax );
+ }
+ // constrain between -100% and 100%
+ return Min( Max( percent, -1.0F ), 1.0F );
+ }
+
+ /** Scale in x and y dimensions */
+ NONSHARABLE_STRUCT( TScale2D )
+ {
+ TRealPoint Percent( const TPoint& aPos ) const
+ {
+ return TRealPoint( iX.Percent( aPos.iX ),
+ iY.Percent( aPos.iY ) );
+ }
+
+ TScale iX;
+ TScale iY;
+ };
+
+ enum TDirection { ESmaller, ELarger };
+
+ /** @return the direction of pos compared to the previous pos */
+ inline TDirection Direction( TInt aPos, TInt aPreviousPos )
+ {
+ return aPos < aPreviousPos ? ESmaller : ELarger;
+ }
+
+ /** Direction in x and y dimensions */
+ NONSHARABLE_STRUCT( TDirection2D )
+ {
+ TDirection iX;
+ TDirection iY;
+ };
+
+ /** Return the direction (up/down) of signal at aIndex */
+ inline TDirection2D Direction( TInt aIndex, const RArray< TPointEntry >& aPoints )
+ {
+ const TPoint& pos = aPoints[ aIndex ].iPos;
+ const TPoint& prevPos = aPoints[ aIndex - 1 ].iPos;
+ TDirection2D dir = { Direction( pos.iX, prevPos.iX ),
+ Direction( pos.iY, prevPos.iY ) };
+ return dir;
+ }
+ /**
+ * @return a position in the aLow and aHigh, so that it aProportion of
+ * of length is above the pos
+ */
+ TReal32 ProportionalLength( TReal32 aLow, TReal32 aHigh, TReal32 aProportion )
+ {
+ return ( aHigh - aLow ) * aProportion / ( 1 + aProportion );
+ }
+
+ /**
+ * @return aVariableEdge scaled to new position, when the other edge changes
+ * from aOldEdge to aNewEdge, so that aOrigin maintains the *same relative
+ * position* between aVariableEdge and the other edge
+ */
+ inline TReal32 ScaledEdge( TReal32 aOrigin, TReal32 aVariableEdge,
+ TReal32 aOldEdge, TReal aNewEdge )
+ {
+ TReal32 proportion = Proportion( aOrigin, aVariableEdge, aOldEdge );
+ return ( proportion * aNewEdge - aOrigin ) / ( proportion - 1 );
+ }
+
+ TScale Rescale( TReal32 aPos, TDirection aDir, TDirection aPrevDir,
+ const TScale& aPrevScale, const TEdges& aEdges )
+ {
+ TScale scale( aPrevScale );
+ if ( aPrevDir != aDir )
+ {
+ // the code duplication is accepted here, since it is difficult to factor out
+ // while maintaining the understandability of this anyway complex algorithm
+ if ( aDir == ESmaller )
+ {
+ scale.iMin = aEdges.iMin;
+ if ( aPrevScale.iZero < aPos )
+ {
+ TReal32 proportionAboveZero = Proportion( aPos, aPrevScale.iZero, aPrevScale.iMax );
+ scale.iZero = aPos - ProportionalLength( aEdges.iMin, aPos, proportionAboveZero );
+ }
+ else
+ {
+ // adjust zero pos so that proportion between aPos, Min, and Zero pos
+ // stay the same (Min will move to 0, aPos stays the same)
+ scale.iZero = ScaledEdge( aPos, aPrevScale.iZero,
+ aPrevScale.iMin, aEdges.iMin );
+ }
+ // adjust the upper edge to take into account the movement of zero pos
+ scale.iMax = ScaledEdge( aPos, aPrevScale.iMax,
+ aPrevScale.iZero, scale.iZero );
+ }
+ else // ELarger
+ {
+ scale.iMax = aEdges.iMax;
+ if ( aPos < aPrevScale.iZero )
+ {
+ TReal32 proportionBelowZero = Proportion( aPos, aPrevScale.iZero, aPrevScale.iMin );
+ scale.iZero = aPos + ProportionalLength( aPos, aEdges.iMax, proportionBelowZero );
+ }
+ else
+ {
+ // adjust zero pos so that proportion between aPos, Max, and Zero pos
+ // stay the same (Max will move edge, aPos stays the same)
+ scale.iZero = ScaledEdge( aPos, aPrevScale.iZero,
+ aPrevScale.iMax, aEdges.iMax );
+ }
+ // adjust the lower edge to take into account the movement of zero pos
+ scale.iMin = ScaledEdge( aPos, aPrevScale.iMin,
+ aPrevScale.iZero, scale.iZero );
+ }
+ }
+ return scale;
+ }
+
+ /** Edges in x and y dimensions */
+ NONSHARABLE_STRUCT( TEdges2D )
+ {
+ TEdges iX;
+ TEdges iY;
+ };
+
+ /**
+ * @param aEdges edges of the area in which gesture points are accepted
+ * @return the scale of latest point in the list of points
+ */
+ TScale2D Scale( const RArray< TPointEntry >& aPoints, const TEdges2D& aEdges )
+ {
+ TScale2D scale = { TScale( aPoints[0].iPos.iX, aEdges.iX ),
+ TScale( aPoints[0].iPos.iY, aEdges.iY ) };
+ TInt count = aPoints.Count();
+ if ( count > 1 )
+ {
+ // iterate the whole point list to arrive to the current scale
+ TDirection2D dir( Direction( 1, aPoints ) );
+ for ( TInt i = 1; i < count; i++ )
+ {
+ // get direction at i
+ TDirection2D newDir( Direction( i, aPoints ) );
+ // get new scale at i
+ scale.iX = Rescale( aPoints[i - 1].iPos.iX, newDir.iX, dir.iX, scale.iX, aEdges.iX );
+ scale.iY = Rescale( aPoints[i - 1].iPos.iY, newDir.iY, dir.iY, scale.iY, aEdges.iY );
+ dir = newDir;
+ }
+ }
+ return scale;
+ }
+ } // unnamed namespace
+
+TRealPoint CGesture::SpeedPercent( const TRect& aEdges ) const
+ {
+ // x and y coordinates are easier to handle separately, extract from TRect:
+ // ((iMinX, iMinY), (iMaxX, iMaxY)) -> ((iMinX, iMaxX), (iMinY, iMaxY))
+ TEdges2D edges = { { aEdges.iTl.iX, aEdges.iBr.iX },
+ { aEdges.iTl.iY, aEdges.iBr.iY } };
+ // work out the current scale (coordinate -> percentage mapping) from
+ // the history of points (i.e., points of current gesture). Then
+ // calculate the percentage of the current position.
+ return Scale( iPoints, edges ).Percent( CurrentPos() );
+ }
+
+// ----------------------------------------------------------------------------
+// Speed
+// ----------------------------------------------------------------------------
+//
+TRealPoint CGesture::Speed() const
+ {
+ const TReal32 KMicroSecondsInSecond = 1000000;
+
+ // Speed is only evaluated at the end of the swipe
+ // if user stops at the end of the swipe before lifting stylus,
+ // speed is zero. If time is zero, return 0 speed (infinite does
+ // not make sense either). Will need to consider also earlier points
+ // and their times or start time, if this zero-speed behavior is a problem
+ TRealPoint speed;
+ TReal32 time = static_cast<TReal32>( TimeFromPreviousPoint().Int() )
+ / KMicroSecondsInSecond;
+ if ( !IsMovementStopped() && time > 0 )
+ {
+ TPoint distance = CurrentPos() - PreviousPos();
+ speed.iX = static_cast<TReal32>( distance.iX ) / time;
+ speed.iY = static_cast<TReal32>( distance.iY ) / time;
+ }
+ return speed;
+ }
+
+// ----------------------------------------------------------------------------
+// Distance
+// ----------------------------------------------------------------------------
+//
+TPoint CGesture::Distance() const
+ {
+ return CurrentPos() - StartPos();
+ }
+
+// ----------------------------------------------------------------------------
+// Visual
+// ----------------------------------------------------------------------------
+//
+CAlfVisual* CGesture::Visual() const
+ {
+ return iVisual;
+ }
+
+// ----------------------------------------------------------------------------
+// TimeFromPreviousPoint
+// ----------------------------------------------------------------------------
+//
+inline TTimeIntervalMicroSeconds32 CGesture::TimeFromPreviousPoint() const
+ {
+ const TInt KLatestEntryOffset = 1;
+ return Elapsed( PreviousEntry().iTime, NthLastEntry( KLatestEntryOffset ).iTime );
+ }
+
+// ----------------------------------------------------------------------------
+// return nth point from the end of the points array
+// ----------------------------------------------------------------------------
+//
+inline const TPointEntry& CGesture::NthLastEntry( TInt aOffset ) const
+ {
+ return iPoints[ Max( iPoints.Count() - aOffset, 0 ) ];
+ }
+
+// ----------------------------------------------------------------------------
+// PreviousEntry
+// ----------------------------------------------------------------------------
+//
+inline const TPointEntry& CGesture::PreviousEntry() const
+ {
+ return NthLastEntry( KPreviousPointOffset );
+ }
+
+// ----------------------------------------------------------------------------
+// PreviousPos
+// ----------------------------------------------------------------------------
+//
+inline TPoint CGesture::PreviousPos() const
+ {
+ return PreviousEntry().iPos;
+ }
+
+// ----------------------------------------------------------------------------
+// PinchPercent
+// ----------------------------------------------------------------------------
+//
+TInt CGesture::PinchPercent() const
+ {
+ // Added 0.5 to avoid 5.7 getting rounded off to 5.
+ return (iPinchEndDistance*100/iPinchStartDistance) + 0.5;
+ }
+
+// ----------------------------------------------------------------------------
+// PinchCentrePoint
+// ----------------------------------------------------------------------------
+//
+TPoint CGesture::PinchCentrePoint() const
+ {
+ if( iPoints.Count() <= 0 || iSecondaryPoints.Count() <= 0 )
+ {
+ return TPoint(0,0);
+ }
+ return TPoint( (iPoints[0].iPos.iX + iSecondaryPoints[0].iPos.iX)/2, (iPoints[0].iPos.iY + iSecondaryPoints[0].iPos.iY)/2);
+ }
+
+// end of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/gesture.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,267 @@
+/*
+* Copyright (c) 2008-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: Gesture class
+*
+*/
+
+#ifndef _GESTURE_H_
+#define _GESTURE_H_
+
+#include <e32base.h>
+
+#include "gestureobserver.h"
+#include "gesturerecogniser.h"
+#include "pointarray.h"
+
+namespace GestureHelper
+{
+
+/**
+ * TGesture represents the gesture that the user has made.
+ * Implements MGestureEvent interface to allow clients to
+ * inspect the gesture
+ */
+NONSHARABLE_CLASS( CGesture ) : public CBase, public MGestureEvent
+ {
+public:
+ /** constructor */
+ CGesture();
+ /** destructor */
+ ~CGesture();
+
+ /**
+ * @return a new gesture that will have only the first point
+ * of this gesture. Can be used to create gesture's a "start" event
+ * after some other points have been received.
+ */
+ CGesture* AsStartEventLC() const;
+
+ /**
+ * Sets the gesture as empty. resets timers to receive points
+ * immediately
+ */
+ void Reset();
+
+ /** @return ETrue if the gesture has no points */
+ TBool IsEmpty() const;
+
+ /** @return ETrue if there are no points in the second array */
+ TBool IsMultiTouch() const;
+
+ /**
+ * Add a point to the sequence of points that forms the gesture
+ * Call Reset() just before adding the first point
+ * @param aPoint the point to add
+ * @return error code
+ */
+ TInt AddPoint( const TPoint& aPoint );
+
+ /**
+ * Add a point to the sequence of points that forms the gesture
+ * Adds the point to the secondray pointer array.
+ * Used to add second pointer movement in case of multi touch
+ * Call Reset() just before adding the first point
+ * @param aPoint the point to add
+ * @return error code
+ */
+ TInt AddSecondaryPoint( const TPoint& aPoint );
+
+ /** Set the visual of this gesture. Should be called when gesture starts */
+ void SetVisual( CAlfVisual* aVisual );
+
+ /** @return ETrue if the point is very near the holding point */
+ TBool IsNearHoldingPoint( const TPoint& aPoint ) const;
+ /** Set the latest point as the holding point */
+ void SetHoldingPoint();
+ /** @return ETrue if aPoint is the same as point added last */
+ TBool IsLatestPoint( const TPoint& aPoint ) const;
+ /** @return ETrue if aPoint is the same as point added last in the secondary array */
+ TBool IsLatestSecondaryPoint( const TPoint& aPoint ) const;
+
+ /**
+ * After call, Code(...) will return appropriate holding gesture code.
+ */
+ void StartHolding();
+ /**
+ * After call, Code(...) will return a "hold released" gesture code when
+ * the gesture is completed. Meanwhile, code will be drag.
+ */
+ void ContinueHolding();
+ /** Set as single touch gesture started */
+ void SetSingleTouchActive();
+ /** Set as multitouch gesture started */
+ void SetMultiTouchActive();
+ /** Set as stylus released when there was only one stylus pressed */
+ void SetSingleTouchReleased();
+ /** Set as stylus released when there were two pointers, one pointer is still pressed down */
+ void SetMultiTouchReleased();
+ /** Set the single touch gesture as complete. Gesture is completed at pointer up */
+ void SetSingleTouchComplete();
+ /** Set the multitouch gesture as complete. Single touch still continues */
+ void SetMultiTouchComplete();
+ /** After call, Code(...) will return a "cancelled" gesture code */
+ void SetCancelled();
+
+ /** force returning a code as double tap when gesture is complete */
+ void SetDoubleTap();
+
+ /**
+ * @return Whether the current gesture is a tap (and hence not a swipe)
+ * Does not consider holding or other state information (such as
+ * whether the gesture was just started or is dragging).
+ * Results are based purely on the current stream of points.
+ */
+ TBool IsTap() const;
+
+ /**
+ * Checks if the current points in primary and secondary pointer array results in
+ * a pinch gesture. If yes updates the previous distance.
+ * @return Whether the current gesture is a pinch
+ * Returns EFalse if multitouch is not active currently.
+ * Results are based purely on the current stream of points.
+ */
+ TBool IsPinch();
+
+ /**
+ * Reset all the events recieved in the current gesture.
+ * Calls Reset() internally.
+ * create a new points starting from the last point of the
+ * earlier gesture
+ * Used when the multitouch point is released to start the
+ * single touch operations.
+ * @param aFirstPointer, Should reset to the first pointers last point or to the 2d pointers.
+ * false (2nd pointers last point) when multitouch is going on and user releases the first point and
+ * continues to hold the second point
+ */
+ void ResetToLastPoint(TBool aSetPointerZero,TBool aSetToZero);
+
+// From MGestureEvent
+ TGestureCode Code( TAxis aRelevantAxis ) const;
+ TBool IsHolding() const;
+ TPoint StartPos() const;
+ TPoint CurrentPos() const;
+ TRealPoint Speed() const;
+ TRealPoint SpeedPercent( const TRect& aEdges ) const;
+ TPoint Distance() const;
+ CAlfVisual* Visual() const;
+ TInt PinchPercent() const;
+ TPoint PinchCentrePoint()const;
+
+private:
+ /** @return elapsed time between the latest and previous points */
+ inline TTimeIntervalMicroSeconds32 TimeFromPreviousPoint() const;
+
+ /** @return elapsed time between the latest and first points */
+ inline TTimeIntervalMicroSeconds32 TimeFromStart() const;
+
+ /** @return ETrue if user has stopped moving the stylus before lifting it */
+ inline TBool IsMovementStopped() const;
+
+ /** @return aOffset'th last entry in the list of points */
+ inline const TPointEntry& NthLastEntry( TInt aOffset ) const;
+
+ /** @return previous point (may not be exactly the point before last) */
+ inline const TPointEntry& PreviousEntry() const;
+
+ /** @return position of point received just before the latest point */
+ inline TPoint PreviousPos() const;
+
+ /** @return the last point in the given pointer array */
+ inline const TPointEntry LastPoint( const RArray< TPointEntry >& aPoints ) const;
+
+ /** @return whether a slightly higher tolarence needs to be used for pinch or not*/
+ inline TBool IsHighPinchTolerance() const;
+
+private:
+
+ /// sequence of points that make up the gesture. own.
+ /// Single touch pointer variations.
+ RArray< TPointEntry > iPoints;
+
+ /// sequence of points that make up the gesture. own.
+ /// Second touch pointer variations.
+ RArray< TPointEntry > iSecondaryPoints;
+
+ /// index in iPoints of the point in which user started holding
+ TInt iHoldingPointIndex;
+
+ /// the different states that indicate whether user has made a holding gesture
+ enum THoldingState
+ {
+ ENotHolding = 0, // before holding activated (i.e., holding not activated)
+ EHoldStarting, // holding activated just now (lasts just one callback round)
+ EHolding // holding activated earlier
+ };
+
+ /// state that indicates is user has held the pointer down in one position
+ /// for long time to indicate a holding gesture
+ THoldingState iHoldingState;
+
+ /// Whether the gesture completion code will be forcefully overridden to be double tap,
+ /// regardless of what the points are
+ TBool iIsDoubleTap;
+
+ /// If in the current gesture, there was a multi touch at any in between point.
+ /// This is required, if after doing a multitouch, release one pointer and do some
+ /// operation with the other pointer still touched down. Though the new variations
+ /// of pointer results in a tap, tap is not possible after a multitouch.
+ TBool iIsMultiTouched;
+
+ enum TCompletionState
+ {
+ ENotActive = 0,
+ ESingleTouchActive,
+ EMultiTouchActive,
+ ECancelled,
+ EMultiTouchComplete,
+ EMultiTouchReleased,
+ ESingleTouchComplete,
+ ESingleTouchReleased
+ };
+
+ /// gesture only becomes complete when user lifts the pointer
+ TCompletionState iState;
+
+ /// time when the stylus was lifted.
+ TTime iCompletionTime;
+
+ /// visual relevant to this gesture. null if not known.
+ CAlfVisual* iVisual;
+
+ /// The distance between the two points, at the time of last identified pinch gesture
+ /// This will also be the start distance for next pinch. At start it will
+ /// be the distance between touch down points
+ TInt iPinchStartDistance;
+
+ /// The distance between the two points, at the time of pinch identified
+ TInt iPinchEndDistance;
+
+ /// Pinch detcted, true for one cycle,untill a new point is recieved.
+ TBool iPinchDetected;
+
+ enum TZoomState
+ {
+ ENoZoom = 0,
+ EZoomOut,
+ EZoomIn
+ };
+
+ /// gesture only becomes complete when user lifts the pointer
+ TZoomState iZoomState;
+
+ };
+
+} // namespace GestureHelper
+
+#endif // _GESTURE_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/gesturecontrol.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2007 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: Gesture control
+*
+*/
+
+// class include
+#include "gesturecontrol.h"
+
+// system includes
+#include <alf/alfevent.h>
+
+// local includes
+#include "gesturehelper.h"
+
+using namespace GestureHelper;
+
+// ----------------------------------------------------------------------------
+// Two-phase constructor
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGestureControl* CGestureControl::NewLC( MGestureObserver& aObserver,
+ CAlfEnv& aEnv, CAlfDisplay& aDisplay, TInt aFreeControlGroupId )
+ {
+ CGestureControl* self = new ( ELeave ) CGestureControl;
+ CleanupStack::PushL( self );
+ self->ConstructL( aObserver, aEnv, aDisplay, aFreeControlGroupId );
+ // create a full screen visual to capture pointer events anywhere on screen
+ self->AppendVisualL( EAlfVisualTypeVisual );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// Constructor
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGestureControl::CGestureControl()
+ {
+ // do nothing
+ }
+
+// ----------------------------------------------------------------------------
+// Second-phase constructor
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CGestureControl::ConstructL( MGestureObserver& aObserver,
+ CAlfEnv& aEnv, CAlfDisplay& aDisplay, TInt aFreeControlGroupId )
+ {
+ CAlfControl::ConstructL( aEnv );
+ iHelper = GestureHelper::CGestureHelper::NewL( aObserver );
+ iHelper->InitAlfredPointerCaptureL( aEnv, aDisplay, aFreeControlGroupId );
+ }
+
+// ----------------------------------------------------------------------------
+// Destructor
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGestureControl::~CGestureControl()
+ {
+ delete iHelper;
+ }
+
+// ----------------------------------------------------------------------------
+// OfferEventL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGestureControl::OfferEventL( const TAlfEvent& aEvent )
+ {
+ return iHelper->OfferEventL( aEvent );
+ }
+
+// ----------------------------------------------------------------------------
+// SetHoldingEnabled
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CGestureControl::SetHoldingEnabled( TBool aEnabled )
+ {
+ iHelper->SetHoldingEnabled( aEnabled );
+ }
+
+// ----------------------------------------------------------------------------
+// IsHoldingEnabled
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGestureControl::IsHoldingEnabled() const
+ {
+ return iHelper->IsHoldingEnabled();
+ }
+
+// ----------------------------------------------------------------------------
+// SetDoubleTapEnabled
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CGestureControl::SetDoubleTapEnabled( TBool aEnabled )
+ {
+ iHelper->SetDoubleTapEnabled( aEnabled );
+ }
+
+// ----------------------------------------------------------------------------
+// IsDoubleTapEnabled
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGestureControl::IsDoubleTapEnabled() const
+ {
+ return iHelper->IsDoubleTapEnabled();
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/gesturedefs.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 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: Gesture helper constant definitions
+*
+*/
+
+#ifndef _GESTUREDEFS_H_
+#define _GESTUREDEFS_H
+
+
+namespace GestureHelper
+{
+
+/// time to hold the stylus in the same position to activate holding
+const TInt KHoldDuration = 1000000; // microseconds
+
+/// time to tap again for the second tap to be a double tap
+const TInt KMaxDoubleTapDuration = 400000; // microseconds
+
+/// time in which speed becomes zero if user stops stylus movement before
+/// lifting the pointer
+const TInt KSpeedStopTime = 100000; // microseconds
+
+/// tolerance in degrees to either side of an angle, for direction to be the
+/// same as reference angle
+const TReal KAngleTolerance = 25;
+
+/// Nth pointer event before the latest point
+const TInt KPreviousPointOffset = 3;
+
+/// Tolerance for ignoring small movements, percent of longer screen edge
+const TInt KGestureTolerancePercent = 4; // of 100
+
+/// Tolerance for considering it as pinch gesture for the first time
+const TInt KInitialPinchTolerance = 5; // Pixels
+
+/// Tolerance for considering it as pinch gesture after a pinch is detected
+const TInt KPinchTolerance = 5; // Pixels
+
+/**
+ * Panic codes
+ */
+enum TGesturePanic
+ {
+ EGesturePanicIllegalLogic
+ };
+
+/** Panics the thread */
+inline void Panic( TGesturePanic aReason )
+ {
+ _LIT( KComponentName, "GestureHelper" );
+ User::Panic( KComponentName, aReason );
+ }
+
+} // namespace GestureHelper
+
+#endif // _GESTUREDEFS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/gesturehelper.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2007 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: Gesture helper interface
+*
+*/
+
+// class include
+#include "gesturehelper.h"
+
+// local includes
+#include "gesturehelperimpl.h"
+
+using namespace GestureHelper;
+
+// ----------------------------------------------------------------------------
+// Two-phase constructor
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGestureHelper* CGestureHelper::NewL( MGestureObserver& aObserver )
+ {
+ CGestureHelper* self = new ( ELeave ) CGestureHelper;
+ CleanupStack::PushL( self );
+ self->iImpl = CGestureHelperImpl::NewL( aObserver );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// Destructor
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGestureHelper::~CGestureHelper()
+ {
+ delete iImpl;
+ }
+
+// ----------------------------------------------------------------------------
+// SetHoldingEnabled
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CGestureHelper::SetHoldingEnabled( TBool aEnabled )
+ {
+ iImpl->SetHoldingEnabled( aEnabled );
+ }
+
+// ----------------------------------------------------------------------------
+// IsHoldingEnabled
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGestureHelper::IsHoldingEnabled() const
+ {
+ return iImpl->IsHoldingEnabled();
+ }
+
+// ----------------------------------------------------------------------------
+// SetDoubleTapEnabled
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CGestureHelper::SetDoubleTapEnabled( TBool aEnabled )
+ {
+ iImpl->SetDoubleTapEnabled( aEnabled );
+ }
+
+// ----------------------------------------------------------------------------
+// IsDoubleTapEnabled
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGestureHelper::IsDoubleTapEnabled() const
+ {
+ return iImpl->IsDoubleTapEnabled();
+ }
+
+// ----------------------------------------------------------------------------
+// InitAlfredPointerEventCaptureL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CGestureHelper::InitAlfredPointerCaptureL( CAlfEnv& aEnv,
+ CAlfDisplay& aDisplay, TInt aFreeControlGroupId )
+ {
+ iImpl->InitAlfredPointerCaptureL( aEnv, aDisplay, aFreeControlGroupId );
+ }
+
+// ----------------------------------------------------------------------------
+// HandlePointerEventL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGestureHelper::HandlePointerEventL( const TPointerEvent& aEvent )
+ {
+ return iImpl->HandlePointerEventL( aEvent );
+ }
+
+// ----------------------------------------------------------------------------
+// OfferEventL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGestureHelper::OfferEventL( const TAlfEvent& aEvent )
+ {
+ return iImpl->OfferEventL( aEvent );
+ }
+
+// ----------------------------------------------------------------------------
+// Cancel
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CGestureHelper::Cancel()
+ {
+ iImpl->Reset();
+ }
+
+// ----------------------------------------------------------------------------
+// AddObserver
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CGestureHelper::AddObserver(MGestureObserver* aObserver)
+ {
+ iImpl->AddObserver(aObserver);
+ }
+
+// end of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/gesturehelperimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,924 @@
+/*
+* Copyright (c) 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: Gesture helper implementation
+*
+*/
+
+#include "gesturehelperimpl.h"
+
+#include <alf/alfevent.h>
+#include <e32base.h>
+#include <w32std.h>
+
+#include "gesture.h"
+#include "gesturedefs.h"
+
+#include "pointercapturer.h"
+
+using namespace GestureHelper;
+
+namespace GestureHelper
+{
+
+/// type of function in gesture helper to be called by the timer
+/// when timer triggers
+typedef void (CGestureHelperImpl::*CallbackFunctionL)();
+
+NONSHARABLE_CLASS( CCallbackTimer ) : public CTimer
+ {
+public:
+ /** Two-phase constructor */
+ static CCallbackTimer* NewL( CGestureHelperImpl& aHelper,
+ CallbackFunctionL aCallbackFunctionL, TInt aDelay, TBool aIsEnabled )
+ {
+ CCallbackTimer* self = new ( ELeave ) CCallbackTimer( aHelper,
+ aCallbackFunctionL, aDelay, aIsEnabled );
+ CleanupStack::PushL( self );
+ self->ConstructL(); // construct base class
+ CActiveScheduler::Add( self );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+ /** Destructor */
+ ~CCallbackTimer()
+ {
+ Cancel();
+ }
+
+ /** Set whether sending holding events is currently enabled */
+ void SetEnabled( TBool aEnabled )
+ {
+ iIsEnabled = aEnabled;
+ // cancel in case hold timer is already running
+ Cancel();
+ }
+
+ /** @return whether sending holding events is currently enabled */
+ TBool IsEnabled() const
+ {
+ return iIsEnabled;
+ }
+
+ /** Start the timer. Calls CGestureHelperImpl::StartHoldingL upon completion */
+ void Start()
+ {
+ // if sending hold events is disabled, do not ever start the hold timer, and
+ // hence hold events will never be triggered
+ if ( iIsEnabled )
+ {
+ Cancel();
+ After( iDelay );
+ }
+ }
+
+private:
+ /** Constructor */
+ CCallbackTimer( CGestureHelperImpl& aHelper,
+ CallbackFunctionL aCallbackFunctionL, TInt aDelay, TBool aIsEnabled )
+ : CTimer( EPriorityUserInput - 1 ), // give higher priority to new pointer events with - 1
+ iHelper( aHelper ), iCallbackFunctionL( aCallbackFunctionL ),
+ iDelay( aDelay ), iIsEnabled( aIsEnabled )
+ {
+ }
+
+ void RunL() // From CActive
+ {
+ (iHelper.*iCallbackFunctionL)();
+ }
+
+private:
+ /// helper object that will be called back when timer is triggered
+ CGestureHelperImpl& iHelper;
+ /// Function in the iHelper object call
+ CallbackFunctionL iCallbackFunctionL;
+ /// How long a time to wait befor calling back after Start()
+ TInt iDelay;
+ /// whether sending holding events is currently enabled
+ TBool iIsEnabled;
+ };
+
+} // namespace GestureHelper
+
+/**
+ * @return position from event. Use this instead of using aEvent direction to
+ * avoid accidentally using TPointerEvent::iPosition
+ */
+inline TPoint Position( const TPointerEvent& aEvent )
+ {
+ // use parent position, since the capturer is using full screen area,
+ // and because the (Alfred) drag events are not local to visual even when
+ // coming from the client
+ return aEvent.iParentPosition;
+ }
+
+// ----------------------------------------------------------------------------
+// Two-phase constructor
+// ----------------------------------------------------------------------------
+//
+CGestureHelperImpl* CGestureHelperImpl::NewL( MGestureObserver& aObserver )
+ {
+ CGestureHelperImpl* self = new ( ELeave ) CGestureHelperImpl( );
+ CleanupStack::PushL( self );
+ self->iDoubleTapTimer = CCallbackTimer::NewL( *self, EmitFirstTapEventL,
+ KMaxDoubleTapDuration, EFalse ); // double tap is disabled by default
+ self->iHoldingTimer = CCallbackTimer::NewL( *self, StartHoldingL,
+ KHoldDuration, ETrue ); // holding is enabled by default
+ self->iGesture = new ( ELeave ) CGesture();
+ self->iUnusedGesture = new ( ELeave ) CGesture();
+ self->iPointerCapturer = CPointerCapturer::NewL();
+ self->iPointerCount = 0;
+ self->iObserver = &aObserver;
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// Destructor
+// ----------------------------------------------------------------------------
+//
+CGestureHelperImpl::~CGestureHelperImpl()
+ {
+ delete iDoubleTapTimer;
+ delete iHoldingTimer;
+ delete iGesture;
+ delete iPreviousTapGesture;
+ delete iUnusedGesture;
+ delete iPointerCapturer;
+ }
+
+// ----------------------------------------------------------------------------
+// SetHoldingEnabled
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::SetHoldingEnabled( TBool aEnabled )
+ {
+ iHoldingTimer->SetEnabled( aEnabled );
+ }
+
+// ----------------------------------------------------------------------------
+// IsHoldingEnabled
+// ----------------------------------------------------------------------------
+//
+TBool CGestureHelperImpl::IsHoldingEnabled() const
+ {
+ return iHoldingTimer->IsEnabled();
+ }
+
+// ----------------------------------------------------------------------------
+// SetHoldingEnabled
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::SetDoubleTapEnabled( TBool aEnabled )
+ {
+ iDoubleTapTimer->SetEnabled( aEnabled );
+ }
+
+// ----------------------------------------------------------------------------
+// IsHoldingEnabled
+// ----------------------------------------------------------------------------
+//
+TBool CGestureHelperImpl::IsDoubleTapEnabled() const
+ {
+ return iDoubleTapTimer->IsEnabled();
+ }
+
+// ----------------------------------------------------------------------------
+// InitAlfredPointerEventCaptureL
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::InitAlfredPointerCaptureL( CAlfEnv& aEnv,
+ CAlfDisplay& aDisplay, TInt aFreeControlGroupId )
+ {
+ iPointerCapturer->InitForAlfredL(*this, aEnv, aDisplay, aFreeControlGroupId );
+ }
+
+// ----------------------------------------------------------------------------
+// Reset state
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::Reset()
+ {
+ iHoldingTimer->Cancel();
+ iGesture->Reset();
+ iPointerCapturer->Stop();
+ iPointerCount=0;
+ iCurrentPointer = -1;
+ }
+
+/**
+ * Helper function that calls Reset on the pointer to CGestureHelperImpl
+ */
+static void ResetHelper( TAny* aHelper )
+ {
+ static_cast< CGestureHelperImpl* >( aHelper )->Reset();
+ }
+
+// ----------------------------------------------------------------------------
+// Handle a pointer event
+// ----------------------------------------------------------------------------
+//
+TBool CGestureHelperImpl::HandlePointerEventL( const TPointerEvent& aEvent )
+ {
+ return HandlePointerEventL( aEvent, NULL );
+ }
+
+// ----------------------------------------------------------------------------
+// OfferEventL
+// ----------------------------------------------------------------------------
+//
+TBool CGestureHelperImpl::OfferEventL( const TAlfEvent& aEvent )
+ {
+ if ( aEvent.IsPointerEvent() )
+ {
+ return HandlePointerEventL( aEvent.PointerEvent(), aEvent.Visual() );
+ }
+ return EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// Handle a pointer event
+// ----------------------------------------------------------------------------
+//
+TBool CGestureHelperImpl::HandlePointerEventL( const TPointerEvent& aEvent,
+ CAlfVisual* aVisual )
+ {
+ TInt pointerNumber = GestureHelper::TGestureRecogniser().PointerNumber( aEvent );
+
+ if( !ValidatePointer( aEvent, pointerNumber ) )
+ {
+ return EFalse; // don't consume
+ }
+
+ switch ( aEvent.iType )
+ {
+ case TPointerEvent::EButton1Down:
+ // Error handling for recieveing a button down on the pointer which
+ // is already touched down
+ // Here the pointer number shouldnot be considered for validtaing.
+ // We should consider which pointer is currently touched down
+ // It can so happen that user has touched was doing pinch and then released his
+ // 1st finger. and starts to do panning with the second finger still touched down.
+ // Then again when he touches the first finger, in that case you should be validating these pointers w.r.t
+ // the pointer numbers of the last touched finger
+
+ // we shouldnot consider pointer number here. If pointer 1 is
+ // already touched and dragging and we recieve a down of pointer 0
+ if( iPointerCount == 0 && pointerNumber == 1)
+ {
+ return EFalse;
+ }
+ else if( iPointerCount == 1 )
+ {
+ if(iCurrentPointer == pointerNumber )
+ {
+ TRAP_IGNORE( EmitCancelEventL() );
+ Reset();
+ }
+ }
+ else if( iPointerCount == 2 )
+ {
+ // This case is similar to reciving a pointer up on the pointer
+ // on which the second down is recieved. We reset all the earlier points
+ // recieved on this pointer because we assume that some pointer up got
+ // missed in between.
+
+ // if pointer count is already 2, then reset the array of pointer for
+ // which a down event is recieved, and continue handling in normal way
+ // Fix for error crash in photos fullscreen
+ // Like above if you reset the pointer array for which the down event
+ // is recieved the second time then in thecase of, 0 down, 1 down, 0 down
+ // iPoints will be null.
+ // Here whenever reseting it to single pointer havndling, always iPoints should have
+ // the data. Hence the first parameter should always be true.
+ // Fix is iGesture->ResetToLastPoint(pointerNumber != 0,pointerNumber != 0);
+ // is changed to iGesture->ResetToLastPoint( ETrue,pointerNumber != 0);
+ iPointerCount = 1;
+ iCurrentPointer = pointerNumber == 0 ? 1 : 0;
+ iGesture->ResetToLastPoint( ETrue,pointerNumber != 0);
+ iGesture->SetSingleTouchActive();
+ }
+
+ if(iPointerCount == 0)
+ {
+ iPointerCount = 1;
+ iCurrentPointer = pointerNumber;
+ // single touch gesture start
+ iGesture->SetSingleTouchActive();
+ HandleSinglePointerEventL( aEvent, aVisual );
+ }
+ else if(iPointerCount == 1)
+ {
+ iPointerCount = 2;
+ iCurrentPointer = -1;
+ // add the last point of the single touch event
+ // to first array of gesture
+ iGesture->ResetToLastPoint(pointerNumber != 0,ETrue);
+ iGesture->SetMultiTouchActive();
+ // multi touch gesture start
+ HandleMultiplePointerEventL( aEvent, pointerNumber );
+ }
+ else
+ {
+
+ }
+ break;
+
+ case TPointerEvent::EDrag:
+ if(iPointerCount == 1)
+ {
+ if(pointerNumber == iCurrentPointer)
+ {
+ HandleSinglePointerEventL( aEvent, aVisual );
+ }
+ else
+ {
+ // only the drags on the current pointer should be considered.
+ return EFalse;
+ }
+
+ }
+ else if(iPointerCount == 2)
+ {
+ HandleMultiplePointerEventL( aEvent, pointerNumber );
+ }
+ else
+ {
+ // nothing to be done
+ }
+ break;
+
+ case TPointerEvent::EButton1Up:
+ if(iPointerCount == 2)
+ {
+ // multi touch gesture complete
+ HandleMultiplePointerEventL( aEvent, pointerNumber );
+ // should the pointer count decrese first n then
+ // handling of event or otherwise
+ iPointerCount = 1;
+ iCurrentPointer = pointerNumber == 0 ? 1 : 0;
+ iGesture->ResetToLastPoint(ETrue,pointerNumber != 0);
+ iGesture->SetSingleTouchActive();
+ }
+ else if( iPointerCount == 1 )
+ {
+ iPointerCount = 0;
+ iCurrentPointer = -1;
+ // single touch gesture complete
+ HandleSinglePointerEventL( aEvent, aVisual );
+ }
+ else
+ {
+ // nothing to be done
+ }
+ break;
+
+ default:
+ break;
+ }
+ return ETrue; // consume
+ }
+// ----------------------------------------------------------------------------
+// Handle a pointer event
+// ----------------------------------------------------------------------------
+//
+TBool CGestureHelperImpl::HandleSinglePointerEventL( const TPointerEvent& aEvent,
+ CAlfVisual* aVisual )
+ {
+ switch ( aEvent.iType )
+ {
+ case TPointerEvent::EButton1Down:
+ // If no up event was received during previous gesture, cancel
+ // previous event and reset state
+ if ( !IsIdle() )
+ {
+ // ambiguous what is the right thing when "cancel" event leaves
+ // and "start" does not. Leaving for cancel *after* "start" could
+ // be unexpected to client, as client would have handled start
+ // event successfully. Assume that leaving upon cancellation
+ // can be ignored.
+ TRAP_IGNORE( EmitCancelEventL() );
+ Reset();
+ }
+ // as long as down event of a double tap comes within the double
+ // tap timeout, it does not matter how long the user keeps the finger
+ // pressed for the gesture to be a double tap. Therefore, cancel
+ // the timeout, as it is no longer relevant. (Of course, this call
+ // will only do something if the timer is actually running, which
+ // is only if received a tap event very recently.)
+ iDoubleTapTimer->Cancel();
+ // adding the first point implicitly makes the state "not idle"
+ AddPointL( aEvent );
+ iGesture->SetVisual( aVisual );
+ // if pointer capturer leaves, the remaining pointer events will
+ // not be captured if stylus is dragged outside the capturing visual
+ // an error note will be shown, so the potential problem is irrelevant,
+ // assuming client does not (incorrectly) block the leave from reaching
+ // the framework
+ iPointerCapturer->StartL();
+ // Delay emitting a down event _until_ it is known that this beginning
+ // gesture is _not_ the second tap of a double tap event.
+ // iPreviousTapGesture is only non-null if very recently received
+ // a tap event and double tap is enabled.
+ if ( !iPreviousTapGesture )
+ {
+ EmitEventL( *iGesture );
+ }
+ // else delay emitting an event, as it might be a double tap
+ // (allow the second tap of a double tap to be anywhere, so don't check
+ // for start pos here)
+ break;
+
+ case TPointerEvent::EDrag:
+ // While stylus down, the same event is received repeatedly
+ // even if stylus does not move. Filter out by checking if point
+ // is the same as the latest point
+ if ( !iGesture->IsLatestPoint( Position( aEvent ) ) )
+ {
+ AddPointL( aEvent );
+
+ // as long as the starting gesture is seen as a tap, do not emit any
+ // drag events
+ if ( !iGesture->IsTap() )
+ {
+ // if there is a previous tap gesture, getting drag events means that
+ // the previous gesture is not a double tap. So emit the previous gesture.
+ if ( iPreviousTapGesture )
+ {
+ // this is a second gesture after a tap (double tap is enabled)
+ EmitFirstTapEventL();
+ // emit down event for the current gesture (since its down was delayed, until
+ // it was to be known if the event is a tap. That is known now.)
+ EmitStartEventL( *iGesture );
+ }
+ // restart holding timer every time the current stylus pos changes
+ StartHoldingTimer( aEvent );
+ // emit the drag event to client
+ EmitEventL( *iGesture );
+ }
+ // else: do not emit drag events until it is known that the gesture is not a tap
+ // (or the second tap of double tap)
+ }
+ break;
+
+ case TPointerEvent::EButton1Up:
+ // reset in case the down event for next gesture is not received for a reason
+ // in client, and instead drag or up events are received.
+ // reset via cleanup stack to ensure Reset is run even if
+ // observer leaves
+ CleanupStack::PushL( TCleanupItem( &ResetHelper, this ) );
+ // if adding of the point fails, notify client with a
+ // cancelled event. It would be wrong to send another
+ // gesture code when the up point is not known
+ if ( KErrNone == AddPoint( aEvent ) )
+ {
+ // if the gesture is a tap, the gesture is either the first tap of a _potential_
+ // double tap, or the second tap of a double tap
+ if ( iDoubleTapTimer->IsEnabled() && iGesture->IsTap() )
+ {
+ __ASSERT_DEBUG( !iGesture->IsHolding(), Panic( EGesturePanicIllegalLogic ) );
+ if ( !iPreviousTapGesture )
+ {
+ // First tap. Delay emitting its code evemt and released events until it is known
+ // whether the tap is a double tap
+ iPreviousTapGesture = iGesture;
+ iGesture = NewGesture();
+ iDoubleTapTimer->Start();
+ }
+ else
+ {
+ // This is a second tap of a double tap. Do not emit anything for the second
+ // tap. Only down event has been emitted for the first tap. Emit the code
+ // event (double tap) and released for the first tap.
+ iPreviousTapGesture->SetDoubleTap();
+ EmitFirstTapEventL();
+ }
+ }
+ else
+ {
+ // modified iGesture to be "released"
+ CompleteAndEmitSingleTouchL( *iGesture );
+ }
+ }
+ else
+ { // adding a point failed
+ EmitCancelEventL();
+ }
+ // reset state
+ CleanupStack::PopAndDestroy( this );
+ break;
+
+ default:
+ break;
+ }
+ return ETrue; // consume
+ }
+
+// ----------------------------------------------------------------------------
+// Handle multiple pointer events
+// ----------------------------------------------------------------------------
+//
+TBool CGestureHelperImpl::HandleMultiplePointerEventL( const TPointerEvent& aEvent,
+ const TInt aPointerNumber )
+ {
+ switch ( aEvent.iType )
+ {
+ case TPointerEvent::EButton1Down:
+ // adding the first point implicitly makes the state "not idle"
+ AddMultiTouchPointsL( aEvent, aPointerNumber);
+ EmitEventL( *iGesture );
+ break;
+
+ case TPointerEvent::EDrag:
+ // While stylus down, the same event is received repeatedly
+ // even if stylus does not move. Filter out by checking if point
+ // is the same as the latest point
+ if( AddMultiTouchPointsL(aEvent, aPointerNumber ))
+ {
+ // as long as the starting gesture is seen as a tap, do not emit any
+ // drag events
+ if ( iGesture->IsPinch() )
+ {
+ // emit the pinch event to client
+ EmitEventL( *iGesture );
+ }
+ // else: do not emit any events to the client
+ }
+
+
+ break;
+
+ case TPointerEvent::EButton1Up:
+
+ // if adding of the point fails, notify client with a
+ // cancelled event. It would be wrong to send another
+ // gesture code when the up point is not known
+ AddMultiTouchPointsL(aEvent, aPointerNumber );
+ CompleteAndEmitDoubleTouchL( *iGesture );
+
+ break;
+
+ default:
+ break;
+ }
+ return ETrue; // consume
+ }
+
+// ----------------------------------------------------------------------------
+// Validate AddMultiTouchPointsL events
+// Check if the point recieved is the repeavt event of previous point or a new point
+// inline ok in cpp file for a private member function
+// ----------------------------------------------------------------------------
+//
+inline TBool CGestureHelperImpl::AddMultiTouchPointsL( const TPointerEvent& aEvent, const TInt aPointerNumber)
+ {
+ TBool pointAdded = EFalse;
+ if ( aPointerNumber > 0 )
+ {
+ if ( !iGesture->IsLatestSecondaryPoint( Position( aEvent ) ) )
+ {
+ AddSecondaryPointL( aEvent );
+ pointAdded = ETrue;
+ }
+ }
+ else
+ {
+ if ( !iGesture->IsLatestPoint( Position( aEvent ) ) )
+ {
+ AddPointL( aEvent );
+ pointAdded = ETrue;
+ }
+ }
+ return pointAdded;
+ }
+
+// ----------------------------------------------------------------------------
+// Check for Stray evnet
+// ----------------------------------------------------------------------------
+//
+TBool CGestureHelperImpl::StrayEvent( const TPointerEvent& aEvent ) const
+ {
+ //If we are recieving a button down on pointer 0 in pointer capturer then its a stray event
+ // Dont consume it
+ if ( aEvent.iType == TPointerEvent::EButton1Down && IsIdle( 0) )
+ {
+ return ETrue; // don't consume
+ }
+ return EFalse;
+ }
+// ----------------------------------------------------------------------------
+// Validate the events
+// is it a valid event or a stray pointer form some other visuals
+// inline ok in cpp file for a private member function
+// ----------------------------------------------------------------------------
+//
+inline TBool CGestureHelperImpl::ValidatePointer( const TPointerEvent& aEvent, const TInt aPointerNumber) const
+ {
+ // Check if received event is valid or not.
+ // In practice, event is NOT valid in the following situations:
+ //
+ // 1. Pointer down event is received for pointer which is already down.
+ // 2. Pointer up event is received for pointer which is already up.
+ // 3. Pointer drag event is received for pointer which is not down.
+ // 4. Pointer numbers other than 0 and 1. We are handling only 2 pointers.
+ //
+ // In these situations this function returns EFalse,
+ // corresponding event is ignored and recognition continues as earlier.
+ //
+
+ // filter all the events for which the pointer number is less than 0
+ // or greater than 1. we will handle only 2 pointer events.
+ if( aPointerNumber >= 2 || aPointerNumber < 0 )
+ {
+ return EFalse;
+ }
+
+ // filter out events that do not start with button down. It is a stray
+ // event from another visual
+ TInt pointerTovalidate = aPointerNumber ;
+ if( iPointerCount == 1 && aPointerNumber == 1)
+ {
+ pointerTovalidate = 0;
+ }
+ if ( aEvent.iType != TPointerEvent::EButton1Down && IsIdle( pointerTovalidate ) )
+ {
+ return EFalse; // don't consume
+ }
+
+
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// Is the helper idle?
+// Checks whether any points are already added in the array corresponding
+// to the pointer number
+// inline ok in cpp file for a private member function
+// ----------------------------------------------------------------------------
+//
+inline TBool CGestureHelperImpl::IsIdle( TBool aPointerNumber ) const
+ {
+ if( aPointerNumber == 0 )
+ {
+ return iGesture->IsEmpty();
+ }
+ else if( aPointerNumber == 1 )
+ {
+ return iGesture->IsMultiTouch();
+ }
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// Add a point to the sequence of points that together make up the gesture
+// inline ok in cpp file for a private member function
+// ----------------------------------------------------------------------------
+//
+inline void CGestureHelperImpl::AddPointL( const TPointerEvent& aEvent )
+ {
+ User::LeaveIfError( AddPoint( aEvent ) );
+ }
+
+// ----------------------------------------------------------------------------
+// Add a point to the sequence of points that together make up the gesture
+// inline ok in cpp file for a private member function
+// ----------------------------------------------------------------------------
+//
+inline TInt CGestureHelperImpl::AddPoint( const TPointerEvent& aEvent )
+ {
+ return iGesture->AddPoint( Position ( aEvent ) );
+ }
+
+// ----------------------------------------------------------------------------
+// Add a point to the sequence of points that together make up the gesture
+// inline ok in cpp file for a private member function
+// ----------------------------------------------------------------------------
+//
+inline void CGestureHelperImpl::AddSecondaryPointL( const TPointerEvent& aEvent )
+ {
+ User::LeaveIfError( AddSecondaryPoint( aEvent ) );
+ }
+
+// ----------------------------------------------------------------------------
+// Add a point to the sequence of points that together make up the gesture
+// inline ok in cpp file for a private member function
+// ----------------------------------------------------------------------------
+//
+inline TInt CGestureHelperImpl::AddSecondaryPoint( const TPointerEvent& aEvent )
+ {
+ return iGesture->AddSecondaryPoint( Position ( aEvent ) );
+ }
+
+// ----------------------------------------------------------------------------
+// StartHoldingTimer
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::StartHoldingTimer( const TPointerEvent& aNewEvent )
+ {
+ if ( !( iGesture->IsHolding() ||
+ iGesture->IsNearHoldingPoint( Position( aNewEvent ) ) ) )
+ {
+ // restart hold timer, since pointer has moved
+ iHoldingTimer->Start();
+ // Remember the point in which holding was started
+ iGesture->SetHoldingPoint();
+ }
+ }
+
+/**
+ * Helper function that calls ContinueHolding on the pointer to TGesture
+ */
+static void ContinueHolding( TAny* aGesture )
+ {
+ static_cast< CGesture* >( aGesture )->ContinueHolding();
+ }
+
+// ----------------------------------------------------------------------------
+// Add a point to the sequence of points that together make up the gesture
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::StartHoldingL()
+ {
+ // hold & tap event is specifically filtered out. Use case: in list fast
+ // scrolling activation (e.g. enhanced coverflow), tap & hold should not
+ // start fast scroll. In addition, after long tap on start position,
+ // drag and drag & hold swiping should emit normal swipe and swipe&hold
+ // events. Therefore, tap & hold is not supported.
+ __ASSERT_DEBUG( !iGesture->IsTap() && !iPreviousTapGesture, Panic( EGesturePanicIllegalLogic ) );
+
+ // holding has just started, and gesture code should be provided to client.
+ // set gesture state so that it produces a gesture code (other than drag)
+ iGesture->StartHolding();
+
+ // create an item in the cleanup stack that will set the gesture state
+ // to holding-was-started-earlier state. NotifyL may leave, but the
+ // holding-was-started-earlier state must still be successfully set,
+ // otherwise, the holding gesture code will be sent twice
+ CleanupStack::PushL( TCleanupItem( &ContinueHolding, iGesture ) );
+
+ EmitEventL( *iGesture );
+
+ // set holding state to "post holding"
+ CleanupStack::PopAndDestroy( iGesture );
+ }
+
+// ----------------------------------------------------------------------------
+// RecyclePreviousTapGesture
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::RecyclePreviousTapGesture( TAny* aSelf )
+ {
+ CGestureHelperImpl& self = *reinterpret_cast<CGestureHelperImpl*>( aSelf );
+ self.RecycleGesture( self.iPreviousTapGesture );
+ }
+
+// ----------------------------------------------------------------------------
+// Emit the remainder of the previous tap event (tap + released)
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::EmitFirstTapEventL()
+ {
+ // when this function is called, a tap has turned out to _not_ be a double tap
+ __ASSERT_DEBUG( IsDoubleTapEnabled(), Panic( EGesturePanicIllegalLogic ) );
+ __ASSERT_DEBUG( iPreviousTapGesture, Panic( EGesturePanicIllegalLogic ) );
+
+ iDoubleTapTimer->Cancel();
+
+ // ensure previous tap gesture is reset even if client leaves
+ CleanupStack::PushL( TCleanupItem( &RecyclePreviousTapGesture, this ) );
+
+ CompleteAndEmitSingleTouchL( *iPreviousTapGesture );
+
+ // recycle the emitted gesture
+ CleanupStack::PopAndDestroy( this );
+ }
+
+// ----------------------------------------------------------------------------
+// EmitStartEventL
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::EmitStartEventL( const CGesture& aGesture )
+ {
+ CGesture* startGesture = aGesture.AsStartEventLC();
+ EmitEventL( *startGesture );
+ CleanupStack::PopAndDestroy( startGesture );
+ }
+
+// ----------------------------------------------------------------------------
+// EmitCompletionEvents for single touch
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::CompleteAndEmitSingleTouchL( CGesture& aGesture )
+ {
+ aGesture.SetSingleTouchComplete();
+ // send gesture code if holding has not been started. If holding has
+ // been started, client has already received a "hold swipe left" e.g. event, in which
+ // case don't another "swipe left" event
+ if ( !aGesture.IsHolding() )
+ {
+ // if client leaves, the state is automatically reset.
+ // In this case the client will not get the released event
+ EmitEventL( aGesture );
+ }
+ // send an event that stylus was lifted
+ aGesture.SetSingleTouchReleased();
+ EmitEventL( aGesture );
+ }
+
+// ----------------------------------------------------------------------------
+// EmitCompletionEvents for double touch
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::CompleteAndEmitDoubleTouchL( CGesture& aGesture )
+ {
+ aGesture.SetMultiTouchComplete();
+ if ( aGesture.IsPinch() )
+ {
+ // emit the pinch event to client
+ EmitEventL( aGesture );
+ }
+ // send an event that stylus was lifted
+ aGesture.SetMultiTouchReleased();
+ EmitEventL( aGesture );
+ }
+
+// ----------------------------------------------------------------------------
+// EmitCancelEventL
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::EmitCancelEventL()
+ {
+ iDoubleTapTimer->Cancel();
+
+ // ensure previous tap gesture is reset even if client leaves
+ CleanupStack::PushL( TCleanupItem( &RecyclePreviousTapGesture, this ) );
+
+ CGesture& gestureToCancel = iPreviousTapGesture ? *iPreviousTapGesture : *iGesture;
+ gestureToCancel.SetCancelled();
+ EmitEventL( gestureToCancel );
+
+ // recycle the emitted gesture
+ CleanupStack::PopAndDestroy( this );
+ }
+
+// ----------------------------------------------------------------------------
+// Notify observer
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::EmitEventL( const CGesture& aGesture )
+ {
+ // iPoints array must have content when this function is called
+ iObserver->HandleGestureL( aGesture );
+ }
+
+// ----------------------------------------------------------------------------
+// Return a fresh gesture from the gesture pool (pool of one gesture)
+// ----------------------------------------------------------------------------
+//
+CGesture* CGestureHelperImpl::NewGesture()
+ {
+ __ASSERT_DEBUG( iUnusedGesture, Panic( EGesturePanicIllegalLogic ) ); // pool should no be empty
+ iUnusedGesture->Reset();
+ CGesture* freshGesture = iUnusedGesture;
+ iUnusedGesture = NULL;
+ return freshGesture;
+ }
+
+// ----------------------------------------------------------------------------
+// Return a fresh gesture from the gesture pool (pool of one gesture)
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::RecycleGesture( CGesture*& aGesturePointer )
+ {
+ // only one object fits into the pool, and that should currently be enough
+ // one pointer must be null, one non-null
+ __ASSERT_DEBUG( !iUnusedGesture != !aGesturePointer, Panic( EGesturePanicIllegalLogic ) );
+ if ( aGesturePointer )
+ {
+ iUnusedGesture = aGesturePointer;
+ aGesturePointer = NULL;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// AddObserver
+// ----------------------------------------------------------------------------
+//
+void CGestureHelperImpl::AddObserver(MGestureObserver* aObserver)
+ {
+ iObserver = aObserver;
+ }
+
+// end of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/gesturehelperimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2007 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: Gesture helper implementation
+*
+*/
+
+#ifndef _GESTUREHELPERIMPL_H_
+#define _GESTUREHELPERIMPL_H_
+
+#include <e32base.h>
+
+class CAlfEnv;
+class CAlfDisplay;
+class CAlfVisual;
+class TAlfEvent;
+struct TPointerEvent;
+
+namespace GestureHelper
+{
+
+class CCallbackTimer;
+class CGesture;
+class CPointerCapturer;
+class MGestureObserver;
+
+/**
+ * Implementation of CGestureHelper interface
+ */
+NONSHARABLE_CLASS( CGestureHelperImpl ) : public CBase
+ {
+public:
+ /** 2-phase constructor */
+ static CGestureHelperImpl* NewL( MGestureObserver& aObserver );
+
+ /** Destructor */
+ ~CGestureHelperImpl();
+
+ void InitAlfredPointerCaptureL( CAlfEnv& aEnv, CAlfDisplay& aDisplay,
+ TInt aFreeControlGroupId );
+
+ /** See @ref CGestureHelper::SetHoldingEnabled */
+ void SetHoldingEnabled( TBool aEnabled );
+ /** See @ref CGestureHelper::IsHoldingEnabled */
+ TBool IsHoldingEnabled() const;
+ /** See @ref CGestureHelper::SetDoubleTapEnabled */
+ void SetDoubleTapEnabled( TBool aEnabled );
+ /** See @ref CGestureHelper::IsDoubleTapEnabled */
+ TBool IsDoubleTapEnabled() const;
+ /** See @ref CGestureHelper::HandlePointerEventL */
+ TBool HandlePointerEventL( const TPointerEvent& aEvent );
+ /** See @ref CGestureHelper::OfferEventL */
+ TBool OfferEventL( const TAlfEvent& aEvent );
+ /** Reset helper state */
+ void Reset();
+ /** See @ref CGestureHelper::AddObserver */
+ void AddObserver(MGestureObserver* aObserver);
+ /** Returns true the current event is a stray event form another visual */
+ TBool StrayEvent( const TPointerEvent& aEvent ) const;
+
+private:
+
+ /**
+ * Analyse how the pointer event affects the current gesture, and potentially
+ * notify the observer.
+ * @param aVisual visual on which the event fell on or NULL if not known
+ * @return ETrue if the event was consumed
+ */
+ TBool HandlePointerEventL( const TPointerEvent& aEvent, CAlfVisual* aVisual );
+
+ /**
+ * Analyse how the pointer event affects the current gesture, and potentially
+ * notify the observer.
+ * @param aVisual visual on which the event fell on or NULL if not known
+ * @return ETrue if the event was consumed
+ */
+ TBool HandleSinglePointerEventL( const TPointerEvent& aEvent, CAlfVisual* aVisual );
+
+ /**
+ * Analyse how the pointer event affects the current gesture, and potentially
+ * notify the observer.
+ * @param aVisual visual on which the event fell on or NULL if not known
+ * @return ETrue if the event was consumed
+ */
+ TBool HandleMultiplePointerEventL( const TPointerEvent& aEvent, const TInt aPointerNumber );
+
+ /** @return ETrue if the helper has not started processing a gesture */
+ inline TBool IsIdle( TBool aPointerNumber = 0 ) const;
+ /** Add a point to the sequence of points that make up the gesture */
+ inline void AddPointL( const TPointerEvent& aEvent );
+ /** Add a point to the sequence of points that make up the gesture */
+ inline TInt AddPoint( const TPointerEvent& aEvent );
+ /** Add a point to the sequence of points that make up the gesture */
+ inline void AddSecondaryPointL( const TPointerEvent& aEvent );
+ /** Add a point to the sequence of points that make up the gesture */
+ inline TInt AddSecondaryPoint( const TPointerEvent& aEvent );
+ /** Verify if the currnet pointer event recived is valid and expected */
+ inline TBool ValidatePointer( const TPointerEvent& aEvent, const TInt aPointerNumber) const;
+ /** return if there is a second pointer held down */
+ inline TBool IsMultiTouch() const;
+ /** Add points to corresponding array depending on aPointerNumber, return whether the point is added or not */
+ inline TBool AddMultiTouchPointsL( const TPointerEvent& aEvent, const TInt aPointerNumber);
+
+ /** Activates holding and notifies observer that holding has been started */
+ void StartHoldingL();
+ /* Set previous tag gesture to null (and recycle the gesture object) */
+ static void RecyclePreviousTapGesture( TAny* aSelf );
+ /** Emits a tap event since second tap of a double tap was not received within timeout */
+ void EmitFirstTapEventL();
+ /** Emit the start gesture event that aGesture would have produced */
+ void EmitStartEventL( const CGesture& aGesture );
+ /**
+ * Send code event if not holding. Also sets the event to released and emits again.
+ * Modifies aGesture!
+ */
+ void CompleteAndEmitSingleTouchL( CGesture& aGesture );
+ /**
+ * Send code event if pinch. Also sets the event to released and emits again.
+ * Modifies aGesture!
+ */
+ void CompleteAndEmitDoubleTouchL( CGesture& aGesture );
+ /**
+ * Send cancel event about the latest gesture client was notified about
+ * Sets the latest gesture to Cancelled.
+ */
+ void EmitCancelEventL();
+ /** Notify observer of the gesture */
+ void EmitEventL( const CGesture& aGesture );
+ /**
+ * (re)start holding timer at the current point.
+ * Does not restart holding if the point (in aEvent) is near enough to where holding
+ * was started earlier. (Allows small movement but still starting holding.
+ */
+ void StartHoldingTimer( const TPointerEvent& aNewEvent );
+
+ /**
+ * @return a gesture object from the gesture pool
+ * Getting gestures from the gesture pool avoids the need to create gestures
+ * after construction. There is max only one gesture object in the pool,
+ * but no more is needed
+ */
+ CGesture* NewGesture();
+ /** Move the gesture into the gesture pool, and set aGesturePointer to null */
+ void RecycleGesture( CGesture*& aGesturePointer );
+
+private:
+ /// Gesture is the logical representation of a sequence of points arriving
+ /// at certain times
+ /// This is the current gesture
+ CGesture* iGesture;
+
+ /// Tap gesture of the previous gesture. Used when double tap is enabled.
+ /// The gesture is cached, since it cannot be emitted until gesture helper
+ /// knows whether the next gesture forms a double tap
+ /// @see CGestureHelperImpl::iDoubleTapTimer
+ CGesture* iPreviousTapGesture;
+
+ /// This is a recyclable object pool with just one object.
+ /// This class needs one or two gesture objects at any one time. There is one
+ /// less error condition to handle if gesture objects are not created after
+ /// construction. Therefore, if only one gesture object is needed at a specific,
+ /// point in time, the unused gesture object is stored here.
+ CGesture* iUnusedGesture;
+
+ /// When double tap is enabled, a tap
+ /// event (and it's released event) is only emitted after the double tap timeout
+ /// passes. If user taps again before the timeout (in the same position),
+ /// this gesture is emitted as a double tap (followed by the released event,
+ /// and the second tap is not emitted at all.
+ /// If user taps, and then swipes before the double tap timeout, this tap
+ /// event (and it's released event) event is emitted, and only then the swipe's
+ /// down and drag events are emitted. In other words, if user presses down
+ /// during the timeout, the down event it not emitted until the gesture
+ /// helper knows that the gesture is not another tap.
+ /// Behavior while double tap enabled:
+ /// Swipe: Down + drag + up => emits down + swipe/cancel + released
+ /// Tap: Down + up => emits down ... timeout ... + tap + released
+ /// Double tap: Down + up + down + up => emits down ... double tap + released
+ /// Tap + quick swipe: Down + up + down + drag + ... => emits down ... tap + up (for tap) + down (for swipe ) + drag + ...
+ /// Double tap timer is cancelled when the second pointer down event is received,
+ /// i.e., it does not matter if user does this:
+ /// down + up + down ... long wait ... + up. It's still a double tap.
+ CCallbackTimer* iDoubleTapTimer;
+
+ /// holding is activated when user keeps pointer down in the same place for
+ /// a longer period. the holding timer activates off when enough time has passed.
+ CCallbackTimer* iHoldingTimer;
+
+ /// observer for gesture events
+ MGestureObserver* iObserver;
+
+ /// captures subsequent pointer events after pointer down received,
+ /// until pointer up
+ CPointerCapturer* iPointerCapturer;
+
+ /// Tells number of pointers pressed down.
+ TInt iPointerCount;
+
+ /// Tells the pointer number of the current pointers pressed down.
+ /// Valid only when single pointer is touched down.
+ TInt iCurrentPointer;
+
+ };
+
+} // GestureHelper
+
+#endif // _GESTUREHELPERIMPL_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/gesturerecogniser.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,285 @@
+/*
+* Copyright (c) 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: Gesture helper implementation
+*
+*/
+
+#include "gesturerecogniser.h"
+
+#include <e32math.h>
+
+#include "gesturedefs.h"
+#include "gestureobserver.h"
+#include "pointarray.h"
+#include "utils.h"
+
+#include <w32std.h> // pointerevents
+
+using namespace GestureHelper;
+
+/**
+ * Vector class (math)
+ */
+NONSHARABLE_CLASS( TVector )
+ {
+public:
+ /**
+ * Constructor
+ * @param aFrom starting point of the vector
+ * @param aTo ending point of the vector
+ */
+ TVector( const TPoint& aFrom, const TPoint& aTo )
+ : iX( aTo.iX - aFrom.iX ),
+ iY( aTo.iY - aFrom.iY )
+ {
+ }
+
+ /** @return angle of the vector */
+ TReal Angle() const
+ {
+ TReal angle = 0;
+ TReal length = Length();
+ if ( length != 0 )
+ {
+ Math::ACos( angle, iX / Length() );
+ if ( iY < 0 )
+ {
+ angle = 2 * KPi - angle;
+ }
+ }
+ return Degrees( angle );
+ }
+
+ /** @return length of the vector */
+ TReal Length() const
+ {
+ TReal length = 0;
+ Math::Sqrt( length, iX * iX + iY * iY );
+ return length;
+ }
+
+private:
+ /** @return radians in degrees */
+ inline TReal Degrees( TReal aRadians ) const
+ {
+ return aRadians * 180 / KPi;
+ }
+
+public:
+ /// x coordinate that represent the vector
+ TReal iX;
+ /// y coordinate that represent the vector
+ TReal iY;
+ };
+
+inline TPoint LastPoint( const TPointArray& aPoints )
+ {
+ __ASSERT_DEBUG( aPoints.Count() > 0, Panic( EGesturePanicIllegalLogic ) );
+ return aPoints[ aPoints.Count() - 1 ] ;
+ }
+
+/**
+ * @return Length of the gesture in points
+ */
+inline TReal GestureLength( const TPointArray& aPoints )
+ {
+ return TVector( aPoints[0], LastPoint( aPoints ) ).Length();
+ }
+
+/**
+ * @return ETrue if aAngleUnderTest is almost aAngle
+ * Closeness of the angles is controlled by KAngleTolerance
+ */
+static TBool IsNear( TReal aAngleUnderTest, TReal aAngle )
+ {
+ return aAngle - KAngleTolerance <= aAngleUnderTest &&
+ aAngleUnderTest <= aAngle + KAngleTolerance;
+ }
+
+/**
+ * @return the angle as a direction flags of TGesture
+ */
+inline TGestureCode Direction( TReal aAngle )
+ {
+ TGestureCode direction = EGestureUnknown;
+
+ if ( IsNear( aAngle, 90.0 ) )
+ {
+ direction = EGestureSwipeDown;
+ }
+ else if ( IsNear( aAngle, 180.0 ) )
+ {
+ direction = EGestureSwipeLeft;
+ }
+ else if ( IsNear( aAngle, 270.0 ) )
+ {
+ direction = EGestureSwipeUp;
+ }
+ else if ( 360.0 - KAngleTolerance <= aAngle || aAngle <= KAngleTolerance )
+ {
+ direction = EGestureSwipeRight;
+ }
+ else // for lint warning
+ {
+ // unknown angle
+ }
+
+ return direction;
+ }
+
+/** @return direction between points */
+inline TGestureCode Direction( const TPoint& aFromPoint, const TPoint& aToPoint )
+ {
+ return Direction( TVector( aFromPoint, aToPoint ).Angle() );
+ }
+
+// function type to get a point in the point array
+typedef TPoint (TPointArray::*PointByIndexFunc)( TInt aIndex ) const;
+
+/// @return latest point outside tolerance area or KErrNotFound if not point outside it
+TInt LatestCertainPointIndex( const TPointArray& aPoints, PointByIndexFunc aPointByIndex, TRect aToleranceRect )
+ {
+ int i = aPoints.Count();
+ // Find out the first point from the end of the array
+ // that is not contained in the tolerance rect.
+ while( 0 <= --i )
+ {
+ // if the point does not belong inside tolerance rect, it is the first point
+ // outside the rect
+ if( !aToleranceRect.Contains( (aPoints.*aPointByIndex)(i) ) )
+ {
+ break;
+ }
+ }
+ return i;
+ }
+
+/** @return last direction of dragging */
+inline TGestureCode LastDirection( const TPointArray& aPoints, MGestureEvent::TAxis aRelevantAxis )
+ {
+ __ASSERT_DEBUG( aPoints.Count() > 0, Panic( EGesturePanicIllegalLogic ) );
+
+ TRect toleranceRect = ToleranceRect( (aPoints.TPointArray::operator[])(aPoints.Count() - 1), aRelevantAxis );
+
+ TInt latestPointIndex = LatestCertainPointIndex( aPoints, TPointArray::operator[],toleranceRect );
+ if ( KErrNotFound != latestPointIndex )
+ {
+ return Direction( aPoints[latestPointIndex], LastPoint( aPoints ) );
+ }
+ // no points were outside the rect, and hence the direction is unknown
+ return EGestureUnknown;
+ }
+
+/**
+ * @return ETrue if points for a tap event
+ */
+inline TBool IsTap( const TPointArray& aPoints )
+ {
+ __ASSERT_DEBUG( aPoints.Count() > 0, Panic( EGesturePanicIllegalLogic ) );
+
+ TRect toleranceRect = ToleranceRect( (aPoints.TPointArray::Raw)(0) );
+
+ return KErrNotFound == LatestCertainPointIndex( aPoints, TPointArray::Raw,toleranceRect );
+ }
+
+// ----------------------------------------------------------------------------
+// Return gesture code of a gesture formed by a sequence of points
+// ----------------------------------------------------------------------------
+//
+TGestureCode TGestureRecogniser::GestureCode( const TPointArray& aPoints, MGestureEvent::TAxis aRelevantAxis ) const
+ {
+ __ASSERT_DEBUG( aPoints.Count() > 0, Panic( EGesturePanicIllegalLogic ) );
+
+ // tap needs to be treated separately, because recognising that needs to consider
+ // raw points (and not points in which x or y axis has been filtered out)
+ if ( IsTap( aPoints ) )
+ {
+ return EGestureTap;
+ }
+
+ return LastDirection( aPoints, aRelevantAxis );
+ }
+
+// ----------------------------------------------------------------------------
+// Return gesture code of a gesture formed by a sequence of points
+// ----------------------------------------------------------------------------
+//
+TGestureCode TGestureRecogniser::MultiTouchGestureCode( const TPointArray& aPoints, const TPointArray& aSecondaryPoints,
+ TInt aPreviousDistance, TBool aIsFirstPinch ) const
+ {
+ __ASSERT_DEBUG( aPoints.Count() > 0, Panic( EGesturePanicIllegalLogic ) );
+ __ASSERT_DEBUG( aSecondaryPoints.Count() > 0, Panic( EGesturePanicIllegalLogic ) );
+ __ASSERT_DEBUG( aPreviousDistance > 0, Panic( EGesturePanicIllegalLogic ) );
+
+ TInt currentDistance = TVector( LastPoint( aPoints ), LastPoint( aSecondaryPoints ) ).Length();
+
+ // currently gesture tolerance is used as reference to identify the pinch
+ // and it is same for first time recognition and also for pinch thereon
+ // This can be changed to an independent constant if required
+ // This is now implemeted. We have different tolerance for intial pinch and pinhc theron
+
+ // We need to have different tolerance at the time of changing direction.
+ // When user is pinching in and then starts pinching out the tolerance should be different.
+ // This is implemented in CGesture class. aIsFirstPinch will take care of all this
+ TInt pinchTolerance = aIsFirstPinch ? KInitialPinchTolerance : KPinchTolerance;
+ if (Abs( currentDistance - aPreviousDistance ) >= pinchTolerance )
+ {
+ return EGesturePinch;
+ }
+ return EGestureUnknown;
+ }
+
+// ----------------------------------------------------------------------------
+// Validate the drag formed by a sequence of points. If all the points are
+// within the tolerance rect then the gesture is not recognised.
+// ----------------------------------------------------------------------------
+//
+TGestureCode TGestureRecogniser::ValidateDrag( const TPointArray& aPoints, MGestureEvent::TAxis aRelevantAxis ) const
+ {
+ __ASSERT_DEBUG( aPoints.Count() > 0, Panic( EGesturePanicIllegalLogic ) );
+
+ TRect toleranceRect = ToleranceRect( (aPoints.TPointArray::operator[])(aPoints.Count() - 1), aRelevantAxis );
+
+ TInt latestPointIndex = LatestCertainPointIndex( aPoints, TPointArray::operator[],toleranceRect );
+ if ( KErrNotFound != latestPointIndex )
+ {
+ return EGestureDrag;
+ }
+ // no points were outside the rect, and hence the direction is unknown
+ return EGestureUnknown;
+ }
+
+// ----------------------------------------------------------------------------
+// Return the length between the given two points
+// ----------------------------------------------------------------------------
+//
+TInt TGestureRecogniser::Length( const TPoint aPoint, const TPoint aSecondaryPoint ) const
+ {
+ return TVector(aPoint,aSecondaryPoint).Length();
+ }
+
+// ----------------------------------------------------------------------------
+// Return pointer number fetched from the given event
+// ----------------------------------------------------------------------------
+//
+TInt TGestureRecogniser::PointerNumber( const TPointerEvent& aEvent )
+ {
+ if( aEvent.IsAdvancedPointerEvent() )
+ {
+ return aEvent.AdvancedPointerEvent()->PointerNumber();
+ }
+ return 0;
+ }
+// end of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/gesturerecogniser.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2007 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: Algorithm to recognise gesture from a stream of points
+*
+*/
+
+#ifndef _GESTURERECOGNISER_H_
+#define _GESTURERECOGNISER_H_
+
+#include <e32std.h>
+#include <gestureobserver.h>
+
+struct TPointerEvent;
+
+namespace GestureHelper
+{
+
+class TPointArray;
+
+/**
+ * Note: Not a static class or a function pointer, just to make it sligthly
+ * easier to replace it with a heavier implementation
+ */
+NONSHARABLE_CLASS( TGestureRecogniser )
+ {
+public:
+ /**
+ * Translates points into a gesture code
+ * @param aPoints Points that form the gestures. Client is not required
+ * to pass in repeated points (sequential points that are
+ * almost in the same place)
+ * @param aAxis Axis to filter the points
+ * @return recognised gesture id or EUnknownGesture
+ */
+ TGestureCode GestureCode( const TPointArray& aPoints, MGestureEvent::TAxis aRelevantAxis ) const;
+
+ /**
+ * Translates 2 sequences of points into a multitouch gesture code
+ * @param aPoints Points that represent the first touch point variations. Client is not required
+ * to pass in repeated points (sequential points that are
+ * almost in the same place)
+ * @param aSecondaryPoints Points that represent the second touch point variations.
+ * @param aPreviousDistance distance between the two points when the pinch was recognized the last time.
+ * @param aisFirstPinch, Is this the first pinch of teh current gesture. Required to decide which tolerance to use
+ * @return recognised gesture id or EUnknownGesture if its not a valid multi touch gesture
+ */
+ TGestureCode MultiTouchGestureCode( const TPointArray& aPoints, const TPointArray& aSecondaryPoints, TInt aPreviousDistance,
+ TBool aIsFirstPinch ) const;
+
+ /**
+ * Validate the points to decide its a drag or not
+ * @param aPoints Points that form the gestures. Client is not required
+ * to pass in repeated points (sequential points that are
+ * almost in the same place)
+ * @param aAxis Axis to filter the points
+ * @return EGestureDrag if valid else returns EUnknownGesture
+ */
+ TGestureCode ValidateDrag( const TPointArray& aPoints, MGestureEvent::TAxis aRelevantAxis ) const;
+
+ /**
+ * Validate the points to decide its a drag or not
+ * @param aPoints Points that form the gestures. Client is not required
+ * to pass in repeated points (sequential points that are
+ * almost in the same place)
+ * @param aAxis Axis to filter the points
+ * @return EGestureDrag if valid else returns EUnknownGesture
+ */
+ TInt Length( const TPoint aPoint, const TPoint aSecondaryPoint ) const;
+
+ /**
+ * Return the pointer number from the given event
+ *
+ * @param aEvent, event for which the pointer number needs to be fetched
+ *
+ * This function is added here only for simulating multiple pointer events
+ * for testing UT, For simulation purpose we will have a custom implemetation
+ * which will override this method and return our own pointer numbers
+ * So that we can simulate multiple pointer event.
+ * @return TInt pointer number
+ */
+ TInt PointerNumber( const TPointerEvent& aEvent);
+
+ };
+
+} // namespace GestureHelper
+
+#endif // _GESTURERECOGNISER_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/hittest.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2008-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: Gesture helper helper functions
+*
+*/
+
+
+#include "gestureobserver.h"
+
+// system includes
+#include <alf/alfcontrol.h>
+#include <alf/alflayout.h>
+
+using namespace GestureHelper;
+
+namespace
+ {
+ /** @return the leaf-most visual that is under aPos */
+ const CAlfVisual* VisualByCoordinates( const CAlfVisual& aRoot, const TPoint& aPos )
+ {
+ // If it has children, chose any of them is hit first
+ const CAlfLayout* layout = dynamic_cast< const CAlfLayout* >( &aRoot );
+ if ( layout)
+ {
+ TInt i = layout->Count();
+ while( --i >= 0 )
+ {
+ if( VisualByCoordinates( layout->Visual( i ), aPos ) )
+ {
+ return &layout->Visual( i );
+ }
+ }
+ }
+
+ // children were not hit. is this visual hit?
+ if( TRect( aRoot.DisplayRect() ).Contains( aPos ) )
+ {
+ return &aRoot;
+ }
+
+ // visual was not found
+ return NULL;
+ }
+
+ TBool IsRootVisual( const CAlfVisual& aVisual )
+ {
+ return !aVisual.Layout();
+ }
+ } // unnamed namespace
+
+// ----------------------------------------------------------------------------
+// VisualByCoordinates
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CAlfVisual* HitTest::VisualByCoordinates( const CAlfControl& aControl,
+ const TPoint& aPos )
+ {
+ TInt i = aControl.VisualCount();
+ while( --i >= 0 )
+ {
+ // Ask only root visuals, since all children are within the root visuals
+ if ( IsRootVisual( aControl.Visual( i ) ) )
+ {
+ const CAlfVisual* hitVisual = ::VisualByCoordinates(
+ aControl.Visual( i ), aPos );
+ if ( hitVisual )
+ {
+ return const_cast< CAlfVisual* >( hitVisual );
+ }
+ }
+ }
+ return NULL;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/pointarray.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 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: Array of points
+*
+*/
+
+#include "pointarray.h"
+
+using namespace GestureHelper;
+
+// ----------------------------------------------------------------------------
+// TPointArray constructor
+// ----------------------------------------------------------------------------
+//
+TPointArray::TPointArray( const RArray< TPointEntry >& aPoints )
+ : iPoints( aPoints )
+ {}
+
+// ----------------------------------------------------------------------------
+// TPointArray length
+// ----------------------------------------------------------------------------
+//
+TInt TPointArray::Count() const
+ {
+ return iPoints.Count();
+ }
+
+// ----------------------------------------------------------------------------
+// point at index, no filtering
+// ----------------------------------------------------------------------------
+//
+TPoint TPointArray::operator[]( TInt aIndex ) const
+ {
+ return iPoints[aIndex].iPos;
+ }
+
+// ----------------------------------------------------------------------------
+// Unfiltered point at index
+// ----------------------------------------------------------------------------
+//
+TPoint TPointArray::Raw( TInt aIndex ) const
+ {
+ return iPoints[aIndex].iPos;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/pointarray.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 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: Array of points
+*
+*/
+
+#ifndef _POINTARRAY_H_
+#define _POINTARRAY_H_
+
+#include <e32std.h>
+
+namespace GestureHelper
+{
+
+/**
+ * Represents a single point given at certain time
+ */
+struct TPointEntry
+ {
+ /** constructor */
+ inline TPointEntry( const TPoint& aPos, const TTime& aTime )
+ : iPos( aPos ), iTime( aTime )
+ {
+ }
+
+ TPoint iPos;
+ TTime iTime;
+ };
+
+/**
+ * Array of points that wraps another point array
+ * The purpose of this class is to allow deriving classes to override []
+ * and in that member function adjust the point, e.g., by setting one
+ * axis to always a constant value. This allows providing a sequence of
+ * points to the recogniser in which the other axis is ignored.
+ */
+NONSHARABLE_CLASS( TPointArray )
+ {
+public:
+ /**
+ * @param aPoints points array to wrap (and filter)
+ */
+ TPointArray( const RArray< TPointEntry >& aPoints );
+ /** @returns length of the array */
+ TInt Count() const;
+ /**
+ * @returns a filtered point at aIndex. Default implementation same
+ * as Raw(...)
+ * virtual so deriving classes can modify the point (e.g., filter one axis)
+ */
+ virtual TPoint operator[]( TInt aIndex ) const;
+ /** @returns an raw, non-filtered point at aIndex */
+ TPoint Raw( TInt aIndex ) const;
+
+private:
+ const RArray< TPointEntry >& iPoints;
+ };
+
+} // namespace GestureHelper
+
+#endif // _POINTARRAY_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/pointercapturer.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 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: Alf control group and control for capturing pointer events
+*
+*/
+
+#include "pointercapturer.h"
+
+#include <alf/alfcontrol.h>
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfenv.h>
+#include <alf/alfevent.h>
+#include <alf/alfroster.h>
+
+#include "gesturehelperimpl.h"
+
+namespace GestureHelper
+{
+
+/**
+ * CPointerCaptureControl
+ * Gesture control own a gesture helper, and captures any pointer events that
+ * no other control captures. After it captures pointer down event, it will
+ * capture all pointer events until pointer up. It does this by bringing its
+ * control group to the top upon pointer down, and lowering the control group
+ * to the botton upon pointer up.
+ */
+NONSHARABLE_CLASS( CPointerCaptureControl ) : public CAlfControl
+ {
+public:
+ /** Two-phased constructor */
+ static CPointerCaptureControl* NewLC( CGestureHelperImpl& aHelper,
+ CAlfEnv& aEnv, CAlfDisplay& aDisplay )
+ {
+ CPointerCaptureControl* self = new ( ELeave ) CPointerCaptureControl( aHelper );
+ CleanupStack::PushL( self );
+ self->ConstructL( aEnv ); // construct base class
+ self->BindDisplay( aDisplay );
+ self->AppendVisualL( EAlfVisualTypeVisual );
+ return self;
+ }
+
+ void StartCaptureL()
+ {
+ User::LeaveIfError( Display()->Roster().SetPointerEventObservers(
+ EAlfPointerEventReportDrag | EAlfPointerEventReportUnhandled,
+ *this ) );
+ Display()->Roster().ShowL( *ControlGroup(), KAlfRosterShowAtTop );
+ }
+
+ void StopCapture()
+ {
+ ( void ) Display()->Roster().SetPointerEventObservers( 0, *this );
+ TRAP_IGNORE( Display()->Roster().ShowL( *ControlGroup(), KAlfRosterShowAtBottom ) );
+ }
+
+private:
+ /** Constructor */
+ CPointerCaptureControl( CGestureHelperImpl& aHelper )
+ : iHelper( aHelper )
+ {
+ }
+
+ // From CAlfControl
+ TBool OfferEventL( const TAlfEvent& aEvent )
+ {
+ TBool consumed = EFalse;
+ if ( aEvent.IsPointerEvent() )
+ {
+ // pointer down for first pointer should never come here if everything is
+ // working properly. if pointer event comes here, stop capturing and allow the
+ // event to fall to the controls below
+ if ( iHelper.StrayEvent(aEvent.PointerEvent() ))
+ {
+ StopCapture();
+ }
+ else
+ {
+ consumed = iHelper.HandlePointerEventL( aEvent.PointerEvent() );
+ }
+ }
+ return consumed;
+ }
+
+private:
+ /// gesture helper that analyses pointer sequences. own.
+ CGestureHelperImpl& iHelper;
+
+ };
+
+} // namespace GestureHelper
+
+using namespace GestureHelper;
+
+// ----------------------------------------------------------------------------
+// Two phase constructor
+// ----------------------------------------------------------------------------
+//
+CPointerCapturer* CPointerCapturer::NewL()
+ {
+ return new ( ELeave ) CPointerCapturer();
+ }
+
+// ----------------------------------------------------------------------------
+// Two phase constructor
+// ----------------------------------------------------------------------------
+//
+CPointerCapturer::~CPointerCapturer()
+ {
+ if ( iCaptureControl )
+ {
+ // deleting the control group will also delete the control
+ iCaptureControl->Env().DeleteControlGroup( iControlGroupId );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// InitForAlfredL
+// ----------------------------------------------------------------------------
+//
+void CPointerCapturer::InitForAlfredL( CGestureHelperImpl& aHelper,
+ CAlfEnv& aEnv, CAlfDisplay& aDisplay, TInt aControlGroupId )
+ {
+ CAlfControlGroup& group = aEnv.NewControlGroupL( aControlGroupId );
+ CPointerCaptureControl* control = CPointerCaptureControl::NewLC( aHelper,
+ aEnv, aDisplay );
+ group.AppendL( control );
+ CleanupStack::Pop( control );
+
+ // store control only after it has been successfully added to group
+ iCaptureControl = control;
+ iControlGroupId = aControlGroupId;
+ }
+
+// ----------------------------------------------------------------------------
+// StartCaptureL
+// ----------------------------------------------------------------------------
+//
+void CPointerCapturer::StartL()
+ {
+ if ( iCaptureControl )
+ {
+ iCaptureControl->StartCaptureL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// StopCapture
+// ----------------------------------------------------------------------------
+//
+void CPointerCapturer::Stop()
+ {
+ if ( iCaptureControl )
+ {
+ iCaptureControl->StopCapture();
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/pointercapturer.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 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: Responsible for capturing pointer events
+*
+*/
+
+#ifndef _POINTERCAPTURER_H_
+#define _POINTERCAPTURER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+class CAlfControl;
+class CAlfControlGroup;
+class CAlfEnv;
+class CAlfDisplay;
+
+// CLASS DECLARATION
+
+namespace GestureHelper
+{
+
+class CGestureHelperImpl;
+class CPointerCaptureControl;
+
+/**
+ * CPointerCaptureControl
+ * Gesture control own a gesture helper, and captures any pointer events that
+ * no other control captures. After it captures pointer down event, it will
+ * capture all pointer events until pointer up. It does this by bringing its
+ * control group to the top upon pointer down, and lowering the control group
+ * to the botton upon pointer up.
+ */
+NONSHARABLE_CLASS( CPointerCapturer ) : public CBase
+ {
+public:
+ /** Two-phased constructor */
+ static CPointerCapturer* NewL();
+ /** Destructor */
+ ~CPointerCapturer();
+
+ void InitForAlfredL( CGestureHelperImpl& aHelper, CAlfEnv& aEnv,
+ CAlfDisplay& aDisplay, TInt aControlGroupId );
+
+ void StartL();
+ void Stop();
+
+private:
+ ///
+ CPointerCaptureControl* iCaptureControl;
+ TInt iControlGroupId;
+ };
+
+} // namespace GestureHelper
+
+#endif // _POINTERCAPTURER_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/utils.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 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: Gesture recognition utilities
+*
+*/
+
+#include "utils.h"
+
+#include <coemain.h> // for CCoeEnv
+#include <eikappui.h> // for CEikAppUi
+
+#include "gesturedefs.h"
+
+namespace GestureHelper
+ {
+ /** @return the longer edge of the size */
+ inline TInt LongerEdge( const TSize& aSize )
+ {
+ return Max( aSize.iHeight, aSize.iWidth );
+ }
+
+ // for documentation, see header file
+ TRect ToleranceRect( const TPoint& aCenterPoint )
+ {
+ TSize screenSize = static_cast<CEikAppUi*>( CCoeEnv::Static()->AppUi() )
+ ->ApplicationRect().Size();
+ // multiplication has to be done first, to avoid rounding integer to 0 with division
+ int toleranceLength = ( KGestureTolerancePercent * LongerEdge( screenSize ) ) / 100;
+ TRect toleranceRect( aCenterPoint, TSize() );
+ // grow by the tolerance length, while keeping the center point
+ toleranceRect.Shrink( -toleranceLength, -toleranceLength );
+ return toleranceRect;
+ }
+
+ // for documentation, see header file
+ TRect ToleranceRect( const TPoint& aCenterPoint, MGestureEvent::TAxis aRelevantAxis )
+ {
+ TRect toleranceRect = ToleranceRect(aCenterPoint);
+
+ TSize screenSize = static_cast<CEikAppUi*>( CCoeEnv::Static()->AppUi() )
+ ->ApplicationRect().Size();
+
+ if(aRelevantAxis == MGestureEvent::EAxisHorizontal)
+ {
+ toleranceRect.iTl.iY = 0;
+ toleranceRect.iBr.iY = screenSize.iHeight;
+ }
+ else if(aRelevantAxis == MGestureEvent::EAxisVertical)
+ {
+ toleranceRect.iTl.iX = 0;
+ toleranceRect.iBr.iX = screenSize.iWidth;
+ }
+ else // EAxisBoth
+ {
+ // nothing to be done
+ }
+
+ return toleranceRect;
+ }
+
+ } // namespace GestureHelper
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/gesturehelper/src/utils.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 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: Gesture recognition utilities
+*
+*/
+
+#ifndef _GESTURE_UTILS_H_
+#define _GESTURE_UTILS_H_
+
+#include <e32std.h>
+#include <gestureobserver.h>
+
+namespace GestureHelper
+ {
+
+ /**
+ * @return the a rectange in which dragging will be ignored. Tolerance rect
+ * represents a rectange within which any movement will not be considered
+ * intentional, but as accidental stylus movement.
+ */
+ TRect ToleranceRect( const TPoint& aCenterPoint );
+
+ /**
+ * @return the a rectange in which dragging will be ignored. Tolerance rect
+ * represents a rectange within which any movement will not be considered
+ * as drag, This depends on the Axis.
+ * For Example, any movement within a vertical strip at the point of touch down is
+ * if the interested Axis is Horizontal axis.
+ */
+ TRect ToleranceRect( const TPoint& aCenterPoint, MGestureEvent::TAxis aRelevantAxis );
+
+ } // namespace GestureHelper
+
+#endif // _GESTURE_UTILS_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2009 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: Build information file for project ?myapp
+*
+*/
+
+#include <platform_paths.hrh>
+
+
+
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
+
+PRJ_TESTEXPORTS
+
+
+//Include the logging
+#include "../mullogging/group/bld.inf"
+
+// Include the Data Model
+#include "../muldatamodel/group/bld.inf"
+
+// Include the Common Utilities
+#include "../common/group/bld.inf"
+
+// Include the Gesture Helper
+#include "../gesturehelper/group/bld.inf"
+
+
+// Include the CoverFlow Widget
+#include "../mulcoverflowwidget/group/bld.inf"
+
+// Include the Slider widget
+#include "../mulsliderwidget/group/bld.inf"
+
+#include "../alfviewwidget/group/bld.inf"
+#include "../alfcontainerwidget/group/bld.inf"
+#include "../alfscrollbarwidget/group/bld.inf"
+
+
+
+//End of files
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* 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: Build information file for CoverFlow widget component
+*
+*/
+
+#include <platform_paths.hrh>
+// Include the Test App
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+
+../rom/mulcoverflowwidget.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mulcoverflowwidget.iby)
+//../internal/test/testcoverflowwidget/rom/testcoverflowwidget.iby CORE_MW_LAYER_IBY_EXPORT_PATH(testcoverflowwidget.iby)
+PRJ_MMPFILES
+
+mulcoverflowwidget.mmp
+
+PRJ_TESTMMPFILES
+
+
+PRJ_TESTEXPORTS
+
+
+//End of files
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/group/mulcoverflowwidget.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2007 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: Project definition file
+*
+*/
+#include <platform_paths.hrh>
+
+TARGET mulcoverflowwidget.dll
+TARGETTYPE PLUGIN
+
+UID 0x10009d8d 0x2000D240
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+SOURCEPATH ../src
+SOURCE mulcoverflowwidgetfactoryplugin.cpp
+SOURCE mulcoverflowwidget.cpp
+SOURCE mulcoverflowcontrol.cpp
+SOURCE mulbaseelement.cpp
+SOURCE mulcoverflowtemplate.cpp
+SOURCE mulcoverflowao.cpp
+SOURCE mulcovertemplate4.cpp
+SOURCE mulcovertemplate1.cpp
+
+USERINCLUDE ../../../inc/mul
+USERINCLUDE ../../../inc
+USERINCLUDE ../../common/inc
+USERINCLUDE ../inc
+USERINCLUDE ../../mullogging/inc
+
+
+MW_LAYER_SYSTEMINCLUDE
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+// System Libraries
+LIBRARY aknskins.lib
+LIBRARY charconv.lib
+LIBRARY euser.lib
+LIBRARY ecom.lib
+LIBRARY libc.lib
+LIBRARY avkon.lib
+LIBRARY cone.lib
+LIBRARY touchfeedback.lib //for tactile feedback
+LIBRARY egul.lib
+LIBRARY gdi.lib
+LIBRARY eikcore.lib
+
+// Alf Libraries
+LIBRARY alfclient.lib
+LIBRARY alfwidgetmodel.lib
+LIBRARY alfwidgetutils.lib
+
+// Osn Libraries
+LIBRARY osncore.lib
+
+
+// STL Libraries
+LIBRARY libstdcpp.lib
+LIBRARY libpthread.lib
+LIBRARY aknlayout2hierarchy.lib
+LIBRARY aknlayout2scalable.lib
+LIBRARY cdlengine.lib
+LIBRARY mulmodelutility.lib
+LIBRARY mullogging.lib //for logging
+LIBRARY alfresourcepool.lib //for resource pool
+
+
+// Gesture Helper Library
+LIBRARY gesturehelper.lib
+
+LANG SC
+START RESOURCE 2000D240.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET mulcoverflowwidget.rsc
+#endif
+END
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/imullogicaltemplate.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* 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: List Template Interface
+ *
+*/
+
+#ifndef I_MULLOGICALTEMPLATE_H
+#define I_MULLOGICALTEMPLATE_H
+
+#include "mulvisualutility.h"
+#include "mulitemdefinitions.h"
+
+namespace Alf
+ {
+
+
+class IMulLogicalTemplate
+ {
+
+public:
+ virtual ~IMulLogicalTemplate() {}
+ //fills up the data structure pertaining to specific templates
+ virtual void PopulateData() = 0;
+ //Return the structure of the specified element Id
+ virtual const LCTElementStructure* GetElementStructure(
+ TMulCurrentOrientation aCurOrient,
+ const char* aElemId) = 0;
+
+ };
+
+ }
+
+
+#endif //I_MULLOGICALTEMPLATE_H
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/mulbaseelement.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,694 @@
+/*
+* 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: base element header for CoverFlow
+*
+*/
+
+// This file defines the API for MulCoverFlowWidget.dll
+
+#ifndef __MULBASEELEMENT_H__
+#define __MULBASEELEMENT_H__
+
+
+// Include Files
+#include <alf/alfdecklayout.h>
+#include "alf/alfelement.h"
+#include <alf/alfflowlayout.h>
+#include <alf/alfwidgeteventhandler.h>
+#include <mul/imulwidget.h>
+
+#include "mulcoverflowdefinitions.h"
+
+namespace Alf
+ {
+
+//Forward declarations
+class MulCoverFlowTemplate;
+struct TMulBaseElementImpl;
+
+// Structure to store the position and sizes of cover flow items
+struct TMulCoverFlowItem
+ {
+ int height;
+ int width;
+ int posx;
+ int posy;
+
+ TMulCoverFlowItem()
+ :height(0),width(0),posx(0),posy(0){}
+
+ TMulCoverFlowItem(int aPosx,int aPosy,int aWidth,int aHight)
+ :posx(aPosx),posy(aPosy),width(aWidth),height(aHight){}
+
+ };
+
+namespace mulbaseelement
+ {
+ static const IfId Ident=
+ {
+ 0,"mulbaseelement"
+ };
+ }
+
+
+/* Element class which handles all the visuals in the layout
+ * The class also handles event handling and applies animation as required
+ * by the widget.The class forms the basis of the entire layout heriarchy in the widget
+ * */
+/// @bug minor:avanhata:7/7/2008 This class is coverflow-specific, so name it as such
+class MulBaseElement : public AlfElement,
+ public IAlfWidgetEventHandler
+ {
+public://Constructor and destructor
+
+ /**
+ * C++ constructor.
+ */
+ MulBaseElement( CAlfWidgetControl& aControl, const char* aName );
+
+ /**
+ * Destructor.
+ */
+ virtual ~MulBaseElement();
+
+
+public: //From IAlfWidgetEventHandler
+
+ static inline const IfId& Type()
+ {
+ return mulbaseelement::Ident;
+ }
+
+ bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;
+
+ void setActiveStates( unsigned int aStates );
+
+ AlfEventStatus offerEvent( CAlfWidgetControl& aControl, const TAlfEvent& aEvent );
+
+ IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+ void setEventHandlerData( const AlfWidgetEventHandlerInitData& aData );
+
+ AlfWidgetEventHandlerInitData* eventHandlerData();
+
+ AlfEventHandlerType eventHandlerType() ;
+
+ AlfEventHandlerExecutionPhase eventExecutionPhase() ;
+
+public: //New Methods
+
+ /**
+ * Sets the Item Brush Color.
+ * @param aColor color to be set.
+ */
+ void SetItemBrush(const TRgb& aColor);
+
+ /**
+ * changes the opacity of counter accordingly.
+ * @param aUiOn true if UIOn or else false.
+ * @param aTransitionTime transition time.
+ */
+ void UIOnOffMode(bool aUiOn, int aTransitionTime);
+
+ /**
+ * Sets the Scroll direction during the step scroll.
+ * @param TItemScroll sets the direction if it is right or left.
+ */
+ void SetTextColor(TTextVisualType aVisualType, const TRgb& aColor);
+
+ /**
+ * returns the color of the specified text
+ * @param aVisualType is the visual type.
+ */
+ TMulVisualColorProperty TextColor(TTextVisualType aVisualType);
+
+
+ /**
+ * Sets the Scroll direction during the step scroll.
+ * @param TItemScroll sets the direction if it is right or left.
+ */
+ void SetScrollDir( TItemScroll aScrollDir );
+
+ /**
+ * Update the text opacity and counter values whenever highlight is modified
+ *
+ * @param aAnimationTime, text will be updated after the aAnimationTime.
+ */
+ void UpdateTextAndCounter(int animationTime = 0);
+
+ /**
+ * Stores the dimensions of the highlighted and nonhighlighted item from the template.
+ *
+ * @param aHighlightItemDimensions The highlight item dimensions .
+ * @param aNonHighlightItemDimensions The non highlight item dimensions.
+ * @param aVisibleIconCount The count of visible items on screen.
+ */
+ void StoreVisualDimensions( TMulCoverFlowItem aHighlightItemDimensions, TMulCoverFlowItem aNonHighlightItemDimensions,int aVisibleIconCount );
+
+ /**
+ * Stores whether the text is visible or not in the current orientation and template.
+ *
+ * @parama aIsTextVisible Boolean value indicating whether text is there or not.
+ */
+ void StoreTextVisibility( bool aIsTextVisible );
+
+ /**
+ * Return is the textvisible or not
+ *
+ */
+ bool IsTextVisibile( ) const ;
+
+ /**
+ *
+ *
+ */
+ void ApplyBrushOnIcon( CAlfImageVisual& aImageVisual );
+
+ /**
+ *
+ *
+ */
+ void RemoveBrushOnIcon( CAlfImageVisual& aImageVisual );
+
+ /**
+ * To hide and unhide Widget.
+ *
+ * @param aShow value to hide/unhide the Widget
+ * @param aTransitionTime Transition Time in MilliSeconds
+ */
+ void ShowWidget( bool aShow, int aTransitionTime = 0) ;
+
+ /*
+ * Takes the new positions of the visuals and applies the same to the visuals
+ * On change of orientation
+ */
+ void OrientationChange();
+
+ /**
+ * Sets the empty text to be displayed when the number of items is 0.
+ *
+ * @param aDefaultText The text to be displayed.
+ */
+ void SetEmptyText( const UString& aDefaultText );
+
+ /**
+ * Shows/Hide the empty text when the number of items in the model or layout is 0 . Also when the model is NULL.
+ *
+ * @param aShow Boolean value to show/hide the empty text.
+ */
+ void ShowEmptyText( bool aShow );
+
+ /**
+ * Returns true if empty text is set by the application else returns false.
+ *
+ * @returns true if empty text is set else returns false.
+ */
+ bool IsEmptyText();
+
+ /**
+ * Updates the Slider Widget ticks when item is added or removed
+ *
+ * @param aUpdateTick takes the count of items in the coverflow widget
+ */
+ void UpdateSliderTick(int aUpdateTick);
+
+ /**
+ * Returns the icon/text flow layout in vertical flow layout
+ *
+ * @param aLayoutIndex the index will determine which layout to return from the main/vertical flow layout
+ */
+ CAlfLayout& FlowLayout( int aLayoutIndex );
+
+ /**
+ *
+ * Sets the text to be displayed for the counter element .
+ *
+ * @param aTransitionTime the transition time in milliseconds for animation
+ */
+ void SetCounterText( int aTransitionTime = 0 );
+
+ /**
+ * Creates a visual for counter if not created initailly else return the existing counter visual.
+ */
+ CAlfTextVisual& CounterVisual();
+
+ /**
+ * Move the Iconflow by a items width in case of bounce effect.
+ *
+ * @param aBounceDirection Tells the direction by which the iconflowlayout should move.
+ */
+ void StartBounce(int aBounceDirection);
+
+ /**
+ * Returns whether its in Ui on mode or not.
+ *
+ * @return true if its currently in Ui on mode.
+ */
+ bool IsUiOnMode();
+
+ /**
+ * Creates the text visuals if it is not created, else returns the existing
+ * visual for the title and detail text.
+ *
+ * @param aTextString, visual tag
+ * @param aLayout, Layout in which to create the text visual
+ */
+ CAlfTextVisual& CreateTextVisual(const TDesC8& aName, CAlfLayout& aLayout);
+
+ /**
+ * Updates the value of the text visuals when an image has scrolled .
+ *
+ * @param aAnimationTime, text will be updated after the aAnimationTime.
+ */
+ void UpdateTextValue( int aAnimationTime = 0);
+
+ /**
+ * returns the layout to text.
+ */
+ CAlfLayout& TextLayout();
+
+ /**
+ * Start marquee for the text.
+ *
+ * @param aName, text type is title or detail
+ */
+ void StartMarquee(mulvisualitem::TVisualAttribute aName );
+
+ /**
+ * Stop marquee for the text.
+ *
+ * * @param aName, text type is title or detail
+ */
+ void StopMarquee(mulvisualitem::TVisualAttribute aName);
+
+ /**
+ * Decide whether to show or hide the slider based on the parameter.
+ *
+ * @param aFlag, boolean to decide slider to be shown or not.
+ */
+ void ShowSlider(bool aFlag);
+
+ /**
+ * Return size of hightlight icon for the template specified .
+ *
+ * @param aTemplateId, id of the template whose icon size to be calculated.
+ * @param aAttribute, attribute whose size is to be calculated.
+ * @param aHeight, refrence in which the height parameter is returned.
+ * @param aWidth, refrence in which the width parameter is returned.
+ */
+ void GetIconSize( mulwidget::TLogicalTemplate aTemplateId,
+ mulvisualitem::TVisualAttribute aAttribute, int& aHeight, int& aWidth);
+
+ /**
+ * Sets the Scroll Animation Time defined by the application.
+ *
+ * @param aScrollAnimationTime, ScrollAnimation Time set by the application.
+ */
+
+ void SetScrollAnimationTime( int aScrollAnimationTime );
+
+ /**
+ * Set background for coverflow
+ *
+ * @param aColor, background color.
+ */
+ void SetBackground(const TRgb& aColor);
+
+ /**
+ * Set background for coverflow.
+ *
+ * @param aIID, Skin id that shoudl be used as background.
+ */
+ void SetBackground(const TAknsItemID& aIID);
+
+ /**
+ * Stores the fit mode flag (on or off).
+ *
+ * @param aFlag fitmode flag
+ */
+ void SetFitMode(bool aFlag);
+
+ /**
+ * Apply scale mode on image visual and also appy brush for remaining area.
+ *
+ * @param aImageVisual Image visual
+ */
+ void ApplyScaleMode( CAlfImageVisual& aImageVisual);
+
+ /**
+ *
+ *
+ */
+ void CreateAndInitializeVisuals(bool aIsOrientationChange = false);
+
+ /**
+ *
+ *
+ */
+ void SetHighlight(int aHighlightIndex, int aAnimationTime = 0);
+
+ /**
+ *
+ *
+ */
+ void MoveVisuals(int aDistance,int aAnimationTime = 0);
+
+ /**
+ *
+ *
+ */
+ CAlfVisual* CreateIconStructure(CAlfLayout* aParentLayout);
+
+ /**
+ *
+ *
+ */
+ void MoveVisualsWithSizeChange(int aDistance, int aAnimationTime=0);
+
+ /**
+ *
+ *
+ */
+ void StartDoodling(int aDistance, int aAnimationTime=0);
+
+ /**
+ *
+ *
+ */
+ void StopDoodling(int aAnimationTime=0);
+
+ /**
+ * Recycle the Icon visuals instead of destroying and creating them each time.
+ */
+ void RecycleIconVisuals();
+
+ /**
+ *
+ *
+ */
+ void UpdateVisuals();
+
+ /**
+ * Sets the specified size to the base layout and deck layout and also on the empty text visual
+ */
+ void SetDefaultSize( TSize aSize );
+
+ /**
+ * Displays the indicator icon for the specified item index.
+ *
+ * @param aVisualItem visual item which conatins the index.
+ * @param aIndex index of the item.
+ */
+ void DisplayIndicatorIcon(const MulVisualItem & aVisualItem, int aIndex);
+
+ /**
+ * Returns whether the user has doodled enough to change the highlight multiple times.
+ *
+ * @returns TNumberofSwipes, Doodling distance converted into multiple swipes.
+ */
+ TNumberofSwipes NumberOfSwipes();
+
+ /**
+ * Returns the final swipe direction based on which highlight is nerest to teh centre point
+ * in the last direction
+ *
+ * @param aDistance, doodled distance
+ * @param, aastSwipeDirection, last direction in which the user has swiped.
+ */
+ int FinalSwipeDirection(int aDistance, int aLastSwipeDirection);
+
+ /**
+ * Returns teh current direction in which itesm are scrolled
+ *
+ * @return, Scroll direction
+ */
+ TItemScroll ScrollDir();
+
+ /**
+ * Removes the slider layout form the coverflow main layout
+ *
+ */
+ void RemoveSliderFromLayout();
+
+ /**
+ * Rotate the image in teh given direction
+ *
+ * @param aDirection, Direction of the rotation (ERotateLeft/ERotateRight).
+ * @param aImageSize, The actual size of the current highlighted image.
+ * @param aTransition transition time to rotate the image.
+ * @param aAdjustSize, true for orientation change
+ *
+ */
+ void RotateImage(IMulWidget::TMulRotation aDirection,TSize aImageSize,int aAnimationTime,bool aAdjustSize = false);
+
+ /**
+ * If the image on which rotation is applied, is updated then remove the rotation
+ *
+ * @param aIndex, relative index which is updated
+ */
+ void CancelRotationOnUpdate(int aIndex);
+
+private:
+
+ /**
+ * Set the virtual Size of viewportlayout(parent) of text
+ *
+ * @param aName, text type is title or detail
+ */
+ void SetVirtualViewPortSize(mulvisualitem::TVisualAttribute aName);
+
+ /**
+ * Cancell all the custom commands related to marquee.
+ */
+ void CancelAllCommands();
+
+ /**
+ * Reset counter opacity( depending on the current ui on/off mode
+ * when an item is added to an empty model.
+ *
+ * @param aTransitioTime transition time defined by app.
+ */
+ void ResetUiOnOff( int aTransitionTime = 0 );
+
+ /**
+ * Calculate the new position for counter visual based on the value of the higlight index and total model count
+ *
+ * @param aCounterLctDimension Lct Dimensions of counter visual.
+ * @param aOrientationChanged Orientation Changed or not
+ */
+ void SetNewCounterPosition(const TMulCoverFlowItem& aCounterLctDimension,bool aOrientationChanged = false );
+
+ /**
+ * Returns number of digits in a number.
+ *
+ * @param aNumber The number whose number of digits have to be found.
+ * @returns Number of digits in a number.
+ */
+ int NumberOfDigits(int aNumber);
+
+ /**
+ * Returns the current 2D coverflow template.
+ */
+ MulCoverFlowTemplate* Template2D();
+
+ //slider related apis
+ /**
+ * Created the slider widget and calls the other function related to slider.
+ */
+ void CreateSlider();
+
+ /**
+ * Constructs the slider widget if its not already constructed .
+ */
+ void ConstructSliderWidget();
+
+ /**
+ * Checks whether slider needs to be shown or hidden and sets its opacity accordingly.
+ *
+ */
+ void SetSliderOpacity();
+
+ /**
+ * Creates the base layout structure required for the base element to contain
+ * images and slider and meta data information .
+ */
+ void CreateBaseLayoutStructure();
+
+ /**
+ * Sets the text data of the current highlight to the text visual .
+ *
+ * @param aName The name of the visual in the text visual e.g mul_tiltle or mul_detail.
+ * @param aData The variant type containing the new data to be set to the text visual .
+ */
+ void SetTextToVisual( mulvisualitem::TVisualAttribute aName,IMulVariantType* aData );
+
+ /**
+ * Create empty text visualisation to show empty text when there are no items to display .
+ */
+ void CreateEmptyTextVisualisation();
+
+ /**
+ * Decides the size to be applied on the main layout depending on whether the model is null or not.
+ */
+ void HandleSizeChangeOnMain();
+
+ /**
+ * Shows/Hides the text and counter visuals when empty text has to be hidden/shown.
+ *
+ * @param aShow true when text/counter have to be shown ,
+ * false when text/counter have to be hidden.
+ */
+ void ShowHideVisualsForEmptyText( bool aShow );
+
+ /**
+ * Calculates the padding between the images based on the position
+ * and sizes of the highlighted and non higlighted items.
+ */
+ void CalculatePadding();
+
+ /**
+ *
+ * Sets opacity to the counter text visual .
+ *
+ * @param aOpacity, opacity value that should be set
+ */
+ void SetCounterTextOpacity( int aOpacity);
+
+ /**
+ * Arranging the Visual with padding and using Transition time
+ *
+ */
+ void ArrangeItems();
+
+ /**
+ * Sets the opacity of all the text visuals in the specifed visual to the given opacity (aOpacity)
+ *
+ * @param aOpacity The opacity to be set for the text visuals .
+ * @param aTransitionTime The transition time
+ */
+ void SetTextVisualOpacity( int aOpacity , int aTransitionTime = 0 );
+
+ /**
+ * Returns the percentage factor with which new Position and Sizes are calculated .
+ *
+ * @returns The change in percentage to be applied on the current size and position.
+ */
+ int CalculateDistanceChangeFactor();
+
+ /**
+ *
+ *
+ */
+ void CreateVisuals();
+
+ /**
+ * Creates a Indicator Image visual if not created initially.
+ *
+ * @param aLayout decklayout to which icon is to be added .
+ */
+ CAlfImageVisual* CreateIndicatorIconVisual(CAlfDeckLayout& aLayout);
+
+ /**
+ *
+ *
+ */
+ void SetIndicatorDimensions(CAlfImageVisual& aIndicatorVisual);
+
+ /**
+ *
+ *
+ */
+ const TDesC8& IdToTag( int aId );
+
+ /**
+ * Creates an array of midpoints of all the visuals form left to right
+ *
+ * @return, array of midpoints
+ */
+ std::vector<int> ReferenceMidPoints();
+
+ /**
+ * Calculates the new midpoints after the doodling
+ *
+ * @param aReferenceMidPoints,midpoints before doodling
+ * @param aDistance, final doodled distance
+ * @return array of new midpoints
+ */
+ std::vector<int> FinalMidPoints(std::vector<int> aReferenceMidPoints,int aDistance);
+
+ /**
+ * Returns the position of the visual in the array which is nearest to midpoint
+ * in swipe direction
+ *
+ * @param aFinalMidPoints, new midpoints after the doodling
+ * @param aLastSwipeDirection, Last swipe direction
+ */
+ int NearestPoint(std::vector<int> aFinalMidPoints,int aLastSwipeDirection);
+
+ /**
+ * The image visual size and position is modified to stretch/compress the image
+ * after rotation. This is done because the before rotation teh texture will be
+ * generated according to the current orientation. To show the rotated texture
+ * image visual is modified such that the texture looks rotated preserving
+ * the aspect ration
+ *
+ * @param aVisual,Visual for which the rotation is applied
+ * @param aAnimationTime, time for rotation
+ */
+ void AdjustVisualSizeInRotation(CAlfImageVisual* aVisual,int aAnimationTime);
+
+ /**
+ * Handle rotation of 90degree or 270 degree. here the image visuals size
+ * needs to be altered if required as the current width will become teh height of
+ * the texture after rotation.
+ *
+ * @param aVisual,Visual for which the rotation is applied
+ * @param aAnimationTime, time for rotation
+ */
+ void HandleRotationOnVerticalAxis(CAlfImageVisual* aVisual,int aAnimationTime);
+
+ /**
+ * Handle rotation of 180degree or 0 degree. Here no need to modify the image visuals
+ * size.
+ *
+ * @param aVisual,Visual for which the rotation is applied
+ * @param aAnimationTime, time for rotation
+ */
+ void HandleRotationOnHorizontalAxis(CAlfImageVisual* aVisual,int aAnimationTime);
+
+ /**
+ * Cancel the rotation applied for teh visual at the given relative index.
+ * Relative index -1 indicates cancel the rotation on highlighted visual
+ *
+ * @param aIndex, relative index of teh visual for which the rotation needs to be canceled
+ */
+ void CancelRotation(int aIndex = -1);
+
+ /**
+ * Preserve the rotation after orientation change.
+ *
+ */
+ void UpdateRotation();
+
+private: //Class Data
+
+ auto_ptr<TMulBaseElementImpl> mData; //owned
+
+ };
+
+ } // namespace Alf
+
+#endif // __MULBASEELEMENT_H__
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/mulcoverflowao.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* 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: Active Object header for CoverFlow
+*
+*/
+
+#ifndef __MULCOVERFLOWAO_H__
+#define __MULCOVERFLOWAO_H__
+
+#include <e32base.h> // For CTimer
+
+namespace Alf
+ {
+//Forward declarations
+class MulCoverFlowControl;
+
+class MulCoverFlowAo:public CTimer
+ {
+
+public : // Constructor and Destructor
+ /// @bug critical:avanhata:7/7/2008 this is a symbian-dependent class,
+ /// need to have two-phase construction
+ /// - otherwise mixing leaves and throws
+ MulCoverFlowAo( MulCoverFlowControl& aControl );
+
+ ~MulCoverFlowAo();
+
+public: //new method
+
+ /**
+ * Keeps moving layout asynchronously until it stopmoving() is called .
+ * The layout will move on to show more items .
+ *
+ * @param aSpeedPoint Gesture speed point.
+ * @param, aCurrGestureDirection, Current direction of gesture
+ * @param, aFastScrollForKey , if fast scroll due to key event
+ * @param, aAnimationTime , animation time for fast scroll in key event.
+ */
+ void StartMoving(TReal32 aSpeedPoint, int aCurrGestureDirection,bool aFastScrollForKey = false,int aAnimationTime = 0);
+
+ /**
+ * Stop moving the layout.
+ *
+ */
+ void StopMoving();
+
+ /**
+ * Transition time for highlight change in fast scroll
+ *
+ * @return, transition time to be used
+ */
+ int FastScrollTransitionTime();
+
+private:
+
+ /**
+ * Timer call back funtion . Performs animations and moves the layout
+ * for a particular distance depending on the length of the swipe
+ * in a particular time period depending on the speed .
+ */
+ void RunL();
+
+private : //new methods
+
+ /**
+ * Cancel all pending requests.
+ */
+ void StopTimer();
+
+ /**
+ * Increment the highlight with +-1 depending on the swipe direction and informs the
+ * control class to cahnge teh highlight.
+ */
+ void ChangeHighLight();
+
+private: //data
+
+ MulCoverFlowControl& mControl; //doesnt own
+ int mTransitionTime;
+ int mWaitingTime;
+ int mCurrGestureDirection;
+ bool mStarted;
+ }; //end of class.
+
+ } // End of namespace .
+
+#endif //__MULCOVERFLOWAO_H__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/mulcoverflowcontrol.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,539 @@
+/*
+* Copyright (c) 2007 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: The Control header for CoverFlow Widgets.
+ *
+*/
+
+#ifndef MULCOVERFLOWCONTROL_H
+#define MULCOVERFLOWCONTROL_H
+
+// Alf Headers
+#include <alf/alfwidgetcontrol.h>
+
+// Osn Headers
+#include <touchfeedback.h>
+
+// Gesture Helper
+#include <gestureobserver.h>
+
+// Mul Headers
+#include <mul/imulvarianttype.h>
+#include <mul/imulwidget.h>
+#include "imulmodelobserver.h"
+
+//Gesture Helper namespace
+namespace GestureHelper
+ {
+ class CGestureHelper;
+ struct TRealPoint;
+ }
+
+//Forward declarations
+class CAlfFlowLayout ;
+class CAlfImageVisual;
+
+namespace Alf
+ {
+//Forward declarations
+class IAlfWidget;
+class IMulModelAccessor;
+class IMulSliderModel;
+class IMulSliderWidget;
+class MulBaseElement;
+class MulCoverFlowAo;
+class MulCoverFlowTemplate;
+
+struct TMulCoverFlowControlImpl;
+
+namespace mulcoverflowcontrol
+ {
+ static const IfId Ident=
+ {
+ 0,"MulCoverFlowControl"
+ };
+ }
+
+class MulCoverFlowControl : public CAlfWidgetControl,
+ public IMulModelObserver,
+ public GestureHelper::MGestureObserver
+ {
+
+public: //Constructor and destructor
+
+ /**
+ * C++ constructor.
+ */
+ MulCoverFlowControl( CAlfEnv& aEnv );
+
+ /**
+ * Destructor.
+ */
+ virtual ~MulCoverFlowControl();
+
+public: //From CAlfWidgetControl
+
+ AlfEventStatus handleEvent( const TAlfEvent& aEvent );
+
+ static inline const IfId& Type()
+ {
+ return mulcoverflowcontrol::Ident;
+ }
+
+ IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+ void VisualLayoutUpdated (CAlfVisual& aVisual);
+
+public:// From IMulModelObserver
+
+ void ModelStateChanged( TMulChangedState aState, IMulVariantType& aData );
+
+public:// From MGestureObserver
+
+ /**
+ * Handles gesture events and delegates the processing to the base element
+ *
+ * @param aEvent Gesture event e.g . EGestureSwipeLeft/Right
+ */
+ void HandleGestureL( const GestureHelper::MGestureEvent& aEvent );
+
+
+public: //New Methods
+
+ /**
+ * Returns the total count that application has set to the model .
+ * The number of items that application has set to the model i,e the total
+ * number of items that the application may insert into the model may not
+ * be equal to the total number of items given to the widget for presentation
+ * by the model .
+ *
+ * @returns The number of items that the application has set to the model .
+ */
+ int TotalModelCount();
+
+ /**
+ * Sets the highlight index to the given aIndex
+ *
+ * @param aIndex, Index to which the current focus visulisation to be moved.
+ */
+ void SetHighlightIndex( int aIndex ,bool aUpdateSlider = true);
+
+ /**
+ * Return the Highlight Item Index maintained in control when update highlight to model is blocked
+ *
+ * @return, Current Highlight
+ */
+ int HighlightIndex();
+
+ /**
+ * Returns the current 2D coverflow template.
+ *
+ * @return, CoverflowTemplate
+ */
+ MulCoverFlowTemplate* Template2D();
+
+ /**
+ * Returns whether the coverflow is currently in fast scroll mode or not .
+ *
+ * @returns true if fast scroll mode is launched, else returns false
+ */
+ bool IsFastScrollMode();
+
+ /**
+ * Resets the show widget flag depending on the parameter passed.
+ *
+ * @param aNewResetValue The new value with which the flag needs to be reset.
+ */
+ void ResetShowWidgetFlag( bool aNewResetValue );
+
+
+ /**
+ * Returns the accessor to the current model of the widget.
+ */
+ IMulModelAccessor* ModelAccessor();
+
+
+ /**
+ * Recycles all the visuals added to the Icon Layout.
+ * The function is called whenever there is an model change
+ */
+ void RecycleVisuals();
+
+ /**
+ * Creates the slider widget . The creation of slider widget depends on the xml .
+ * That is if the xml has a slider tag then only slider widget is created .
+ */
+ IAlfWidget* CreateSliderWidget();
+
+ /**
+ * Returns the created slider widget . If the widget is not created , then returns NULL.
+ */
+ IAlfWidget* GetSliderWidget();
+
+ /**
+ * Returns the slider model pointer .
+ *
+ * @returns The slider model pointer if slider widget is created and exists, else returns NULL.
+ */
+ IMulSliderModel* GetSliderModel();
+
+ /**
+ * Check whether we need hold events (Enhanced coverflow can be launched) and
+ * set the state to gesture helper accordingly
+ */
+ void SetHoldingEnabled();
+
+ /**
+ * Enable/Disable double tap on Gesture helper based on the aValue specified.
+ *
+ * @param aValue The value whether double tap should be enabled or not.
+ */
+ void SetDoubleTapEnabled( bool aValue);
+
+ /**
+ * Handles the scrolling event and changes the focus accordingly.
+ *
+ * @param aEvent the scrolling event to be handled
+ */
+ void HandleNavigationEvent( int aEvent );
+
+ /**
+ * Transition time for highlight change in fast scroll
+ *
+ * @return, transition time to be used
+ */
+ int FastScrollTransitionTime();
+
+ /**
+ * Update the item at relative index Of aVisualIndex with the data at aItemIndex
+ *
+ * @param aItemIndex, Absolute index
+ * @param aVisualIndex, Relative index
+ * @param aAnimationTime, text will be updated after the aAnimationTime.
+ */
+ void UpdateCoverflowItem( int aItemIndex, int aVisualIndex, int aAnimationTime = 0);
+
+ /**
+ * Checks the current index is in visible window and returns its relative index in aRelativeIndex
+ *
+ * @param aIndex,
+ * @param aRelativeIndex,
+ */
+ bool IsIndexInVisibleWindow(const int aIndex,int& aRelativeIndex);
+
+ /**
+ *
+ *
+ */
+ int RelativeToAbsolute(const int aRelativeIndex);
+
+ /**
+ * update the item at the relative index.
+ *
+ * @param aVisualIndex, Relative index
+ * @param aAnimationTime, text will be updated after the aAnimationTime.
+ *
+ */
+ void UpdateItemAtIndex(const int aRelativeIndex, int aAnimationTime = 0);
+
+ /**
+ *
+ *
+ */
+ void DoSetImage(IMulVariantType* aImageData,CAlfImageVisual* aImgVisual);
+
+ /**
+ * Checks the given file path is of SVG image or not
+ *
+ * @param aImagePath Path of the image file,which need to be checked for SVG file format.
+ */
+ bool IsSVGImage(const TDesC& aImagePath);
+
+ /**
+ * Load Image visual with image provided from file path
+ *
+ * @param aSvgFilePath path of Image
+ * @param aImageVisual visual on with image to be loaded
+ */
+ void LoadImageFromSvg(const TDesC& aImagePath,CAlfImageVisual& aImageVisual );
+
+ /**
+ *
+ *
+ */
+ void StoreVisibleItemCount(int aVisibleItemCount);
+
+ /**
+ *
+ *
+ */
+ void SetDefaultImage(int aTextureId);
+
+ /**
+ *
+ *
+ */
+ int WindowTop(int aHighlightIndex);
+
+ /**
+ *
+ *
+ */
+ void UpdateBaseElement(MulBaseElement* aBaseElement);
+
+ /**
+ * Slider handles the key events .
+ * Slider thumb positions itself to the gesture and key events of coverflow widget
+ *
+ */
+ void SetSliderTickPosition();
+
+ /**
+ *
+ *
+ */
+ void ModelChanged( IMulModelAccessor* aAccessor);
+
+ /**
+ * Determins the current resolution
+ *
+ *
+ */
+ bool IsLandscape();
+
+ /**
+ * Destroys slider widget.
+ */
+ void DestroySlider();
+
+ /**
+ * Return gesture helper.
+ */
+ GestureHelper::CGestureHelper* Gesturehelper();
+
+private:
+
+ // Event handling related api.
+ /**
+ * Handles key event related manipulation.
+ *
+ * @param TAlfEvent
+ * @returns The status of the handled event.
+ */
+ AlfEventStatus HandleKeyEvent( const TAlfEvent& aEvent );
+
+ /**
+ * Handles repeated key event.
+ *
+ * @param TAlfEvent
+ * @returns The status of the handled event.
+ */
+ AlfEventStatus HandleRepeatKeyEvent( const TAlfEvent& aEvent );
+
+ /**
+ * Handle fast scrolling and speed variations with repeated key events.
+ *
+ * @param aDirection, Direction in which to change the highlight
+ */
+ void HandleFastScrollWithKeyEvents(int aDirection);
+
+ /**
+ * Handles custom event that control has raised to itself like bounce,bounce over etc.
+ *
+ * @returns The status of the handled event.
+ */
+ AlfEventStatus HandleCustomEvent( const TAlfEvent& aEvent );
+
+ /**
+ * Handles swipe events(only on pointer events from gesture helper)
+ *
+ * @param aEvent - SwipeRight/SwipeLeft.
+ */
+ void HandleSwipe(int aEvent);
+
+ /**
+ * Performs the focus visualisation for the new focusedindex, and clears the old
+ * index visulisation. Called for every navigation events and sethighlight api call.
+ *
+ * @param aIndex new Index to which the focus visualisation is to be set.
+ */
+ void DoSetFocusIndex( int aIndex, int aAnimationTime =0);
+
+ /**
+ * Sets the current highlighted item as the selected item .
+ * Sends the selection event to the application .
+ */
+ void SetSelection(int aHighlight);
+
+ /**
+ * Creates a new template element with aTemplateName .
+ *
+ * @param aTemplateName The name of thew new template element.
+ */
+ void CreateTemplateElement( mulwidget::TLogicalTemplate aTemplateName);
+
+
+ /**
+ * Sends the specified event to the base element .
+ *
+ * @param aEvent Event to be sent to the base element.
+ */
+ void SendEventToBaseElement( const TAlfEvent& aEvent );
+
+ /**
+ * Handles if there is any change in the total count of model .
+ * Updates the slider tick if the total count of model increases/decreases.
+ *
+ */
+
+ void HandleModelCountChange();
+
+ /**
+ * Gets the absolute index of the specified visual, which has been tapped.
+ *
+ * @param aHitVisual The visual which has been tapped or hit.
+ */
+ int GetHitVisualIndex( CAlfVisual* aHitVisual );
+
+ /**
+ * Handle enhanced stop.
+ */
+ void HandleEnhancedStop();
+
+ /**
+ * Performs all the enhanced mode related checkings ..e.g whether the fast scroll flag
+ * is set or not / whether the application is in landscape mode or not .
+ *
+ * @return Boolean value informing whether enhanced mode should be started or not .
+ */
+ bool EnhancedModeCondition();
+
+ /**
+ * Performs animations when enhanced mode is started .
+ * The coverflow transits to enhanced mode from 2D normal mode .
+ *
+ * @param aEvent , gesture event
+ */
+ void EnhancedStarted( const GestureHelper::MGestureEvent& aEvent );
+
+ /**
+ * Returns the current Gesture Speed.
+ *
+ * @param aEvent Event from the gesture helper.
+ * @returns The current gesture speed.
+ */
+ GestureHelper::TRealPoint GestureSpeed( const GestureHelper::MGestureEvent& aEvent );
+
+ /**
+ * Performs animations in enhanced mode.
+ * Moves the layout along with the pointer event . The function calls the active object class
+ * to move the layout with smooth animation .
+ *
+ * @param aEvent Gesture event .
+ */
+ void StartMoving( const GestureHelper::MGestureEvent& aEvent );
+
+ /**
+ * Handles all normal gesture events other than hold events
+ *
+ * @param aEvent Gesture event e.g . EGestureSwipeLeft/Right
+ */
+ void HandleNormalGestureEvents(const GestureHelper::MGestureEvent& aEvent);
+
+ /**
+ * Handles hold gesture events.
+ *
+ * @param aEvent Gesture event e.g . EGestureSwipeHoldLeft/Right
+ */
+ void HandleHoldGestureEvents(const GestureHelper::MGestureEvent& aEvent);
+
+ /**
+ * Handles updating utems when the number of items in model are less than total visible items
+ *
+ * @param aIndex, Index to update.
+ */
+ void HandleLessItemsUpdate(int aIndex);
+
+ /**
+ * Sets a blank texture the visual at relative index.
+ *
+ * @param aRelativeIndex, Index for which the blank texture should be set
+ */
+ void SetBlankTexture(int aRelativeIndex);
+
+
+ /**
+ * Converts the gesture distance into the form of direction (For right
+ * its plus and left its minus)
+ *
+ * @param aDistance, Gesture distance
+ */
+ int ConvertDistanceToDirection( int aDistance );
+ /**
+ * Sends Tactile feedback in case of touch down event.
+ *
+ * @param aEvent Gesture event.
+ */
+ void SendFeedbackOnTouchDown(const GestureHelper::MGestureEvent& aEvent);
+
+ /**
+ * Decides in which direction the strip should move during fast scroll and also decides the position of
+ * reference point for some special cases .
+ *
+ * @param aEvent Gesture event.
+ */
+ void ReverseDirectionInFastScroll(const GestureHelper::MGestureEvent& aEvent);
+
+ /**
+ * Change the reference point of reversing the direction until the reference point becomes the
+ * middle of the screen .
+ *
+ * @param aCurrPosition The current pointer position .
+ * @param aDistanceTravelled The distance travelled by the gesture till now.
+ */
+ void ChangeDirReferencePoint(int aCurrPosition, int aDistanceTravelled );
+
+ /**
+ * Handles the operations on the Single tap.
+ *
+ * @param aEvent Gesture event.
+ */
+ void HandleSingleTap(const GestureHelper::MGestureEvent& aEvent);
+
+ /**
+ *
+ *
+ *
+ */
+ int TotalSwipeDistance( const GestureHelper::MGestureEvent& aEvent );
+
+
+private:
+
+ auto_ptr<GestureHelper::CGestureHelper> mHelper; //owns it
+
+ auto_ptr<TMulCoverFlowControlImpl> mData; // Owned
+
+ auto_ptr<MulCoverFlowAo> mCoverFlowAo; // owned
+
+ MTouchFeedback* mFeedback; // tactile feedback, doesnt own it.
+
+ IMulSliderWidget* mSliderWidget; //
+
+ };
+
+ } // namespace Alf
+
+#endif // MULCOVERFLOWCONTROL_H
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/mulcoverflowdefinitions.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,234 @@
+/*
+* 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: header for defining all the common variables
+*
+*/
+
+// This file defines the variables for MulCoverFlowWidget.dll
+
+#ifndef __MULCOVERFLOWDEFINITIONS_H__
+#define __MULCOVERFLOWDEFINITIONS_H__
+
+/// @bug minor:avanhata:7/7/2008 The constants need to be documented. Overall,
+/// if you are only using a constant in a single cpp file, then define it there.
+
+namespace Alf
+ {
+ /// @bug minor:avanhata:7/7/2008: unclear variable name - is this duration
+ /// is milliseconds?
+ /// @bug minor:avanhata:7/7/2008: KAnimation200 add absolutely
+ /// no abstraction over just the number 200.
+ /// Define these as higher-level abstractions (
+ /// e.g., KEntryAnimationDuration, KBounceAnimationDuration, etc.)
+ //static const int KMaxVisibleItems = 3;
+ static const int KAnimation200 = 200;
+
+ // Minimum differnece in Speed percentage after which the strip size
+ // and speed will be modified
+ static const int KMainLayoutIndex = 0;
+ static const int KHorizontalLeftAlign = 0;
+ static const int KHorizontalRightAlign = 2;
+ static const int KMinNumItemForFastScroll = 4;
+ static const int KNumberOfRepeatsForMediumSpeed = 10;
+ static const int KNumberOfRepeatsForFastSpeed = 20;
+
+ static const int KZeroAnimation = 0;
+ /// @bug minor:avanhata:7/7/2008 remove hard coded constant
+ /// - use sizeof( TUint16 ) instead
+ static const int KSlashSize = 2;
+
+ static const float KHighlightOpacity = 1.0f;
+ static const float KBackGroundOpacity = 0.0f;
+
+ static const int KIconFlowLayoutIndex = 0;
+ static const int KTextLayoutIndex = 1;
+ static const int KTextLayoutViewPortIndex = 2;
+
+ static const int KTime = 500;
+ static const int KBounceTime = 150;
+ static const int KMarqueeTime25 = 40; // marquee animation time
+ static const int KMarqueeTime1000 = 1000; // after marquee end wait time
+ static const int KBounceRight= -1;
+ static const int KBounceLeft= 1;
+ static const int KVisibleWindow = 3;
+ static const int KContainerIndex = 1;
+ static const int KGroupId = 21;
+ static const int KInitialvalueZero = 0;
+ static const int KInitialvalueOne = 1;
+ /// @bug minor:avanhata:7/7/2008 use a meaningful variable name
+ static const int KTextRowsz = 6;
+ /// @bug minor:avanhata:7/7/2008 Capitalisation
+ static const int KTextFontindex = 9;
+ /// @bug minor:avanhata:7/7/2008 move to the cpp file in which this is used
+ static const int KTempBufferSize = 50;
+ static const char* const KNameSliderWidget = "mulsliderwidget";
+ static const char* const KNameSliderModel = "mulslidermodel";
+ static const char* const KMulTemplate = "mul_template";
+
+ static const char* const KBase = "base";
+ static const char* const KItem = "item";
+ static const char* const KText = "text";
+ static const char* const KLandscape = "landscape";
+ static const char* const KPortrait = "portrait";
+ _LIT8( mainlayout,"mainlayout" );
+ _LIT8( backgroundvisual,"backgroundvisual" );
+ _LIT8( verticalflowlayout,"verticalflowlayout" );
+ _LIT8( iconflowlayout,"iconflowlayout" );
+ _LIT8( textflowlayout, "textflowlayout");
+ _LIT8( counterflowlayout,"counterflowlayout" );
+ _LIT8( decklayout,"deck" );
+ _LIT8( KEmptyText,"emptytext" );
+ _LIT8( KMulEcfShadowTop,"mul_ecf_shadow_top");
+ _LIT8( KMulEcfShadowBottom,"mul_ecf_shadow_bottom");
+ _LIT( KSlash,"/" );
+ _LIT(KOutOfBound,"Out of Bound Index");
+ _LIT(KLogicError,"Logic error");
+
+ _LIT8( KDetailViewPortLayout,"detailviewportlayout");
+ _LIT8( KTitleViewPortLayout,"titleviewportlayout");
+ _LIT8( text,"text" );
+ _LIT8( KLitMulBackGround , "mul_background" );
+ _LIT8( KTextAnchor , "anchor" );
+ _LIT(KTemplateNotFound, "Template Not Found");
+ _LIT(KOrientationNotFound, "Orientation Node not found");
+ _LIT(KVisualNotFound, "Visual Not Found");
+ _LIT(KIteratorNotCreated, "Iterator could not be created");
+ _LIT(KNullPointer,"Null Pointer");
+ _LIT(KInvalidArgument,"Invalid Argument");
+ _LIT(KInvalidTemplate,"Invalid Template");
+ _LIT(KInvalidAttribute,"Invalid Attribute");
+
+ _LIT8( KCoverflowTitle,"mul_title");
+ _LIT8( KCoverflowDetail,"mul_detail");
+ _LIT8( KCoverflowIcon,"mul_icon");
+ _LIT8( KCoverflowIndicator,"mul_indicator");
+ _LIT8( KCoverflowCounter,"mul_count");
+ _LIT8(KInvalidID,"");
+
+ static const char* const KOrientation = "orientation";
+ static const char* const KCategory = "category";
+ static const char* const KElement = "element";
+ static const char* const KHighlight = "highlight";
+ static const char* const KLayout = "layout";
+ static const char* const KFlow = "flow";
+ static const char* const KBackground = "background";
+ static const char* const KAnchor = "anchor";
+ static const char* const KDeck = "deck";
+ static const char* const KImageVisual = "imagevisual";
+ static const char* const KTextVisual = "textvisual";
+ static const char* const KBaseTemplate = "templatebase";
+ static const char* const KCounter = "counter";
+ static const char* const KNonHighlight = "nohighlight";
+ static const char* const KXml = "xml";
+ static const char* const KSize = "size";
+ static const char* const KUiOnOff = "uiOnOff";
+ static const char* const KEnhancedMode = "enhancedmode";
+ static const char* const KSlider = "slider";
+ static const char* const KSliderWidget = "widget";
+ static const char* const KEnhancedSize = "enhancedsize";
+ static const char* const KMinSize = "min_size";
+ static const char* const KMaxSize = "max_size";
+ static const char* const KCounterSize = "counter_size";
+ static const char* const KMulBackGround = "mul_background";
+ static const char* const KMulTitle = "mul_title";
+ static const char* const KMulDetail = "mul_detail";
+ static const char* const KOpacity = "opacity";
+ static const char* const KColour = "colour";
+ static const char* const KHeight = "height";
+ static const char* const KWidth = "width";
+ static const char* const KPosX = "positionx";
+ static const char* const KPosY = "positiony";
+ static const char* const KTemplateId = "template";
+ static const char* const KLogicalTemplateDrive = "\\resource\\coverflow\\";
+ static const char* const KTemplatePrefix = "logical_template"; //for slider
+ static const char* const KUnderscore = "_";
+ static const char* const KExtension = ".xml";
+ static const char* const KCentreItem = "item_center";
+ static const char* const KRightItem = "item_right";
+ static const char* const KId = "id";
+ static const char* const KMulCount = "mul_count";
+ static const char* const KCounterBgColor = "backgroundcolor";
+ static const char* const KCounterBgOpacity = "backgroundopacity";
+ static const char* const KFitMode = "fitmode";
+ static const char* const KItemCentre = "item_center";
+ static const char* const KItemRight = "item_right";
+ static const char* const KMainLayout = "mainlayout";
+ static const char* const KMarquee = "marquee";
+ static const char* const KMarqueeOn = "yes";
+ static const char* const KRedColorAttrib = "red";
+ static const char* const KGreenColorAttrib = "green";
+ static const char* const KBlueColorAttrib = "blue";
+ static const char* const KAlphaColorAttrib = "alpha";
+ static const char* const KOn = "on";
+ static const char* const KOff = "off";
+ static const char* const KTextStyle = "style";
+ static const char* const KHorzAlign = "horizontalalign";
+ static const char* const KVertAlign = "verticalalign";
+ static const char* const KColor = "color";
+ static const char* const KFontThemeColor = "fontthemecolor";
+ static const char* const KTextSkinColorId = "textskincolorid";
+ static const char* const KTextColorSkinIndex = "textcolorskinindex";
+ static const char* const KTempMaxCount = "templatemaxcount";
+ static const char* const KFastScroll = "fastscroll";
+ static const char* const KIndicator = "mul_indicator";
+
+ enum TMulCoverFlowEventType
+ {
+ ECustomEventBounceBack = 300,/*!< A message regarding coverflow bounce */
+ ECustomEventScroll,
+ ECustomEventBounceCompleted
+ };
+
+ enum TItemScroll
+ {
+ EItemNoDirection,
+ EItemScrollLeft,
+ EItemScrollRight
+ };
+
+ enum TTextVisualType
+ {
+ ECounterVisual = 1,
+ ETilteDetailTextVisual
+ };
+
+ enum TNumberofSwipes
+ {
+ ESingleSwipe,
+ EDoubleSwipe,
+ ETripleSwipe
+ };
+
+struct TMulVisualColorProperty
+ {
+ TRgb mColor;
+ bool mIsColorSet;
+ TMulVisualColorProperty():mIsColorSet(false){}
+ }; //end of the structure
+
+struct TMulRotationProperty
+ {
+ int mIndex;
+ bool mIsApplied;
+ int mImageAngle;
+ TSize mTextureSize;
+
+ TMulRotationProperty():mIsApplied(false),mIndex(-1),mImageAngle(0)
+ {
+ }
+ }; //end of the structure
+
+ } //namespace Alf
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/mulcoverflowenhancedtemplate.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* 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: template header for CoverFlow
+*
+*/
+
+// This file defines the API for MulCoverFlowWidget.dll
+
+#ifndef MULCOVERFLOWENHANCEDTEMPLATE_H_
+#define MULCOVERFLOWENHANCEDTEMPLATE_H_
+
+#include "mulcoverflowbasetemplate.h"
+
+namespace osncore
+ {
+// Forward declarations
+class UString;
+ }
+
+namespace Alf
+ {
+// Forward declarations
+class MulCoverFlowControl;
+class MulXmlUtility;
+
+struct TMulCoverFlowEnhancedTemplateImpl;
+
+class MulCoverFlowEnhancedTemplate :public MulCoverFlowBaseTemplate
+ {
+
+public: // Constructor and Destructor
+
+ /**
+ * Constructor
+ */
+ MulCoverFlowEnhancedTemplate(MulCoverFlowControl &aControl,UString &aTemplateID, MulXmlUtility& aMulXmlUtility ,DuiNode* aRootNode);
+
+ /**
+ * Destructor
+ */
+ ~MulCoverFlowEnhancedTemplate();
+
+public: // New Methods
+
+ /**
+ * Returns the enhanced max size in TMulCoverFlowItem structure.
+ *
+ * @return Returns reference to TMulCoverFlowItem structure.
+ */
+ const TMulCoverFlowItem& EnhancedMaxSize();
+
+ /**
+ * Returns the enhanced min size in TMulCoverFlowItem structure.
+ *
+ * @return Returns reference to TMulCoverFlowItem structure.
+ */
+ const TMulCoverFlowItem& EnhancedMinSize();
+
+ /**
+ * Returns the counter position and size in TMulCoverFlowItem structure.
+ *
+ * @return Returns reference to TMulCoverFlowItem structure.
+ */
+ const TMulCoverFlowItem& EnhacedCounterPos();
+
+ /**
+ * Returns the path of the image that should be used as ecf shadow border.
+ *
+ * @return Returns path of the image that should be used as ecf shadow border.
+ */
+ const UString& EnhancedBorderImagePath();
+
+private:
+
+ /**
+ * Parses xml tags of type <element> and in turn creates AlfElements
+ * which in turn are added in the control.
+ *
+ * All tags with <element> will be parsed here
+ *
+ * @param aNode the orientation node depending on the orientation
+ * being used .
+ */
+ void ParseNode( DuiNode& aNode );
+
+ /**
+ * Parses the enhanced size tag in the xml .
+ *
+ * @param aNode the node at which the tag is <enhancedsize>.
+ */
+ void ParseEnhancedTag( DuiNode& aNode );
+
+ /**
+ * Parses the counter size tag in the xml .
+ *
+ * @param aNode the node at which the tag is <counter>.
+ */
+ void ParseCounterTag( DuiNode& aNode );
+
+ /**
+ * Parses the sizes tag and stores those values in corresponding variables.
+ *
+ * @param aNode the node at which sizes are to be parsed from.
+ */
+ void ProcessSizeTag( DuiNode& aNode );
+
+ /**
+ * Parses the imagepath tag and stores those values in corresponding variables.
+ *
+ * @param aNode the node at which sizes are to be parsed from.
+ * @param aPath, Reference to Ustring in which the parsed value should be stored
+ */
+ bool GetStaticImagePath(DuiNode& aNode, UString& aPath);
+
+private:
+ auto_ptr<TMulCoverFlowEnhancedTemplateImpl> mData; // owns it
+
+ }; // class
+
+ }//namespace Alf
+
+#endif /*MULCOVERFLOWENHANCEDTEMPLATE_H_*/
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/mulcoverflowitemelement.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* 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: Item element header for Cover Flow.
+*
+*/
+
+// This file defines the API for mulcoverflowwidget.dll
+#ifndef MULCOVERFLOWITEMELEMENT_H_
+#define MULCOVERFLOWITEMELEMENT_H_
+
+
+// Includes
+#include <alf/alfelement.h>
+#include <alf/ialfwidgeteventhandler.h>
+
+#include <vector>
+
+#include "mulvisualtemplate.h"
+// Forward declarations.
+class MulTemplateInterface;
+
+namespace Alf
+ {
+
+class MulCoverFlowItemElement: public AlfElement, public IAlfWidgetEventHandler
+ {
+
+public: // Constructor and Destructor
+
+ /**
+ * Constructor
+ * @param aControl WidgetControl
+ * @param aName Name of the element.
+ */
+ // third parameter shd be moved.
+ MulCoverFlowItemElement( CAlfWidgetControl& aControl, const char* aName , MulTemplateInterface& aControlInterface );
+
+ /**
+ * Destructor
+ */
+ ~MulCoverFlowItemElement();
+
+public: // From IAlfWidgetEventHandler
+
+ bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;
+
+ void setActiveStates( unsigned int aStates );
+
+ AlfEventStatus offerEvent( CAlfWidgetControl& aControl, const TAlfEvent& aEvent );
+
+ IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+ void setEventHandlerData( const AlfWidgetEventHandlerInitData& aData );
+
+ AlfWidgetEventHandlerInitData* eventHandlerData();
+
+ AlfEventHandlerType eventHandlerType() ;
+
+ AlfEventHandlerExecutionPhase eventExecutionPhase() ;
+
+
+public: // new methods
+
+ CAlfVisual* CreateIconStructure(CAlfLayout* aParentLayout, const UString& aTemplateId);
+
+ void DoSetImage(IAlfVariantType* data, CAlfImageVisual* aImgVisual);
+
+
+
+private:
+
+ /**
+ * gets the handle to the visual template.
+ */
+ MulVisualTemplate* VisualTemplate()
+ {
+ return static_cast<MulVisualTemplate*>(getVisualTemplate());
+ }
+private: // Member data
+
+ std::vector<CAlfVisual*> mRecycleVisualArray; //stores sizes and positions of all items
+ bool mVisualRecycled;
+ int mNumVisualsRecycled;
+ CAlfFlowLayout* mIconFlow;
+ };
+
+ } // namespace ends here
+
+#endif /*MULCOVERFLOWITEMELEMENT_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/mulcoverflowtemplate.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,397 @@
+/*
+* 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: template header for CoverFlow
+*
+*/
+
+// This file defines the API for MulCoverFlowWidget.dll
+
+#ifndef __MULCOVERFLOWTEMPLATE_H__
+#define __MULCOVERFLOWTEMPLATE_H__
+
+// Avkon Includes
+#include <aknlayoutscalable_uiaccel.cdl.h>
+
+#include "mulbaseelement.h" // for TMulCoverflowItem
+
+namespace osncore
+ {
+// Forward declarations
+class UString;
+ }
+
+namespace Alf
+ {
+// Forward declarations
+class MulCoverFlowControl;
+
+struct TMulCoverFlowTemplateImpl
+ {
+
+ TMulCoverFlowTemplateImpl()
+ {
+ mEnhancedSupportFlag = false;
+ mSliderEnabled = false;
+ mUiOnOffFlag = false;
+ mOrientationChange = false;
+ mControl = NULL;
+ mBaseElement = NULL;
+ mMaxVisibleCount = 0;
+ mTitleFontMaxCharLength = 0;
+ mDetailFontMaxCharLength = 0;
+ mCounterFontMaxCharLength = 0;
+ }
+
+ //Structure used to store the position and sizes of the counter.
+ TMulCoverFlowItem mCounterDimensions;
+ TMulCoverFlowItem mSliderDimensions;
+ TMulCoverFlowItem mIndicatorDimensions;
+ bool mEnhancedSupportFlag;
+ bool mSliderEnabled;
+ bool mUiOnOffFlag ;
+ int mMaxVisibleCount;
+ MulBaseElement* mBaseElement;
+ bool mOrientationChange;
+ MulCoverFlowControl* mControl; // doesn't own it .
+ mulwidget::TLogicalTemplate mTemplateID; // to store the template name
+ TSize mTitleParentSize;
+ TSize mDetailParentSize;
+ int mTitleFontMaxCharLength;
+ int mDetailFontMaxCharLength;
+ int mCounterFontMaxCharLength;
+
+ ~TMulCoverFlowTemplateImpl()
+ {
+ }
+ };
+
+
+
+class MulCoverFlowTemplate
+ {
+
+public: // Constructor and Destructor
+
+ /**
+ * Constructor
+ */
+ MulCoverFlowTemplate(MulCoverFlowControl &aControl, MulBaseElement &aBaseElement);
+
+ /**
+ * Destructor
+ */
+ virtual ~MulCoverFlowTemplate();
+
+public: // New Methods
+
+ /**
+ * Returns the counter element structure.
+ *
+ * @return Returns a refrence to the counter element structure.
+ */
+ const TMulCoverFlowItem& CounterDimensions() const
+ {return mData->mCounterDimensions;}
+
+ /*
+ * Returns whether the current template and orientation supports enhanced mode or not.
+ *
+ * @Returns true/false depending on whether the template supports or not.
+ */
+ bool EnhancedTagParsed() const {return mData->mEnhancedSupportFlag;}
+
+ /*
+ * Returns whether the slider is enable or not for the current template and
+ * orientation.
+ *
+ * @Returns true/false depending on whether enabled or not.
+ */
+ bool IsSliderVisible() const {return mData->mSliderEnabled;}
+
+ /*
+ * Returns the maxvisible items to be in the respective template .
+ *
+ * @Returns int depending on the no of visble item count.
+ */
+ int MaxVisibleCount() const {return mData->mMaxVisibleCount;}
+
+ /**
+ * Returns whether the template is UI on/off or not .
+ * That is UI on/off flag is enabled in the template or not .
+ *
+ * @returns true if flag is enabled else false .
+ */
+ bool IsUiOnOffFlagEnabled() const {return mData->mUiOnOffFlag;}
+
+ /**
+ * Returns the slider dimensions .
+ *
+ * @Returns TMulCoverFlowItem dimension of the slider
+ */
+ const TMulCoverFlowItem& SliderDimension() {return mData->mSliderDimensions;}
+
+ /**
+ * Returns the video indicator dimension.
+ *
+ * @return Returns a refrence to the indicator dimension.
+ */
+ const TMulCoverFlowItem& IndicatorDimension() const {return mData->mIndicatorDimensions;}
+
+ /**
+ * Returnt the size of the title window size.
+ *
+ */
+ const TSize& TitleWindowSize() {return mData->mTitleParentSize;}
+
+ /**
+ * Return the size of the detail window size.
+ *
+ */
+ const TSize& DetailWindowSize() {return mData->mDetailParentSize; }
+
+ /**
+ * Return the title maximum character font Width
+ *
+ */
+ int TitleMaxCharWidth() {return mData->mTitleFontMaxCharLength;}
+
+ /**
+ * Return the detail maximum character font Width
+ */
+ int DetailMaxCharWidth() {return mData->mDetailFontMaxCharLength;}
+
+ /**
+ * Return the counter maximum character font Width
+ */
+ int CounterMaxCharWidth() {return mData->mCounterFontMaxCharLength;}
+
+
+ /**
+ * Virtual function must be overriden by derived class.
+ * Creates the visualisation based on the Orientation
+ * also updates the visualisation on orientation change
+ *
+ * @param aIsLandscape, current orientation
+ * @param aIsOrientationChange, based on flag decide to
+ * create or update the visualisation
+ */
+ virtual void CreateVisualisation(bool aIsLandscape,bool aIsOrientationChange = false);
+
+
+protected:
+
+ /**
+ * Get the window rect of the Imagevisual or layouts .
+ * @Param aLayout layout which gives all the LCT data of
+ * the visual(image or layout).
+ * @Param aParentRect rect of the parent to the visual.
+ */
+ TRect IconWindowRect(const TAknWindowLineLayout &aLayout, const TRect& aParentRect);
+
+ /**
+ * Get the window rect of the textvisual .
+ * @Param aLayout layout which gives all the LCT data of
+ * the textvisual.
+ * @Param aParentRect rect of the parent to the visual
+ */
+ TRect TextWindowRect(const TAknTextLineLayout& aLayout, const TRect& aParentRect);
+
+ /**
+ * Set the style to the textvisual
+ *
+ * @param aTextFontId the fontId to be set on textvisual.
+ * @param textVisual refernce to textvisual.
+ */
+ void SetTextStyle(int aTextFontId, CAlfTextVisual& textVisual);
+
+ /**
+ * Update the maximum character width of text font of textvisual
+ * @Param textVisual , alftextvisual
+ */
+ int UpdateMaxFontWidth(CAlfTextVisual* textVisual);
+
+ /**
+ * Applies brush on the specified visual .
+ * The colour of the brush is aBrushColour.
+ * @param aVisual visual on which brush has to be applied.
+ * @param aBrushColour The brush colour.
+ * @param aBrushOpacity The opacity to be applied on the brush.
+ */
+ void ApplyBrush( CAlfTextVisual& aVisual,const TRgb& aBrushColour,
+ float aBrushOpacity );
+
+private:
+
+ /**
+ * Returns a font id for the specified style.
+ *
+ * @Param aFontStyle font style.
+ * @Param aManager textstyle manager.
+ */
+ TInt GetFontId(const UString &aFontStyle, CAlfTextStyleManager& aManager)const;
+
+
+protected:
+ auto_ptr<TMulCoverFlowTemplateImpl> mData;
+
+ };
+
+
+// class Template 4
+class MulCoverFlowTemplate4 : public MulCoverFlowTemplate
+ {
+public:
+
+ /**
+ * Constructor
+ */
+ MulCoverFlowTemplate4(MulCoverFlowControl &aControl, MulBaseElement &aBaseElement);
+
+ /**
+ * destructor
+ */
+ ~MulCoverFlowTemplate4();
+
+// From MulCoverFlowTemplate
+
+ /**
+ * @See CreateVisualisation of MulCoverFlowTemplate
+ */
+ void CreateVisualisation(bool aIsLandscape,bool aIsOrientationChange=false);
+
+// new method
+
+ /**
+ * provides the dimension of the visual attribute (icon & video indicator)
+ * based on the orientation.
+ *
+ * @param aAttribute, type of visual attribue
+ * @param aIslandscape, current orientation
+ */
+ static void GetIconSize(mulvisualitem::TVisualAttribute aAttribute,bool aIslandscape,
+ int& aHeight, int& aWidth);
+
+private:
+
+ /**
+ * create visualisation for potrait orientation
+ *
+ */
+ void CreatePrtStructure();
+
+ /**
+ * create visualisation for landscape orientation
+ *
+ */
+ void CreateLscStructure();
+
+ /**
+ * create counter visual and apply attribute
+ *
+ * @param acounterPaneVerityId, lct verity of counter visual.
+ * @param aMainRect, parent rect for counter visual.
+ */
+ void ApplyCounterAttribute(int acounterPaneVerityId,const TRect& aMainRect);
+
+ };
+
+// class Template 1
+class MulCoverFlowTemplate1 : public MulCoverFlowTemplate
+ {
+public:
+
+ /**
+ * Constructor
+ */
+ MulCoverFlowTemplate1(MulCoverFlowControl &aControl, MulBaseElement &aBaseElement);
+
+ /**
+ * destructor
+ */
+ ~MulCoverFlowTemplate1();
+
+// From MulCoverFlowTemplate
+
+ /**
+ * @See CreateVisualisation of MulCoverFlowTemplate
+ */
+ void CreateVisualisation(bool aIsLandscape,bool aIsOrientationChange=false);
+
+// new method
+
+ /**
+ * provides the dimension of the visual attribute (icon & video indicator)
+ * based on the orientation.
+ *
+ * @param aAttribute, type of visual attribue
+ * @param aIslandscape, current orientation
+ */
+ static void GetIconSize(mulvisualitem::TVisualAttribute aAttribute,bool aIslandscape,
+ int& aHeight, int& aWidth);
+
+private:
+
+ /**
+ * create visualisation for potrait orientation
+ */
+ void CreatePrtStructure();
+
+ /**
+ * create visualisation for landscape orientation
+ */
+ void CreateLscStructure();
+
+ /**
+ * create counter visual and apply attribute
+ *
+ * @param acounterPaneVerityId, lct verity of counter visual.
+ * @param aMainRect, parent rect for counter visual.
+ */
+ void ApplyCounterAttribute(int acounterPaneVerityId,const TRect& aMainRect);
+
+ /**
+ * apply attribute on main text layout
+ *
+ * @param aMainRect, parent rect for main text layout
+ */
+ void ApplyTextAttribute(const TRect& aMainRect);
+
+ /**
+ * create title text visual and apply attribute
+ *
+ * @param aVerityId, lct verity of title text.
+ * @param aTextLayoutRect, parent rect for title text
+ */
+ void ApplyTitleTextAttribute(int aVerityId,const TRect& aTextLayoutRect);
+
+ /**
+ * create detail text visual and apply attribute
+ *
+ * @param aVerityId, lct verity of detail text.
+ * @param aTextLayoutRect, parent rect for detail text
+ */
+ void ApplyDetailTextAttribute(int aVerityId,const TRect& aTextLayoutRect);
+
+ /**
+ * parse and apply the slider attribute
+ *
+ * @param aMainRect, parent rect for slider
+ */
+ void ApplySliderAttribute(const TRect& aMainRect);
+ };
+
+
+ }//namespace Alf
+#endif //__MULCOVERFLOWTEMPLATE_H
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/mulcoverflowwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,161 @@
+/*
+* 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: widget header for CoverFlow
+*
+*/
+
+// This file defines the API for MulCoverFlowWidget.dll
+
+#ifndef __MULCOVERFLOWWIDGET_H__
+#define __MULCOVERFLOWWIDGET_H__
+
+
+// Include Files
+// Mul headers
+#include <mul/imulcoverflowwidget.h>
+
+// Alf headers
+#include "alf/alfwidget.h"
+
+//Gesture Helper namespace
+namespace GestureHelper
+ {
+ class CGestureHelper;
+ }
+
+namespace Alf
+ {
+
+//Forward Class Definitions
+class MulBaseElement;
+class MulCoverFlowControl;
+
+/// @bug comment:avanhata:3/7/2008 It would be good to describe the responsibilities and
+/// design of the class here. The comment about method is incorrect, as it is the abstract
+/// interface that the application uses
+/**
+ * Widget Implementation class. The Widget Class is responsible for the creation of the control and elements.
+ */
+
+class MulCoverFlowWidget : public AlfWidget,
+ public IMulCoverFlowWidget
+ {
+public: //Constructor and destructor
+
+ /**
+ * C++ constructor.
+ */
+ MulCoverFlowWidget( CAlfEnv& aEnv, const char* aWidgetId, IAlfContainerWidget& aContainerWidget );
+
+ /**
+ * Destructor.
+ */
+ ~MulCoverFlowWidget();
+
+public: // From AlfWidget Common Property related apis
+
+ IAlfContainerWidget* parent() const;
+
+ CAlfWidgetControl* control() const;
+
+ void setControl( CAlfWidgetControl* aControl,bool aDeletePreviousControl );
+
+ IAlfModel* model();
+
+ void setModel( IAlfModel* aModel,bool aTakeOwnership );
+
+ const char* widgetName() const;
+
+ void setChildFocus( bool aFocus );
+
+ void setPresentation( const char* aFilePath );
+
+public: //From MAlfInterfaceBase.
+
+ IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+public: //From IMulCoverFlowWidget.
+
+ void SetBackground( const TRgb& aColor );
+
+ void SetBackground(const TAknsItemID& aItemID );
+
+ void SetEmptyText( const UString& aDefaultText );
+
+ void SetUIMode(bool UIOn=false, int aTransition=0 );
+
+ void SetDefaultImage(int aTextureId);
+
+ void RotateImage(TMulRotation aDirection,TSize aImageSize,int aAnimationTime);
+
+ GestureHelper::CGestureHelper* Gesturehelper();
+
+public: //From IMulWidget
+
+ void SetFlags( unsigned int aAnyFlag );
+
+ void ClearFlags( unsigned int aAnyFlag ) ;
+
+ unsigned int GetFlags() const;
+
+ bool IsFlagSet( TMulWidgetPropertiesFlag aAnyFlag ) const;
+
+ void SetModel( IMulModelAccessor* aAccessor, bool aFlag=true );
+
+ void SetRect( int aLeftMargin, int aTopmargin, int aHeight, int aWidth, int aTransitionTime = 0 );
+
+ void ShowWidget( bool aShow, int aTransitionTime = 0 ) ;
+
+ void GetIconSize( mulwidget::TLogicalTemplate aTemplateId,
+ mulvisualitem::TVisualAttribute aAttribute, int& aHeight, int& aWidth);
+
+ void GetIconSize(mulvisualitem::TVisualAttribute aAttribute, int& aHeight, int& aWidth);
+
+ void AddEventHandler( IAlfWidgetEventHandler& aObserver );
+
+ void RemoveEventHandler( IAlfWidgetEventHandler& aObserver );
+
+ const CAlfLayout& ContainerLayout();
+
+ void SetMarkMode( bool aFlag );
+
+ bool IsMarkMode()const ;
+
+ void SetReorderMode( TMulReOrderMode /*aReorderMode*/);
+
+ bool IsReorderModeOn() const;
+
+
+ void SetOverlay( TMulAttributeDataType aType, const UString& aAttribute, const UString& aFormat ) ;
+
+ void SetAnimationTime( TMulVisualEffect aVisualEffect, int aTransitionTime = 0 ) ;
+
+ void SetVisualColor( TMulVisualType aVisualType , const TRgb& aColor );
+
+
+private: // Class Data
+
+ unsigned int mWidgetPropertyFlag;
+ IMulModelAccessor* mMulModelAccessor; // doesn't won it.
+ MulBaseElement* mBaseElement; // doesn't own it.
+ MulCoverFlowControl* mCoverflowControl; //// doesn't own it.
+ bool mTakesModelOwnership;
+
+ };
+
+ } // namespace Alf
+
+#endif // __MULCOVERFLOWWIDGET_H__
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/mulcoverflowwidgetfactoryplugin.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* 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: factory plugin header for CoverFlow
+*
+*/
+
+#ifndef MULCOVERFLOWWIDGETFACTORYPLUGIN_H
+#define MULCOVERFLOWWIDGETFACTORYPLUGIN_H
+
+
+#include <ecom/implementationproxy.h>
+#include <alf/ialffactoryplugin.h>
+#include <osn/osndefines.h>
+
+
+namespace Alf
+ {
+class IfId;
+
+/**
+ * Plugin factory to create widget factory
+ * @lib alfwidgetfactory.dll
+ */
+/// @bug comment:avanhata:3/7/2008 This class is only used from its own cpp file,
+/// so the definition can be moved into the cpp and the header file removed.
+class MulCoverFlowWidgetFactoryPlugin: public IAlfFactoryPlugin
+ {
+public:
+ /**
+ * Two-phased symbian constructor.
+ *
+ * @return New instance of this factory plugin.
+ */
+ static MulCoverFlowWidgetFactoryPlugin* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~MulCoverFlowWidgetFactoryPlugin();
+
+public: // from MAlfPluginFactory
+
+ IAlfInterfaceBase* createProduct(const char* aProduct,void* aInitData);
+
+ int productCount()const;
+
+ const char* productInfo(int aIndex)const;
+
+ IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+ };
+
+ } // namespace Alf
+
+/// @bug comment:avanhata:3/7/2008 does not need to be declared - just define in cpp
+// Exported factory function required by ECOM-framework
+IMPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount);
+
+#endif //MULCOVERFLOWWIDGETFACTORYPLUGIN_H
+
+//End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/rom/mulcoverflowwidget.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* 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: CoverFlow Widget iby file.
+*
+*/
+
+#ifndef __MULCOVERFLOWWIDGET_IBY__
+#define __MULCOVERFLOWWIDGET_IBY__
+
+ECOM_PLUGIN( mulcoverflowwidget.dll, mulcoverflowwidget.rsc )
+
+#endif // __MULCOVERFLOWWIDGET_IBY__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/2000D240.rss Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* 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: Ecom plugin resource file for coverflow widget
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+#include "alf/alfecompluginfactoryuid.rh"
+
+
+RESOURCE REGISTRY_INFO theInfo
+{
+dll_uid = 0x2000D240;
+interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KFactoryPluginUid;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x2000D241;
+ version_no = 1;
+ display_name = "";
+ default_data = "mulcoverflowwidget";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulbaseelement.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,2961 @@
+/*
+* 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: base element Implementation
+ *
+*/
+
+// Include Files
+// Class Headers
+#include "mulbaseelement.h"
+
+#include <AknUtils.h>
+// Alf Headers
+#include <alf/alfbatchbuffer.h>
+#include <alf/alfbrusharray.h>
+#include <alf/alfgradientbrush.h>
+#include <alf/alfviewportlayout.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alfutil.h>
+#include <alf/alftransformation.h>
+
+// Mul Headers
+#include "mul/mulmodelutility.h"
+#include "imulmodelaccessor.h"
+#include <mul/imulsliderwidget.h>
+#include <mul/mulevent.h>
+#include "mulassert.h"
+#include "mulleave.h"
+#include "mullog.h" //for logs
+
+// Local Cover Flow Headers
+#include "mulcoverflowcontrol.h"
+#include "mulcoverflowtemplate.h"
+
+namespace Alf
+ {
+//Internal base element structure implementation
+struct TMulBaseElementImpl
+ {
+
+ UString mEmptyText; // empty text to be displayed when number of items is 0.
+
+ int mPadding; //Padding between item
+
+ TMulCoverFlowItem mHighlightItemStruct;
+ TMulCoverFlowItem mItemStruct;
+ int mVisibleCount;
+ int mScrollAnimationTime; // animation time for highlight transition set by the application.
+ bool mUiOn; // true if in UiOnMode
+
+ bool mTextVisible; // not suppose to be displayed in template 4
+
+
+ // To keep a pointer of iconFlow layout.Not owned, created at construction.
+ // The below 4 layouts will never be null. No need to validate before using
+ CAlfFlowLayout* mIconFlowLayout;
+ CAlfLayout* mTextLayout;
+ CAlfFlowLayout* mVerticalFlow;
+ CAlfLayout* mSliderLayout ; // stores visual of the slider widget
+
+ // Can be null when the template doesnt have counter.
+ CAlfTextVisual* mCounterVisual ;
+ CAlfTextVisual* mEmptyTextVisual;
+
+ //Stores current slider opacity.
+ float mSliderOpacity;
+ TItemScroll mScrollDir;
+ float mEmptyTextOpacity;
+ // whether to apply default fit mode(fitinside) or not.
+ // if false apply default fit mode , else based on the image size.
+ bool mFitMode;
+
+ // different visuals color properties
+ TMulVisualColorProperty mIconBgColor;
+ TMulVisualColorProperty mCounterColor;
+ TMulVisualColorProperty mTextColor;
+ TMulRotationProperty mRotation;
+
+ bool mChangeSize;
+ // whether user has swiped multiple times.
+ TNumberofSwipes mNumSwipes;
+ // total number of digits in counter visual at every highlight.
+ int mNumOfDigitsInCounter;
+ // marquee animation time
+ int mMarqueeAnimTime;
+ // Titletext extents
+ TSize mTitleExt;
+ // Detailtext extents
+ TSize mDetailExt;
+ //Dummy text visual for getting text extents
+ CAlfTextVisual* mDummyVisual;
+ bool mIsMirrored;
+
+ //Constructor of the structure
+ TMulBaseElementImpl()
+ {
+ //Intialisation
+ mPadding = -1;
+ mNumOfDigitsInCounter = -1;
+ mVisibleCount = 0;
+ mScrollAnimationTime = 200;
+ mEmptyText = "";
+ mCounterVisual = NULL;
+ mIconFlowLayout = NULL;
+ mTextLayout = NULL;
+ mVerticalFlow = NULL;
+ mSliderLayout = NULL;
+ mEmptyTextVisual = NULL;
+ mSliderOpacity = 0.0f;
+ mTextVisible = true;
+ mScrollDir = EItemNoDirection;
+ mEmptyTextOpacity = 0.0f;
+ mFitMode = false;
+ mUiOn = false;
+ mChangeSize = false;
+ mNumSwipes = ESingleSwipe;
+ mMarqueeAnimTime = 0;
+ mDummyVisual = NULL;
+ mIsMirrored = false;
+ }
+ ~TMulBaseElementImpl()
+ {
+ }
+ }; //end of the structure
+
+
+// ---------------------------------------------------------------------------
+// MulBaseElement
+// ---------------------------------------------------------------------------
+//
+MulBaseElement::MulBaseElement( CAlfWidgetControl& aControl,
+ const char* aName )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::MulBaseElement");
+ mData.reset( new (EMM)TMulBaseElementImpl );
+ //Call the base class method
+ construct( aControl,aName );
+ CreateBaseLayoutStructure();
+ (static_cast<MulCoverFlowControl&>(aControl)).UpdateBaseElement(this);
+ if (AknLayoutUtils::LayoutMirrored())
+ {
+ mData->mIsMirrored = true;
+ }
+ else
+ {
+ mData->mIsMirrored = false;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulBaseElement
+// ---------------------------------------------------------------------------
+//
+MulBaseElement::~MulBaseElement()
+ {
+ // Nothing to delete .
+ }
+
+// ---------------------------------------------------------------------------
+// accept
+// ---------------------------------------------------------------------------
+//
+bool MulBaseElement::accept( CAlfWidgetControl& /*aControl*/,
+ const TAlfEvent& aEvent ) const
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::accept");
+ uint eventID;
+ if(!aEvent.IsCustomEvent())
+ {
+ return false;
+ }
+ eventID = aEvent.CustomParameter();
+
+ //Events handled by the base element
+ if( eventID == ETypeHighlight
+ || eventID == EEventWidgetInitialized
+ || eventID == ETypePrimaryValueChange )
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// offerEvent
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulBaseElement::offerEvent( CAlfWidgetControl& aControl,
+ const TAlfEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::offerEvent");
+ if ( !accept( aControl, aEvent ) )
+ {
+ //return false;
+ return EEventNotHandled;
+ }
+
+ uint eventID = aEvent.CustomParameter();
+
+ MulCoverFlowControl* coverflowControl = static_cast<MulCoverFlowControl*>(&control());
+
+ if( eventID == EEventWidgetInitialized )
+ {
+ // some of the member variable needs to be reset
+ // to support dynamic template change with model change.
+ mData->mNumOfDigitsInCounter = -1;
+
+ UpdateTextAndCounter();
+ CalculatePadding();
+ ArrangeItems();
+ // Show empty text if coverflow is empty
+ int totalModelCount = coverflowControl->TotalModelCount();
+ IMulModelAccessor* model = coverflowControl->ModelAccessor();
+ if( (totalModelCount <= 0) || (model == NULL))
+ {
+ ShowEmptyText( true );
+ return EEventConsumed;
+ }
+ else
+ {
+ ShowEmptyText( false );
+ }
+ return EEventConsumed;
+ }
+
+ else if( eventID == ETypeHighlight )
+ {
+ // Update the text and counter values according to the new highlight
+ int newHighlight = coverflowControl->HighlightIndex();
+ int animationTime = aEvent.CustomEventData();
+ animationTime = animationTime > 0 ? animationTime : mData->mScrollAnimationTime;
+
+ if(mData->mScrollDir != EItemNoDirection)
+ {
+ if(coverflowControl->IsFastScrollMode())
+ {
+ animationTime = coverflowControl->FastScrollTransitionTime();
+ SetHighlight(newHighlight,animationTime);
+ }
+ else
+ {
+ SetHighlight(newHighlight,animationTime );
+ }
+ }
+ else
+ {
+ //@TODO: update all the items
+ animationTime = KZeroAnimation;
+ SetHighlight(newHighlight,animationTime);
+ }
+
+ UpdateTextAndCounter(animationTime);
+
+ return EEventConsumed;
+ }
+ else if( eventID == ETypePrimaryValueChange )
+ {
+ IMulSliderModel* mulSliderModel = coverflowControl->GetSliderModel();
+ if( mulSliderModel )
+ {
+ int primaryValue = mulSliderModel->PrimaryValue();
+ coverflowControl->SetHighlightIndex( primaryValue , false);
+ }
+ return EEventConsumed;
+ }
+
+ return EEventNotHandled;
+ }
+
+// ---------------------------------------------------------------------------
+// setActiveStates
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::setActiveStates( unsigned int /*aStates*/ )
+ {
+ //No implementation required
+ }
+
+//----------------- Creating the visuals and layout structure ----------------
+
+
+// ---------------------------------------------------------------------------
+// CreateBaseLayoutStructure
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::CreateBaseLayoutStructure()
+ {
+ THROW_IF_LEAVES
+ (
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateBaseLayoutStructure");
+
+ CAlfLayout* main = CAlfLayout::AddNewL(control());
+
+ // set this flag, to recieve layout change events ,that are handled
+ // by the ovverriden VisualLayoutUpdated method of the alfwidgetcontrol.
+ main->SetFlags( EAlfVisualFlagLayoutUpdateNotification );
+ main->SetTagL( mainlayout );
+ main->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ main->SetClipping(ETrue);
+
+ CAlfDeckLayout* deckLayout = CAlfDeckLayout::AddNewL( (CAlfControl &)control(),main);
+ deckLayout->SetTagL( decklayout );
+ deckLayout->SetFlag( EAlfVisualFlagManualLayout );
+
+ CAlfGradientBrush* deckBrush = CAlfGradientBrush::NewL( control().Env() );
+ // Set the brush colour
+ deckBrush->SetColor( KRgbBlack );
+ deckLayout->EnableBrushesL( ETrue );
+ // Apply brush and set the opacity .
+ deckLayout->Brushes()->AppendL( deckBrush, EAlfHasOwnership );
+ deckLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ deckLayout->SetClipping(ETrue);
+
+
+ // Create a vertical flow layout which has two horizontal layouts
+ mData->mVerticalFlow = CAlfFlowLayout::AddNewL((CAlfControl&)control(), deckLayout );
+
+ // Set the Layout Direction
+ mData->mVerticalFlow->SetFlowDirection( CAlfFlowLayout::EFlowVertical );
+ mData->mVerticalFlow->SetFlag( EAlfVisualFlagManualLayout );
+ mData->mVerticalFlow->SetTagL( verticalflowlayout );
+ mData->mVerticalFlow->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+
+ // Create flow layout,all the item visuals are added to this layout.
+ // make this layout as the child to the vertical flow layout at index 1.
+ mData->mIconFlowLayout = CAlfFlowLayout::AddNewL( (CAlfControl&)control(), mData->mVerticalFlow );
+
+ // Set the Layout Direction
+ mData->mIconFlowLayout->SetFlowDirection( CAlfFlowLayout::EFlowHorizontal );
+ mData->mIconFlowLayout->SetTagL( iconflowlayout );
+ mData->mIconFlowLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+
+ // stores visuals of all the items(text visuals)
+ mData->mTextLayout = CAlfLayout::AddNewL((CAlfControl&)control(),mData->mVerticalFlow);
+ mData->mTextLayout->SetTagL( textflowlayout );
+ mData->mTextLayout->SetFlag(EAlfVisualFlagIgnorePointer);
+ mData->mTextLayout->SetFlag( EAlfVisualFlagManualLayout );
+ mData->mTextLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ //Add main layout to the base visual tree
+ addVisualTree( main, KInitialvalueZero );
+
+ );
+ }
+
+// ---------------------------------------------------------------------------
+// SetDefaultSize
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetDefaultSize( TSize aSize )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetDefaultSize");
+ CAlfLayout* main = (CAlfLayout*)findVisual( KMainLayoutIndex );
+ main->SetSize(aSize );
+ CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&> (main->Visual(KMainLayoutIndex) );
+ deckLayout.SetSize(aSize);
+ CAlfVisual* backgroundVisual = deckLayout.FindTag(backgroundvisual);
+ if(backgroundVisual)
+ {
+ backgroundVisual->SetSize(aSize);
+ }
+ if( mData->mEmptyTextVisual && mData->mEmptyTextOpacity == 1 )
+ {
+ mData->mEmptyTextVisual->SetSize(aSize);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TextAnchorLayout
+// ---------------------------------------------------------------------------
+//
+CAlfLayout& MulBaseElement::TextLayout()
+ {
+ __MUL_ASSERT( mData->mTextLayout != 0,KNullPointer);
+ return *mData->mTextLayout;
+ }
+
+
+//----------------------Empty text related visualisation---------------------
+// ---------------------------------------------------------------------------
+// SetEmptyText
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetEmptyText( const UString& aDefaultText )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetEmptyText");
+
+ mData->mEmptyText = aDefaultText;
+ int totalModelCount = ((MulCoverFlowControl*)&control())->TotalModelCount();
+
+ if( mData->mEmptyTextVisual )
+ {
+ THROW_IF_LEAVES
+ (
+ TBuf<KTempBufferSize> desc;
+
+ MulModelUtility::ConvertUStringToTDes(mData->mEmptyText, desc);
+ mData->mEmptyTextVisual->SetTextL(desc);
+ );
+ }
+
+ if( totalModelCount <= KInitialvalueZero )
+ {
+ ShowEmptyText( true );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ShowEmptyText
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::ShowEmptyText( bool aShowText )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ShowEmptyText");
+
+ // If the application has not set any empty text , then no need to do anything
+ if( mData->mEmptyText.isEmpty() )
+ {
+ if( aShowText )
+ {
+ ShowHideVisualsForEmptyText(false);
+ HandleSizeChangeOnMain();
+ }
+ else
+ {
+ ShowHideVisualsForEmptyText(true);
+ }
+ return;
+ }
+
+ if( aShowText )
+ {
+ if( !mData->mEmptyTextVisual )
+ {
+ CreateEmptyTextVisualisation();
+ }
+
+ // This function is called twice only when an empty model is set and the app sets the empty text twice .
+ ShowHideVisualsForEmptyText(false);
+ if( mData->mEmptyTextOpacity == KBackGroundOpacity && mData->mEmptyTextVisual )
+ {
+ mData->mEmptyTextVisual->SetOpacity(KHighlightOpacity);
+ mData->mEmptyTextOpacity = KHighlightOpacity;
+ }
+ HandleSizeChangeOnMain();
+
+ }
+ else
+ {
+ ShowHideVisualsForEmptyText(true);
+ if( mData->mEmptyTextVisual && mData->mEmptyTextOpacity == 1 )
+ {
+ mData->mEmptyTextVisual->SetOpacity(KBackGroundOpacity);
+ mData->mEmptyTextOpacity = KBackGroundOpacity;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// HandleSizeChangeOnMain()
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::HandleSizeChangeOnMain()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::HandleSizeChangeOnMain");
+
+ IMulModelAccessor* model = ((MulCoverFlowControl*)&control())->ModelAccessor();
+ CAlfLayout* main = (CAlfLayout*)findVisual( KMainLayoutIndex );
+ TSize topLayoutSize = main->Size().Target().AsSize(); ;
+
+ if( !model )
+ {
+ if (topLayoutSize != TSize(0,0))
+ {
+ SetDefaultSize(topLayoutSize);
+ }
+ else
+ {
+ SetDefaultSize( control().DisplayArea().Size() );
+ }
+
+ }
+ else
+ {
+ SetDefaultSize(topLayoutSize);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// IsEmptyText
+// ---------------------------------------------------------------------------
+//
+bool MulBaseElement::IsEmptyText()
+ {
+ return !(mData->mEmptyText.isEmpty());
+ }
+// ---------------------------------------------------------------------------
+// ShowHideVisualsForEmptyText
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::ShowHideVisualsForEmptyText( bool aShow )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ShowHideVisualsForEmptyText");
+
+ if( !aShow )
+ {
+ SetTextVisualOpacity( KBackGroundOpacity );
+ SetCounterTextOpacity( KBackGroundOpacity);
+ }
+ else
+ {
+ if(mData->mTextVisible)
+ {
+ SetTextVisualOpacity( KHighlightOpacity );
+ }
+ // if ui on off template is enabled then reset the counter
+ // opacity depending on the current ui on/off value
+ if( Template2D()->IsUiOnOffFlagEnabled() )
+ {
+ ResetUiOnOff();
+ }
+ else
+ {
+ SetCounterTextOpacity( KHighlightOpacity);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CreateEmptyTextVisualisation
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::CreateEmptyTextVisualisation()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateEmptyTextVisualisation");
+
+ if( !mData->mEmptyTextVisual )
+ {
+ THROW_IF_LEAVES
+ (
+ CAlfLayout* main = static_cast<CAlfLayout*>(findVisual( KMainLayoutIndex ));
+ mData->mEmptyTextVisual = CAlfTextVisual::AddNewL(control(),main);
+
+ TBuf<KTempBufferSize> desc;
+
+ MulModelUtility::ConvertUStringToTDes(mData->mEmptyText, desc);
+ mData->mEmptyTextVisual->SetTextL(desc);
+ mData->mEmptyTextVisual->SetTagL(KEmptyText);
+ mData->mEmptyTextVisual->SetWrapping(CAlfTextVisual::ELineWrapBreak);
+
+ TInt fontId =control().Env().TextStyleManager()
+ .CreatePlatformTextStyleL(EAknLogicalFontSecondaryFont,-1);
+ // check if user has set any different color for text.
+ if (mData->mTextColor.mIsColorSet)
+ {
+ // apply the color set by the application
+ mData->mEmptyTextVisual->SetColor(mData->mTextColor.mColor);
+ }
+ else
+ {
+ // apply the default color
+ mData->mEmptyTextVisual->SetColor(KRgbWhite);
+ }
+
+ mData->mEmptyTextVisual->SetLineSpacing(KTextRowsz);
+ mData->mEmptyTextVisual->SetTextStyle(fontId);
+ mData->mEmptyTextVisual->SetFlag(EAlfVisualFlagIgnorePointer);
+ );
+
+ }
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// DisplayIndicatorIcon
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::DisplayIndicatorIcon(const MulVisualItem & aVisualItem, int aIndex)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::DisplayIndicatorIcon");
+ CAlfDeckLayout& layout = static_cast<CAlfDeckLayout&>(mData->mIconFlowLayout->Visual(aIndex));
+ CAlfImageVisual* visual =static_cast<CAlfImageVisual*>(layout.FindTag(KCoverflowIndicator));
+ IMulVariantType* varData = aVisualItem.Attribute(mulvisualitem::KMulIndicator2);
+
+ if(varData)
+ {
+ if(!visual)
+ {
+ visual = CreateIndicatorIconVisual(layout);
+ }
+ ((MulCoverFlowControl*)&control())->DoSetImage(varData,visual);
+ visual->ClearFlag(EAlfVisualFlagIgnorePointer);
+ }
+
+ else if(visual)
+ {
+ CAlfTextureManager& textureMgr = control().Env().TextureManager();
+ TAlfImage image = TAlfImage(textureMgr.BlankTexture());
+ visual->SetImage(image);
+ visual->SetFlag(EAlfVisualFlagIgnorePointer);
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// CreateIndicatorIconVisual
+// ---------------------------------------------------------------------------
+//
+CAlfImageVisual* MulBaseElement::CreateIndicatorIconVisual(CAlfDeckLayout& aLayout)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateIndicatorIconVisual");
+ CAlfImageVisual* indicatorVisual = CAlfImageVisual::AddNewL(control(), &aLayout);
+ indicatorVisual->SetTagL(KCoverflowIndicator);
+ SetIndicatorDimensions(*indicatorVisual);
+ indicatorVisual->SetScaleMode(CAlfImageVisual::EScaleNormal);
+
+ return indicatorVisual;
+ }
+
+// ---------------------------------------------------------------------------
+// SetIndicatorDimensions
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetIndicatorDimensions(CAlfImageVisual& aIndicatorVisual)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetIndicatorDimensions");
+ TMulCoverFlowItem indicatorDimensions = Template2D()->IndicatorDimension();
+ aIndicatorVisual.SetPos(TAlfRealPoint(indicatorDimensions.posx,indicatorDimensions.posy));
+ aIndicatorVisual.SetSize(TAlfRealSize(indicatorDimensions.width ,indicatorDimensions.height));
+ }
+
+// ---------------------------------------------------------------------------
+// StoreVisualDimensions
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::StoreVisualDimensions( TMulCoverFlowItem aHighlightItemDimensions, TMulCoverFlowItem aNonHighlightItemDimensions,int aVisibleIconCount )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::StoreVisualDimensions");
+ mData->mHighlightItemStruct = aHighlightItemDimensions;
+ mData->mItemStruct = aNonHighlightItemDimensions;
+ mData->mVisibleCount = aVisibleIconCount;
+ ((MulCoverFlowControl*)&control())->StoreVisibleItemCount(mData->mVisibleCount);
+ if (mData->mVisibleCount > 1)
+ {
+ mData->mChangeSize = true;
+ }
+ else
+ {
+ mData->mChangeSize = false;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// StoreTextVisibility
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::StoreTextVisibility( bool aIsTextVisible )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::StoreTextVisibility");
+ mData->mTextVisible = aIsTextVisible;
+ }
+
+
+// ---------------------------------------------------------------------------
+// IsTextVisibile
+// ---------------------------------------------------------------------------
+//
+bool MulBaseElement::IsTextVisibile( )const
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::IsTextVisible");
+ return mData->mTextVisible ;
+ }
+
+
+// ---------------------------------------------------------------------------
+// OrientationChange
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::OrientationChange()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::OrientationChange");
+
+ mData->mVerticalFlow->SetOpacity(0);
+ if (mData->mDummyVisual)
+ {
+ // deleting since the textextents being zero.
+ mData->mDummyVisual->RemoveAndDestroyAllD();
+ mData->mDummyVisual = NULL;
+ }
+
+ // update the attribute of visuals
+ Template2D()->CreateVisualisation(((MulCoverFlowControl*)&control())->IsLandscape(),true);
+
+ CalculatePadding();
+ CreateAndInitializeVisuals(true);
+
+ // Redraw the visuals after orientation changes
+ int totalModelCount = ((MulCoverFlowControl*)&control())->TotalModelCount();
+ if( totalModelCount == 0 )
+ {
+ CAlfLayout* main = (CAlfLayout*)findVisual( KMainLayoutIndex );
+ SetDefaultSize(main->Size().ValueNow().AsSize());
+ }
+ ArrangeItems();
+ SetNewCounterPosition(Template2D()->CounterDimensions(),true);
+ UpdateRotation();
+ mData->mVerticalFlow->SetOpacity(1);
+ }
+
+
+//------------------Counter and Text related----------------------------------
+
+// ---------------------------------------------------------------------------
+// CreateCounterVisual
+// ---------------------------------------------------------------------------
+//
+CAlfTextVisual& MulBaseElement::CounterVisual()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CounterVisual");
+ __MUL_ASSERT( mData->mVerticalFlow != 0,KNullPointer);
+
+ mData->mCounterVisual = &CreateTextVisual(KCoverflowCounter,*mData->mVerticalFlow);
+ mData->mCounterVisual->SetAlign(EAlfAlignHCenter,EAlfAlignVCenter);
+ return *mData->mCounterVisual;
+ }
+
+// ---------------------------------------------------------------------------
+// CreateVisual
+// ---------------------------------------------------------------------------
+//
+CAlfTextVisual& MulBaseElement::CreateTextVisual(const TDesC8& aName,
+ CAlfLayout& aLayout)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateTextVisual");
+
+ CAlfTextVisual* textVisual =static_cast<CAlfTextVisual*>(aLayout.FindTag(aName));
+
+ if(textVisual == NULL)
+ {
+ THROW_IF_LEAVES
+ (
+ textVisual = CAlfTextVisual::AddNewL( (CAlfControl &)control(),&aLayout);
+ textVisual->SetTagL(aName);
+ );
+ textVisual->SetFlag(EAlfVisualFlagIgnorePointer);
+ textVisual->SetFlag(EAlfVisualFlagClipping);
+ }
+ return *textVisual;
+ }
+
+
+// ---------------------------------------------------------------------------
+// UpdateTextAndCounter
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::UpdateTextAndCounter(int animationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::UpdateTextAndCounter");
+
+ UpdateTextValue(animationTime);
+
+ //After highlight is changed then the counter text should be updated
+ SetCounterText();
+ }
+
+// ---------------------------------------------------------------------------
+// SetCounterTextOpacity
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetCounterTextOpacity( int aOpacity)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetCounterTextOpacity");
+ if(mData->mCounterVisual)
+ {
+ mData->mCounterVisual->SetOpacity( aOpacity );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// ResetUiOnOff
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::ResetUiOnOff(int aTransitionTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ResetUiOnOff");
+
+ int totalModelCount = ((MulCoverFlowControl*)&control())->TotalModelCount();
+ if(mData->mCounterVisual && Template2D() && Template2D()->IsUiOnOffFlagEnabled() && totalModelCount>0 )
+ {
+ int opacity = mData->mUiOn? KHighlightOpacity: KBackGroundOpacity;
+ mData->mCounterVisual->SetOpacity( TAlfTimedValue(opacity,aTransitionTime) );
+ // Every time In template4 Ui on off mode toggles we should set the enable holding flag
+ // to gesture helper to recieve the hold events.
+ ((MulCoverFlowControl*)&control())->SetHoldingEnabled();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// UIOnOffMode
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::UIOnOffMode(bool aUiOn, int aTransitionTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::UIOnOffMode");
+
+ mData->mUiOn = aUiOn;
+ ResetUiOnOff( aTransitionTime );
+ }
+
+// ---------------------------------------------------------------------------
+// IsUiOnMode
+// ---------------------------------------------------------------------------
+//
+bool MulBaseElement::IsUiOnMode()
+ {
+ return mData->mUiOn;
+ }
+
+
+// ---------------------------------------------------------------------------
+// SetTextVisualOpacity
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetTextVisualOpacity( int aOpacity , int aTransitionTime )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetTextVisualOpacity");
+ if(mData->mTextLayout)
+ {
+ mData->mTextLayout->SetOpacity(TAlfTimedValue (aOpacity,aTransitionTime));
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// UpdateTextValue
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::UpdateTextValue(int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::UpdateTextValue");
+ if( !mData->mTextVisible )
+ {
+ return;
+ }
+
+ IMulModelAccessor* modelAccessor = ((MulCoverFlowControl*)&control())->ModelAccessor();
+ int highlightindex = static_cast<MulCoverFlowControl*>(&control())->HighlightIndex();
+
+ if(highlightindex>=0 )
+ {
+ //set text to title
+ try
+ {
+ const MulVisualItem& item = modelAccessor->Item(highlightindex);
+ IMulVariantType* varData = item.Attribute(mulvisualitem::KMulTitle);
+ MUL_LOG_INFO("MUL::UpdateTextValue::UpdateTiltle");
+ SetTextToVisual( mulvisualitem::KMulTitle, varData );
+
+ // SetVirtualSize if required.
+ SetVirtualViewPortSize(mulvisualitem::KMulTitle);
+ }
+ catch(...)
+ {
+ IMulVariantType* varData = NULL;
+ SetTextToVisual( mulvisualitem::KMulTitle, varData );
+ }
+
+ //set text to detail
+ try
+ {
+ const MulVisualItem& item = modelAccessor->Item(highlightindex);
+ IMulVariantType* varData = item.Attribute(mulvisualitem::KMulDetail);
+ MUL_LOG_INFO("MUL::UpdateTextValue::UpdateDetail");
+ SetTextToVisual( mulvisualitem::KMulDetail, varData );
+
+ // SetVirtualSize if required.
+ SetVirtualViewPortSize(mulvisualitem::KMulDetail);
+ }
+ catch(...)
+ {
+ IMulVariantType* varData = NULL;
+ SetTextToVisual( mulvisualitem::KMulDetail,varData );
+ }
+
+ // Cancel if any command is in process before start marquee.
+ CancelAllCommands();
+
+ // Before orientaion change stop marquee on the text
+ if(!((static_cast<MulCoverFlowControl&>(control())).IsFastScrollMode()))
+ {
+ control().Env().Send(
+ TAlfCustomEventCommand(ECustomEventMarqueeStart,
+ &control()), KMarqueeTime1000 + aAnimationTime);
+
+ }
+ }
+ }
+// ---------------------------------------------------------------------------
+// SetTextToVisual
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetTextToVisual( mulvisualitem::TVisualAttribute aName,IMulVariantType* aText )
+ {
+ MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::SetTextToVisual");
+
+ if(mData->mTextLayout)
+ {
+ CAlfTextVisual* textVisual =
+ static_cast<CAlfTextVisual*> (mData->mTextLayout->FindTag( IdToTag(aName) ));
+
+ if(textVisual)
+ {
+ if ( aText )
+ {
+ // set text to visual
+ THROW_IF_LEAVES
+ (
+ MUL_LOG_INFO("MUL::SetTextToVisual::Set New Data");
+ textVisual->SetTextL(aText->DesC());
+ textVisual->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+ );
+ // A workaround till the text visual starts giving the correct text extents value.
+ if(!mData->mDummyVisual)
+ {
+ mData->mDummyVisual = CAlfTextVisual::AddNewL(control(), NULL);
+ mData->mDummyVisual->SetWrapping(CAlfTextVisual::ELineWrapManual);
+ mData->mDummyVisual->SetOpacity(0);
+ mData->mDummyVisual->SetFlags(EAlfVisualFlagIgnorePointer);
+ }
+
+ // Setting the style same as our text visual.
+ mData->mDummyVisual->SetTextStyle(textVisual->TextStyle());
+ mData->mDummyVisual->SetTextL(aText->DesC()); // Setting the text
+
+ if(aName == mulvisualitem::KMulDetail)
+ {
+ mData->mDetailExt = mData->mDummyVisual->TextExtents();
+ }
+ else
+ {
+ mData->mTitleExt = mData->mDummyVisual->TextExtents();
+ }
+ }
+ else
+ {
+ // reset to null value .
+ THROW_IF_LEAVES
+ (
+ textVisual->SetTextL(_L(""));
+ );
+ }
+ }
+ else
+ {
+ mData->mTextLayout->SetOpacity(TAlfTimedValue(KBackGroundOpacity,0));
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetVirtualViewPortSize()
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetVirtualViewPortSize(mulvisualitem::TVisualAttribute aName)
+ {
+ MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::SetVirtualViewPortSize");
+ CAlfViewportLayout* viewportLayout = NULL ;
+ CAlfTextVisual* text = NULL ;
+ TSize textExtent ;
+ TSize parentSize;
+ if (aName == mulvisualitem::KMulDetail)
+ {
+ viewportLayout = static_cast<CAlfViewportLayout*>(
+ mData->mTextLayout->FindTag(KDetailViewPortLayout));
+ if(!viewportLayout)
+ {
+ return; // return if no viewport
+ }
+ textExtent = mData->mDetailExt;
+ parentSize = Template2D()->DetailWindowSize();
+
+ }
+ else
+ {
+ viewportLayout = static_cast<CAlfViewportLayout*>(
+ mData->mTextLayout->FindTag(KTitleViewPortLayout));
+ if(!viewportLayout)
+ {
+ return; // return if no viewport
+ }
+ textExtent = mData->mTitleExt;
+ parentSize = Template2D()->TitleWindowSize();
+
+ }
+ text = static_cast<CAlfTextVisual*>(
+ viewportLayout->FindTag( IdToTag(aName) ));
+ if(!text)
+ {
+ return; // if text visual is not found we will not set viewportsize.
+ }
+
+ viewportLayout->SetViewportPos((TAlfRealPoint(0, 0)), 0);
+ viewportLayout->SetVirtualSize(
+ (TAlfRealPoint(parentSize.iWidth, parentSize.iHeight)),0);
+
+ //Tollerance is 15 pixel, it might happen that
+ // the text is big but while wrapping it not filling the whole
+ // width of the layout because the remaining space is less to
+ // accomodate a character.
+ // As for QFN_PRIMARY the max character width is 15 pixel
+ // so I am keeping tollerance as 15
+ // @TODO: Insted of hard coding to 15 pixel use max charecter
+ // width for QFN_PRIMARY.
+ if ((parentSize.iWidth - textExtent.iWidth) > 15)
+ {
+ text->SetAlign(EAlfAlignHCenter, EAlfAlignVCenter);
+ }
+ else
+ {
+ text->SetAlign(EAlfAlignHLocale,EAlfAlignVCenter);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// StartMarquee()
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::StartMarquee(mulvisualitem::TVisualAttribute aName)
+ {
+ MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::StartMarquee");
+ // start marquee.
+ int widthOffScreen = 0;
+ CAlfViewportLayout* viewportLayout = NULL ;
+ CAlfTextVisual* text = NULL ;
+ TSize textExtent ;
+ TSize parentSize;
+ int maxCharWidth ;
+ if (aName == mulvisualitem::KMulDetail)
+ {
+ viewportLayout =static_cast<CAlfViewportLayout*>(
+ mData->mTextLayout->FindTag(KDetailViewPortLayout));
+ if(!viewportLayout)
+ {
+ return;// return if no viewport
+ }
+ textExtent = mData->mDetailExt;
+ parentSize = Template2D()->DetailWindowSize();
+ maxCharWidth = Template2D()->DetailMaxCharWidth();
+ }
+ else
+ {
+ viewportLayout = static_cast<CAlfViewportLayout*>(
+ mData->mTextLayout->FindTag(KTitleViewPortLayout));
+ if(!viewportLayout)
+ {
+ return;// return if no viewport
+ }
+ textExtent = mData->mTitleExt;
+ parentSize = Template2D()->TitleWindowSize();
+ maxCharWidth = Template2D()->TitleMaxCharWidth();
+ }
+ text = static_cast<CAlfTextVisual*>(
+ viewportLayout->FindTag( IdToTag(aName) ));
+ if(!text)
+ {
+ return; // if no text.
+ }
+
+ text->SetWrapping(CAlfTextVisual::ELineWrapManual);
+
+ widthOffScreen= textExtent.iWidth - parentSize.iWidth;
+ int nDbMaxChars = (widthOffScreen/(2*maxCharWidth)) + 1;
+
+ // Schedule a update event, when the visual has finished marquee text scrolling.
+ if (aName == mulvisualitem::KMulDetail)
+ {
+ if (nDbMaxChars > 0 )
+ {
+ viewportLayout->SetVirtualSize(
+ (TAlfRealPoint(textExtent.iWidth, parentSize.iHeight)),0);
+ // to avoid negative time value
+ mData->mMarqueeAnimTime = (nDbMaxChars*KMarqueeTime1000);
+ viewportLayout->SetViewportPos((TAlfRealPoint(widthOffScreen , 0)),
+ nDbMaxChars * KMarqueeTime1000);
+ // delay after completion of the marquee for titlte.
+ mData->mMarqueeAnimTime += KMarqueeTime1000;
+ control().Env().Send(
+ TAlfCustomEventCommand(ECustomEventMarqueeFinished,
+ static_cast<CAlfControl*>(&(control()))),
+ mData->mMarqueeAnimTime);
+ }
+ }
+ else
+ {
+ // reset the marquee animation time
+ mData->mMarqueeAnimTime = 0;
+ if(nDbMaxChars > 0)
+ {
+ viewportLayout->SetVirtualSize(
+ (TAlfRealPoint(textExtent.iWidth, parentSize.iHeight)),0);
+
+ // to avoid negative time value
+ mData->mMarqueeAnimTime = (nDbMaxChars*KMarqueeTime1000);
+ viewportLayout->SetViewportPos((TAlfRealPoint(widthOffScreen , 0)),
+ nDbMaxChars * KMarqueeTime1000);
+ // delay after completion of the marquee for titlte.
+ mData->mMarqueeAnimTime += KMarqueeTime1000;
+ control().Env().Send(
+ TAlfCustomEventCommand(ECustomEventTitleMarqueeFinished,
+ static_cast<CAlfControl*>(&(control()))),
+ mData->mMarqueeAnimTime );
+ // delay before start the marquee for detail.
+ mData->mMarqueeAnimTime += KMarqueeTime1000;
+ }
+ control().Env().Send(
+ TAlfCustomEventCommand(ECustomEventDetailMarqueeStart,
+ (&(control()))), mData->mMarqueeAnimTime );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// StopMarquee()
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::StopMarquee(mulvisualitem::TVisualAttribute aName)
+ {
+ MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::StopMarquee");
+ CAlfViewportLayout* viewPortLayout = NULL;
+ CAlfTextVisual* text = NULL;
+ TSize parentSize;
+ if (aName == mulvisualitem::KMulDetail)
+ {
+ viewPortLayout =
+ static_cast<CAlfViewportLayout*>(mData->mTextLayout->FindTag(KDetailViewPortLayout));
+ parentSize = Template2D()->DetailWindowSize();
+ }
+ else
+ {
+ viewPortLayout =
+ static_cast<CAlfViewportLayout*>(mData->mTextLayout->FindTag(KTitleViewPortLayout));
+ parentSize = Template2D()->TitleWindowSize();
+ }
+ if(!viewPortLayout)
+ {
+ return;
+ }
+ text = static_cast<CAlfTextVisual*>(viewPortLayout->FindTag( IdToTag(aName) ));
+ if(!text)
+ {
+ return;
+ }
+ const TDesC textDesc = text->Text();
+ if(!textDesc.Length())
+ {
+ return;
+ }
+
+ viewPortLayout->SetViewportPos((TAlfRealPoint(0, 0)), 0);
+ viewPortLayout->SetVirtualSize((TAlfRealPoint(parentSize.iWidth, parentSize.iHeight)),0);
+ text->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+
+ }
+
+// ---------------------------------------------------------------------------
+// CancelAllCommands
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::CancelAllCommands( )
+ {
+ MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::CancelAllCommands");
+ CAlfWidgetControl * cntrl = &control();
+ control().Env().CancelCustomCommands( cntrl, ECustomEventMarqueeFinished);
+ control().Env().CancelCustomCommands( cntrl, ECustomEventMarqueeStart);
+ control().Env().CancelCustomCommands( cntrl, ECustomEventTitleMarqueeFinished);
+ control().Env().CancelCustomCommands( cntrl, ECustomEventDetailMarqueeStart);
+ }
+
+// ---------------------------------------------------------------------------
+// SetCounterText
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetCounterText( int /*aTransitionTime*/ )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetCounterText");
+
+ if( mData->mCounterVisual )
+ {
+ SetNewCounterPosition(Template2D()->CounterDimensions());
+ int totalModelCount = ((MulCoverFlowControl*)&control())->TotalModelCount();
+ int currHighlightIndex = ((MulCoverFlowControl*)&control())->HighlightIndex();
+
+ // this code will work for model count upto 99999.
+ // done for performance improvement , no need to calculate
+ // no of digits in highlight index and total model count.
+ auto_ptr<HBufC> countbuffer(HBufC::NewL (12));
+
+ //settin value for counter text visual
+ /// @bug critical:avanhata:7/7/2008 in arabic/hebrew the text should flow
+ /// from right to left (totalCount / highlight) => the string format needs
+ /// to come from a resource file, and use stringloader (and arabic indic number
+ /// conversion if stringloader does not do it automatically)
+ countbuffer->Des().AppendNum(currHighlightIndex+1);
+ countbuffer->Des().Append(KSlash);
+ countbuffer->Des().AppendNum(totalModelCount);
+
+ mData->mCounterVisual->SetTextL(*countbuffer);
+ }
+ }
+
+//--------------------------------------------------------------------------
+// SetNewCounterPosition
+//--------------------------------------------------------------------------
+//
+void MulBaseElement::SetNewCounterPosition( const TMulCoverFlowItem& aCounterLctDimension, bool aOrientationChanged)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetNewCounterPosition");
+ MulCoverFlowControl* coverflowControl = ((MulCoverFlowControl*)&control());
+ int totalModelCount = coverflowControl->TotalModelCount();
+ int currHighlightIndex = coverflowControl->HighlightIndex();
+ bool isLandScape = static_cast<MulCoverFlowControl&>(control()).IsLandscape();
+
+ if( totalModelCount > 0 && currHighlightIndex >= 0 )
+ {
+ int numOfDigits = NumberOfDigits(totalModelCount);
+ numOfDigits += NumberOfDigits(currHighlightIndex);
+
+ if( mData->mNumOfDigitsInCounter!= numOfDigits || aOrientationChanged )
+ {
+ mData->mNumOfDigitsInCounter = numOfDigits;
+ int maxCharWidth = coverflowControl->Template2D()->CounterMaxCharWidth();
+ int numOfPixels = numOfDigits*maxCharWidth + 20; // 10 is the tolerance.
+
+ int rightPosx =0;
+ int leftPosx = 0;
+ // if mirroring is enabled(ie for RTL Language)
+ if (mData->mIsMirrored)
+ {
+
+ CAlfLayout* main = (CAlfLayout*)findVisual( KMainLayoutIndex );
+ TSize topLayoutSize = main->Size().Target().AsSize();
+ if(!isLandScape)
+ {
+ rightPosx = topLayoutSize.iWidth - aCounterLctDimension.posx ;
+ leftPosx = rightPosx - numOfPixels;
+ }
+ else
+ {
+ leftPosx = topLayoutSize.iWidth - aCounterLctDimension.posx ;
+ }
+ }
+ else
+ {
+ if(!isLandScape)
+ {
+ rightPosx = aCounterLctDimension.posx + aCounterLctDimension.width;
+ leftPosx = rightPosx - numOfPixels;
+ }
+ else
+ leftPosx = aCounterLctDimension.posx;
+ }
+ mData->mCounterVisual->SetPos(TAlfRealPoint(leftPosx,aCounterLctDimension.posy));
+ mData->mCounterVisual->SetSize(TAlfRealPoint(numOfPixels ,aCounterLctDimension.height));
+ }
+ }
+ }
+// ---------------------------------------------------------------------------
+// NumberOfDigits
+// ---------------------------------------------------------------------------
+//
+int MulBaseElement::NumberOfDigits(int aNumber)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::NumberOfDigits");
+ int num_digits = 0;
+ int number = aNumber;
+ do
+ {
+ num_digits++;
+ number/=10;
+ }
+ while ( number > 0 );
+
+ return num_digits;
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyScaleMode
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::ApplyScaleMode( CAlfImageVisual& aImageVisual)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ApplyScaleMode");
+ CAlfImageVisual::TScaleMode scaleMode;
+
+ if (mData->mFitMode)
+ {
+ if(aImageVisual.Image().HasTexture())
+ {
+ CAlfTexture* texture = const_cast<CAlfTexture*>(&aImageVisual.Image().Texture());
+ TInt imageWidth = texture->Size().iWidth;
+ TInt imageHeight = texture->Size().iHeight;
+ // when animation is not complete sizes will not be correct.
+ // so sizes are taken from template
+ if(imageWidth == 0 || imageHeight == 0)
+ {
+ scaleMode = CAlfImageVisual::EScaleFitInside;
+ }
+ else if( imageWidth <= mData->mHighlightItemStruct.width &&
+ imageHeight <= mData->mHighlightItemStruct.height )
+ {
+ scaleMode = CAlfImageVisual::EScaleNormal;
+ }
+ else
+ {
+ scaleMode = CAlfImageVisual::EScaleFitInside;
+ }
+ }
+ else
+ {
+ scaleMode = CAlfImageVisual::EScaleFitInside;
+ }
+ }
+ else
+ {
+ // Apply default scale mode
+ scaleMode = CAlfImageVisual::EScaleFitInside;
+ }
+
+ if (aImageVisual.ScaleMode() != scaleMode)
+ {
+ aImageVisual.SetScaleMode( scaleMode );
+ }
+ ApplyBrushOnIcon( aImageVisual );
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyBrushOnIcon
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::ApplyBrushOnIcon( CAlfImageVisual& aImageVisual )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ApplyBrushOnIcon");
+ if( mData->mIconBgColor.mIsColorSet )
+ {
+ aImageVisual.EnableBrushesL(ETrue);
+ CAlfBrushArray* brushArray = aImageVisual.Brushes();
+ if( (brushArray->Count()==0))
+ {
+ CAlfGradientBrush* brush = CAlfGradientBrush::NewL(aImageVisual.Env());
+ brush->SetColor( mData->mIconBgColor.mColor );
+ aImageVisual.Brushes()->AppendL( brush, EAlfHasOwnership );
+ }
+ else
+ {
+ CAlfGradientBrush* brush = static_cast<CAlfGradientBrush*>(&brushArray->At(0));
+ if ( brush->Color(0) != mData->mIconBgColor.mColor )
+ {
+ brush->SetColor( mData->mIconBgColor.mColor );
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveBrushOnIcon
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::RemoveBrushOnIcon( CAlfImageVisual& aImageVisual )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::RemoveBrushOnIcon");
+ CAlfBrushArray* brushArray = aImageVisual.Brushes();
+ if(brushArray && (brushArray->Count()!=0))
+ {
+ brushArray->Remove(0);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Template2D
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowTemplate* MulBaseElement::Template2D()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::Template2D");
+ return ((MulCoverFlowControl*)&control())->Template2D();
+ }
+
+// ---------------------------------------------------------------------------
+// SetScrollAnimationTime
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetScrollAnimationTime( int aScrollAnimationTime )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetScrollAnimationTime");
+ mData->mScrollAnimationTime = aScrollAnimationTime;
+ }
+
+// ---------------------------------------------------------------------------
+// ArrangeItems
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::ArrangeItems()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ArrangeItems");
+
+ control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushOnlyForced);
+
+ int totalVisual = 2*mData->mVisibleCount + 1;
+ int highlightIndex = mData->mVisibleCount;
+ CAlfImageVisual* imageVisual = NULL;
+
+
+ int posX = mData->mHighlightItemStruct.posx - mData->mVisibleCount*(mData->mItemStruct.width + mData->mPadding);
+
+ TAlfRealPoint highlightItemSize(mData->mHighlightItemStruct.width, mData->mHighlightItemStruct.height);
+ TAlfRealPoint nonHighlightItemSize(mData->mItemStruct.width, mData->mItemStruct.height);
+
+ for (int i=0; i < totalVisual ; i++)
+ {
+ CAlfVisual& deckLayout = mData->mIconFlowLayout->Visual(i);
+ imageVisual = (CAlfImageVisual*)deckLayout.FindTag(KCoverflowIcon);
+
+ if (i != highlightIndex)
+ {
+ deckLayout.SetPos( TAlfRealPoint(posX,mData->mItemStruct.posy));
+ deckLayout.SetSize(nonHighlightItemSize);
+ imageVisual->SetSize(nonHighlightItemSize);
+ posX = posX + mData->mItemStruct.width + mData->mPadding;
+ }
+ else
+ {
+ deckLayout.SetPos( TAlfRealPoint(mData->mHighlightItemStruct.posx,mData->mHighlightItemStruct.posy));
+ deckLayout.SetSize(highlightItemSize);
+ imageVisual->SetSize(highlightItemSize);
+ posX = posX + mData->mHighlightItemStruct.width + mData->mPadding;
+ }
+ if (mData->mFitMode)
+ {
+ ApplyScaleMode(*imageVisual);
+ }
+ CAlfImageVisual* indicatorVisual =static_cast<CAlfImageVisual*>(deckLayout.FindTag(KCoverflowIndicator));
+ if (indicatorVisual)
+ {
+ SetIndicatorDimensions(*indicatorVisual);
+ }
+
+ }
+
+ control().Env().BatchBufferHandler().FlushBatchBuffer();
+ control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushDeferred);
+
+ }
+
+// ---------------------------------------------------------------------------
+// SetScrollDir
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetScrollDir( TItemScroll aScrollDir )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetScrollDir");
+ mData->mScrollDir = aScrollDir;
+ }
+
+// ---------------------------------------------------------------------------
+// SetScrollDir
+// ---------------------------------------------------------------------------
+//
+TItemScroll MulBaseElement::ScrollDir()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ScrollDir");
+ return mData->mScrollDir;
+ }
+
+// ---------------------------------------------------------------------------
+// CalculatePadding
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::CalculatePadding()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CalculatePadding");
+
+ // The vector has already been created when the template was set.
+ if( mData->mVisibleCount == 1)
+ {
+ if( mData->mHighlightItemStruct.posx > KInitialvalueZero )
+ {
+ mData->mPadding = mData->mHighlightItemStruct.posx;
+ }
+ else
+ {
+ // full screen template ..photos
+ // padding between the highlight and non highlight item is considered to be 2 pixel for
+ // full screen template as only one visual is visible.
+ mData->mPadding = 2;
+ }
+ }
+ else
+ {
+ int startx = mData->mHighlightItemStruct.posx+ mData->mHighlightItemStruct.width;
+ mData->mPadding = mData->mItemStruct.posx - startx;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// GetIconSize
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::GetIconSize( mulwidget::TLogicalTemplate aTemplateId,
+ mulvisualitem::TVisualAttribute aAttribute, int& aHeight, int& aWidth)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::GetIconSize");
+
+ bool isLandscape = ((MulCoverFlowControl*)&control())->IsLandscape();
+ switch(aTemplateId)
+ {
+ case mulwidget::KTemplate1:
+ {
+ MulCoverFlowTemplate1::GetIconSize(aAttribute,isLandscape,aHeight,aWidth);
+ }
+ break;
+ case mulwidget::KTemplate4:
+ {
+ MulCoverFlowTemplate4::GetIconSize(aAttribute,isLandscape,aHeight,aWidth);
+ }
+ break;
+ default:
+ {
+ // Invalid template id
+ // raise exception
+ __MUL_ASSERT(false,KInvalidTemplate);
+ }
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// ShowWidget
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::ShowWidget( bool aShow, int aTransitionTime )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ShowWidget");
+ float opacity ;
+ CAlfLayout* main = (CAlfLayout*) findVisual( KMainLayoutIndex );
+
+ if( aShow )
+ {
+ opacity = KHighlightOpacity;
+ }
+ else
+ {
+ opacity = KBackGroundOpacity;
+ }
+ main->SetOpacity(TAlfTimedValue(opacity,aTransitionTime));
+ }
+
+// ---------------------------------------------------------------------------
+// makeInterface
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulBaseElement::makeInterface( const IfId& aType )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::makeInterface");
+ UString param(aType.mImplementationId);
+
+ if(param == MulBaseElement::Type().mImplementationId )
+ {
+ return static_cast<IAlfElement*>(this);
+ }
+ else if(param == IAlfWidgetEventHandler::type().mImplementationId )
+ {
+ return static_cast<IAlfWidgetEventHandler*>(this);
+ }
+ else
+ {
+ return AlfElement::makeInterface(aType);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// setEventHandlerData
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::setEventHandlerData( const AlfWidgetEventHandlerInitData& /*aData*/ )
+ {
+ //No implementation required
+ }
+
+// ---------------------------------------------------------------------------
+// eventHandlerData
+// ---------------------------------------------------------------------------
+//
+AlfWidgetEventHandlerInitData* MulBaseElement::eventHandlerData()
+ {
+ return NULL;
+ }
+
+// ----------------------------------------------------------------------------
+// eventHandlerType
+// ----------------------------------------------------------------------------
+//
+ IAlfWidgetEventHandler::AlfEventHandlerType MulBaseElement::eventHandlerType()
+ {
+ return IAlfWidgetEventHandler::ELogicalEventHandler ;
+ }
+// ----------------------------------------------------------------------------
+// eventExecutionPhase
+// ----------------------------------------------------------------------------
+//
+
+IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase MulBaseElement::eventExecutionPhase()
+ {
+ return EBubblingPhaseEventHandler;
+ }
+
+//------------------------Slider related Api's -------------------------
+
+//--------------------------------------------------------------------------
+// UpdateSliderTick
+//--------------------------------------------------------------------------
+//
+void MulBaseElement::UpdateSliderTick(int aUpdateTick)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::MulBaseElement");
+ IMulSliderModel* mulSliderModel = ((MulCoverFlowControl*)&control())->GetSliderModel();
+ if( mulSliderModel && Template2D()->IsSliderVisible() )
+ {
+ // Creating a reference Visual Item
+ //@todo remove const from Data api in slider model
+ const MulVisualItem& item = mulSliderModel->Data();
+ //auto_ptr<MulVisualItem> tempItem( new (EMM) MulVisualItem());
+ MulVisualItem* tempItem = const_cast<MulVisualItem*> (&item);
+
+ tempItem->SetAttribute( mulvisualitem::KMulMaxRange, --aUpdateTick );
+ tempItem->SetAttribute (mulvisualitem::KMulMinRange, 0);
+ tempItem->SetAttribute ( mulvisualitem::KMulTick,1);
+
+ // Add the newly created visual item to the model
+ // Model takes the ownership of the visual item
+ mulSliderModel->SetData(*tempItem);
+ }
+
+ // Set the opacity to the slider widget after verifyiny all the conditions.
+ SetSliderOpacity();
+ }
+//--------------------------------------------------------------------------
+// SetSliderOpacity
+//--------------------------------------------------------------------------
+//
+void MulBaseElement::SetSliderOpacity()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetSliderOpacity");
+
+ if (mData->mSliderLayout)
+ {
+ if ( Template2D()->IsSliderVisible() )
+ {
+ if( static_cast<MulCoverFlowControl&>(control()).TotalModelCount() > 1 && mData->mSliderOpacity == KBackGroundOpacity)
+ {
+ ShowSlider(true);
+ }
+ else if((static_cast<MulCoverFlowControl&>(control()).TotalModelCount() <= 1) && mData->mSliderOpacity == KHighlightOpacity)
+ {
+ ShowSlider(false);
+ }
+ }
+ else if(mData->mSliderOpacity == KHighlightOpacity)
+ {
+ ShowSlider(false);
+ }
+ }
+ }
+
+//--------------------------------------------------------------------------
+//CreateSlider
+//--------------------------------------------------------------------------
+//
+void MulBaseElement::CreateSlider()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateSlider");
+ if ( Template2D()->IsSliderVisible() )
+ {
+ MulCoverFlowControl* coverflowControl = static_cast<MulCoverFlowControl*>(&control());
+ IAlfWidget* sliderwidget = coverflowControl->GetSliderWidget();
+ if(!sliderwidget)
+ {
+ ConstructSliderWidget();
+ }
+
+ const TMulCoverFlowItem sliderStruct = Template2D()->SliderDimension();
+ mData->mSliderLayout->SetPos(TAlfRealPoint(sliderStruct.posx,sliderStruct.posy));
+ mData->mSliderLayout->SetSize(TAlfRealPoint(sliderStruct.width,sliderStruct.height));
+ int totalModelCount = coverflowControl->TotalModelCount();
+ if( totalModelCount > 1 )
+ {
+ UpdateSliderTick(totalModelCount);
+ coverflowControl->SetSliderTickPosition();
+ ShowSlider(true);
+ }
+ else
+ {
+ ShowSlider(false);
+ }
+ mData->mSliderLayout->UpdateChildrenLayout();
+ }
+ else
+ {
+ if (!mData->mSliderLayout)
+ {
+ return;
+ }
+ ShowSlider(false);
+ }
+ }
+
+//--------------------------------------------------------------------------
+//ConstructSliderWidget
+//--------------------------------------------------------------------------
+void MulBaseElement::ConstructSliderWidget()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ConstructSliderWidget");
+ IAlfWidget* alfSliderWidget = ((MulCoverFlowControl*)&control())->CreateSliderWidget();
+ IMulSliderWidget* mulSliderWidget = static_cast<IMulSliderWidget*>(alfSliderWidget);
+ mData->mSliderLayout = const_cast<CAlfLayout*>(&mulSliderWidget->ContainerLayout());
+ mData->mVerticalFlow->Insert(mData->mSliderLayout, mData->mVerticalFlow->Count());
+ }
+
+
+//--------------------------------------------------------------------------
+//ShowSlider
+//--------------------------------------------------------------------------
+void MulBaseElement::ShowSlider(bool aFlag)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ShowSlider");
+ if(mData->mSliderLayout)
+ {
+ IAlfWidget* alfSliderWidget = ((MulCoverFlowControl*)&control())->GetSliderWidget();
+ IMulSliderWidget* mulSliderWidget = static_cast<IMulSliderWidget*>(alfSliderWidget);
+ mulSliderWidget->ShowWidget(aFlag);
+ if(aFlag)
+ {
+ mData->mSliderLayout->SetOpacity(TAlfTimedValue(KHighlightOpacity));
+ mData->mSliderOpacity = KHighlightOpacity;
+ }
+ else
+ {
+ mData->mSliderLayout->SetOpacity(TAlfTimedValue(KBackGroundOpacity));
+ mData->mSliderOpacity = KBackGroundOpacity;
+ }
+ }
+ }
+
+
+//--------------------------------------------------------------------------
+// StartBounce
+//--------------------------------------------------------------------------
+void MulBaseElement::StartBounce(int aBounceDirection)
+ {
+ int bounceDistance = (mData->mHighlightItemStruct.width/4) * aBounceDirection;
+ control().Env().Send(TAlfCustomEventCommand(ECustomEventBounceBack,&control()),KBounceTime);
+ StartDoodling(bounceDistance,KBounceTime);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CalculateDistanceChangeFactor
+// ---------------------------------------------------------------------------
+//
+int MulBaseElement::CalculateDistanceChangeFactor()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CalculateDistanceChangeFactor");
+
+ int firstVisualMidPoint = mData->mHighlightItemStruct.posx + (mData->mHighlightItemStruct.width/2);
+ int secVisualMidPoint = mData->mItemStruct.posx + (mData->mItemStruct.width/2);
+
+ return Abs(secVisualMidPoint-firstVisualMidPoint);
+ }
+
+
+// ---------------------------------------------------------------------------
+// SetBackground
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetBackground(const TRgb& aColor)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetBackground");
+
+ CAlfLayout* main = static_cast<CAlfLayout*>(findVisual( KMainLayoutIndex ));
+ CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&> (main->Visual(KMainLayoutIndex) );
+
+ CAlfVisual* oldVisual = deckLayout.FindTag(backgroundvisual);
+ if(oldVisual)
+ {
+ CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(oldVisual);
+ if(imageVisual->Image().HasTexture())
+ {
+ const CAlfTexture& textureToUnload = imageVisual->Image().Texture();
+ CAlfTextureManager& textureMgr = control().Env().TextureManager();
+ textureMgr.UnloadTexture(textureToUnload.Id());
+ }
+
+ deckLayout.Remove( oldVisual );
+ oldVisual->RemoveAndDestroyAllD();
+ }
+
+ deckLayout.EnableBrushesL( ETrue );
+ CAlfBrushArray* brushArray = deckLayout.Brushes();
+ if(brushArray)
+ {
+ if( brushArray->Count()!=0)
+ {
+ CAlfGradientBrush& brush = static_cast<CAlfGradientBrush&>(brushArray->At(0));
+ brush.SetColor( aColor );
+ }
+ else
+ {
+ THROW_IF_LEAVES
+ (
+ CAlfGradientBrush* brush = CAlfGradientBrush::NewL( control().Env() );
+ // Set the brush colour
+ brush->SetColor( aColor );
+ // Apply brush and set the opacity .
+ deckLayout.Brushes()->AppendL( brush, EAlfHasOwnership );
+ );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetBackground
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetBackground(const TAknsItemID& aIID)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetBackground");
+
+ CAlfLayout* main = static_cast<CAlfLayout*>(findVisual( KMainLayoutIndex ));
+ CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&> (main->Visual(KMainLayoutIndex) );
+
+ CAlfBrushArray* brushArray = deckLayout.Brushes();
+ if(brushArray)
+ {
+ if( brushArray->Count()!=0)
+ {
+ brushArray->Reset();
+ }
+ }
+
+ TAlfRealSize layoutSize = deckLayout.Size().ValueNow();
+ const TAlfImage image(aIID,TSize(layoutSize),EAspectRatioPreserved,NULL,-1,-1,0.f,0.f,1.f,
+ 1.f, TAlfTextureFlags(EAlfTextureFlagAutoSize | EAlfTextureFlagSkinContent),
+ KAlfAutoGeneratedTextureId,NULL);
+
+ CAlfVisual* oldVisual = deckLayout.FindTag(backgroundvisual);
+ if(oldVisual)
+ {
+ CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(oldVisual);
+ if(imageVisual->Image().HasTexture())
+ {
+ const CAlfTexture& textureToUnload = imageVisual->Image().Texture();
+ CAlfTextureManager& textureMgr = control().Env().TextureManager();
+ textureMgr.UnloadTexture(textureToUnload.Id());
+ }
+ imageVisual->SetImage(image);
+ }
+ else
+ {
+ THROW_IF_LEAVES
+ (
+ CAlfImageVisual* imagevisual(CAlfImageVisual::AddNewL((CAlfControl&)control(), &deckLayout));
+ deckLayout.MoveVisualToBack(*imagevisual);
+ imagevisual->SetImage(image);
+ imagevisual->SetFlag(EAlfVisualFlagIgnorePointer);
+ imagevisual->SetPos(TPoint(0,0));
+ imagevisual->SetSize(layoutSize);
+ imagevisual->SetOpacity( KHighlightOpacity );
+ imagevisual->SetTagL( backgroundvisual );
+ );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetItemBrush
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetItemBrush(const TRgb& aColor)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetItemBrush");
+ mData->mIconBgColor.mIsColorSet = true;
+ mData->mIconBgColor.mColor = aColor;
+
+ int itemCount = 2*mData->mVisibleCount + 1;
+
+ itemCount = itemCount > mData->mIconFlowLayout->Count() ? mData->mIconFlowLayout->Count() : itemCount;
+
+ for(int i =0 ;i<itemCount;i++)
+ {
+ CAlfVisual& visual = mData->mIconFlowLayout->Visual( i );
+ CAlfImageVisual* imageVisual = ( CAlfImageVisual* )visual.FindTag(KCoverflowIcon);
+ ApplyBrushOnIcon( *imageVisual);
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// SetTextColor
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetTextColor(TTextVisualType aVisualType, const TRgb& aColor)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetTextColor");
+
+ switch(aVisualType)
+ {
+ case ECounterVisual:
+ {
+ // save the values set by the application
+ mData->mCounterColor.mIsColorSet = true;
+ mData->mCounterColor.mColor = aColor;
+
+ // apply the property if the visuals are already created
+ if(mData->mCounterVisual)
+ {
+ mData->mCounterVisual->SetColor(aColor);
+ }
+ break;
+ }
+ case ETilteDetailTextVisual:
+ {
+ // save the values set by the application
+ mData->mTextColor.mIsColorSet = true;
+ mData->mTextColor.mColor = aColor;
+
+ // apply the property if the visuals are already created
+ CAlfTextVisual* titleTextVisual =static_cast<CAlfTextVisual*>(mData->mTextLayout->FindTag(KCoverflowTitle));
+ if(titleTextVisual)
+ {
+ titleTextVisual->SetColor(aColor);
+ }
+ CAlfViewportLayout* viewPortLayout =static_cast<CAlfViewportLayout*>(mData->mTextLayout->FindTag(KDetailViewPortLayout));
+ if(viewPortLayout)
+ {
+ CAlfTextVisual* detailTextVisual =static_cast<CAlfTextVisual*>(viewPortLayout->FindTag(KCoverflowDetail));
+ if(detailTextVisual)
+ {
+ detailTextVisual->SetColor(aColor);
+ }
+ }
+ // Apply the same color for empty text also
+ if(mData->mEmptyTextVisual)
+ {
+ mData->mEmptyTextVisual->SetColor(aColor);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TextColor
+// ---------------------------------------------------------------------------
+//
+TMulVisualColorProperty MulBaseElement::TextColor(TTextVisualType aVisualType)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::TextColor");
+ TMulVisualColorProperty colorProperty;
+
+ switch(aVisualType)
+ {
+ case ECounterVisual:
+ {
+ colorProperty = mData->mCounterColor;
+ break;
+ }
+ case ETilteDetailTextVisual:
+ {
+ colorProperty = mData->mTextColor;
+ break;
+ }
+ default:
+ break;
+ }
+ return colorProperty;
+ }
+
+// ---------------------------------------------------------------------------
+// FlowLayout
+// ---------------------------------------------------------------------------
+//
+CAlfLayout& MulBaseElement::FlowLayout( int aLayoutIndex )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::FlowLayout");
+
+ return static_cast<CAlfLayout&>(mData->mVerticalFlow->Visual( aLayoutIndex ));
+ }
+
+// ---------------------------------------------------------------------------
+// SetFitMode
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::SetFitMode(bool aFlag)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetFitMode");
+ mData->mFitMode = aFlag;
+ }
+
+// ----------------------------------------------------------------------------
+// CreateAndInitializeVisuals
+// ----------------------------------------------------------------------------
+//
+void MulBaseElement::CreateAndInitializeVisuals(bool aIsOrientationChange)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateAndInitializeVisuals");
+ CreateVisuals();
+
+ // Specific to template 4 don't update the visuals
+ // during orientation change
+ // done for performance improvement.
+ if (!(aIsOrientationChange &&mData->mFitMode))
+ {
+ UpdateVisuals();
+ CreateSlider();
+ }
+
+ // For template 4 set model case
+ // cancel the rotation if any.
+ if (!aIsOrientationChange && mData->mFitMode)
+ {
+ if (mData->mRotation.mIsApplied)
+ {
+ if (mData->mRotation.mIndex >= 0)
+ {
+ CancelRotation(mData->mRotation.mIndex);
+ }
+ else
+ {
+ // rotation applied on highlight index.
+ // so cancel it.
+ mData->mRotation.mIndex = 1;
+ CancelRotation(mData->mRotation.mIndex);
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CreateVisuals
+// ----------------------------------------------------------------------------
+//
+void MulBaseElement::CreateVisuals()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateVisuals");
+ int totalVisual = 2*mData->mVisibleCount + 1;
+ int visualIndex = 0;
+
+ // if there are less visuals than required tehn create the extra visauls and
+ // set opacity 1 for already existing visuals
+ if(totalVisual > mData->mIconFlowLayout->Count())
+ {
+ visualIndex = mData->mIconFlowLayout->Count();
+ for(; visualIndex < totalVisual;visualIndex++)
+ {
+ CreateIconStructure(mData->mIconFlowLayout);
+ }
+ }
+ // if the number of visuals are more, then set opacity 0 for the extra visuals
+ else if (totalVisual < mData->mIconFlowLayout->Count())
+ {
+ IMulModelAccessor* accessor = ((MulCoverFlowControl*)&control())->ModelAccessor();
+ if(accessor)
+ {
+ if(accessor->CurrentItemCount() < totalVisual)
+ {
+ for(; visualIndex < totalVisual;visualIndex++)
+ {
+ CAlfVisual& visual = mData->mIconFlowLayout->Visual(visualIndex);
+ static_cast<MulCoverFlowControl&>(control()).UpdateItemAtIndex(visualIndex);
+ }
+ }
+
+ CAlfTextureManager& textureMgr = control().Env().TextureManager();
+ TAlfImage image = TAlfImage(textureMgr.BlankTexture());
+ // position those visuals to some other location.
+ int posX = mData->mHighlightItemStruct.posx + totalVisual * mData->mHighlightItemStruct.width;
+ for(; visualIndex < mData->mIconFlowLayout->Count();visualIndex++)
+ {
+ CAlfVisual& visual = mData->mIconFlowLayout->Visual(visualIndex);
+ visual.SetPos(TAlfRealPoint(posX,mData->mHighlightItemStruct.posy));
+ CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(visual.FindTag(KCoverflowIcon));
+ // remove the icon brush if any.
+ RemoveBrushOnIcon(*imageVisual);
+ imageVisual->SetImage(image);
+ CAlfImageVisual* indicatorVisual =static_cast<CAlfImageVisual*>(visual.FindTag(KCoverflowIndicator));
+ if(indicatorVisual)
+ {
+ indicatorVisual->SetImage(image);
+ }
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// UpdateVisuals
+// ----------------------------------------------------------------------------
+//
+void MulBaseElement::UpdateVisuals()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::UpdateVisuals");
+ int totalVisual = 2*mData->mVisibleCount + 1;
+ MulCoverFlowControl* coverflowControl = static_cast<MulCoverFlowControl*>(&control());
+ IMulModelAccessor* accessor = coverflowControl->ModelAccessor();
+ if(accessor)
+ {
+ for(int i = 0; i < totalVisual; i++)
+ {
+ CAlfVisual& visual = mData->mIconFlowLayout->Visual(i);
+ coverflowControl->UpdateItemAtIndex(i);
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CreateIconStructure
+// ----------------------------------------------------------------------------
+//
+CAlfVisual* MulBaseElement::CreateIconStructure(CAlfLayout* aParentLayout)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateIconStructure");
+ //create the deck layout.
+ CAlfDeckLayout* deck =CAlfDeckLayout::AddNewL((CAlfControl &)control(),aParentLayout);
+ CAlfImageVisual* imageVisual =CAlfImageVisual::AddNewL((CAlfControl &)control(),deck);
+ imageVisual->SetTagL(KCoverflowIcon);
+ deck->SetFlag( EAlfVisualFlagManualLayout );
+ return deck;
+ }
+
+
+// ----------------------------------------------------------------------------
+// SetHighlight
+// This function is used to change the highlight by 1 with animation.
+// This function also takes care whether we need to change the size or only the position.
+// it takes into consideration the current direction and the current highlight index.
+// The logic is , we are always keeping the highlight visual index fixed (its equal to
+// the no of visible item in the screen), Depending on the scroll direction we reorder
+// the last or first visual and then position all visuals keeping the highlight visual
+// in its position. Then update the last or 1st visual with appropriate data.
+// ----------------------------------------------------------------------------
+//
+void MulBaseElement::SetHighlight(int /*aHighlightIndex*/, int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetHighlight");
+ int totalVisual = 2*mData->mVisibleCount + 1;
+ int highlightIndex = mData->mVisibleCount;
+ CAlfVisual* deckLayout = NULL;
+ CAlfVisual* imageVisual = NULL;
+
+ int highlightPosX = mData->mHighlightItemStruct.posx;
+
+ if(mData->mScrollDir == EItemScrollLeft)
+ {
+ CancelRotation(totalVisual - 1);
+ control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushOnlyForced);
+ deckLayout = (CAlfVisual*)&mData->mIconFlowLayout->Visual(totalVisual - 1);
+ mData->mIconFlowLayout->Reorder(*deckLayout,0);
+
+ int posX = highlightPosX - mData->mVisibleCount*(mData->mItemStruct.width + mData->mPadding);
+ deckLayout->SetPos( TAlfRealPoint(posX,mData->mItemStruct.posy));
+ posX = posX + mData->mItemStruct.width + mData->mPadding;
+ for (int i=1; i < totalVisual ; i++)
+ {
+ deckLayout = (CAlfVisual*)&mData->mIconFlowLayout->Visual(i);
+ imageVisual = deckLayout->FindTag(KCoverflowIcon);
+ if (i != highlightIndex)
+ {
+ deckLayout->SetPos( TAlfTimedPoint(posX,mData->mItemStruct.posy,aAnimationTime));
+ posX = posX + mData->mItemStruct.width + mData->mPadding;
+
+ // Change the size if required
+ if((i == highlightIndex+1 || i == highlightIndex-1) && mData->mChangeSize)
+ {
+ deckLayout->SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
+ imageVisual->SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
+ }
+ }
+ else
+ {
+ deckLayout->SetPos( TAlfTimedPoint(highlightPosX,mData->mHighlightItemStruct.posy,aAnimationTime));
+ posX = posX + mData->mHighlightItemStruct.width + mData->mPadding;
+
+ // Change the size if required
+ if(mData->mChangeSize)
+ {
+ deckLayout->SetSize(TAlfTimedPoint(mData->mHighlightItemStruct.width,
+ mData->mHighlightItemStruct.height,
+ aAnimationTime));
+ imageVisual->SetSize(TAlfTimedPoint(mData->mHighlightItemStruct.width,
+ mData->mHighlightItemStruct.height,
+ aAnimationTime));
+ }
+ }
+ }
+ control().Env().BatchBufferHandler().FlushBatchBuffer();
+ control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushDeferred);
+ ((MulCoverFlowControl*)&control())->UpdateItemAtIndex(0, aAnimationTime);
+
+ }
+ else if (mData->mScrollDir == EItemScrollRight)
+ {
+ CancelRotation(0);
+ control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushOnlyForced);
+ deckLayout = (CAlfVisual*)&mData->mIconFlowLayout->Visual(0);
+ mData->mIconFlowLayout->Reorder(*deckLayout,totalVisual-1);
+
+ int posX = highlightPosX - mData->mVisibleCount*(mData->mItemStruct.width + mData->mPadding);
+
+ for (int i=0; i < totalVisual-1 ; i++)
+ {
+ deckLayout = (CAlfVisual*)&mData->mIconFlowLayout->Visual(i);
+ imageVisual = deckLayout->FindTag(KCoverflowIcon);
+
+ if (i != highlightIndex)
+ {
+ deckLayout->SetPos( TAlfTimedPoint(posX,mData->mItemStruct.posy,aAnimationTime));
+ posX = posX + mData->mItemStruct.width + mData->mPadding;
+ // Change the size if required
+ if((i == highlightIndex+1 || i == highlightIndex-1) && mData->mChangeSize)
+ {
+ deckLayout->SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
+ imageVisual->SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
+ }
+ }
+ else
+ {
+ deckLayout->SetPos( TAlfTimedPoint(highlightPosX,mData->mHighlightItemStruct.posy,aAnimationTime));
+ posX = posX + mData->mHighlightItemStruct.width + mData->mPadding;
+ // Change the size if required
+ if(mData->mChangeSize)
+ {
+ deckLayout->SetSize(TAlfTimedPoint(mData->mHighlightItemStruct.width,
+ mData->mHighlightItemStruct.height,
+ aAnimationTime));
+ imageVisual->SetSize(TAlfTimedPoint(mData->mHighlightItemStruct.width,
+ mData->mHighlightItemStruct.height,
+ aAnimationTime));
+ }
+ }
+ }
+ deckLayout = (CAlfVisual*)&mData->mIconFlowLayout->Visual(totalVisual-1);
+ deckLayout->SetPos( TAlfRealPoint(posX,mData->mItemStruct.posy));
+ control().Env().BatchBufferHandler().FlushBatchBuffer();
+ control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushDeferred);
+ ((MulCoverFlowControl*)&control())->UpdateItemAtIndex(totalVisual-1, aAnimationTime);
+ }
+
+ }
+
+// ----------------------------------------------------------------------------
+// StartDoodling
+// This function is used in doodling case. it calls the appropriate function to
+// handle doodling based on whether we have to only change the position or both
+// position and size.
+// ----------------------------------------------------------------------------
+//
+void MulBaseElement::StartDoodling(int aDistance, int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::StartDoodling");
+ if (mData->mChangeSize)
+ {
+ MoveVisualsWithSizeChange(aDistance,aAnimationTime);
+ }
+ else
+ {
+ MoveVisuals(aDistance,aAnimationTime);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// StopDoodling
+// it calls when we get a gestureunknown or to do a bounce back.
+// it basically repositions the visuals based on current highlight.
+// it simply calls a startdoodling function with 0 distance and with
+// animation time if required.
+// ----------------------------------------------------------------------------
+//
+void MulBaseElement::StopDoodling(int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::StopDoodling");
+ StartDoodling(0,aAnimationTime);
+ }
+
+
+// ----------------------------------------------------------------------------
+// MoveVisuals
+// This function is used in doodling when only position needs to be change, usefull
+// in potrait where 1 visible item is in the screen.
+// The logic is to change the position of all visuals by doodling distance.
+// ----------------------------------------------------------------------------
+//
+void MulBaseElement::MoveVisuals(int aDistance, int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::MoveVisuals");
+ CancelRotation();
+
+ control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushOnlyForced);
+ int totalVisual = 2*mData->mVisibleCount + 1;
+ int highlightIndex = mData->mVisibleCount;
+
+ int highlightPosX = mData->mHighlightItemStruct.posx;
+
+ highlightPosX += aDistance;
+
+ int posX = highlightPosX - mData->mVisibleCount*(mData->mItemStruct.width + mData->mPadding);
+ for (int i=0; i < totalVisual ; i++)
+ {
+ CAlfVisual& deckLayout = mData->mIconFlowLayout->Visual(i);
+
+ if (i != mData->mVisibleCount)
+ {
+ deckLayout.SetPos( TAlfTimedPoint(posX,mData->mItemStruct.posy,aAnimationTime));
+ posX = posX + mData->mItemStruct.width + mData->mPadding;
+ }
+ else
+ {
+ deckLayout.SetPos( TAlfTimedPoint(highlightPosX,mData->mHighlightItemStruct.posy,aAnimationTime));
+ posX = posX + mData->mHighlightItemStruct.width + mData->mPadding;
+ }
+ }
+ control().Env().BatchBufferHandler().FlushBatchBuffer();
+ control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushDeferred);
+ }
+
+// ----------------------------------------------------------------------------
+// NumberOfSwipe
+// ----------------------------------------------------------------------------
+//
+TNumberofSwipes MulBaseElement::NumberOfSwipes()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::NumberOfSwipes");
+ return mData->mNumSwipes;
+ }
+
+// ----------------------------------------------------------------------------
+// FinalSwipeDirection
+// ----------------------------------------------------------------------------
+//
+int MulBaseElement::FinalSwipeDirection(int aDistance, int aLastSwipeDirection)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::FinalSwipeDirection");
+
+ int NewHighlightPos = NearestPoint(FinalMidPoints(ReferenceMidPoints(),aDistance),aLastSwipeDirection);
+
+ int scrollDir = EItemNoDirection;
+ mData->mNumSwipes = ESingleSwipe;
+
+ // now depending on the new highlight position make a decission
+ // whether to double swipe or single swipe and in which direction.
+ if(mData->mVisibleCount == 1)
+ {
+ switch(NewHighlightPos)
+ {
+ case 0:
+ {
+ scrollDir = EItemScrollLeft;
+ }
+ break;
+ case 2:
+ {
+ scrollDir = EItemScrollRight;
+ }
+ break;
+ case 1:
+ default:
+ break;
+ }
+ }
+ else
+ {
+ switch(NewHighlightPos)
+ {
+ case 0:
+ {
+ mData->mNumSwipes = ETripleSwipe; // triple swipe
+ scrollDir = EItemScrollLeft;
+ }
+ break;
+ case 1:
+ {
+ mData->mNumSwipes = EDoubleSwipe;
+ scrollDir = EItemScrollLeft;
+ }
+ break;
+ case 2:
+ {
+ scrollDir = EItemScrollLeft;
+ }
+ break;
+ case 4:
+ {
+ scrollDir = EItemScrollRight;
+ }
+ break;
+ case 5:
+ {
+ mData->mNumSwipes = EDoubleSwipe;
+ scrollDir = EItemScrollRight;
+ }
+ break;
+ case 6:
+ {
+ mData->mNumSwipes = ETripleSwipe; // triple swipe
+ scrollDir = EItemScrollRight;
+ }
+ break;
+ case 3:
+ default:
+ break;
+ }
+ }
+ return scrollDir;
+ }
+
+// ----------------------------------------------------------------------------
+// NearestPoint
+// ----------------------------------------------------------------------------
+//
+int MulBaseElement::NearestPoint(std::vector<int> aFinalMidPoints,int aLastSwipeDirection)
+ {
+ int referencePoint = mData->mHighlightItemStruct.posx + mData->mHighlightItemStruct.width/2;
+ int i = 0;
+ while(i < aFinalMidPoints.size())
+ {
+ int temp = aFinalMidPoints[i];
+ if(aFinalMidPoints[i] > referencePoint)
+ {
+ break;
+ }
+ i++;
+ }
+
+ if(aLastSwipeDirection == EEventScrollLeft)
+ {
+ return --i;
+ }
+ return i;
+ }
+
+// ----------------------------------------------------------------------------
+// ReferenceMidPoints
+// ----------------------------------------------------------------------------
+//
+std::vector<int> MulBaseElement::ReferenceMidPoints()
+ {
+ std::vector<int> referenceMidPoints;
+ int highlightMidPoint = mData->mHighlightItemStruct.posx + mData->mHighlightItemStruct.width/2;
+ int differnce = mData->mHighlightItemStruct.width/2
+ + mData->mPadding + mData->mItemStruct.width/2 ;
+
+ int doubleDiff = mData->mPadding + mData->mItemStruct.width;
+ if(mData->mVisibleCount != 1)
+ {
+ referenceMidPoints.push_back(highlightMidPoint - (differnce
+ + 2 * doubleDiff));
+
+ referenceMidPoints.push_back(highlightMidPoint - (differnce
+ + doubleDiff));
+ }
+ referenceMidPoints.push_back(highlightMidPoint - differnce);
+ referenceMidPoints.push_back(highlightMidPoint);
+ referenceMidPoints.push_back(highlightMidPoint + differnce);
+
+ if(mData->mVisibleCount != 1)
+ {
+ referenceMidPoints.push_back(highlightMidPoint + (differnce
+ + 2 * doubleDiff));
+
+ referenceMidPoints.push_back(highlightMidPoint + (differnce
+ + doubleDiff));
+ }
+ return referenceMidPoints;
+ }
+
+// ----------------------------------------------------------------------------
+// FinalMidPoints
+// ----------------------------------------------------------------------------
+//
+std::vector<int> MulBaseElement::FinalMidPoints(std::vector<int> aReferenceMidPoints,int aDistance)
+ {
+ std::vector<int> newMidPoints;
+ for(int i = 0; i < aReferenceMidPoints.size(); i++)
+ {
+ newMidPoints.push_back(aReferenceMidPoints[i] + aDistance);
+ int temp = newMidPoints[i];
+ }
+ return newMidPoints;
+ }
+
+// ----------------------------------------------------------------------------
+// MoveVisualsWithSizeChange
+// This function used when during doodling size changes also required.
+// ie in case of landscape and visible items are 3 during doodling position as well
+// as size change requird.
+// The basic logic is we are keeping a reference distance for a complete highlight
+// change (that means the highlight becomes nonhighlight and vice versa). so at
+// any point of time there will be only two visuals whose size needs to be change.
+// one to grow and other to shrink. so we calculate the % of grow and shrink of
+// visual keeping the doodling distance and reference distance into consideration.
+// ----------------------------------------------------------------------------
+//
+void MulBaseElement::MoveVisualsWithSizeChange(int aDistance, int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::MoveVisualsWithSizeChange");
+ int totalVisual = 2*mData->mVisibleCount + 1;
+ int highlightIndex = mData->mVisibleCount;
+ CAlfVisual* imageVisual = NULL;
+ int visualIndexToShrink = -1;
+ int visualIndexToGrow = -1;
+ int updateSpecialIndex = -1;
+ int distancefactor = CalculateDistanceChangeFactor ();
+
+ int highlightPosX = mData->mHighlightItemStruct.posx;
+ highlightPosX += aDistance;
+
+
+ if (Abs(aDistance) < distancefactor)
+ {
+ // user has doodled to change the highlight by 1.Single swipe.
+ if (aDistance < 0)
+ {
+ visualIndexToGrow = highlightIndex +1;
+ }
+ else if (aDistance > 0)
+ {
+ visualIndexToGrow = highlightIndex -1;
+ }
+ else
+ {
+ // for stop doodling case
+ visualIndexToGrow = highlightIndex - 1;
+ updateSpecialIndex = highlightIndex + 1;
+ }
+ visualIndexToShrink = highlightIndex;
+ }
+ else
+ {
+ // user has doodled to change the highlight by 2. Double swipe.
+ if (aDistance < 0)
+ {
+ visualIndexToShrink = highlightIndex +1;
+ visualIndexToGrow = highlightIndex +2;
+ aDistance +=distancefactor;
+ }
+ else
+ {
+ visualIndexToShrink = highlightIndex -1;
+ visualIndexToGrow = highlightIndex -2;
+ aDistance -=distancefactor;
+ }
+ }
+ int changeInPosY = (((mData->mItemStruct.posy - mData->mHighlightItemStruct.posy)*Abs(aDistance))/distancefactor);
+ int changeInWidth = (((mData->mHighlightItemStruct.width - mData->mItemStruct.width)*Abs(aDistance))/distancefactor);
+ int changeInHeight = (((mData->mHighlightItemStruct.height - mData->mItemStruct.height)*Abs(aDistance))/distancefactor);
+
+
+ int posX = highlightPosX - mData->mVisibleCount*(mData->mItemStruct.width + mData->mPadding);
+ for (int i=0; i < totalVisual && i < mData->mIconFlowLayout->Count(); i++)
+ {
+ CAlfVisual& deckLayout = mData->mIconFlowLayout->Visual(i);
+ if (i == visualIndexToShrink)
+ {
+ int posY = mData->mHighlightItemStruct.posy + changeInPosY;
+ int width =mData->mHighlightItemStruct.width - changeInWidth;
+ int height =mData->mHighlightItemStruct.height - changeInHeight;
+ deckLayout.SetPos( TAlfTimedPoint(posX,posY,aAnimationTime));
+ imageVisual = deckLayout.FindTag(KCoverflowIcon);
+ deckLayout.SetSize(TAlfTimedPoint(width,height,aAnimationTime));
+ imageVisual->SetSize(TAlfTimedPoint(width,height,aAnimationTime));
+ posX = posX + width + mData->mPadding;
+ }
+ else if (i == visualIndexToGrow)
+ {
+ int posY = mData->mItemStruct.posy - changeInPosY;
+ int width = mData->mItemStruct.width + changeInWidth;
+ int height = mData->mItemStruct.height + changeInHeight;
+ deckLayout.SetPos( TAlfTimedPoint(posX,posY,aAnimationTime));
+ imageVisual = deckLayout.FindTag(KCoverflowIcon);
+ deckLayout.SetSize(TAlfTimedPoint(width,height,aAnimationTime));
+ imageVisual->SetSize(TAlfTimedPoint(width,height,aAnimationTime));
+ posX = posX + width + mData->mPadding;
+ }
+ else if (i == updateSpecialIndex)
+ {
+ deckLayout.SetPos( TAlfTimedPoint(posX,mData->mItemStruct.posy,aAnimationTime));
+ imageVisual = deckLayout.FindTag(KCoverflowIcon);
+ deckLayout.SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
+ imageVisual->SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
+ posX = posX + mData->mItemStruct.width + mData->mPadding;
+ }
+ else
+ {
+ deckLayout.SetPos( TAlfTimedPoint(posX,mData->mItemStruct.posy,aAnimationTime));
+ posX = posX + mData->mItemStruct.width + mData->mPadding;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+//RecycleIconVisuals
+// ----------------------------------------------------------------------------
+//
+void MulBaseElement::RecycleIconVisuals()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::RecycleIconVisuals");
+ CAlfTextureManager& textureMgr = control().Env().TextureManager();
+ TAlfImage image = TAlfImage(textureMgr.BlankTexture());
+
+ for(int i=0; i<mData->mIconFlowLayout->Count(); i++)
+ {
+ CAlfVisual& visual = mData->mIconFlowLayout->Visual(i);
+ CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(visual.FindTag(KCoverflowIcon));
+ // remove the icon brush if any.
+ RemoveBrushOnIcon(*imageVisual);
+ imageVisual->SetImage(image);
+
+ CAlfImageVisual* indicatorVisual =static_cast<CAlfImageVisual*>(visual.FindTag(KCoverflowIndicator));
+ if(indicatorVisual)
+ {
+ indicatorVisual->SetImage(image);
+ }
+ }
+ // cancel the rotation if any.
+ if (mData->mRotation.mIsApplied)
+ {
+ if (mData->mRotation.mIndex >= 0)
+ {
+ CancelRotation(mData->mRotation.mIndex);
+ }
+ else
+ {
+ // rotation applied on highlight index.
+ // so cancel it.
+ mData->mRotation.mIndex = 1;
+ CancelRotation(mData->mRotation.mIndex);
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+//IdToTag
+// ----------------------------------------------------------------------------
+//
+const TDesC8& MulBaseElement::IdToTag( int aId )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::IdToTag");
+ switch( aId )
+ {
+ case mulvisualitem::KMulIcon1 :
+ {
+ return KCoverflowIcon;
+ }
+ case mulvisualitem::KMulTitle :
+ {
+ return KCoverflowTitle;
+ }
+ case mulvisualitem::KMulDetail :
+ {
+ return KCoverflowDetail;
+ }
+ case mulvisualitem::KMulIndicator2 :
+ {
+ return KCoverflowIndicator;
+ }
+ default:
+ {
+ return KInvalidID;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveSliderFromLayout
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::RemoveSliderFromLayout()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::RemoveSliderFromLayout");
+ IAlfWidget* slider = (static_cast<MulCoverFlowControl&>(control())).GetSliderWidget();
+ if(slider && slider->control())
+ {
+ IMulSliderWidget* sliderwidget = static_cast<IMulSliderWidget*>(slider);
+ CAlfLayout* sliderContlyt = const_cast<CAlfLayout*>(sliderwidget->control()->ContainerLayout(NULL));
+ mData->mVerticalFlow->Remove(sliderContlyt);
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// RotateImage
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::RotateImage(IMulWidget::TMulRotation aDirection,TSize aImageSize,int aAnimationTime,bool aAdjustSize)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::RotateImage");
+
+ __MUL_ASSERT( mData->mIconFlowLayout->Count() != 0,KNullPointer);
+
+ if (Template2D()->IsUiOnOffFlagEnabled())
+ {
+ CAlfVisual& visual = mData->mIconFlowLayout->Visual(1);
+ CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(visual.FindTag(KCoverflowIcon));
+
+ if (!aAdjustSize)
+ {
+ // Take care the case where rotation was
+ // applied to the previous highlight index
+ // cancel the rotation on that visual
+ CancelRotation(mData->mRotation.mIndex);
+
+ switch(aDirection)
+ {
+ case IMulWidget::ERotateLeft:
+ {
+ mData->mRotation.mImageAngle = (mData->mRotation.mImageAngle + 90)%360;
+ imageVisual->EnableTransformationL();
+ imageVisual->Transformation().Rotate(TAlfTimedValue(90,aAnimationTime));
+ mData->mRotation.mIsApplied = true;
+ break;
+ }
+ case IMulWidget::ERotateRight:
+ {
+ mData->mRotation.mImageAngle = (mData->mRotation.mImageAngle - 90)%360;
+ imageVisual->EnableTransformationL();
+ imageVisual->Transformation().Rotate(TAlfTimedValue(-90,aAnimationTime));
+ mData->mRotation.mIsApplied = true;
+ break;
+ }
+ default:
+ break;
+ }
+ // store the actual texture size of image to be rotated.
+ mData->mRotation.mTextureSize = aImageSize;
+ }
+
+ AdjustVisualSizeInRotation(imageVisual, aAnimationTime);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// AdjustVisualSizeInRotation
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::AdjustVisualSizeInRotation(CAlfImageVisual* aVisual,int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::AdjustVisualSizeInRotation");
+
+ bool isLandScape = static_cast<MulCoverFlowControl&>(control()).IsLandscape();
+ int shortEdge = !isLandScape ? mData->mHighlightItemStruct.width : mData->mHighlightItemStruct.height;
+
+ if( mData->mRotation.mTextureSize.iWidth <= shortEdge && mData->mRotation.mTextureSize.iHeight <= shortEdge)
+ {
+ return;
+ }
+ else
+ {
+ switch(Abs(mData->mRotation.mImageAngle))
+ {
+ case 90:
+ case 270:
+ {
+ HandleRotationOnVerticalAxis(aVisual,aAnimationTime);
+ }
+ break;
+ case 0:
+ case 180:
+ {
+ HandleRotationOnHorizontalAxis(aVisual,aAnimationTime);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// HandleRotationOnVerticalAxis
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::HandleRotationOnVerticalAxis(CAlfImageVisual* aVisual,int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::HandleRotationOnVerticalAxis");
+
+ bool isLandScape = static_cast<MulCoverFlowControl&>(control()).IsLandscape();
+ int longEdge = isLandScape ? mData->mHighlightItemStruct.width : mData->mHighlightItemStruct.height;
+ int shortEdge = !isLandScape ? mData->mHighlightItemStruct.width : mData->mHighlightItemStruct.height;
+
+ if (isLandScape)
+ {
+ if(mData->mRotation.mTextureSize.iWidth > shortEdge)
+ {
+ // make the visual of shortEdge size and fit the image by width.
+ aVisual->SetPos(TAlfRealPoint(longEdge/2 - shortEdge/2,0),aAnimationTime);
+ aVisual->SetSize(TAlfRealSize(shortEdge,shortEdge),aAnimationTime);
+ aVisual->SetScaleMode(CAlfImageVisual::EScaleFitWidth);
+ }
+ else
+ {
+ //imageHeight > shortEdge and imageWidth < shortEdge
+ if (mData->mRotation.mTextureSize.iHeight > longEdge)
+ {
+ aVisual->SetPos(TAlfRealPoint(longEdge/2 - shortEdge/2,shortEdge/2 -longEdge/2),aAnimationTime);
+ aVisual->SetSize(TAlfRealSize(shortEdge,longEdge),aAnimationTime);
+ }
+ else
+ {
+ aVisual->SetPos(TAlfRealPoint(longEdge/2 - shortEdge/2,shortEdge/2 - mData->mRotation.mTextureSize.iHeight/2),aAnimationTime);
+ aVisual->SetSize(TAlfRealSize(shortEdge,mData->mRotation.mTextureSize.iHeight),aAnimationTime);
+ }
+ aVisual->SetScaleMode(CAlfImageVisual::EScaleFitHeight);
+ }
+ }
+ else
+ {
+ if(mData->mRotation.mTextureSize.iHeight > shortEdge)
+ {
+ // make the visual of shortEdge size and fit the image by height.
+ aVisual->SetPos(TAlfRealPoint(0,longEdge/2 - shortEdge/2),aAnimationTime);
+ aVisual->SetSize(TAlfRealSize(shortEdge,shortEdge),aAnimationTime);
+ aVisual->SetScaleMode(CAlfImageVisual::EScaleFitHeight);
+ }
+ else
+ {
+ //imageWidth > shortEdge and imageHeight < shortEdge
+ if (mData->mRotation.mTextureSize.iWidth > longEdge)
+ {
+ aVisual->SetPos(TAlfRealPoint(shortEdge/2 - longEdge/2,longEdge/2 - shortEdge/2),aAnimationTime);
+ aVisual->SetSize(TAlfRealSize(longEdge,shortEdge),aAnimationTime);
+ }
+ else
+ {
+ aVisual->SetPos(TAlfRealPoint(shortEdge/2 - mData->mRotation.mTextureSize.iWidth/2,longEdge/2 - shortEdge/2),aAnimationTime);
+ aVisual->SetSize(TAlfRealSize(mData->mRotation.mTextureSize.iWidth,shortEdge),aAnimationTime);
+ }
+ // @todo check if this effective height after fit by width can ever be more than
+ // the shorter edge. If yes then this fit mode should be chnged to fit inside(check this)
+ aVisual->SetScaleMode(CAlfImageVisual::EScaleFitWidth);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// HandleRotationOnHorizontalAxis
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::HandleRotationOnHorizontalAxis(CAlfImageVisual* aVisual,int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::HandleRotationOnHorizontalAxis");
+
+ aVisual->SetPos(TAlfRealPoint(0,0),aAnimationTime);
+ aVisual->SetSize(TAlfRealSize(mData->mHighlightItemStruct.width,mData->mHighlightItemStruct.height),aAnimationTime);
+ ApplyScaleMode(*aVisual);
+ }
+
+// ---------------------------------------------------------------------------
+// CancelRotation
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::CancelRotation(int aIndex)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CancelRotation");
+
+ if (mData->mRotation.mIsApplied)
+ {
+ if (mData->mRotation.mIndex >= 0)
+ {
+ // revert it back
+ mData->mRotation.mImageAngle = 0;
+ CAlfVisual& deckLayout = mData->mIconFlowLayout->Visual(mData->mRotation.mIndex);
+ CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(deckLayout.FindTag(KCoverflowIcon));
+ imageVisual->EnableTransformationL();
+ imageVisual->Transformation().LoadIdentity();
+ // reset the rotation property
+ mData->mRotation.mIsApplied = false;
+ mData->mRotation.mIndex = -1;
+ imageVisual->SetPos(TAlfRealPoint(0,0));
+ imageVisual->SetSize(TAlfRealSize(mData->mHighlightItemStruct.width,mData->mHighlightItemStruct.height));
+ ApplyScaleMode(*imageVisual);
+ }
+ else
+ {
+ mData->mRotation.mIndex = aIndex;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CancelRotationOnUpdate
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::CancelRotationOnUpdate(int aIndex)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CancelRotationOnUpdate");
+
+ if (mData->mRotation.mIsApplied)
+ {
+ if (mData->mRotation.mIndex < 0 || mData->mRotation.mIndex == aIndex)
+ {
+ // revert it back
+ mData->mRotation.mImageAngle = 0;
+ CAlfVisual& deckLayout = mData->mIconFlowLayout->Visual(aIndex);
+ CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(deckLayout.FindTag(KCoverflowIcon));
+ imageVisual->EnableTransformationL();
+ imageVisual->Transformation().LoadIdentity();
+ // reset the rotation property
+ mData->mRotation.mIsApplied = false;
+ mData->mRotation.mIndex = -1;
+ imageVisual->SetPos(TAlfRealPoint(0,0));
+ imageVisual->SetSize(TAlfRealSize(mData->mHighlightItemStruct.width,mData->mHighlightItemStruct.height));
+ ApplyScaleMode(*imageVisual);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// UpdateRotation
+// ---------------------------------------------------------------------------
+//
+void MulBaseElement::UpdateRotation()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::UpdateRotation");
+
+ if (mData->mRotation.mIsApplied)
+ {
+ // rotation applied on the highlight item.
+ if (mData->mRotation.mIndex < 0)
+ {
+ RotateImage(IMulWidget::ERotateLeft,TSize(0,0),0,true);
+ }
+ }
+ }
+
+ } //namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcoverflowao.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,181 @@
+/*
+* 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: Active Object header for CoverFlow
+*
+*/
+
+// Class Header
+#include "mulcoverflowao.h"
+
+// Alf Headers
+#include <math.h>
+
+// Local Header
+#include "mulcoverflowcontrol.h"
+#include "mulbaseelement.h"
+#include "mullog.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulCoverFlowAo
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowAo::MulCoverFlowAo( MulCoverFlowControl& aControl ) : CTimer( EPriorityNormal ), mControl(aControl)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowAo::MulCoverFlowAo");
+ ConstructL();
+ CActiveScheduler::Add(this);
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulCoverFlowAo
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowAo::~MulCoverFlowAo()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowAo::~MulCoverFlowAo");
+ StopTimer();
+ }
+
+// ---------------------------------------------------------------------------
+// StartMoving
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowAo::StartMoving(TReal32 aSpeedPoint, int aCurrGestureDirection,bool aFastScrollForKey,int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowAo::StartMoving");
+ int previosDir = mCurrGestureDirection;
+ mCurrGestureDirection = aCurrGestureDirection;
+
+ aSpeedPoint = aSpeedPoint < 0 ? aSpeedPoint * -1 : aSpeedPoint;
+
+ // Fast scroll in key event ,
+ // Three steps are there Max(100),150,200(Min).
+ if (aFastScrollForKey)
+ {
+ mTransitionTime = aAnimationTime;
+ }
+ else
+ {
+ mTransitionTime = 200 *(1 + (1 - aSpeedPoint)*5);
+ }
+
+ if( !mStarted )
+ {
+ // Cancle any pending requests and start a new request
+ // this is because the layout direction n speed should be changed according to the current swipe
+ if( IsActive() )
+ {
+ MUL_LOG_INFO("MUL::MulCF::Cancel Previous Animation ");
+ Cancel();
+ }
+
+ MUL_LOG_INFO("MUL::MulCF::Start New Animation ");
+ mStarted = true;
+ After(0);
+ }
+ else
+ {
+ if (previosDir != mCurrGestureDirection)
+ {
+ mTransitionTime = 200;
+ Cancel();
+ After(0);
+ }
+ else
+ {
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// StopMoving
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowAo::StopMoving()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowAo::StopMoving");
+ StopTimer();
+ mCurrGestureDirection = 0;
+ mTransitionTime = 0;
+ mWaitingTime = 0;
+ mStarted = false;
+ }
+
+// ---------------------------------------------------------------------------
+// StopTimer
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowAo::StopTimer()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowAo::StopTimer");
+ if( IsActive() )
+ {
+ Cancel();
+ }
+ }
+// ---------------------------------------------------------------------------
+// RunL
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowAo::RunL()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowAo::RunL");
+ // Check if the layout ahs moved by one complete visaul.
+ // Then change the highlight and again start moving the layout.
+ // If it hasnot moved by complete visaul then allow the layout to move to new position but
+ // dont change the highlight
+ ChangeHighLight();
+ After(fabs(mTransitionTime*600));
+ }
+
+// ---------------------------------------------------------------------------
+// ChangeHighLight
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowAo::ChangeHighLight()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowAo::ChangeHighLight");
+ // Inform widget/model that highlight has changed
+ if(mCurrGestureDirection > 0 )
+ {
+ mControl.HandleNavigationEvent ( EEventScrollLeft );
+ }
+ else if(mCurrGestureDirection < 0 )
+ {
+ mControl.HandleNavigationEvent ( EEventScrollRight );
+ }
+ else
+ {
+ // no need to change the highlight
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// FastScrollTransitionTime
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowAo::FastScrollTransitionTime()
+ {
+ return mTransitionTime;
+ }
+
+ } // End of namespace .
+
+//End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcoverflowcontrol.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,2263 @@
+/*
+* 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: Widget Control Implementation
+ *
+*/
+
+
+// Include Files
+
+// Class Headers
+#include "mulcoverflowcontrol.h"
+
+#include <AknUtils.h>
+// Alf Headers
+#include <alf/alfenv.h>
+// for dosetimage func
+#include <alf/alfimageloaderutil.h>
+#include <alf/alfbitmapprovider.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfresourcepool.h> //for resource pooling
+#include <alf/alfwidgetenvextension.h> //for resource pooling
+#include <alf/alfutil.h>
+#include <alf/alfimagevisual.h>
+
+// Mul Headers
+#include <mul/mulevent.h>
+#include <mul/imulsliderwidget.h>
+
+
+// Gesture Helper
+#include <gesturehelper.h>
+
+// Local Headers
+#include "mulbaseelement.h"
+#include "mulcoverflowao.h"
+#include "mulcoverflowtemplate.h"
+#include "mulcoverflowwidget.h"
+#include "mulleave.h" //for leaving function
+#include "mullog.h" //for logs
+#include "mulassert.h"
+#include "imulmodelaccessor.h"
+
+//Gesture Helper
+using namespace GestureHelper;
+
+namespace Alf
+ {
+
+struct TMulCoverFlowControlImpl
+ {
+ TMulCoverFlowControlImpl()
+ {
+ mHighlightIndex = -1;
+ mScreenWidth = 0;
+ mScreenHeight = 0;
+ mGestureSpeed = 0;
+ mCoverFlow2DTemplate = NULL;
+ mIsWidgetVisible = true; //by default widget is visible .
+ mBaseElement = NULL;
+ mFastScroll = false;
+ mNumVisibleItem = 0;
+ mDefaultTextureId = -1;
+ mBounceInProgress = false;
+ mDirectionChanged = false;
+ mDontBounce = false;
+ mNumberOfRepeatEvents = 0;
+ mIsMirrored = false;
+ }
+
+ /// @bug critical:avanhata:4/7/2008 you should never cache a property that is a property of
+ /// another class. The model exists to own this type of information. I gave this review comment
+ /// as "critical", since it is exactly these cached member variables that will
+ /// yield most of bugs and complexity. Refactor it away.
+ int mHighlightIndex;
+
+ int mScreenWidth;
+ int mScreenHeight;
+ bool mIsWidgetVisible;
+ MulBaseElement* mBaseElement;
+ auto_ptr<MulCoverFlowTemplate> mCoverFlow2DTemplate; // 2D cover flow template //owns
+ TReal32 mGestureSpeed;
+ bool mFastScroll; // Flag to indicate wheher in fast scroll mode or not
+ int mNumVisibleItem;
+ int mDefaultTextureId;
+ bool mBounceInProgress;
+ int mReferencePoint;
+ bool mDirectionChanged;
+ int mCurrGestureDir;
+ bool mDontBounce;
+ int mNumberOfRepeatEvents;
+ bool mIsLandscape;
+ bool mIsMirrored;
+ };
+
+// ---------------------------------------------------------------------------
+// MulCoverFlowControl
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowControl::MulCoverFlowControl(CAlfEnv& aEnv )
+ {
+ //Call the base class method
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::MulCoverFlowControl");
+ CAlfWidgetControl::construct ( aEnv);
+
+ mData.reset( new (EMM)TMulCoverFlowControlImpl );
+
+ mFeedback = MTouchFeedback::Instance();
+
+ if (AknLayoutUtils::LayoutMirrored())
+ {
+ mData->mIsMirrored = true;
+ }
+ else
+ {
+ mData->mIsMirrored = false;
+ }
+
+ mData->mIsLandscape = IsLandscape();
+
+ THROW_IF_LEAVES
+ (
+ /// @bug critical:avanhata:30/9/2008 this is a symbian code section. don't call throwing osn code here.
+ /// Throwing within a TRAP is at best undefined
+ mCoverFlowAo.reset( new(EMM) MulCoverFlowAo( *this ) );
+
+ mHelper.reset(GestureHelper::CGestureHelper::NewL( *this ));
+ mHelper->InitAlfredPointerCaptureL( aEnv, aEnv.PrimaryDisplay(), KGroupId );
+ mHelper->SetHoldingEnabled( EFalse );
+ )
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulCoverFlowControl
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowControl::~MulCoverFlowControl()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::~MulCoverFlowControl");
+
+ if( ModelAccessor() != NULL )
+ {
+ ModelAccessor()->RemoveModelObserver(this);
+ }
+
+ DestroySlider();
+
+ }
+
+// ---------------------------------------------------------------------------
+// makeInterface
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulCoverFlowControl::makeInterface( const IfId& aType )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::makeInterface");
+ UString param(aType.mImplementationId);
+ return CAlfWidgetControl::makeInterface( aType );
+ }
+
+// ---------------------------------------------------------------------------
+// ResetShowWidgetFlag
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::ResetShowWidgetFlag( bool aNewResetValue )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::ResetShowWidgetFlag");
+ mData->mIsWidgetVisible = aNewResetValue;
+ if( aNewResetValue)
+ {
+ mHelper->AddObserver(this);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Template2D
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowTemplate* MulCoverFlowControl::Template2D()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::Template2D");
+ return mData->mCoverFlow2DTemplate.get();
+ }
+
+// ---------------------------------------------------------------------------
+// IsFastScrollMode
+// ---------------------------------------------------------------------------
+//
+bool MulCoverFlowControl::IsFastScrollMode()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::IsFastScrollMode");
+ return mData->mFastScroll;
+ }
+
+
+//-----------------------Event Handling API's -------------------------------
+// ---------------------------------------------------------------------------
+// handleEvent
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulCoverFlowControl::handleEvent(const TAlfEvent& aEvent)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::handleEvent");
+ if( aEvent.IsCustomEvent() )
+ {
+ return HandleCustomEvent( aEvent );
+ }
+ else if( aEvent.IsKeyEvent() && mData->mIsWidgetVisible )
+ {
+ if(TotalModelCount() <= KMinNumItemForFastScroll ||
+ aEvent.KeyEvent().iRepeats == 0 )
+ {
+ return HandleKeyEvent( aEvent );
+ }
+ else
+ {
+ return HandleRepeatKeyEvent( aEvent );
+ }
+ }
+ else if( aEvent.IsPointerEvent() && mData->mIsWidgetVisible )
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl: handleEvent ::pointer event");
+ //commented as gives warning in armv5
+ //THROW_IF_LEAVES
+ //(
+ TBool result = mHelper->OfferEventL(aEvent);
+ MUL_LOG_INFO1("MUL::MulCoverFlowControl: handleEvent::result %d ",result);
+ return result ? EEventConsumed :EEventNotHandled ;
+ // )
+ }
+ return EEventNotHandled;
+ }
+// ---------------------------------------------------------------------------
+// HandleCustomEvent
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulCoverFlowControl::HandleCustomEvent( const TAlfEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleCustomEvent");
+ AlfEventStatus eventConsumed = EEventNotHandled;
+ switch( aEvent.CustomParameter() )
+ {
+ case ECustomEventBounceBack:
+ {
+ MUL_LOG_INFO("MUL::MulCF:Handle custom event Compensate Bounce");
+ mFeedback->InstantFeedback(ETouchFeedbackBasic);
+ mData->mBaseElement->StopDoodling(/*3*KBounceTime*/500);
+ if ((TotalModelCount() > 1 && mData->mNumVisibleItem == 1) ||
+ (TotalModelCount() > 2))
+ {
+ Env().Send(TAlfCustomEventCommand(ECustomEventScroll, this),500/*3*KBounceTime*/ + 30);
+ }
+ else
+ {
+ //start marquee in case of text is visible.
+ if(mData->mBaseElement->IsTextVisibile())
+ {
+ //start marquee after 1 sec (after doodle completed)
+ Env().Send(TAlfCustomEventCommand(
+ ECustomEventMarqueeStart, this),500/*3*KBounceTime*/ + KMarqueeTime1000);
+ }
+ // if only one item is there then no need to scroll.
+ mData->mBounceInProgress = false;
+ }
+ eventConsumed = EEventConsumed;
+ break;
+ }
+ case ECustomEventScroll:
+ {
+ MUL_LOG_INFO("MUL::MulCF:Handle custom event Compensate Bounce");
+ Env().Send(TAlfCustomEventCommand(ECustomEventBounceCompleted,this),600);
+
+ if (mData->mHighlightIndex == 0)
+ {
+ DoSetFocusIndex(TotalModelCount() -1,/*4*KBounceTime*/800);
+ }
+ else
+ {
+ DoSetFocusIndex(0,800);
+ }
+ SetSliderTickPosition();
+ eventConsumed = EEventConsumed;
+ break;
+ }
+ case ECustomEventBounceCompleted:
+ {
+ mData->mBounceInProgress = false;
+ eventConsumed = EEventConsumed;
+ break;
+ }
+ case ECustomEventMarqueeStart:
+ {
+ mData->mBaseElement->StartMarquee(mulvisualitem::KMulTitle);
+ eventConsumed = EEventConsumed;
+ break;
+ }
+ case ECustomEventTitleMarqueeFinished:
+ {
+ mData->mBaseElement->StopMarquee(mulvisualitem::KMulTitle);
+ eventConsumed = EEventConsumed;
+ break;
+ }
+ case ECustomEventDetailMarqueeStart:
+ {
+ mData->mBaseElement->StartMarquee(mulvisualitem::KMulDetail);
+ eventConsumed = EEventConsumed;
+ break;
+ }
+ case ECustomEventMarqueeFinished:
+ {
+ mData->mBaseElement->StopMarquee(mulvisualitem::KMulDetail);
+ eventConsumed = EEventConsumed;
+ break;
+ }
+ default: break;
+ }
+ return eventConsumed;
+ }
+
+// ---------------------------------------------------------------------------
+// HandleKeyEvent
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulCoverFlowControl::HandleKeyEvent( const TAlfEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleKeyEvent");
+ AlfEventStatus eventConsumed = EEventNotHandled;
+ if( aEvent.Code() == EEventKey)
+ {
+ switch ( aEvent.KeyEvent().iCode )
+ {
+ case EKeyEnter:
+ // Event when selection key is pressed .( key event )
+ case EKeyDeviceA:
+ case EKeyDevice3:
+ {
+ if(aEvent.KeyEvent().iRepeats == 0)
+ {
+ if(TotalModelCount() <= 0 && mData->mBaseElement->IsEmptyText() )
+ {
+ SetSelection(mData->mHighlightIndex);
+ eventConsumed = EEventConsumed;
+ }
+ else if( TotalModelCount() > 0 )
+ {
+ SetSelection(mData->mHighlightIndex);
+ eventConsumed = EEventConsumed;
+ }
+ break;
+ }
+ }
+ case EKeyRightArrow:
+ {
+ // Send event to inform that the Right Key is pressed
+ if (mData->mIsMirrored)
+ {
+ HandleNavigationEvent ( EEventScrollLeft );
+ }
+ else
+ {
+ HandleNavigationEvent ( EEventScrollRight );
+ }
+ eventConsumed = EEventConsumed;
+ break;
+ }
+
+ case EKeyLeftArrow:
+ {
+ // Send event to inform that the Left Key is pressed
+ if (mData->mIsMirrored)
+ {
+ HandleNavigationEvent ( EEventScrollRight );
+ }
+ else
+ {
+ HandleNavigationEvent ( EEventScrollLeft );
+ }
+ eventConsumed = EEventConsumed;
+ break;
+ }
+ case EKeyBackspace:
+ //case EKeyDelete:
+ {
+ CAlfWidgetControl::processEvent( TAlfEvent( ETypeRemove,mData->mHighlightIndex));
+ eventConsumed = EEventConsumed;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+ else if(aEvent.Code() == EEventKeyUp)
+ {
+ mData->mNumberOfRepeatEvents = 0;
+ switch ( aEvent.KeyEvent().iScanCode )
+ {
+ case EStdKeyRightArrow:
+ case EStdKeyLeftArrow:
+ {
+ if(mData->mFastScroll)
+ {
+ HandleEnhancedStop();
+ eventConsumed = EEventConsumed;
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+ return eventConsumed;
+ }
+
+// ---------------------------------------------------------------------------
+// HandleRepeatKeyEvent
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulCoverFlowControl::HandleRepeatKeyEvent( const TAlfEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleHoldGestureEvents");
+
+ AlfEventStatus eventConsumed = EEventNotHandled;
+ if( aEvent.Code() == EEventKey)
+ {
+ switch ( aEvent.KeyEvent().iCode )
+ {
+ case EKeyRightArrow:
+ {
+ if (mData->mIsMirrored)
+ {
+ HandleFastScrollWithKeyEvents(1);
+ }
+ else
+ {
+ HandleFastScrollWithKeyEvents(-1);
+ }
+ eventConsumed = EEventConsumed;
+ break;
+ }
+
+ case EKeyLeftArrow:
+ {
+ if (mData->mIsMirrored)
+ {
+ HandleFastScrollWithKeyEvents(-1);
+ }
+ else
+ {
+ HandleFastScrollWithKeyEvents(1);
+ }
+ eventConsumed = EEventConsumed;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+ return eventConsumed;
+ }
+
+// ---------------------------------------------------------------------------
+// HandleFastScrollWithKeyEvents
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::HandleFastScrollWithKeyEvents(int aDirection)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleFastScrollWithKeyEvents");
+ mData->mNumberOfRepeatEvents++;
+ if(mData->mNumberOfRepeatEvents == 1 )
+ {
+ CAlfWidgetControl::processEvent( TAlfEvent( ETypeFastScroll,EScrollStart ));
+ mData->mFastScroll = true;
+ mCoverFlowAo->StartMoving(1, aDirection,true,200);
+ }
+ else if(mData->mNumberOfRepeatEvents == KNumberOfRepeatsForMediumSpeed && mData->mFastScroll )
+ {
+ mCoverFlowAo->StartMoving(1, aDirection,true,150);
+ }
+ else if(mData->mNumberOfRepeatEvents == KNumberOfRepeatsForFastSpeed && mData->mFastScroll )
+ {
+ mCoverFlowAo->StartMoving(1, aDirection,true,100);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// HandleNavigationEvent
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::HandleNavigationEvent( int aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleNavigationEvent");
+
+ // During bounce ignore all the events
+ if (mData->mBounceInProgress)
+ {
+ return;
+ }
+
+ int highlightIndex = mData->mHighlightIndex;
+ int totalcount = TotalModelCount();
+ if(totalcount <= 0 && highlightIndex == -1 )
+ {
+ return;
+ }
+ //stop marquee if the navigation is happening.
+ if(mData->mBaseElement->IsTextVisibile())
+ {
+ mData->mBaseElement->StopMarquee(mulvisualitem::KMulTitle);
+ mData->mBaseElement->StopMarquee(mulvisualitem::KMulDetail);
+ }
+ Env().CancelCustomCommands(this);
+
+ //Update the highlight index
+ switch( aEvent )
+ {
+ case EEventScrollRight:
+ {
+ // boundary check
+ if( highlightIndex == totalcount - 1 )
+ {
+ if( !mData->mBounceInProgress && !mData->mDontBounce)
+ {
+ mData->mBounceInProgress = true;
+ mData->mBaseElement->StartBounce(KBounceRight);
+ }
+ else
+ {
+ mData->mBounceInProgress = false;
+ mData->mDontBounce = false;
+ highlightIndex = 0;
+ }
+ }
+ else
+ {
+ highlightIndex++;
+ }
+
+ mData->mBaseElement->SetScrollDir(EItemScrollRight);
+ }
+ break;
+
+ case EEventScrollLeft:
+ {
+ //boundary check
+ if( highlightIndex == 0 )
+ {
+ if( !mData->mBounceInProgress && !mData->mDontBounce)
+ {
+ mData->mBounceInProgress = true;
+ mData->mBaseElement->StartBounce(KBounceLeft);
+ }
+ else
+ {
+ mData->mBounceInProgress = false;
+ mData->mDontBounce = false;
+ highlightIndex = totalcount - 1;
+ }
+ }
+ else
+ {
+ highlightIndex--;
+ }
+ }
+ mData->mBaseElement->SetScrollDir(EItemScrollLeft);
+ break;
+ }
+
+ // to handle bounce checks
+ if( !mData->mBounceInProgress )
+ {
+ DoSetFocusIndex( highlightIndex );
+ SetSliderTickPosition();
+ }
+ }
+// ---------------------------------------------------------------------------
+// SendEventToBaseElement
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::SendEventToBaseElement( const TAlfEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::SendEventToBaseElement");
+ mData->mBaseElement->offerEvent( *this, aEvent);
+ }
+
+//----------------------------Highlight and Selection API's -----------------
+
+// ---------------------------------------------------------------------------
+// SetHighlightIndex
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::SetHighlightIndex( int aIndex, bool aUpdateSlider)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::SetHighlightIndex");
+ // Throw Out of Bound Exception if index is negative
+ __MUL_ASSERT (aIndex > -1 && aIndex < TotalModelCount(), KOutOfBound);
+ //set the highlight in model
+ if(aIndex > mData->mHighlightIndex)
+ {
+ mData->mBaseElement->SetScrollDir(EItemScrollRight);
+ }
+ else
+ {
+ mData->mBaseElement->SetScrollDir(EItemScrollLeft);
+ }
+ DoSetFocusIndex( aIndex );
+ if (aUpdateSlider)
+ {
+ SetSliderTickPosition();
+ }
+ }
+// ---------------------------------------------------------------------------
+// DoSetFocusIndex
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::DoSetFocusIndex( int aNewIndex, int aAnimationTime )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::DoSetFocusIndex");
+
+ if(aNewIndex < 0 )
+ {
+ return;
+ }
+
+ int oldindex = mData->mHighlightIndex;
+ IMulModelAccessor* accessor = static_cast<IMulModelAccessor*>(widget()->model());
+ if(accessor)
+ {
+ if( oldindex == aNewIndex )
+ {
+ accessor->SetHighlight( aNewIndex );
+
+ // When one item case to cancel the drag effect
+ mData->mBaseElement->StopDoodling(200);
+ return;
+ }
+ // handling of cancelling bounce in 2 items case
+ if(TotalModelCount() == 2)
+ {
+ if((mData->mBaseElement->ScrollDir() == EItemScrollRight && aNewIndex == 1 && oldindex == 2)||
+ (mData->mBaseElement->ScrollDir() == EItemScrollLeft && aNewIndex == 2 && oldindex == 1))
+ {
+ mData->mBaseElement->StopDoodling(200);
+ return;
+ }
+ }
+
+ accessor->SetHighlight( aNewIndex );
+ accessor->ScrollWindow( WindowTop(aNewIndex) );
+
+ // Set the new focused item
+ mData->mHighlightIndex = aNewIndex;
+
+ // Throw Out of Bound Exception if index is negative
+ __MUL_ASSERT( mData->mHighlightIndex > -1 , KOutOfBound );
+ mData->mBaseElement->offerEvent(*this,TAlfEvent(ETypeHighlight,aAnimationTime));
+
+ if( mData->mIsWidgetVisible )
+ {
+ // If the widget is in hidden mode no event will be sent to the application/client
+ CAlfWidgetControl::processEvent( TAlfEvent( ETypeHighlight,mData->mHighlightIndex));
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// SetSelection
+// ----------------------------------------------------------------------------
+//
+void MulCoverFlowControl::SetSelection(int aHighlight)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::SetSelection");
+ CAlfWidgetControl::processEvent ( TAlfEvent ( ETypeSelect, aHighlight));
+ }
+
+// ---------------------------------------------------------------------------
+// HighlightIndex
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowControl::HighlightIndex()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HighlightIndex");
+ return mData->mHighlightIndex;
+ }
+
+// ---------------------------------------------------------------------------
+// SetSliderTickPosition
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::SetSliderTickPosition( )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::SetSliderTickPosition");
+ if (mData->mCoverFlow2DTemplate->IsSliderVisible())
+ {
+ IMulSliderModel* mulSliderModel = GetSliderModel();
+ if( mulSliderModel && mData->mHighlightIndex >= KInitialvalueZero )
+ {
+ mulSliderModel->SetPrimaryValue( mData->mHighlightIndex );
+ }
+ }
+ }
+
+//----------------------Model Change Related API's----------------------------
+// ----------------------------------------------------------------------------
+// ModelStateChanged
+// ----------------------------------------------------------------------------
+//
+void MulCoverFlowControl::ModelStateChanged( TMulChangedState aState, IMulVariantType& aData )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::ModelStateChanged");
+ switch( aState )
+ {
+ case EItemUpdated:
+ {
+ int index = aData.integer();
+ if(TotalModelCount() < 2*mData->mNumVisibleItem+1)
+ {
+ HandleLessItemsUpdate(index);
+ }
+ else
+ {
+ int relativeIndex = 0;
+ if (IsIndexInVisibleWindow(index, relativeIndex))
+ {
+ UpdateCoverflowItem(index,relativeIndex);
+ mData->mBaseElement->CancelRotationOnUpdate(relativeIndex);
+ }
+ }
+ break;
+ }
+ case EHighlightChanged:
+ {
+ if (mData->mHighlightIndex != aData.integer())
+ {
+ mData->mHighlightIndex = aData.integer();
+ IMulModelAccessor* accessor = static_cast<IMulModelAccessor*>(widget()->model());
+ if( mData->mHighlightIndex == 0 )
+ {
+ mData->mBaseElement->ShowEmptyText(false);
+ }
+ if( mData->mHighlightIndex >= 0)
+ {
+ // the same things have to be done for highlight>0 and highlight = 0
+ // the only diff is at highlight 0 dont show empty text
+ accessor->ScrollWindow(WindowTop(mData->mHighlightIndex));
+ mData->mBaseElement->UpdateVisuals();
+ mData->mBaseElement->SetCounterText();
+ SetSliderTickPosition();
+ }
+ else
+ {
+ // remove the visualisation and hide counter.
+ mData->mBaseElement->RecycleIconVisuals();
+ mData->mBaseElement->ShowEmptyText( true );
+ }
+ }
+ break;
+ }
+ case EItemsInserted:
+ {
+ HandleModelCountChange();
+ break;
+ }
+ case EItemsRemoved:
+ {
+ HandleModelCountChange();
+ CAlfWidgetControl::processEvent( TAlfEvent( ETypeItemRemoved ));
+ break;
+ }
+
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// HandleLessItemsUpdate
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::HandleLessItemsUpdate(int aIndex)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleLessItemsUpdate");
+
+ int highlight = mData->mHighlightIndex;
+ IMulModelAccessor* accessor = static_cast<IMulModelAccessor*>(widget()->model());
+ if(accessor)
+ {
+ highlight = accessor->Highlight();
+ }
+
+ if(aIndex == highlight)
+ {
+ UpdateCoverflowItem(aIndex,mData->mNumVisibleItem);
+ if(mData->mNumVisibleItem != 1 && TotalModelCount() == 3)
+ {
+ UpdateCoverflowItem(aIndex,mData->mNumVisibleItem + 3);
+ UpdateCoverflowItem(aIndex,mData->mNumVisibleItem - 3);
+ }
+ }
+ else
+ {
+ // fulscreen tempalte and 2d in portrait
+ if(mData->mNumVisibleItem == 1)
+ {
+ UpdateCoverflowItem(aIndex,mData->mNumVisibleItem+1);
+ UpdateCoverflowItem(aIndex,mData->mNumVisibleItem-1);
+ }
+ else
+ {
+ // 2d template landscape mode
+ if(TotalModelCount() == 2)
+ {
+ UpdateCoverflowItem(aIndex,mData->mNumVisibleItem+(aIndex - highlight));
+ }
+ else
+ {
+ int relativeIndex = (aIndex - highlight) + mData->mNumVisibleItem;
+ if(relativeIndex >= 0 && relativeIndex < 2*mData->mNumVisibleItem+1)
+ {
+ UpdateCoverflowItem(aIndex,relativeIndex);
+ }
+ relativeIndex = relativeIndex + TotalModelCount();
+ if(relativeIndex >= 0 && relativeIndex < 2*mData->mNumVisibleItem+1)
+ {
+ UpdateCoverflowItem(aIndex,relativeIndex);
+ }
+
+ relativeIndex = mData->mNumVisibleItem - (TotalModelCount() - aIndex + highlight);
+ if(relativeIndex >= 0 && relativeIndex < 2*mData->mNumVisibleItem+1)
+ {
+ UpdateCoverflowItem(aIndex,relativeIndex);
+ }
+ relativeIndex = relativeIndex - TotalModelCount();
+ if(relativeIndex >= 0 && relativeIndex < 2*mData->mNumVisibleItem+1)
+ {
+ UpdateCoverflowItem(aIndex,relativeIndex);
+ }
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// IsIndexInVisibleWindow
+// ---------------------------------------------------------------------------
+//
+bool MulCoverFlowControl::IsIndexInVisibleWindow(const int aIndex, int& aRelativeIndex)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::IsIndexInVisibleWindow");
+
+ int totalVisual = TotalModelCount();
+ int noOfVisuals = mData->mNumVisibleItem;
+ int highlightRelativeIndex = mData->mNumVisibleItem;
+ int highlight = mData->mHighlightIndex;
+ IMulModelAccessor* accessor = static_cast<IMulModelAccessor*>(widget()->model());
+ if(accessor)
+ {
+ highlight = accessor->Highlight();
+ }
+
+ int leftIndex = highlight - noOfVisuals;
+ int rightIndex = highlight + noOfVisuals;
+
+ if (leftIndex >= 0)
+ {
+ if ((aIndex <= highlight) && (aIndex >= leftIndex))
+ {
+ aRelativeIndex = highlightRelativeIndex - (highlight - aIndex);
+ return true;
+ }
+ }
+ else
+ {
+ if (aIndex <= highlight)
+ {
+ aRelativeIndex = highlightRelativeIndex - (highlight - aIndex);
+ return true;
+ }
+ else
+ {
+ leftIndex = totalVisual + leftIndex ;
+ if (aIndex >= leftIndex)
+ {
+ aRelativeIndex = highlightRelativeIndex - noOfVisuals + (aIndex - leftIndex);
+ return true;
+ }
+ }
+ }
+
+ if (rightIndex < totalVisual)
+ {
+ if ((aIndex >= highlight) && (aIndex <= rightIndex))
+ {
+ aRelativeIndex = highlightRelativeIndex + (aIndex - highlight);
+ return true;
+ }
+ }
+ else
+ {
+ if (aIndex >= highlight)
+ {
+ aRelativeIndex = highlightRelativeIndex + (aIndex - highlight);
+ return true;
+ }
+ rightIndex = rightIndex - totalVisual;
+ if (aIndex <= rightIndex)
+ {
+ aRelativeIndex = highlightRelativeIndex + noOfVisuals - (rightIndex - aIndex);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+
+// ---------------------------------------------------------------------------
+// RelativeToAbsolute
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowControl::RelativeToAbsolute(const int aRelativeIndex)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::RelativeToAbsolute");
+ int highlightRelativeIndex = mData->mNumVisibleItem;
+ int absolute = -1;
+ int totalVisuals = TotalModelCount();
+
+ int highlight = mData->mHighlightIndex;
+ IMulModelAccessor* accessor = static_cast<IMulModelAccessor*>(widget()->model());
+ if(accessor)
+ {
+ highlight = accessor->Highlight();
+ }
+
+ if(totalVisuals <= 0)
+ {
+ // absolute index is always -1, so no need of any calculations
+ }
+ else if(totalVisuals < 2*mData->mNumVisibleItem + 1)
+ {
+ if(aRelativeIndex == highlightRelativeIndex)
+ {
+ absolute = highlight;
+ }
+ else
+ {
+ if(mData->mNumVisibleItem == 1)
+ {
+ if (totalVisuals == 1)
+ {
+ absolute = -1;
+ }
+ else if(totalVisuals == 2)
+ {
+ absolute = highlight + 1;
+ absolute = absolute >= totalVisuals ? 0 : absolute;
+ }
+ }
+ else
+ {
+ if (totalVisuals == 1)
+ {
+ absolute = -1;
+ }
+ else if(totalVisuals == 2)
+ {
+ absolute = highlight + (aRelativeIndex - highlightRelativeIndex);
+ absolute = absolute >= totalVisuals ? -1 : absolute;
+ }
+ else // totalvisuals > 3
+ {
+ if(aRelativeIndex - highlightRelativeIndex > 0)
+ {
+ absolute = highlight + aRelativeIndex - highlightRelativeIndex;
+ }
+ else
+ {
+ absolute = highlight + aRelativeIndex - highlightRelativeIndex
+ + TotalModelCount();
+ }
+ absolute = absolute >= totalVisuals ? absolute - totalVisuals : absolute;
+ }
+ }
+ }
+ }
+ else
+ {
+ if(aRelativeIndex == highlightRelativeIndex)
+ {
+ absolute = highlight;
+ }
+ else if (aRelativeIndex > highlightRelativeIndex)
+ {
+ absolute = highlight + (aRelativeIndex - highlightRelativeIndex);
+ absolute = absolute >= totalVisuals ? (absolute - totalVisuals) : absolute;
+ }
+ else
+ {
+ absolute = highlight - (highlightRelativeIndex - aRelativeIndex);
+ absolute = absolute <0 ? (totalVisuals + absolute) : absolute;
+ absolute = absolute > totalVisuals - 1 ? -1 : absolute;
+ }
+ }
+ return absolute;
+ }
+
+
+// ---------------------------------------------------------------------------
+// TotalModelCount
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowControl::TotalModelCount()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::TotalModelCount");
+
+ IMulModelAccessor* accessor = static_cast<IMulModelAccessor*>(widget()->model());
+ if(accessor)
+ {
+ return accessor->CurrentItemCount();
+ }
+ return -1;
+ }
+
+// ---------------------------------------------------------------------------
+// HandleModelCountChange
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::HandleModelCountChange()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleModelCountChange");
+ IMulModelAccessor* accessor = static_cast<IMulModelAccessor*>(widget()->model());
+ if(accessor)
+ {
+ if(TotalModelCount() < (2*mData->mNumVisibleItem + 1))
+ {
+ mData->mBaseElement->UpdateVisuals();
+ }
+ mData->mBaseElement->UpdateSliderTick( TotalModelCount() );
+ mData->mBaseElement->SetCounterText();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// modelAccessor
+// ---------------------------------------------------------------------------
+//
+IMulModelAccessor* MulCoverFlowControl::ModelAccessor()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::ModelAccessor");
+ if(widget())
+ {
+ return static_cast<IMulModelAccessor*>(widget()->model());
+ }
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// ModelChanged
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::ModelChanged( IMulModelAccessor* aAccessor )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::ModelChanged");
+ Env().CancelCustomCommands(this);
+ // update the highlight index as well as the no of item.
+ mData->mHighlightIndex = aAccessor->Highlight();
+
+ CAlfLayout* main = (CAlfLayout*) mData->mBaseElement->findVisual( KMainLayoutIndex );
+ TSize mainSize = main->Size().Target().AsSize();
+ int width = mainSize.iWidth;
+ int height = mainSize.iHeight;
+
+ if( width == 0 && height == 0 )
+ {
+ return;
+ }
+ else
+ {
+ // @todo check if we are setting a new model with the same old template,
+ // then should we call CreateTemplateElement
+ mData->mScreenWidth = width;
+ mData->mScreenHeight = height;
+ CreateTemplateElement(aAccessor->Template());
+ mData->mBaseElement->CreateAndInitializeVisuals();
+ aAccessor->SetVisibleWindow( 2 * mData->mCoverFlow2DTemplate->MaxVisibleCount() + 1
+ ,WindowTop(mData->mHighlightIndex));
+ // For setting or clearing empty text if depending on the new modle count
+ SendEventToBaseElement( TAlfEvent( EEventWidgetInitialized ) );
+ }
+ }
+
+
+
+//-----------------Template Element Creation API's --------------------------
+
+// ---------------------------------------------------------------------------
+// CreateTemplateElement
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::CreateTemplateElement( mulwidget::TLogicalTemplate aTemplateName)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::CreateTemplateElement");
+ if (aTemplateName == mulwidget::KTemplate1)
+ {
+ mData->mCoverFlow2DTemplate.reset( new(EMM) MulCoverFlowTemplate1(*this, *mData->mBaseElement));
+ }
+ else if(aTemplateName == mulwidget::KTemplate4)
+ {
+ mData->mCoverFlow2DTemplate.reset( new(EMM) MulCoverFlowTemplate4(*this, *mData->mBaseElement));
+ }
+ else
+ {
+ // Invalid template
+ return;
+ }
+ mData->mCoverFlow2DTemplate->CreateVisualisation(IsLandscape());
+ // set holding mode to gesture helper.
+ SetHoldingEnabled();
+ }
+
+
+
+//--------------Orientation Change Related API's-----------------------------
+// ---------------------------------------------------------------------------
+// VisualLayoutUpdated
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::VisualLayoutUpdated (CAlfVisual& aVisual)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::VisualLayoutUpdated");
+
+ TSize topLayoutSize = aVisual.Size().Target().AsSize(); ;
+ int height = topLayoutSize.iHeight;
+ int width = topLayoutSize.iWidth;
+
+ // to avoid unnecessary visual layout updated calls .
+ // in order to check if the orientation has changed really or not this is done .
+ if( mData->mScreenWidth == width && height == mData->mScreenHeight )
+ {
+ return;
+ }
+
+ mData->mScreenWidth = width;
+ mData->mScreenHeight = height;
+
+
+ IMulModelAccessor* accessor = ModelAccessor();
+ if(IsLandscape() == mData->mIsLandscape)
+ {
+ if(accessor)
+ {
+ CreateTemplateElement(accessor->Template());
+ mData->mBaseElement->CreateAndInitializeVisuals();
+ accessor->SetVisibleWindow( 2 * mData->mCoverFlow2DTemplate->MaxVisibleCount() + 1
+ ,WindowTop(mData->mHighlightIndex));
+ // For setting or clearing empty text if depending on the new modle count
+ SendEventToBaseElement( TAlfEvent( EEventWidgetInitialized ) );
+ }
+ else
+ {
+ // For null model
+ // reset the coverflow 2d template to NULL
+ mData->mCoverFlow2DTemplate.reset(NULL);
+ }
+ }
+ else
+ {
+ mData->mIsLandscape = IsLandscape();
+
+ if(!accessor)
+ {
+ mData->mBaseElement->SetDefaultSize(TSize(mData->mScreenWidth,mData->mScreenHeight));
+ return;
+ }
+
+ mData->mBaseElement->OrientationChange();
+ // enable or disable hold events depending on whether ECF enabled
+ SetHoldingEnabled();
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// RecycleVisuals
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::RecycleVisuals()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::RecycleVisuals");
+ // reset the coverflow 2d template to NULL
+ mData->mCoverFlow2DTemplate.reset(NULL);
+
+ if(mData->mBaseElement)
+ {
+ mData->mBaseElement->RecycleIconVisuals();
+ mData->mHighlightIndex = -1;
+ }
+ }
+
+//--------------------------- Gesture ----------------------------------------
+
+// ---------------------------------------------------------------------------
+// SetHoldingEnabled
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::SetHoldingEnabled()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::SetHoldingEnabled");
+
+ mHelper->SetHoldingEnabled(EnhancedModeCondition());
+ }
+
+// ---------------------------------------------------------------------------
+// SetDoubleTapEnabled
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::SetDoubleTapEnabled( bool aValue)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::SetDoubleTapEnabled");
+
+ mHelper->SetDoubleTapEnabled( aValue );
+ }
+
+// ---------------------------------------------------------------------------
+// HandleGestureL
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::HandleGestureL( const MGestureEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleGestureL");
+ if(aEvent.IsHolding())
+ {
+ HandleHoldGestureEvents(aEvent);
+ }
+ else
+ {
+ HandleNormalGestureEvents(aEvent);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// HandleNormalGestureEvents
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::HandleNormalGestureEvents( const MGestureEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleNormalGestureEvents");
+
+ switch ( aEvent.Code(MGestureEvent::EAxisHorizontal) )
+ {
+ case EGestureStart:
+ {
+ SendFeedbackOnTouchDown(aEvent);
+ }
+ break;
+ case EGestureDrag: // fall through
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleNormalGestureEvents EGestureDrag");
+ if( aEvent.CurrentPos().iX > mData->mScreenWidth )
+ {
+ return;
+ }
+
+ if(TotalModelCount() > 0 )
+ {
+ // if ui is on send event to applications
+ if( mData->mCoverFlow2DTemplate->IsUiOnOffFlagEnabled() &&
+ (mData->mBaseElement->IsUiOnMode()) )
+ {
+ CAlfWidgetControl::processEvent( TAlfEvent( ETypeSwitchUiStateOnDrag ));
+ }
+
+ if (mData->mBounceInProgress && TotalModelCount() > 2)
+ {
+ mData->mBounceInProgress = false;
+ Env().CancelCustomCommands(this);
+ // bounce canceled once .dont bounce again for the next swipe.
+ mData->mDontBounce = true;
+ }
+
+ int distance = aEvent.Distance().iX ;
+ mData->mCurrGestureDir = distance;//CovertDistAnceToDirection(distance);
+ if (mData->mIsMirrored)
+ {
+ distance = -distance;
+ }
+ mData->mReferencePoint = aEvent.CurrentPos().iX - 10; //pointerDownPos + distanceTravelled/2;
+
+ mData->mBaseElement->StartDoodling(distance);
+ }
+ break;
+ }
+
+ case EGestureTap:
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleNormalGestureEvents EGestureTap ");
+ HandleSingleTap(aEvent);
+ mFeedback->InstantFeedback(ETouchFeedbackList);
+ break;
+ }
+
+ case EGestureDoubleTap:
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleNormalGestureEvents EGestureDoubleTap ");
+ if(TotalModelCount() <= 0 )
+ {
+ //find out whether event should be sent on double tap or not
+ // in case of empty model and the feedback too.
+ break;
+ }
+ MulDoubleTapData doubleTapData;
+ // Finding the visual which has been hit .
+ CAlfVisual* hitVisual = aEvent.Visual();
+ if(hitVisual && (hitVisual->Tag() == KCoverflowIndicator) )
+ {
+ doubleTapData.mTapVisualIndex = mData->mHighlightIndex ;
+ }
+ else
+ {
+ int hitVisualIndex = GetHitVisualIndex( hitVisual );
+ if( hitVisualIndex == -1 )
+ {
+ break;
+ }
+ doubleTapData.mTapVisualIndex = hitVisualIndex;
+ }
+ doubleTapData.mDoubleTapPoint = aEvent.CurrentPos();
+
+ mFeedback->InstantFeedback(ETouchFeedbackList);
+ CAlfWidgetControl::processEvent ( TAlfEvent ( ETypeDoubleTap,
+ uint(&doubleTapData)));
+ break;
+ }
+
+ case EGestureUnknown :
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleNormalGestureEvents EGestureUnknown");
+ if(TotalModelCount() > 0 )
+ {
+ // this will revert to the original position if gesture get cancelled
+ // with some animation time.
+ // @TODO animation time should be same as set by application.
+ mData->mBaseElement->StopDoodling(200);
+ }
+ break;
+ }
+
+ case EGestureSwipeLeft:
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleNormalGestureEvents EGestureSwipeLeft");
+ if(TotalModelCount() > 0 )
+ {
+ // do the calculations for changing teh higlight left or right depnding on last direction
+ // and the total direction moved.
+ int finalSwipeDirection = mData->mBaseElement->FinalSwipeDirection(
+ TotalSwipeDistance(aEvent),EEventScrollRight);
+
+ HandleSwipe(finalSwipeDirection);
+ }
+ break;
+ }
+
+ case EGestureSwipeRight:
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleNormalGestureEvents EGestureSwipeRight");
+ if(TotalModelCount() > 0 )
+ {
+ int finalSwipeDirection = mData->mBaseElement->FinalSwipeDirection(
+ TotalSwipeDistance(aEvent),EEventScrollLeft);
+
+ HandleSwipe(finalSwipeDirection);
+ }
+ break;
+ }
+ case EGestureMultiTouchStart:
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleNormalGestureEvents EGestureMultiTouchStart");
+ mData->mBaseElement->StopDoodling(0);
+ mFeedback->InstantFeedback(ETouchFeedbackMultiTouchRecognized);
+ break;
+ }
+ case EGestureMultiTouchReleased:
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleNormalGestureEvents EGestureMultiTouchReleased");
+ break;
+ case EGesturePinch:
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleNormalGestureEvents EGesturePinch");
+ CAlfWidgetControl::processEvent ( TAlfEvent ( ETypePinch,aEvent.PinchPercent()));
+ break;
+ case EGestureReleased:
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleNormalGestureEvents EGestureReleased");
+ break;
+ }
+ default:
+ break;
+ } // end of switch
+ }
+
+// ---------------------------------------------------------------------------
+// TotalSwipeDistance
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowControl::TotalSwipeDistance( const GestureHelper::MGestureEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::TotalSwipeDistance");
+ if( aEvent.CurrentPos().iX > mData->mScreenWidth )
+ {
+ return aEvent.Distance().iX - (aEvent.CurrentPos().iX - mData->mScreenWidth);
+ }
+ return aEvent.Distance().iX;
+ }
+
+// ---------------------------------------------------------------------------
+// GetHitVisualIndex
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowControl::GetHitVisualIndex( CAlfVisual* aHitVisual )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::GetHitVisualIndex");
+ int visualIndex = -1;
+
+ if(!aHitVisual)
+ {
+ // no visual found
+ return -1;
+ }
+ #ifdef _DEBUG
+ const TDesC8& buffer = aHitVisual->Tag();
+ #endif
+
+ if ((aHitVisual->Tag() != KCoverflowIcon))
+ {
+ visualIndex = -1;
+ }
+ else
+ {
+ if(mData->mNumVisibleItem > 1)
+ {
+ CAlfLayout& iconFlow =mData->mBaseElement->FlowLayout( KIconFlowLayoutIndex );
+ CAlfVisual* imgVisual = NULL;
+ for(int i=2; i<=4;i++)
+ {
+ imgVisual = iconFlow.Visual(i).FindTag(KCoverflowIcon);
+ if (imgVisual == aHitVisual)
+ {
+ visualIndex = RelativeToAbsolute(i);
+ break;
+ }
+ }
+ }
+ else
+ {
+ visualIndex = mData->mHighlightIndex;
+ }
+ }
+ return visualIndex;
+ }
+
+
+// ---------------------------------------------------------------------------
+// HandleSingleTap
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::HandleSingleTap(const MGestureEvent& aEvent)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleSingleTap");
+
+ if(TotalModelCount() <= 0 )
+ {
+ // in case of empty model and null model only when the empty text is set
+ // then only the selection event should be sent to the applications.
+ if( mData->mBaseElement->IsEmptyText() )
+ {
+ SetSelection(-1);
+ }
+ // In case of null model and empty model if the empty text is not set then no need to calculate
+ //the hit visual index . Doest serve any purpose.
+ }
+ else
+ {
+ // Finding the visual which has been hit .
+ CAlfVisual* hitVisual = aEvent.Visual();
+ if(hitVisual && (hitVisual->Tag() == KCoverflowIndicator) )
+ {
+ CAlfWidgetControl::processEvent( TAlfEvent( EVideoIconSelect ));
+ return;
+ }
+ int hitVisualIndex = GetHitVisualIndex( hitVisual );
+ if( hitVisualIndex > -1 )
+ {
+ if( hitVisualIndex == mData->mHighlightIndex )
+ {
+ SetSelection(mData->mHighlightIndex );
+ }
+ else
+ {
+ //set the highlight in model
+ if(TotalModelCount() > 2 && hitVisualIndex == TotalModelCount()-1
+ && mData->mHighlightIndex == 0)
+ {
+ HandleNavigationEvent ( EEventScrollLeft );
+ }
+ else if(TotalModelCount() > 2 && mData->mHighlightIndex == TotalModelCount()-1
+ && hitVisualIndex == 0)
+ {
+ HandleNavigationEvent ( EEventScrollRight );
+ }
+ else if(hitVisualIndex > mData->mHighlightIndex)
+ {
+ HandleNavigationEvent ( EEventScrollRight );
+ }
+ else
+ {
+ HandleNavigationEvent ( EEventScrollLeft );
+ }
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SendFeedbackOnTouchDown
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::SendFeedbackOnTouchDown(const MGestureEvent& aEvent)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::SendFeedbackOnTouchDown");
+
+ IMulModelAccessor* modelaccessor = ModelAccessor();
+ if(!modelaccessor || modelaccessor->CurrentItemCount() == 0)
+ {
+ return;
+ }
+ CAlfVisual* hitVisual = aEvent.Visual();
+ if((hitVisual && hitVisual->Tag() == KCoverflowIcon) || (mData->mCoverFlow2DTemplate->IsUiOnOffFlagEnabled() ))
+ {
+ mFeedback->InstantFeedback(ETouchFeedbackList);
+ }
+ }
+// ---------------------------------------------------------------------------
+// HandleSwipe
+// Handle the swipe events (swipe left and swipe right) provided by the gesture helper.
+// Also handles the extreme doodling case (it may happen that in doodling you can move two
+// or three highlight before doing a pointer up) but gesture only gives us a swipe left and
+// swipe right event. so we have to decide the no of highlight movement to do while getting
+// left or right event.
+// Also for 2 or 3 highlight movement if the 1st or 2nd highlight movement is the cycling case
+// then we have to cancel the bounce as its already happend because of swipe. But the bounce
+// will happen if the final highlight change is a cyclic case.
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::HandleSwipe(int aEvent)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleSwipe");
+ int event;
+ if(aEvent == EItemScrollLeft)
+ {
+ if (mData->mIsMirrored)
+ {
+ event = EEventScrollRight;
+ }
+ else
+ {
+ event = EEventScrollLeft;
+ }
+ }
+ else if(aEvent == EItemScrollRight)
+ {
+ if (mData->mIsMirrored)
+ {
+ event = EEventScrollLeft;
+ }
+ else
+ {
+ event = EEventScrollRight;
+ }
+ }
+ else
+ {
+ mData->mBaseElement->StopDoodling(200);
+ return;
+ }
+
+ if(mData->mBaseElement->NumberOfSwipes() == EDoubleSwipe || mData->mBaseElement->NumberOfSwipes() == ETripleSwipe)
+ {
+ // done to avoid undesirable ui behaviour when we move the pointer little back.
+ // check if it can be done in another way.
+ CAlfEnv& env = Env();
+ TAlfRefreshMode oldRefreshMode = env.RefreshMode();
+ env.SetRefreshMode(EAlfRefreshModeManual);
+ if(mData->mBaseElement->NumberOfSwipes() == ETripleSwipe)
+ {
+ HandleNavigationEvent( event );
+ }
+ HandleNavigationEvent( event );
+ env.SetRefreshMode(oldRefreshMode);
+ }
+
+ HandleNavigationEvent( event );
+ // Feedback for swipe event
+ mFeedback->InstantFeedback(ETouchFeedbackList);
+ }
+
+// ---------------------------------------------------------------------------
+// HandleHoldGestureEvents
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::HandleHoldGestureEvents( const MGestureEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleHoldGestureEvents");
+
+ switch ( aEvent.Code(MGestureEvent::EAxisHorizontal) )
+ {
+ case EGestureDrag:
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleHoldGestureEvents EGestureDrag");
+
+ ReverseDirectionInFastScroll(aEvent);
+
+ /// @todo The strip direction intially should start with the current gesture direction.
+ // But if u keep dragging without releasing the pointer tehn the directioon should chnage whenever
+ // the pointer crosses the centre of the screen.
+
+ // if the pointer has crossed the centre position after holding started then the
+ // direction should depend on which half of teh screen
+ // else
+ // the direction should depend on the swipe direction
+ StartMoving(aEvent);
+ break;
+ }
+
+ case EGestureReleased:
+ case EGestureTap:
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleHoldGestureEvents EGestureReleased");
+ HandleEnhancedStop();
+ break;
+ }
+
+ case EGestureHoldLeft:
+ case EGestureHoldRight:
+ {
+ MUL_LOG_INFO("MUL::MulCoverFlowControl:HandleHoldGestureEvents EGestureHoldLeft");
+ if( EnhancedModeCondition() )
+ {
+ EnhancedStarted( aEvent );
+ }
+ break;
+ }
+
+ default:
+ break;
+ } // end of switch
+
+ }
+
+// ---------------------------------------------------------------------------
+// ReverseDirectionInFastSrroll
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::ReverseDirectionInFastScroll(const MGestureEvent& aEvent)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::ReverseDirectionInFastScroll");
+
+ int distTravelled = aEvent.Distance().iX;
+ int pointerDownPos = aEvent.StartPos().iX;
+ int currPosition = aEvent.CurrentPos().iX;
+ int prevGestureDir = ConvertDistanceToDirection(mData->mCurrGestureDir);
+
+ // if the distance travelled is negative i.e from right to left and the start position is on
+ // the right half of the screen and the direction has not changed yet , then special case to handle reference point. and vice versa
+ // case for left half of the screen.
+ if( ((distTravelled < 0 && pointerDownPos > mData->mScreenWidth/2 ) || (distTravelled > 0 &&
+ pointerDownPos < mData->mScreenWidth/2 )) && mData->mReferencePoint != mData->mScreenWidth/2)
+ {
+ if( mData->mDirectionChanged )
+ {
+ return;
+ }
+
+ ChangeDirReferencePoint(currPosition,distTravelled);
+ }
+ else
+ {
+ // else the reference point will be the middle of the screen.
+
+ // if the direction is not equal .. just check whether it has crossed the reference point.
+ // how to check whether it has crossed the reference point.
+ if(( prevGestureDir < 0 && currPosition > mData->mReferencePoint )||(prevGestureDir > 0 && currPosition < mData->mReferencePoint))
+ {
+ mData->mCurrGestureDir *= -1;
+ }
+
+ mData->mReferencePoint = mData->mScreenWidth/2;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ChangeDirReferencePoint
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::ChangeDirReferencePoint(int aCurrPosition, int aDistanceTravelled )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::ChangeDirReferencePoint");
+
+ int prevGestureDir = ConvertDistanceToDirection(mData->mCurrGestureDir);
+ int currGestureDir = ConvertDistanceToDirection(aDistanceTravelled);
+
+ if( prevGestureDir != currGestureDir )
+ {
+ // if the direction is not equal .. just check whether it has crossed the reference point.
+ // how to check whether it has crossed the reference point.
+ if(( prevGestureDir < 0 && aCurrPosition > mData->mReferencePoint )||(prevGestureDir > 0 && aCurrPosition < mData->mReferencePoint))
+ {
+ //crossed the reference point first time .now no need to maintain the reference point .its always half of the screen
+ mData->mReferencePoint = mData->mScreenWidth/2;
+ mData->mDirectionChanged = true;
+ mData->mCurrGestureDir = aDistanceTravelled;
+ }
+ else
+ {
+ // not crossed the reference point yet
+ // still going in the same direction .
+ mData->mReferencePoint = aCurrPosition - 10;
+ }
+ }
+ else
+ {
+ // still going in the same direction .
+ if(( prevGestureDir < 0 && aCurrPosition < mData->mScreenWidth/2 )||(prevGestureDir > 0
+ && aCurrPosition > mData->mScreenWidth/2))
+ {
+ mData->mReferencePoint = mData->mScreenWidth/2;
+ }
+ else if(Abs(mData->mCurrGestureDir) < Abs(aDistanceTravelled) )
+ {
+ // moving in the same direction in the increasing side towards the middle of the screen but hasnt
+ // crossed the reference point yet.
+ mData->mReferencePoint = aCurrPosition - 10;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ConvertDistanceToDirection
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowControl::ConvertDistanceToDirection( int aDistance )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::ConvertDistanceToDirection");
+ return aDistance>0?1:-1;
+ }
+
+// ---------------------------------------------------------------------------
+// HandleEnhancedStop
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::HandleEnhancedStop()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleEnhancedStop");
+
+ CAlfWidgetControl::processEvent( TAlfEvent( ETypeFastScroll,EScrollStop ));
+ mCoverFlowAo->StopMoving();
+ mData->mFastScroll = false;
+ mData->mGestureSpeed = 0;
+ // @TODO animation time should be same as set by the application.
+ mData->mBaseElement->MoveVisuals(0,200);
+ }
+
+// ---------------------------------------------------------------------------
+// FastScrollTransitionTime
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowControl::FastScrollTransitionTime()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::FastScrollTransitionTime");
+ if (mData->mBounceInProgress)
+ {
+ return 800;
+ }
+ else
+ {
+ return mCoverFlowAo->FastScrollTransitionTime();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// EnhancedModeCondition
+// ---------------------------------------------------------------------------
+//
+bool MulCoverFlowControl::EnhancedModeCondition()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::EnhancedMode");
+ if( !mData->mCoverFlow2DTemplate.get() )
+ {
+ return false;
+ }
+ UString orientation = IsLandscape() ? UString(KLandscape) : UString(KPortrait);
+
+ // If EMulWidgetFlagFastScroll is not set,
+ // or the current orientation is not landscape
+ // or in teh current template enhanced mode is not supported
+ if( !(((MulCoverFlowWidget*)widget())->IsFlagSet(IMulMultiItemWidget::EMulWidgetFlagFastScroll)
+ && !orientation.compare(KLandscape)
+ && mData->mCoverFlow2DTemplate->EnhancedTagParsed()) )
+ {
+ return false;
+ }
+ // If template4(i.e. ui on off mode is anabled) then if ui on mode then ecf canot be launched,so return false
+ else if( mData->mCoverFlow2DTemplate->IsUiOnOffFlagEnabled() &&
+ (mData->mBaseElement->IsUiOnMode()) )
+ {
+ return false;
+ }
+ else
+ {
+ return true; // enhanced mode enabled
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// EnhancedStarted
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::EnhancedStarted(const GestureHelper::MGestureEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::EnhancedStarted");
+ CAlfWidgetControl::processEvent( TAlfEvent( ETypeFastScroll,EScrollStart ));
+ mData->mFastScroll = true;
+ StartMoving(aEvent);
+ }
+
+// ---------------------------------------------------------------------------
+// StartMoving
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::StartMoving( const GestureHelper::MGestureEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::StartMoving");
+
+ TRealPoint speedPoint = GestureSpeed( aEvent );
+ int distance = mData->mCurrGestureDir;
+ if (mData->mIsMirrored)
+ {
+ distance = -distance;
+ }
+ mCoverFlowAo->StartMoving(speedPoint.iX, ConvertDistanceToDirection(distance) );
+ mData->mGestureSpeed = speedPoint.iX;
+ }
+
+// ---------------------------------------------------------------------------
+// GestureSpeed
+// ---------------------------------------------------------------------------
+//
+TRealPoint MulCoverFlowControl::GestureSpeed( const MGestureEvent& aEvent )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::GestureSpeed");
+
+ TRect area(this->DisplayArea());
+ TRect rect(TPoint(0,0),TPoint(area.Width(),area.Height()));
+ return aEvent.SpeedPercent( rect );
+ }
+
+//--------------------Slider related functions----------------------------
+
+// ---------------------------------------------------------------------------
+// CreateSliderWidget
+// ---------------------------------------------------------------------------
+//
+IAlfWidget* MulCoverFlowControl::CreateSliderWidget()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::CreateSliderWidget");
+
+ IAlfWidgetFactory& widgetFactory = AlfWidgetEnvExtension::widgetFactory(Env());
+ IAlfWidget* sliderWidget = widgetFactory.findWidget( KNameSliderWidget );
+
+ if( sliderWidget )
+ {
+ mSliderWidget = static_cast<IMulSliderWidget*>(sliderWidget);
+ mData->mBaseElement->UpdateSliderTick( 1 );
+ }
+ else
+ {
+ // Get the template Id in Integer from your template data
+ //NOTE: Set template takes int as parameter not UString
+
+ // Slider Widget creation
+ mSliderWidget = widgetFactory.createWidget<IMulSliderWidget> ( KNameSliderWidget, KNameSliderWidget, *widget()->parent(), NULL);
+ IMulSliderModel* mSliderModel = widgetFactory.createModel<IMulSliderModel> ("mulslidermodel");
+ mSliderWidget->setModel(mSliderModel, true);
+ mSliderModel->SetTemplate(ESliderTemplate1);
+ mSliderWidget->SetHandleKeyEvent(false);
+ mSliderWidget->control()->disableState(IAlfWidgetControl::Focusable);
+ }
+
+ IAlfWidgetEventHandler* coverFlowEventHandler = static_cast<IAlfWidgetEventHandler*> (
+ mData->mBaseElement->makeInterface( IAlfWidgetEventHandler::type() ) );
+
+ //Register the slidereventhandler and coverfloweventhandler with one another
+ mSliderWidget->control()->addEventHandler((coverFlowEventHandler));
+
+ return mSliderWidget;
+ }
+
+// ---------------------------------------------------------------------------
+// GetSliderWidget
+// ---------------------------------------------------------------------------
+//
+IAlfWidget* MulCoverFlowControl::GetSliderWidget()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::GetSliderWidget");
+
+ IAlfWidgetFactory& widgetFactory = AlfWidgetEnvExtension::widgetFactory(*(CAlfEnv::Static()));
+ return widgetFactory.findWidget( KNameSliderWidget );
+ }
+
+// ---------------------------------------------------------------------------
+// GetSliderModel
+// ---------------------------------------------------------------------------
+//
+IMulSliderModel* MulCoverFlowControl::GetSliderModel()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::GetSliderModel");
+ if( mSliderWidget )
+ {
+ IMulSliderWidget* mulSliderWidget = static_cast<IMulSliderWidget*>(mSliderWidget);
+ IMulSliderModel* mulSliderModel = static_cast<IMulSliderModel*>(mulSliderWidget->model());
+ return mulSliderModel;
+ }
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// DestroySlider
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::DestroySlider()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::DestroySlider");
+
+ MulBaseElement* baseelement = static_cast<MulBaseElement*>(findElement(KBase));
+ if(baseelement)
+ {
+ baseelement->RemoveSliderFromLayout();
+ }
+
+ IAlfWidgetFactory& widgetFactory = AlfWidgetEnvExtension::widgetFactory(Env());
+ IAlfWidget* sliderWidget = widgetFactory.findWidget( KNameSliderWidget );
+ if( sliderWidget )
+ {
+ IAlfElement* baseelement = findElement(KBase);
+ if(baseelement)
+ {
+
+ IAlfWidgetEventHandler* coverFlowEventHandler = static_cast<IAlfWidgetEventHandler*> (
+ baseelement->makeInterface( IAlfWidgetEventHandler::type() ) );
+
+ if( sliderWidget->control() )
+ {
+ sliderWidget->control()->removeEventHandler(*(coverFlowEventHandler));
+ }
+
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// UpdateItemAtIndex
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::UpdateItemAtIndex(const int aRelativeIndex, int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::UpdateItemAtIndex");
+ int absoluteIndex = RelativeToAbsolute(aRelativeIndex);
+ if(absoluteIndex >= 0)
+ {
+ UpdateCoverflowItem( absoluteIndex,aRelativeIndex, aAnimationTime );
+ }
+ else
+ {
+ SetBlankTexture(aRelativeIndex);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetBlankTexture
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::SetBlankTexture(int aRelativeIndex)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::SetBlankTexture");
+ CAlfFlowLayout& iconFlow = static_cast<CAlfFlowLayout&>(mData->mBaseElement->FlowLayout( KIconFlowLayoutIndex ));
+
+ CAlfDeckLayout& layout = static_cast<CAlfDeckLayout&>(iconFlow.Visual(aRelativeIndex));
+ CAlfImageVisual* visual =static_cast<CAlfImageVisual*>(layout.FindTag(KCoverflowIcon));
+
+ CAlfTextureManager& textureMgr = Env().TextureManager();
+ TAlfImage blankTexture = textureMgr.BlankTexture();
+ visual->SetImage(blankTexture);
+
+ // remove the icon brush if any.
+ mData->mBaseElement->RemoveBrushOnIcon(*visual);
+
+ CAlfImageVisual* indicatorVisual =static_cast<CAlfImageVisual*>(layout.FindTag(KCoverflowIndicator));
+ if(indicatorVisual)
+ {
+ indicatorVisual->SetImage(blankTexture);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// UpdateCoverflowItem
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::UpdateCoverflowItem( int aItemIndex,int aVisualIndex, int aAnimationTime )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::UpdateCoverflowItem");
+
+ CAlfFlowLayout& iconFlow = static_cast<CAlfFlowLayout&>(mData->mBaseElement->FlowLayout( KIconFlowLayoutIndex ));
+ IMulModelAccessor* accessor = static_cast<IMulModelAccessor*>(widget()->model());
+
+ try
+ {
+ const MulVisualItem& item = accessor->Item(aItemIndex);
+
+ CAlfDeckLayout& layout = static_cast<CAlfDeckLayout&>(iconFlow.Visual(aVisualIndex));
+ CAlfImageVisual* visual =static_cast<CAlfImageVisual*>(layout.FindTag(KCoverflowIcon));
+ IMulVariantType* varData = item.Attribute(mulvisualitem::KMulIcon1);
+ if(varData && visual)
+ {
+ DoSetImage(varData,visual);
+ mData->mBaseElement->ApplyScaleMode(*visual);
+ }
+ else
+ {
+ if (mData->mDefaultTextureId >= 0)
+ {
+ const CAlfTexture* texture = Env().TextureManager().Texture (mData->mDefaultTextureId);
+ if(visual)
+ {
+ visual->SetImage (TAlfImage (*texture));
+ }
+ mData->mBaseElement->ApplyScaleMode(*visual);
+ }
+ else
+ {
+ if(visual)
+ {
+ visual->SetImage(Env().TextureManager().BlankTexture());
+ }
+ }
+ }
+ if(mData->mCoverFlow2DTemplate->IsUiOnOffFlagEnabled() )
+ {
+ mData->mBaseElement->DisplayIndicatorIcon(item,aVisualIndex);
+ }
+ }
+ catch(...)
+ {
+ CAlfDeckLayout& layout = static_cast<CAlfDeckLayout&>(iconFlow.Visual(aVisualIndex));
+ CAlfImageVisual* visual =static_cast<CAlfImageVisual*>(layout.FindTag(KCoverflowIcon));
+ if (mData->mDefaultTextureId >= 0)
+ {
+ const CAlfTexture* texture = Env().TextureManager().Texture (mData->mDefaultTextureId);
+ visual->SetImage (TAlfImage (*texture));
+ mData->mBaseElement->ApplyScaleMode(*visual);
+ }
+ else
+ {
+ visual->SetImage(Env().TextureManager().BlankTexture());
+ }
+
+ }//catch ends
+ // if the item is the highlight item then update the text if required.
+ if (aVisualIndex == mData->mNumVisibleItem)
+ {
+ mData->mBaseElement->UpdateTextValue(aAnimationTime);
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// DoSetImage
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::DoSetImage(IMulVariantType* aData,CAlfImageVisual* aImgVisual)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::DoSetImage");
+
+ if ( aData && aData->Type() == IMulVariantType::EDes)
+ {
+ TAlfImage image = AlfWidgetEnvExtension::resourcePool(
+ aImgVisual->Env()).getImageResource((char*)(aData->DesC().Ptr()));
+ if(image.HasTexture())
+ {
+ aImgVisual->SetImage(image);
+ }
+ else if(IsSVGImage(aData->DesC()))
+ {
+ LoadImageFromSvg(aData->DesC(),*aImgVisual);
+ }
+ else
+ {
+ // check if the texture is already loaded
+ CAlfTextureManager& textureMgr = aImgVisual->Env().TextureManager();
+ const TInt existingTextureId = textureMgr.TextureId( aData->DesC() );
+ const CAlfTexture* texture = NULL;
+
+ if ( existingTextureId != KErrNotFound )
+ {
+ texture = textureMgr.Texture( existingTextureId );
+ }
+ else
+ {
+ TRAPD( err, texture = &( textureMgr.LoadTextureL(aData->DesC(),
+ EAlfTextureFlagLoadAnimAsImage, KAlfAutoGeneratedTextureId ) ) );
+ if( err != KErrNone )
+ {
+ // means the texture is invalid.
+ //draw a blank texture here.
+ texture = &( textureMgr.BlankTexture() );
+ }
+ }
+ aImgVisual->SetImage( TAlfImage( *texture ) );
+ }
+ }
+ else if ( aData && aData->Type ()== IMulVariantType::EInt)
+ {
+ const CAlfTexture* texture = Env().TextureManager().Texture (aData->integer());
+ aImgVisual->SetImage (TAlfImage (*texture));
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// IsSVGImage
+// ---------------------------------------------------------------------------
+//
+bool MulCoverFlowControl::IsSVGImage(const TDesC& aImagePath)
+ {
+ MUL_LOG_INFO("MUL:MulCoverFlowControl::IsSVGImage");
+ _LIT(KSvgFile,".svg");
+
+ return (KErrNotFound != aImagePath.FindC(KSvgFile));
+ }
+
+// ---------------------------------------------------------------------------
+// LoadImageFromSvg
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::LoadImageFromSvg(const TDesC& aImagePath,
+ CAlfImageVisual& aImageVisual )
+ {
+ MUL_LOG_INFO("MUL:MulCoverFlowControl::LoadImageFromSvg");
+
+ CAlfImageLoaderUtil imgLoaderUtil;
+ imgLoaderUtil.SetSize (TSize (50, 50));
+
+ MAlfBitmapProvider* iSvgBitMapProv= imgLoaderUtil.CreateSVGImageLoaderL (aImagePath);
+ CAlfTexture &texture = aImageVisual.Env().TextureManager().CreateTextureL (
+ KAlfAutoGeneratedTextureId,
+ iSvgBitMapProv,
+ EAlfTextureFlagLoadAnimAsImage);
+ aImageVisual.SetImage (TAlfImage (texture));
+
+ }
+
+// ---------------------------------------------------------------------------
+// StoreVisibleItemCount
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::StoreVisibleItemCount(int aVisibleItemCount)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::StoreVisibleItemCount");
+ mData->mNumVisibleItem = aVisibleItemCount;
+ }
+
+// ---------------------------------------------------------------------------
+// SetDefaultImage
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::SetDefaultImage(int aTextureId)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::SetDefaultImage");
+ mData->mDefaultTextureId = aTextureId;
+ }
+
+// ---------------------------------------------------------------------------
+// WindowTop
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowControl::WindowTop(int aHighlightIndex)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::WindowTop");
+ int visibleItems = 2 * mData->mNumVisibleItem + 1;
+ int windowTop = aHighlightIndex - (visibleItems / 2);
+ IMulModelAccessor* accessor = static_cast<IMulModelAccessor*>(widget()->model());
+ if(accessor)
+ {
+ windowTop = (windowTop + visibleItems - 1) >= TotalModelCount() ?
+ TotalModelCount() - visibleItems : windowTop;
+ windowTop = windowTop > 0 ? windowTop : 0;
+ }
+
+ return windowTop;
+ }
+
+// ---------------------------------------------------------------------------
+// UpdateBaseElement
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowControl::UpdateBaseElement(MulBaseElement* aBaseElement)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::UpdateBaseElement");
+ mData->mBaseElement = aBaseElement;
+ }
+
+// ---------------------------------------------------------------------------
+// IsLandscape
+// ---------------------------------------------------------------------------
+//
+bool MulCoverFlowControl::IsLandscape()
+ {
+ bool ret;
+ TSize ScreenSz = AlfUtil::ScreenSize();
+ if (ScreenSz.iWidth > ScreenSz.iHeight)
+ {
+ ret = true;
+ }
+ else
+ {
+ ret = false;
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// Gesturehelper
+// ---------------------------------------------------------------------------
+//
+GestureHelper::CGestureHelper* MulCoverFlowControl::Gesturehelper()
+ {
+ return mHelper.get();
+ }
+
+ } // namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcoverflowenhancedtemplate.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,255 @@
+/*
+* 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: CoverFlow templates Implementation
+ *
+*/
+
+// Include Files
+
+// Class Headers
+#include "mulcoverflowcontrol.h"
+
+// DUI headers for xml parser
+#include <uimodel/duinode.h>
+#include <dui/duiproperty.h>
+#include <uimodel/duixmlattributelist.h>
+
+// Local Headers
+#include "mulutility.h"
+#include "mulbaseelement.h"
+#include "mulcoverflowenhancedtemplate.h"
+#include "mulcoverflowdefinitions.h" //defines all the strings
+#include "mullog.h"
+
+using namespace duiuimodel;
+
+namespace Alf
+ {
+
+struct TMulCoverFlowEnhancedTemplateImpl
+ {
+
+ TMulCoverFlowEnhancedTemplateImpl()
+ {
+ }
+
+ //Structure used to store the position and sizes of the counter.
+ TMulCoverFlowItem mEnhancedMinSize; // minimum size of images in enhanced mode
+ TMulCoverFlowItem mEnhancedMaxSize; // maximum size of images in enhanced mode
+ TMulCoverFlowItem mEnhacedCounterPos; // The position and size of the counter in enhaced mode
+ UString mEnhancedBorderImagePath;
+
+ ~TMulCoverFlowEnhancedTemplateImpl()
+ {
+ }
+ };
+
+// ---------------------------------------------------------------------------
+// MulCoverFlowEnhancedTemplate
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowEnhancedTemplate::MulCoverFlowEnhancedTemplate(MulCoverFlowControl &aControl,
+ UString &aTemplateID, MulXmlUtility& aMulXmlUtility,DuiNode* aRootNode):MulCoverFlowBaseTemplate(
+ aControl, aTemplateID, aMulXmlUtility,aRootNode )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowEnhancedTemplate::MulCoverFlowEnhancedTemplate");
+ mData.reset(new (EMM)TMulCoverFlowEnhancedTemplateImpl);
+
+ // Parses the xml from the oreientation node.
+ ParseNode( *GetOrientationNode() );
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulCoverFlowWidget
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowEnhancedTemplate::~MulCoverFlowEnhancedTemplate()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowEnhancedTemplate::~MulCoverFlowEnhancedTemplate");
+ //Nothing to delete .
+ }
+
+// ---------------------------------------------------------------------------
+// EnhancedMaxSize
+// ---------------------------------------------------------------------------
+//
+const TMulCoverFlowItem& MulCoverFlowEnhancedTemplate::EnhancedMaxSize()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowEnhancedTemplate::EnhancedMaxSize");
+ return mData->mEnhancedMaxSize;
+ }
+
+// ---------------------------------------------------------------------------
+// EnhancedMinSize
+// ---------------------------------------------------------------------------
+//
+const TMulCoverFlowItem& MulCoverFlowEnhancedTemplate::EnhancedMinSize()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowEnhancedTemplate::EnhancedMinSize");
+ return mData->mEnhancedMinSize;
+ }
+
+// ---------------------------------------------------------------------------
+// EnhacedCounterPos
+// ---------------------------------------------------------------------------
+//
+const TMulCoverFlowItem& MulCoverFlowEnhancedTemplate::EnhacedCounterPos()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowEnhancedTemplate::EnhacedCounterPos");
+ return mData->mEnhacedCounterPos;
+ }
+
+// ---------------------------------------------------------------------------
+// EnhancedBorderImagePath
+// ---------------------------------------------------------------------------
+//
+const UString& MulCoverFlowEnhancedTemplate::EnhancedBorderImagePath()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowEnhancedTemplate::EnhancedBorderImagePath");
+ return mData->mEnhancedBorderImagePath;
+ }
+
+// ---------------------------------------------------------------------------
+// ParseNode
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowEnhancedTemplate::ParseNode( DuiNode& aNode )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowEnhancedTemplate::ParseNode");
+ int nChildCount = aNode.childCount ();
+ for (int index = 0; index < nChildCount; index++)
+ {
+ DuiNode& item = aNode.child (index);
+
+ //parse the elements
+ if ( !item.type().compare(KElement) )
+ {
+ if( !item.nodeId().compare(KEnhancedSize) )
+ {
+ ParseEnhancedTag( item );
+ }
+ else if( !item.nodeId().compare(KCounter) )
+ {
+ ParseCounterTag( item );
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ParseEnhancedTag
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowEnhancedTemplate::ParseEnhancedTag( DuiNode& aNode )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowEnhancedTemplate::ParseEnhancedTag");
+ int totalitems = aNode.childCount();
+ for( int index = 0; index < totalitems; index++ )
+ {
+ DuiNode& childItem = aNode.child(index);
+ if( !childItem.type().compare(KSize) )
+ {
+ // for enhanced mode xmls.
+ ProcessSizeTag( childItem );
+ }
+ else
+ {
+ bool pathFound = GetStaticImagePath(childItem, mData->mEnhancedBorderImagePath);
+ TPtrC8 src((TUint8*)mData->mEnhancedBorderImagePath.getUtf8());
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ParseCounterTag
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowEnhancedTemplate::ParseCounterTag( DuiNode& aNode )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowEnhancedTemplate::ParseCounterTag");
+ int totalItems = aNode.childCount();
+ for( int index = 0; index < totalItems; index++ )
+ {
+ DuiNode& childItem = aNode.child(index);
+ if( !childItem.type().compare(KSize) )
+ {
+ // for enhanced mode xmls.
+ ProcessSizeTag( childItem );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ProcessSizeTag
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowEnhancedTemplate::ProcessSizeTag( DuiNode& aNode )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowEnhancedTemplate::ProcessSizeTag");
+ int totalitems = aNode.childCount();
+
+ auto_ptr<TMulCoverFlowItem> itemstruct = ProcessItemPos( aNode );
+ if( !aNode.nodeId().compare(KMinSize) )
+ {
+ // Store the maximum and minimum sizes for enhanced mode.
+ mData->mEnhancedMinSize = *itemstruct;
+ }
+ else if( !aNode.nodeId().compare(KMaxSize) )
+ {
+ // Store the maximum and minimum sizes for enhanced mode.
+ mData->mEnhancedMaxSize = *itemstruct;
+ }
+ else if( !aNode.nodeId().compare(KCounterSize) )
+ {
+ // Store the position and sizes for the counter in enhanced mode.
+ mData->mEnhacedCounterPos = *itemstruct;
+ }
+ //delete itemstruct;
+ }
+//-----------------------------------------------------------------------------
+// GetStaticImagePath
+//-----------------------------------------------------------------------------
+//
+bool MulCoverFlowEnhancedTemplate::GetStaticImagePath(DuiNode& aNode, UString& aPath)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulXmlTemplate::GetStaticImagePath");
+
+ int aAttrSetterCount = aNode.childCount ();
+
+ for (int index = 0; index < aAttrSetterCount; index++)
+ {
+ DuiNode& attrSetterNode = aNode.child (index);
+ const UString& aNodeType = attrSetterNode.type ();
+
+ DuiXmlAttributeList& attSetterList = attrSetterNode.attributeList ();
+ const UString& attrName = attSetterList.attributeValue (UString (attributesetter::KName));
+ const UString& category = attSetterList.attributeValue (UString (KCategory));
+
+ if ( aNodeType == nodetypes::KAttributeSetter )
+ {
+ if ( attrName == duiuimodel::imagevisualattributes::KImagePath && category == attributesetter::typevalues::KStatic )
+ {
+ aPath = attSetterList.attributeValue(UString(attributesetter::KTargetValue));
+ MulUtility::AbsolutePath(aPath);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ }//namespace Alf
+
+// End of file.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcoverflowitemelement.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,163 @@
+/*
+* 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: Item element implementation for Cover Flow.
+*
+*/
+
+
+// This file defines the API for mulcoverflowwidget.dll
+
+// Includes
+#include <osn/osnnew.h>
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfevent.h>
+#include <alf/alfwidgetevents.h>
+#include <alf/alfflowlayout.h>
+
+// Local headers
+#include "mulvisualtemplate.h"
+#include "mulcoverflowcontrol.h"
+#include "mulcoverflowdefinitions.h"
+#include "mulbaseelement.h"
+#include "mullog.h"
+
+// Mul headers
+#include "imulmodelaccessor.h"
+#include <alf/alfwidget.h>
+#include <mul/mulevent.h>
+
+
+//Class header
+#include "mulcoverflowitemelement.h"
+
+namespace Alf
+ {
+
+//-----------------------------------------------------------------------------
+// Constructor
+//-----------------------------------------------------------------------------
+//
+MulCoverFlowItemElement::MulCoverFlowItemElement( CAlfWidgetControl& aControl, const char* aName, MulTemplateInterface& aControlInterface )
+ {
+ //Call the base class method
+ construct(aControl,aName);
+
+ mVisualRecycled = false;
+ mNumVisualsRecycled = 0;
+ mIconFlow = NULL;
+ }
+
+//-----------------------------------------------------------------------------
+// Destructor
+//-----------------------------------------------------------------------------
+//
+MulCoverFlowItemElement::~MulCoverFlowItemElement()
+ {
+ // Nothind to delete .
+ }
+
+//-----------------------------------------------------------------------------
+// accept
+//-----------------------------------------------------------------------------
+//
+bool MulCoverFlowItemElement::accept(CAlfWidgetControl& /*aControl*/, const TAlfEvent& aEvent) const
+ {
+
+ if(!aEvent.IsCustomEvent())
+ {
+ return false;
+ }
+ return true;
+ }
+
+//-----------------------------------------------------------------------------
+// setActiveStates
+//-----------------------------------------------------------------------------
+//
+void MulCoverFlowItemElement::setActiveStates(unsigned int /*aStates*/)
+ {
+
+ }
+
+// offerEvent
+//-----------------------------------------------------------------------------
+//
+AlfEventStatus MulCoverFlowItemElement::offerEvent(CAlfWidgetControl& /*aControl*/, const TAlfEvent& /*aEvent*/)
+ {
+ return EEventNotHandled;
+ }
+
+//-----------------------------------------------------------------------------
+// makeInterface
+//-----------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulCoverFlowItemElement::makeInterface(const IfId& /*aType*/)
+ {
+ return NULL;
+ }
+
+//-----------------------------------------------------------------------------
+// setEventHandlerData
+//-----------------------------------------------------------------------------
+//
+void MulCoverFlowItemElement::setEventHandlerData( const AlfWidgetEventHandlerInitData& /*aData*/ )
+ {
+
+ }
+
+//-----------------------------------------------------------------------------
+// eventHandlerData
+//-----------------------------------------------------------------------------
+//
+AlfWidgetEventHandlerInitData* MulCoverFlowItemElement::eventHandlerData()
+ {
+ return NULL;
+ }
+
+// ----------------------------------------------------------------------------
+// eventHandlerType
+// ----------------------------------------------------------------------------
+//
+ IAlfWidgetEventHandler::AlfEventHandlerType MulCoverFlowItemElement::eventHandlerType()
+ {
+ return IAlfWidgetEventHandler::ELogicalEventHandler ;
+ }
+// ----------------------------------------------------------------------------
+// eventExecutionPhase
+// ----------------------------------------------------------------------------
+//
+
+IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase MulCoverFlowItemElement::eventExecutionPhase()
+ {
+ return EBubblingPhaseEventHandler;
+ }
+
+
+CAlfVisual* MulCoverFlowItemElement::CreateIconStructure(CAlfLayout* aParentLayout, const UString& aTemplateId)
+ {
+ return (static_cast<MulVisualTemplate*>(getVisualTemplate()))->CreateIconStructure(aParentLayout, aTemplateId);
+
+ }
+
+void MulCoverFlowItemElement::DoSetImage(IAlfVariantType* data,CAlfImageVisual* aImgVisual)
+{
+ static_cast<MulVisualTemplate*>(getVisualTemplate())->DoSetImage(data, aImgVisual );
+}
+
+
+ } // namespace ends here
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcoverflowtemplate.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,203 @@
+/*
+* 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: CoverFlow templates Implementation
+ *
+*/
+
+// Include Files
+
+#include <AknUtils.h>
+
+// Alf Headers
+#include <alf/alfenv.h>
+#include <alf/alfbrusharray.h>
+#include <alf/alfgradientbrush.h>
+#include <alf/alftextvisual.h>
+
+// Class Header
+#include "mulcoverflowtemplate.h"
+
+// Local Headers
+#include "mulcoverflowcontrol.h"
+#include "mulbaseelement.h"
+#include "mulleave.h"
+#include "mullog.h" //for logs
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulCoverFlowTemplate
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowTemplate::MulCoverFlowTemplate(MulCoverFlowControl &aControl,
+ MulBaseElement &aBaseElement)
+ {
+ MUL_LOG_ENTRY_EXIT("Mul::MulCoverFlowTemplate::MulCoverFlowTemplate");
+
+ mData.reset( new (EMM)TMulCoverFlowTemplateImpl);
+ mData->mControl = &aControl;
+ mData->mBaseElement = &aBaseElement;
+ }
+
+
+ void MulCoverFlowTemplate::CreateVisualisation(bool /*aIsLandscape*/,bool /*aIsOrientationChange*/)
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulCoverFlowWidget
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowTemplate::~MulCoverFlowTemplate()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyBrush
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate::ApplyBrush( CAlfTextVisual& aVisual,
+ const TRgb& aBrushColour, float aBrushOpacity )
+ {
+ MUL_LOG_ENTRY_EXIT("Mul::MulCoverFlowTemplate::ApplyBrush");
+
+ // Enable brush on the text visual
+ aVisual.EnableBrushesL( ETrue );
+ CAlfBrushArray* brushArray = aVisual.Brushes();
+ if(brushArray)
+ {
+ if( brushArray->Count()!=0)
+ {
+ //brushArray->Reset();
+ CAlfGradientBrush& brush = static_cast<CAlfGradientBrush&>(
+ brushArray->At(0));
+ brush.SetColor( aBrushColour );
+ brush.SetOpacity(aBrushOpacity);
+ }
+ else
+ {
+ THROW_IF_LEAVES
+ (
+ CAlfGradientBrush* brush = CAlfGradientBrush::NewL(
+ mData->mControl->Env() );
+ // Set the brush colour
+ brush->SetColor( aBrushColour );
+ // Apply brush and set the opacity .
+ aVisual.Brushes()->AppendL( brush, EAlfHasOwnership );
+ brush->SetOpacity(aBrushOpacity);
+ );
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// GetFontId
+// ---------------------------------------------------------------------------
+//
+TInt MulCoverFlowTemplate::GetFontId(const UString &aFontStyle,CAlfTextStyleManager& manager)const
+ {
+ MUL_LOG_ENTRY_EXIT("Mul::MulCoverFlowTemplate::GetFontId");
+ TInt fontId = 0;
+ if ( aFontStyle == "qfn_secondary" )
+ {
+ THROW_IF_LEAVES
+ (
+ fontId = manager.CreatePlatformTextStyleL(EAknLogicalFontSecondaryFont, -1);
+ );
+ }
+ else // by default it assumes the primary font.
+ {
+ THROW_IF_LEAVES
+ (
+ fontId = manager.CreatePlatformTextStyleL(EAknLogicalFontPrimaryFont, -1);
+ );
+ }
+ return fontId;
+ }
+
+// ---------------------------------------------------------------------------
+// IconWindowRect
+// ---------------------------------------------------------------------------
+//
+TRect MulCoverFlowTemplate::IconWindowRect(
+ const TAknWindowLineLayout &aLayout,
+ const TRect& aParentRect)
+ {
+ TAknLayoutRect layoutRect ;
+ layoutRect.LayoutRect( aParentRect, aLayout );
+ TRect rect(layoutRect.Rect());
+ return rect;
+ }
+
+// ---------------------------------------------------------------------------
+// TextWindowRect
+// ---------------------------------------------------------------------------
+//
+TRect MulCoverFlowTemplate::TextWindowRect(
+ const TAknTextLineLayout& aLayout,
+ const TRect& aParentRect)
+ {
+ TAknLayoutText layoutText;
+ layoutText.LayoutText( aParentRect, aLayout );
+ TRect rect(layoutText.TextRect());
+ return rect;
+ }
+
+
+// ---------------------------------------------------------------------------
+// UpdateMaxFontWidth
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowTemplate ::UpdateMaxFontWidth(CAlfTextVisual* textVisual)
+ {
+ int maxCharWidth = 0;
+ int fontId = textVisual->TextStyle();
+ const CFont* font = AknLayoutUtils::FontFromId(fontId, NULL);
+ TFontSpec curfontSpec = font->FontSpecInTwips();
+ curfontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightNormal);
+ maxCharWidth = font->MaxCharWidthInPixels();
+ return maxCharWidth;
+ }
+
+// ---------------------------------------------------------------------------
+// SetTextStyle
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate:: SetTextStyle(int aTextFontId, CAlfTextVisual& aTextVisual)
+ {
+ MUL_LOG_ENTRY_EXIT("Mul::MulCoverFlowTemplate::SetTextStyle");
+ UString textStyle;
+ switch(aTextFontId)
+ {
+ case 0: textStyle=UString("qfn_primary");
+ break;
+
+ case 1: textStyle=UString("qfn_primary");
+ break;
+
+ case 2: textStyle=UString("qfn_secondary");
+ break;
+
+ }
+ CAlfTextStyleManager& manager = aTextVisual.Env().TextStyleManager();
+ aTextVisual.SetTextStyle(GetFontId(textStyle, manager));
+ }
+
+ }//namespace Alf
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcoverflowwidget.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,552 @@
+/*
+* 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: Widget Implementation
+*
+*/
+
+// Include Files
+#include <alf/alfenv.h>
+#include <alf/alfwidgetenvextension.h>
+
+// Class headers
+#include "mulcoverflowwidget.h"
+
+// Mul Headers
+#include "imulmodelaccessor.h"
+#include "mulassert.h"
+#include "mullog.h" //for logs
+#include <mul/imulsliderwidget.h>
+
+// Local Headers
+#include "mulbaseelement.h"
+#include "mulcoverflowcontrol.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulCoverFlowWidget
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowWidget::MulCoverFlowWidget( CAlfEnv& aEnv,
+ const char* aWidgetId, IAlfContainerWidget& aContainerWidget):AlfWidget(aWidgetId,aContainerWidget,aEnv)
+ {
+ mMulModelAccessor = NULL;
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::MulCoverFlowWidget");
+ mWidgetPropertyFlag = 0; //Initialization
+
+ //Create default control
+ mCoverflowControl = new (EMM) MulCoverFlowControl( aEnv );
+ setControl( mCoverflowControl,true );
+
+ // create Base element
+ mBaseElement = new (EMM) MulBaseElement( *mCoverflowControl, KBase );
+ mTakesModelOwnership = false;
+
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulCoverFlowWidget
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowWidget::~MulCoverFlowWidget()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::~MulCoverFlowWidget");
+ // Control will be destroyed in the Widget deletion sequence. In that sequence
+ // Control's owner widget will be set to NULL. So,We cannot access the widget in
+ // the Coverflow control's destructor. So,This will be the right place to remove the
+ // model Observer.
+
+ if( control() && model())
+ {
+ ((IMulModelAccessor*)model())->RemoveModelObserver(static_cast<MulCoverFlowControl*>( control()));
+ }
+ if (mMulModelAccessor && mTakesModelOwnership)
+ {
+ delete mMulModelAccessor;
+ }
+
+ IAlfWidgetFactory& widgetFactory = AlfWidgetEnvExtension::widgetFactory(*(CAlfEnv::Static()));
+ IAlfWidget* sliderWidget = widgetFactory.findWidget( KNameSliderWidget );
+
+ if(control())
+ {
+ (static_cast<MulCoverFlowControl*>(control()))->DestroySlider();
+ }
+
+ if(sliderWidget)
+ {
+ widgetFactory.destroyWidget(sliderWidget);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// parent
+// ---------------------------------------------------------------------------
+//
+IAlfContainerWidget* MulCoverFlowWidget::parent() const
+ {
+ return AlfWidget::parent (); //return container widget
+ }
+
+// ---------------------------------------------------------------------------
+// control
+// ---------------------------------------------------------------------------
+//
+CAlfWidgetControl* MulCoverFlowWidget::control() const
+ {
+ //Call the base class method
+ return AlfWidget::control();
+ }
+
+// ---------------------------------------------------------------------------
+// setControl
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::setControl( CAlfWidgetControl* aControl,bool aDeletePreviousControl )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::setControl");
+ AlfWidget::setControl( aControl,aDeletePreviousControl );
+ }
+
+// ---------------------------------------------------------------------------
+// model
+// ---------------------------------------------------------------------------
+//
+IAlfModel* MulCoverFlowWidget::model()
+ {
+ return mMulModelAccessor;
+ }
+
+// ---------------------------------------------------------------------------
+// setModel
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::setModel( IAlfModel* /*aModel*/ , bool /*aTakeOwnership*/ )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// widgetName
+// ---------------------------------------------------------------------------
+//
+const char* MulCoverFlowWidget::widgetName() const
+ {
+ return AlfWidget::widgetName();
+ }
+
+
+// ---------------------------------------------------------------------------
+// SetBackground
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetBackground(const TRgb& aColor)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::SetBackground");
+
+ mBaseElement->SetBackground( aColor );
+ }
+
+// ---------------------------------------------------------------------------
+// SetBackground
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetBackground(const TAknsItemID& aItemID)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::SetBackground");
+
+ mBaseElement->SetBackground( aItemID );
+ }
+// ---------------------------------------------------------------------------
+// SetFlags
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetFlags( unsigned int aAnyFlag )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::SetFlags");
+ mWidgetPropertyFlag |= aAnyFlag;
+
+ // When the IMulMultiItemWidget::EMulWidgetFlagFastScroll flag is modified we should
+ // set the enable holding flag to gesture helper to recieve the hold events.
+ if(aAnyFlag == IMulMultiItemWidget::EMulWidgetFlagFastScroll)
+ {
+ mCoverflowControl->SetHoldingEnabled();
+ }
+ else if(aAnyFlag == IMulMultiItemWidget::EMulWidgetDoubleTap)
+ {
+ mCoverflowControl->SetDoubleTapEnabled(true);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ClearFlags
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::ClearFlags( unsigned int aAnyFlag )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::ClearFlags");
+ mWidgetPropertyFlag &= ~aAnyFlag;
+ if(aAnyFlag == IMulMultiItemWidget::EMulWidgetDoubleTap)
+ {
+ mCoverflowControl->SetDoubleTapEnabled(false);
+ }
+ else if(aAnyFlag == IMulMultiItemWidget::EMulWidgetFlagFastScroll)
+ {
+ mCoverflowControl->SetHoldingEnabled();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// IsFlagSet
+// ---------------------------------------------------------------------------
+//
+bool MulCoverFlowWidget::IsFlagSet( TMulWidgetPropertiesFlag aAnyFlag ) const
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::IsFlagSet");
+
+ return (mWidgetPropertyFlag & aAnyFlag);
+
+ }
+
+// ---------------------------------------------------------------------------
+// GetFlags
+// ---------------------------------------------------------------------------
+//
+unsigned int MulCoverFlowWidget::GetFlags() const
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::GetFlags");
+ return mWidgetPropertyFlag;
+ }
+
+// ---------------------------------------------------------------------------
+// SetRect
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetRect( int /*aLeftMargin*/, int /*aTopmargin*/, int /*aHeight*/,
+ int /*aWidth*/, int /*aTransitionTime*/ )
+ {
+ //@todo need to be removed once its removed from imulwidget.
+ }
+// ---------------------------------------------------------------------------
+// ShowWidget
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::ShowWidget( bool aShow, int aTransitionTime )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::ShowWidget");
+ mBaseElement->ShowWidget( aShow,aTransitionTime );
+
+ // Reset the flag . Event handling gets disabled once the flag is reset to false.
+ mCoverflowControl->ResetShowWidgetFlag( aShow );
+ }
+
+// ---------------------------------------------------------------------------
+// SetModel
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetModel( IMulModelAccessor* aAccessor, bool aFlag )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::SetModel");
+
+ //remove from observing change from old model
+ if ( mMulModelAccessor != aAccessor )
+ {
+ if (mMulModelAccessor && control())
+ {
+ ((IMulModelAccessor*)model())->RemoveModelObserver(static_cast<MulCoverFlowControl*>( control()));
+ }
+ // Release the old model.
+ if (mTakesModelOwnership)
+ {
+ delete mMulModelAccessor;
+ }
+ // Set the new model.
+ mMulModelAccessor = aAccessor;
+ mTakesModelOwnership=aFlag;
+ }
+ else // just copy the ownership flag
+ {
+ if (mMulModelAccessor != NULL)
+ {
+ mTakesModelOwnership=aFlag;
+ }
+ }
+
+ IMulSliderWidget* sliderWidget = static_cast<IMulSliderWidget*>(mCoverflowControl->GetSliderWidget());
+ // cancel all previous commands (like marquee and bounce)
+ mCoverflowControl->Env().CancelCustomCommands(mCoverflowControl);
+
+ if( aAccessor )
+ {
+ mMulModelAccessor = aAccessor;
+ MUL_LOG_INFO("MUL::MulCoverFlowWidget::SetModel()::SetVisibleWindow ");
+ aAccessor->AddModelObserver(mCoverflowControl);
+ // Notify the control regarding model change.
+ mCoverflowControl->ModelChanged(aAccessor);
+
+ if( aAccessor->CurrentItemCount() <= 0 )
+ {
+ if(sliderWidget)
+ {
+ mBaseElement->ShowSlider(false);
+ }
+ }
+ }
+ else // For Null Model case
+ {
+ mCoverflowControl->RecycleVisuals();
+ mBaseElement->ShowEmptyText( true );
+
+ if( sliderWidget )
+ {
+ mBaseElement->ShowSlider(false);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// GetIconSize
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::GetIconSize( mulwidget::TLogicalTemplate aTemplateId,
+ mulvisualitem::TVisualAttribute aAttribute, int& aHeight, int& aWidth)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::GetIconSize");
+ if((aAttribute == mulvisualitem::KMulIcon1) ||
+ (aAttribute == mulvisualitem::KMulIndicator2))
+ {
+ mBaseElement->GetIconSize(aTemplateId,aAttribute,aHeight,aWidth);
+ }
+ else
+ {
+ __MUL_ASSERT( false,KInvalidArgument);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// GetIconSize
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::GetIconSize(mulvisualitem::TVisualAttribute aAttribute,
+ int& aHeight, int& aWidth)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::GetIconSize");
+ __MUL_ASSERT( mMulModelAccessor != 0,KTemplateNotFound);
+ if((aAttribute == mulvisualitem::KMulIcon1) ||
+ (aAttribute == mulvisualitem::KMulIndicator2))
+ {
+ mBaseElement->GetIconSize(mMulModelAccessor->Template(),aAttribute,
+ aHeight,aWidth);
+ }
+ else
+ {
+ __MUL_ASSERT( false,KInvalidArgument);
+ }
+ }
+
+ // ---------------------------------------------------------------------------
+ // makeInterface
+ // ---------------------------------------------------------------------------
+ //
+IAlfInterfaceBase* MulCoverFlowWidget::makeInterface( const IfId& /*aType*/ )
+ {
+ return static_cast<IMulCoverFlowWidget*>( this );
+ }
+
+// ---------------------------------------------------------------------------
+// setChildFocus
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::setChildFocus( bool /*aFocus*/ )
+ {
+ // pure virtual function of base Class.
+ // not usefull for this widget
+ }
+
+void MulCoverFlowWidget::setPresentation(const char* /*aFilePath*/)
+ {
+ // pure virtual function of base Class.
+ // not usefull for this widget
+ }
+
+// ---------------------------------------------------------------------------
+// AddEventHandler
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::AddEventHandler( IAlfWidgetEventHandler& aObserver )
+ {
+ control()->addEventHandler( &aObserver );
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveEventHandler
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::RemoveEventHandler( IAlfWidgetEventHandler& aObserver )
+ {
+ control()->removeEventHandler( aObserver );
+ }
+// ---------------------------------------------------------------------------
+// ContainerLayout
+// ---------------------------------------------------------------------------
+//
+const CAlfLayout& MulCoverFlowWidget::ContainerLayout()
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::ContainerLayout");
+ CAlfLayout* layout=(CAlfLayout*)mBaseElement->findVisual(0);
+ return *layout;
+ }
+// ---------------------------------------------------------------------------
+// SetEmptyText
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetEmptyText( const UString& aDefaultText)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::SetEmptyText");
+ mBaseElement->SetEmptyText(aDefaultText);
+ }
+
+// ---------------------------------------------------------------------------
+// SetMarkMode
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetMarkMode(bool /*aFlag*/)
+ {
+ // Marking mode is not supported by coverflow widget.
+ }
+
+// ---------------------------------------------------------------------------
+// IsMarkMode
+// ---------------------------------------------------------------------------
+//
+bool MulCoverFlowWidget::IsMarkMode()const
+ {
+ // Marking mode is not supported by coverflow widget.
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// SetReorderMode
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetReorderMode(TMulReOrderMode /*aReorderMode*/)
+ {
+ // reorder mode is not supported by coverflow widget.
+ }
+
+// ---------------------------------------------------------------------------
+// IsReorderMode
+// ---------------------------------------------------------------------------
+//
+bool MulCoverFlowWidget::IsReorderModeOn() const
+ {
+ // reorder mode is not supported by coverflow widget.
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// SetOverlay
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetOverlay(TMulAttributeDataType /*aType*/, const UString& /*aAttribute*/,
+ const UString& /*aFormat*/)
+ {
+ // No implementation .
+ }
+
+// ---------------------------------------------------------------------------
+// SetAnimationTime
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetAnimationTime( TMulVisualEffect aVisualEffect, int aTransitionTime )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::SetAnimationTime");
+ // EHighlightTransition is used to set coverflow step scroll animation time.
+ if( aVisualEffect == EHighlightTransition )
+ {
+ mBaseElement->SetScrollAnimationTime(aTransitionTime);
+ }
+ }
+// ---------------------------------------------------------------------------
+// SetUIOnOFF
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetUIMode(bool UIOn, int aTransition )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::SetUIMode");
+ mBaseElement->UIOnOffMode( UIOn,aTransition );
+ }
+
+// ---------------------------------------------------------------------------
+// SetVisualColor
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetVisualColor( TMulVisualType aVisualType , const TRgb& aColor )
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::SetVisualColor");
+ switch(aVisualType)
+ {
+ case EItemBackgroundBrush:
+ {
+ mBaseElement->SetItemBrush(aColor);
+ }
+ break;
+ case ECoverflowCounterVisual:
+ {
+ mBaseElement->SetTextColor(ECounterVisual,aColor);
+ }
+ break;
+ case ETextVisual:
+ {
+ mBaseElement->SetTextColor(ETilteDetailTextVisual,aColor);
+ }
+ break;
+ default:
+ break;
+
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetDefaultImage
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::SetDefaultImage(int aTextureId)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::SetDefaultImage");
+ mCoverflowControl->SetDefaultImage(aTextureId);
+ }
+
+// ---------------------------------------------------------------------------
+// RotateImage
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowWidget::RotateImage(TMulRotation aDirection,TSize aImageSize,int aAnimationTime)
+ {
+ MUL_LOG_ENTRY_EXIT("aakash::MulCoverFlowWidget::RotateImage");
+ mBaseElement->RotateImage(aDirection,aImageSize,aAnimationTime);
+ }
+
+// ---------------------------------------------------------------------------
+// Gesturehelper
+// ---------------------------------------------------------------------------
+//
+GestureHelper::CGestureHelper* MulCoverFlowWidget::Gesturehelper()
+ {
+ return mCoverflowControl->Gesturehelper();
+ }
+
+ } //namespace alf
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcoverflowwidgetfactoryplugin.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* 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: factory plugin Implementation
+*
+*/
+
+// Include Files
+
+#include "mulcoverflowwidgetfactoryplugin.h"
+#include "mulcoverflowwidget.h"
+
+namespace Alf
+ {
+
+const TInt KCoverFlowWidgetFactoryPluginUid =
+ {
+ 0x2000D241
+ };
+
+const int KProductCount = 1;
+
+static const char* const KWidget = "mulcoverflowwidget";
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowWidgetFactoryPlugin* MulCoverFlowWidgetFactoryPlugin::NewL()
+ {
+ return new(ELeave)MulCoverFlowWidgetFactoryPlugin;
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulCoverFlowWidgetFactoryPlugin
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowWidgetFactoryPlugin::~MulCoverFlowWidgetFactoryPlugin()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// createProduct
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulCoverFlowWidgetFactoryPlugin::createProduct(
+ const char* aProduct,
+ void* aInitData)
+ {
+ IAlfInterfaceBase* ret(0);
+
+ //Creates the instance of the CoverFlow widget
+ if(!strcmp(aProduct,KWidget))
+ {
+ AlfWidgetInitData* initData = reinterpret_cast<AlfWidgetInitData*>(aInitData);
+ auto_ptr<MulCoverFlowWidget> Widget (new (EMM) MulCoverFlowWidget(*initData->mEnv,
+ initData->mWidgetId,*initData->mContainerWidget) );
+ ret = Widget->makeInterface(IMulCoverFlowWidget::Type());
+ Widget.release();
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// makeInterface
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulCoverFlowWidgetFactoryPlugin::makeInterface(
+ const IfId& aType)
+ {
+ if( UString(aType.mImplementationId) == UString(IAlfFactoryPlugin::type().mImplementationId) )
+ {
+ return static_cast<IAlfFactoryPlugin*>(this);
+ }
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// productCount
+// ---------------------------------------------------------------------------
+//
+int MulCoverFlowWidgetFactoryPlugin::productCount()const
+ {
+ return KProductCount;
+ }
+
+// ---------------------------------------------------------------------------
+// productInfo
+// ---------------------------------------------------------------------------
+//
+const char* MulCoverFlowWidgetFactoryPlugin::productInfo(int aIndex)const
+ {
+ /// @bug minor:avanhata:3/7/2008 good old if would be clearer
+ /// (Surely it is a caller error to call this function with aIndex >= productCount()
+ /// anyway, so can simply assert)
+ switch(aIndex)
+ {
+ case 0:
+ return KWidget;
+
+ default:
+ break;
+ }
+
+ return 0;
+ }
+
+ } //namespace Alf
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+using namespace Alf;
+
+const TImplementationProxy
+ ImplementationTable[] =
+ {
+ #ifdef __EABI__
+
+ IMPLEMENTATION_PROXY_ENTRY(KCoverFlowWidgetFactoryPluginUid, MulCoverFlowWidgetFactoryPlugin::NewL)
+
+ #else
+
+ { {KCoverFlowWidgetFactoryPluginUid},MulCoverFlowWidgetFactoryPlugin::NewL }
+
+ #endif
+ };
+
+OSN_EXPORT const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+ return ImplementationTable;
+ }
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcoverlogicaltemplatebase.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* 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: Description of various grid templates
+ *
+*/
+
+
+#include "mulcoverlogicaltemplatebase.h"
+
+namespace Alf
+ {
+
+ MulCoverLogicalTemplateBase::~MulCoverLogicalTemplateBase()
+ {
+ for(int i =0; i < mTemplatePrtStruct.size(); ++i)
+ {
+ delete mTemplatePrtStruct[i];
+ }
+
+ for(int i =0; i < mTemplateLscStruct.size(); ++i)
+ {
+ delete mTemplateLscStruct[i];
+ }
+ }
+ //----------------------------------------------------------------
+ // GetElementStructure
+ //----------------------------------------------------------------
+ //
+ const LCTElementStructure* MulCoverLogicalTemplateBase::GetElementStructure(
+ TMulCurrentOrientation aCurOrient,
+ const char* aElemId)
+ {
+
+ LCTElementStructure* returnElem = NULL;
+
+ if(aCurOrient == EMulPortrait)
+ {
+
+ for (vector<LCTElementStructure*>::const_iterator itP = mTemplatePrtStruct.begin();
+ itP!=mTemplatePrtStruct.end(); ++itP)
+ {
+ if(!strcmp(((*itP)->GetId()).getUtf8(),aElemId))
+ returnElem = (*itP);
+ }
+ }
+ else if(aCurOrient == EMulLandScape)
+ {
+ for (vector<LCTElementStructure*>::const_iterator itL = mTemplateLscStruct.begin();
+ itL!=mTemplateLscStruct.end(); ++itL)
+ {
+ if(!strcmp(((*itL)->GetId()).getUtf8(),aElemId))
+ returnElem = (*itL);
+ }
+ }
+ return returnElem;
+
+ }
+
+ void MulCoverLogicalTemplateBase::PopulateData ()
+ {
+ }
+ }// End of Alf
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcovertemplate1.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,533 @@
+/*
+* 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: Description of various grid templates
+ *
+*/
+
+
+// Class Header
+#include "mulcoverflowtemplate.h"
+
+// system includes
+#include <AknUtils.h>
+#include <alf/alfviewportlayout.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfutil.h>
+
+// Local includes
+#include "mulassert.h"
+#include "mulcoverflowcontrol.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulCoverLogicalTemplate1
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowTemplate1::MulCoverFlowTemplate1(MulCoverFlowControl &aControl,
+ MulBaseElement &aBaseElement):MulCoverFlowTemplate(aControl, aBaseElement)
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulCoverLogicalTemplate1
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowTemplate1::~MulCoverFlowTemplate1()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// GetIconSize
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::GetIconSize(mulvisualitem::TVisualAttribute aAttribute,bool aIslandscape, int& aHeight, int& aWidth)
+ {
+ int appMainPaneVerityId;
+ int coverFlowPaneVarietyId;
+ int imagePaneVerityId ;
+ if (aIslandscape)
+ {
+ appMainPaneVerityId = 3;
+ coverFlowPaneVarietyId = 2;
+ imagePaneVerityId = 4;
+ }
+ else
+ {
+ appMainPaneVerityId = 5;
+ coverFlowPaneVarietyId = 0;
+ imagePaneVerityId = 0;
+ }
+
+ // Get the size of the appwindow
+ TAknWindowLineLayout appMainLayout =
+ AknLayoutScalable_UiAccel::main_pane(appMainPaneVerityId).LayoutLine();
+ TAknLayoutRect appMainRect;
+ appMainRect.LayoutRect( AlfUtil::ScreenSize(), appMainLayout );
+ TSize appMainSize(appMainRect.Rect().Size());
+
+ // Get the size of the coverflow main window
+ TAknWindowLineLayout mainLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane(coverFlowPaneVarietyId).LayoutLine();
+ TAknLayoutRect mainRect;
+ mainRect.LayoutRect( appMainSize, mainLayout );
+ TSize mainSize(mainRect.Rect().Size());
+
+ switch(aAttribute)
+ {
+ case mulvisualitem::KMulIcon1:
+ {
+ TAknWindowLineLayout centerLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane(imagePaneVerityId).LayoutLine();
+ TAknLayoutRect centerRect;
+ centerRect.LayoutRect( TSize(mainSize), centerLayout );
+ aHeight = centerRect.Rect().Size().iHeight;
+ aWidth = centerRect.Rect().Size().iWidth;
+ break;
+ }
+ default:
+ {
+ // invalid attribute
+ // raise exception.
+ __MUL_ASSERT(false,KInvalidAttribute);
+
+ break;
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CreateVisualisation
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::CreateVisualisation(bool aIsLandscape,bool aIsOrientationChange)
+ {
+ mData->mOrientationChange = aIsOrientationChange;
+
+ // set the default attribue of the template
+ // irrespective of the orientation
+ mData->mUiOnOffFlag = false;
+ mData->mMaxVisibleCount = 3;
+ mData->mEnhancedSupportFlag = false;
+
+ // store the default attribute in base element
+ mData->mBaseElement->SetFitMode(false);
+
+ if (aIsLandscape)
+ {
+ // create visualisation for landscape
+ CreateLscStructure();
+ }
+ else
+ {
+ // create visualisation for potrait
+ CreatePrtStructure();
+ }
+ mData->mOrientationChange = false;
+ }
+
+// ---------------------------------------------------------------------------
+// CreatePrtStructure
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::CreatePrtStructure()
+ {
+ // list of all component lct verity id.
+ int mainPaneVerityId = 0;
+ int imagePaneCenterVerityId = 0;
+ int counterPaneVerityId = 0;
+
+ CAlfVisual* main = mData->mBaseElement->findVisual(KMainLayoutIndex);
+ CAlfLayout* parentLayout = main->Layout();
+ TSize mainSize = parentLayout->Size().Target().AsSize();
+
+ // get for main layout
+ TAknWindowLineLayout componentLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane(mainPaneVerityId).LayoutLine();
+ TRect mainRect = IconWindowRect(componentLayout, mainSize);
+ main->SetPos(TAlfRealPoint(0,0));
+ main->SetSize(mainRect.Size());
+
+
+ // for deck layout
+ CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&>(
+ static_cast<CAlfLayout*>(main)->Visual(KMainLayoutIndex) );
+ deckLayout.SetSize(mainRect.Size(),0);
+
+ // if set background with some skin id is called before calling set model
+ // then the visual and texture would be created with 0,0 sizes
+ // hence we need to resize them
+ CAlfVisual* backgroundVisual = deckLayout.FindTag(backgroundvisual);
+ if(backgroundVisual)
+ {
+ backgroundVisual->SetSize(mainRect.Size(),0);
+ }
+
+ // for center item
+ componentLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane(imagePaneCenterVerityId).LayoutLine();
+ TRect centerRect = IconWindowRect(componentLayout,mainRect);
+
+ TMulCoverFlowItem highlightItem(centerRect.iTl.iX,
+ centerRect.iTl.iY,centerRect.Size().iWidth,centerRect.Size().iHeight);
+
+ // apply attribute
+ mData->mBaseElement->StoreVisualDimensions(highlightItem,highlightItem,1);
+
+ ApplyCounterAttribute(counterPaneVerityId,mainRect);
+ ApplyTextAttribute(mainRect);
+
+ // set the status of the slider
+ mData->mSliderEnabled = true;
+ ApplySliderAttribute(mainRect);
+ }
+
+// ---------------------------------------------------------------------------
+// CreateLscStructure
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::CreateLscStructure()
+ {
+ // list of all component lct verity id.
+ int mainPaneVerityId = 2;
+ int imagePaneCenterVerityId = 4;
+ int imagePaneRightVerityId = 3;
+ int counterPaneVerityId = 4;
+
+ CAlfVisual* main = mData->mBaseElement->findVisual(KMainLayoutIndex);
+ CAlfLayout* parentLayout = main->Layout();
+ TSize mainSize = parentLayout->Size().Target().AsSize();
+
+ // get for main layout
+ TAknWindowLineLayout componentLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane(mainPaneVerityId).LayoutLine();
+ TRect mainRect = IconWindowRect(componentLayout, mainSize);
+ main->SetPos(TAlfRealPoint(0,0));
+ main->SetSize(mainRect.Size());
+
+
+ // for deck layout
+ CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&>(
+ static_cast<CAlfLayout*>(main)->Visual(KMainLayoutIndex) );
+ deckLayout.SetSize(mainRect.Size(),0);
+
+ // if set background with some skin id is called before calling set model
+ // then the visual and texture would be created with 0,0 sizes
+ // hence we need to resize them
+ CAlfVisual* backgroundVisual = deckLayout.FindTag(backgroundvisual);
+ if(backgroundVisual)
+ {
+ backgroundVisual->SetSize(mainRect.Size(),0);
+ }
+
+ // for center item
+ componentLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane(imagePaneCenterVerityId).LayoutLine();
+ TRect centerRect = IconWindowRect(componentLayout,mainRect);
+
+ TMulCoverFlowItem highlightItem(centerRect.iTl.iX,
+ centerRect.iTl.iY,centerRect.Size().iWidth,centerRect.Size().iHeight);
+
+ // for right item
+ if (AknLayoutUtils::LayoutMirrored())
+ {
+ componentLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane_cp001(imagePaneRightVerityId).LayoutLine();
+ }
+ else
+ {
+ componentLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane_cp002(imagePaneRightVerityId).LayoutLine();
+ }
+ TRect rightItemRect = IconWindowRect(componentLayout,mainRect);
+
+ TMulCoverFlowItem nonHighlightItem(rightItemRect.iTl.iX,
+ rightItemRect.iTl.iY,rightItemRect.Size().iHeight,rightItemRect.Size().iHeight);
+
+ // apply attribute
+ mData->mBaseElement->StoreVisualDimensions(highlightItem,nonHighlightItem,3);
+
+ ApplyCounterAttribute(counterPaneVerityId,mainRect);
+ ApplyTextAttribute(mainRect);
+
+ // set the status of the slider
+ mData->mSliderEnabled = false;
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyCounterAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::ApplyCounterAttribute(int acounterPaneVerityId,const TRect& aMainRect)
+ {
+ TAknTextLineLayout counterComponentLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane_t1(acounterPaneVerityId).LayoutLine();
+
+ TRect counterRect = TextWindowRect(counterComponentLayout,aMainRect);
+ TSize counterSize(counterRect.Size());
+ mData->mCounterDimensions.posx = counterRect.iTl.iX;
+ mData->mCounterDimensions.posy = counterRect.iTl.iY;
+ mData->mCounterDimensions.width = counterSize.iWidth;
+ mData->mCounterDimensions.height = counterSize.iHeight;
+
+ // Set Properties to Counter Visual if we are creating.
+ // no need to apply attribute for orientation change
+ // as all are same.
+ if(!mData->mOrientationChange)
+ {
+ // Create a Counter visual if it is not Created.
+ CAlfTextVisual& counterVisual = mData->mBaseElement->CounterVisual();
+
+ //get font Id for counter
+ int fontId = counterComponentLayout.FontId();
+ int counterFontId = 0x000000FF & fontId;
+ // apply default attribute
+ counterVisual.SetAlign(EAlfAlignHCenter,EAlfAlignVCenter);
+ SetTextStyle(counterFontId, counterVisual);
+
+ // check if user has set some different attribute.
+ TMulVisualColorProperty counterColor = mData->mBaseElement->TextColor(ECounterVisual);
+ if (counterColor.mIsColorSet)
+ {
+ // apply the color set by the application
+ counterVisual.SetColor(counterColor.mColor);
+ }
+ else
+ {
+ // apply the default color
+ counterVisual.SetColor(KRgbWhite);
+ }
+ mData->mCounterFontMaxCharLength = UpdateMaxFontWidth(&counterVisual);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyTextAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::ApplyTextAttribute(const TRect& aMainRect)
+ {
+ // list of all component lct verity id.
+ int textPaneVerityId ;
+ int textPaneBgVerityId ;
+ int textPaneTitleVerityId ;
+ int textPaneDetailVerityId ;
+ float bgTextOpacity;
+
+ if (mData->mControl->IsLandscape())
+ {
+ textPaneVerityId = 3;
+ textPaneBgVerityId = 0;
+ textPaneTitleVerityId = 0;
+ textPaneDetailVerityId = 0;
+ bgTextOpacity = 0.5;
+ }
+ else
+ {
+ textPaneVerityId = 0;
+ textPaneBgVerityId = 0;
+ textPaneTitleVerityId = 0;
+ textPaneDetailVerityId = 0;
+ bgTextOpacity = 0;
+ }
+
+ // set text visibility
+ mData->mBaseElement->StoreTextVisibility( true );
+
+ // Create and apply attribute for text visual.
+
+ CAlfLayout& textLayout = mData->mBaseElement->TextLayout();
+
+ // for parent text layout
+ TAknWindowLineLayout windowLineLayout =
+ AknLayoutScalable_UiAccel::aacf_image_title_pane(textPaneVerityId).LayoutLine();
+ TRect textRect = IconWindowRect(windowLineLayout, aMainRect);
+ TRect textLayoutRect = TRect(0,0,textRect.Width(),textRect.Height());
+
+ // set the position of parent text layout.
+ textLayout.SetPos(textRect.iTl);
+ textLayout.SetSize(textRect.Size());
+
+ // for the background visual
+ CAlfTextVisual* bkgTextVisual = static_cast<CAlfTextVisual*>(
+ textLayout.FindTag(KLitMulBackGround));
+ if(!bkgTextVisual)
+ {
+ bkgTextVisual = CAlfTextVisual::AddNewL(*mData->mControl, &textLayout);
+ bkgTextVisual->SetTagL(KLitMulBackGround);
+ bkgTextVisual->SetFlag(EAlfVisualFlagIgnorePointer);
+ }
+ windowLineLayout =
+ AknLayoutScalable_UiAccel::aacf_image_title_pane_g1(textPaneBgVerityId).LayoutLine();
+ TRect bkgRect = IconWindowRect(windowLineLayout , textLayoutRect);
+ bkgTextVisual->SetSize(bkgRect.Size());
+ bkgTextVisual->SetPos(bkgRect.iTl);
+
+ ApplyBrush(*bkgTextVisual,KRgbBlack,bgTextOpacity);
+
+ ApplyTitleTextAttribute(textPaneTitleVerityId,textLayoutRect);
+ ApplyDetailTextAttribute(textPaneDetailVerityId,textLayoutRect);
+
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyTitleTextAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::ApplyTitleTextAttribute(int atextPaneTitleVerityId,const TRect& aTextLayoutRect)
+ {
+
+ // get the main text layout
+ CAlfLayout& textLayout = mData->mBaseElement->TextLayout();
+
+ // for title visual
+ CAlfViewportLayout *viewPortLayout =static_cast<CAlfViewportLayout*>(
+ textLayout.FindTag(KTitleViewPortLayout));
+ if(viewPortLayout == NULL)
+ {
+ viewPortLayout = CAlfViewportLayout::AddNewL(*mData->mControl,
+ &textLayout);
+ viewPortLayout->SetTagL(KTitleViewPortLayout);
+ viewPortLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ viewPortLayout->SetFlag(EAlfVisualFlagIgnorePointer);
+ }
+ else
+ {
+ viewPortLayout = static_cast <CAlfViewportLayout*>(
+ textLayout.FindTag(KTitleViewPortLayout));
+ }
+ TAknTextLineLayout textWindowLayout =
+ AknLayoutScalable_UiAccel::aacf_image_title_pane_t1(atextPaneTitleVerityId).LayoutLine();
+ TRect titleRect = TextWindowRect(textWindowLayout, aTextLayoutRect);
+ mData->mTitleParentSize = titleRect.Size();
+ viewPortLayout->SetSize(titleRect.Size());
+ viewPortLayout->SetPos(titleRect.iTl);
+ viewPortLayout->SetViewportSize(TAlfRealSize(titleRect.Size()),0);
+ viewPortLayout->SetClipping(true);
+ CAlfTextVisual* textVisual = static_cast<CAlfTextVisual*>(
+ &mData->mBaseElement->CreateTextVisual(KCoverflowTitle,*viewPortLayout));
+
+ if(!mData->mOrientationChange)
+ {
+ //Get font ID
+ int fontId = textWindowLayout.FontId();
+ int textFontId = 0x000000FF & fontId;
+ SetTextStyle(textFontId, *textVisual);
+ mData->mTitleFontMaxCharLength = UpdateMaxFontWidth(textVisual);
+ // Apply default attribute.
+ textVisual->SetAlign(EAlfAlignHLocale,EAlfAlignVCenter);
+ textVisual->SetOpacity(1);
+
+ // check if user has set some different attribute.
+ TMulVisualColorProperty textColor = mData->mBaseElement->TextColor(ETilteDetailTextVisual);
+ if (textColor.mIsColorSet)
+ {
+ // apply the color set by the application
+ textVisual->SetColor(textColor.mColor);
+ }
+ else
+ {
+ // apply the default color
+ textVisual->SetColor(KRgbWhite);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyDetailTextAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::ApplyDetailTextAttribute(int aTextPaneDetailVerityId,const TRect& aTextLayoutRect)
+ {
+ // get the main text layout
+ CAlfLayout& textLayout = mData->mBaseElement->TextLayout();
+
+ CAlfViewportLayout *viewPortLayout = NULL;
+ CAlfTextVisual* textVisual = NULL;
+ viewPortLayout =static_cast<CAlfViewportLayout*>(
+ textLayout.FindTag(KDetailViewPortLayout));
+ if(viewPortLayout == NULL)
+ {
+ viewPortLayout = CAlfViewportLayout::AddNewL(*mData->mControl,
+ &textLayout);
+ viewPortLayout->SetTagL(KDetailViewPortLayout);
+ viewPortLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ viewPortLayout->SetFlag(EAlfVisualFlagIgnorePointer);
+ }
+ else
+ {
+ viewPortLayout = static_cast <CAlfViewportLayout*>(
+ textLayout.FindTag(KDetailViewPortLayout));
+ }
+ TAknTextLineLayout textWindowLayout =
+ AknLayoutScalable_UiAccel::aacf_image_title_pane_t2(aTextPaneDetailVerityId).LayoutLine();
+ TRect detailRect = TextWindowRect(textWindowLayout, aTextLayoutRect);
+ mData->mDetailParentSize = detailRect.Size();
+ viewPortLayout->SetSize(detailRect.Size());
+ viewPortLayout->SetPos(detailRect.iTl);
+ viewPortLayout->SetViewportSize(TAlfRealSize(detailRect.Size()),0);
+
+ viewPortLayout->SetClipping(true);
+ textVisual = static_cast<CAlfTextVisual*>(
+ &mData->mBaseElement->CreateTextVisual(KCoverflowDetail , *viewPortLayout ));
+ if(!mData->mOrientationChange)
+ {
+ //Get font ID
+ int fontId = textWindowLayout.FontId();
+ int textFontId = 0x000000FF & fontId;
+ SetTextStyle(textFontId, *textVisual);
+ mData->mDetailFontMaxCharLength = UpdateMaxFontWidth(textVisual);
+ // Apply default attribute.
+ textVisual->SetAlign(EAlfAlignHLocale,EAlfAlignVCenter);
+ textVisual->SetOpacity(0.7);
+
+ // check if user has set some different attribute.
+ TMulVisualColorProperty textColor = mData->mBaseElement->TextColor(ETilteDetailTextVisual);
+ if (textColor.mIsColorSet)
+ {
+ // apply the color set by the application
+ textVisual->SetColor(textColor.mColor);
+ }
+ else
+ {
+ // apply the default color
+ textVisual->SetColor(KRgbWhite);
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// ApplySliderAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::ApplySliderAttribute(const TRect& aMainRect)
+ {
+ int sliderPaneVerityId = 1;
+
+ TAknWindowLineLayout componentLayout =
+ AknLayoutScalable_UiAccel::aacf_slider_pane(sliderPaneVerityId).LayoutLine();
+ TRect sliderRect = IconWindowRect(componentLayout, aMainRect);
+ TSize sliderSize(sliderRect.Size());
+ mData->mSliderDimensions.height = sliderSize.iHeight;
+ mData->mSliderDimensions.width = sliderSize.iWidth;
+ mData->mSliderDimensions.posx = sliderRect.iTl.iX;
+ mData->mSliderDimensions.posy = sliderRect.iTl.iY;
+ }
+
+ }//namespace ends
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcovertemplate2.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,604 @@
+/*
+* 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: Description of various grid templates
+ *
+*/
+
+
+#include "mulcovertemplates.h"
+#include "mulcoverflowdefinitions.h"
+#include "mulvisualutility.h"
+#include "mulutility.h"
+#include <osn/osnnew.h>
+
+namespace Alf
+ {
+
+MulCoverLogicalTemplate2::~MulCoverLogicalTemplate2()
+ {
+
+ }
+
+//----------------------------------------------------------------
+// PopulateData
+//----------------------------------------------------------------
+//
+void MulCoverLogicalTemplate2::PopulateData ()
+ {
+ //For base element
+ LCTElementStructure* prtBaseElem = new (EMM) LCTElementStructure();
+ //for main layout
+ prtBaseElem->SetId(UString(KBase));
+ LCTVisualStructure* mainPrtVS = new (EMM) LCTVisualStructure();
+ mainPrtVS->SetId(UString(KMainLayout));
+ //@todo:: later these need to be retrieved from LCT utility
+ mainPrtVS->SetPositions(0,0);
+ mainPrtVS->SetDimensions(360,441);
+ mainPrtVS->SetLCTId(UString("uiaccel_main_aa_coverflow_pane"));
+ mainPrtVS->SetVarietyId(3);
+ CustomAttributeStructure* mainPrtOpacity = new (EMM) CustomAttributeStructure(
+ UString("opacity"), UString("1.0"));
+ mainPrtVS->AddAttribute(mainPrtOpacity);
+ prtBaseElem->AddVisualStructure(mainPrtVS);
+ //for item_center
+ LCTVisualStructure* item_centerPrtVS = new (EMM) LCTVisualStructure();
+ item_centerPrtVS->SetId(UString(KItemCentre));
+ item_centerPrtVS->SetPositions(10,22);
+ item_centerPrtVS->SetDimensions(340,340);
+ item_centerPrtVS->SetLCTId(UString("uiaccel_aacf_image_pane"));
+ item_centerPrtVS->SetVarietyId(0);
+
+ CustomAttributeStructure* item_centerPrtFM = new (EMM) CustomAttributeStructure(
+ UString("fitmode"), UString("off"));
+ item_centerPrtVS->AddAttribute(item_centerPrtFM);
+ prtBaseElem->AddVisualStructure(item_centerPrtVS);
+ //for counter visual
+ LCTVisualStructure* counterPrtVS = new (EMM) LCTVisualStructure();
+ counterPrtVS->SetId(UString(KMulCount));
+ counterPrtVS->SetPositions(238,0);
+ counterPrtVS->SetDimensions(112,21);
+ counterPrtVS->SetLCTId(UString("uiaccel_main_aa_coverflow_pane_t1"));
+ counterPrtVS->SetVarietyId(0);
+ //add extra attributes to the gridlayout
+
+ CustomAttributeStructure* stylePrtC = new (EMM) CustomAttributeStructure(
+ UString("style"), UString("qfn_secondary"));
+
+ CustomAttributeStructure* opacityPrtC = new (EMM) CustomAttributeStructure(
+ UString("opacity"), UString("1.0"));
+
+ CustomAttributeStructure* redPrtC = new (EMM) CustomAttributeStructure(
+ UString("red"), UString("255"));
+
+ CustomAttributeStructure* greenPrtC = new (EMM) CustomAttributeStructure(
+ UString("green"), UString("255"));
+
+ CustomAttributeStructure* bluePrtC = new (EMM) CustomAttributeStructure(
+ UString("blue"), UString("255"));
+
+ CustomAttributeStructure* alphaPrtC = new (EMM) CustomAttributeStructure(
+ UString("alpha"), UString("0"));
+
+ CustomAttributeStructure* horizontalalignPrtC = new (EMM) CustomAttributeStructure(
+ UString("horizontalalign"), UString("2"));
+
+ counterPrtVS->AddAttribute(stylePrtC);
+ counterPrtVS->AddAttribute(opacityPrtC);
+ counterPrtVS->AddAttribute(redPrtC);
+ counterPrtVS->AddAttribute(greenPrtC);
+ counterPrtVS->AddAttribute(bluePrtC);
+ counterPrtVS->AddAttribute(alphaPrtC);
+ counterPrtVS->AddAttribute(horizontalalignPrtC);
+
+ //for text layout
+ LCTVisualStructure* textPrtLtVS = new (EMM) LCTVisualStructure();
+ textPrtLtVS->SetId(UString(KText));
+ textPrtLtVS->SetPositions(10,230);
+ textPrtLtVS->SetDimensions(340,82);
+ textPrtLtVS->SetLCTId(UString("uiaccel_aacf_image_title_pane"));
+ textPrtLtVS->SetVarietyId(0);
+ prtBaseElem->AddVisualStructure(textPrtLtVS);
+
+ //for text background
+ LCTVisualStructure* textPrtBgVS = new (EMM) LCTVisualStructure();
+ textPrtBgVS->SetId(UString(KMulBackGround));
+ textPrtBgVS->SetPositions(0,0);
+ textPrtBgVS->SetDimensions(340,82);
+ textPrtBgVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_g1"));
+ textPrtBgVS->SetVarietyId(0);
+ //Add attributes to the text background visual
+ CustomAttributeStructure* bgHaPrtTV = new (EMM) CustomAttributeStructure(
+ UString("horizontalalign"), UString("1"));
+ textPrtBgVS->AddAttribute(bgHaPrtTV);
+ CustomAttributeStructure* bgoPrtTV = new (EMM) CustomAttributeStructure(
+ UString("opacity"), UString("0.5"));
+ textPrtBgVS->AddAttribute(bgoPrtTV);
+ CustomAttributeStructure* bgcPrtTV = new (EMM) CustomAttributeStructure(
+ UString("colour"), UString("0"));
+ textPrtBgVS->AddAttribute(bgcPrtTV);
+ prtBaseElem->AddVisualStructure(textPrtBgVS);
+
+ //for text title
+ LCTVisualStructure* textTPrtVS = new (EMM) LCTVisualStructure();
+ textTPrtVS->SetId(UString(KMulTitle));
+ textTPrtVS->SetPositions(10,9);
+ textTPrtVS->SetDimensions(320,27);
+ textTPrtVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_t1"));
+ textTPrtVS->SetVarietyId(0);
+ //add extra attributes to the countervisual
+ CustomAttributeStructure* textTStylePrt = new (EMM) CustomAttributeStructure(
+ UString("style"), UString("qfn_secondary"));
+ textTPrtVS->AddAttribute(textTStylePrt);
+
+ CustomAttributeStructure* textTFtcPrt = new (EMM) CustomAttributeStructure(
+ UString("fontthemecolor"), UString("9"));
+ textTPrtVS->AddAttribute(textTFtcPrt);
+
+ CustomAttributeStructure* textTHaPrt = new (EMM) CustomAttributeStructure(
+ UString("horizontalalign"), UString("1"));
+ textTPrtVS->AddAttribute(textTHaPrt);
+
+ CustomAttributeStructure* textTVaPrt = new (EMM) CustomAttributeStructure(
+ UString("verticalalign"), UString("1"));
+ textTPrtVS->AddAttribute(textTVaPrt);
+
+ CustomAttributeStructure* textTRedPrt = new (EMM) CustomAttributeStructure(
+ UString("red"), UString("255"));
+ textTPrtVS->AddAttribute(textTRedPrt);
+
+ CustomAttributeStructure* textTGreenPrt = new (EMM) CustomAttributeStructure(
+ UString("green"), UString("255"));
+ textTPrtVS->AddAttribute(textTGreenPrt);
+
+ CustomAttributeStructure* textTBluePrt = new (EMM) CustomAttributeStructure(
+ UString("blue"), UString("255"));
+ textTPrtVS->AddAttribute(textTBluePrt);
+
+ CustomAttributeStructure* textTAlphaPrt = new (EMM) CustomAttributeStructure(
+ UString("alpha"), UString("0"));
+ textTPrtVS->AddAttribute(textTAlphaPrt);
+
+ CustomAttributeStructure* textTTsciPrt = new (EMM) CustomAttributeStructure(
+ UString("textskincolorid"), UString("KAknsIIDQsnTextColors"));
+ textTPrtVS->AddAttribute(textTTsciPrt);
+
+ CustomAttributeStructure* textTTcsiPrt = new (EMM) CustomAttributeStructure(
+ UString("textcolorskinindex"), UString("5"));
+ textTPrtVS->AddAttribute(textTTcsiPrt);
+
+ CustomAttributeStructure* textTOpacityPrt = new (EMM) CustomAttributeStructure(
+ UString("opacity"), UString("1.0"));
+ textTPrtVS->AddAttribute(textTOpacityPrt);
+
+ prtBaseElem->AddVisualStructure(textTPrtVS);
+
+ //for text detail
+ LCTVisualStructure* textDPrtVS = new (EMM) LCTVisualStructure();
+ textDPrtVS->SetId(UString(KMulDetail));
+ textDPrtVS->SetPositions(10,46);
+ textDPrtVS->SetDimensions(320,27);
+ textDPrtVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_t2"));
+ textDPrtVS->SetVarietyId(0);
+ //add extra attributes to the countervisual
+ CustomAttributeStructure* textDStylePrt = new (EMM) CustomAttributeStructure(
+ UString("style"), UString("qfn_secondary"));
+ textDPrtVS->AddAttribute(textDStylePrt);
+
+ CustomAttributeStructure* textDFtcPrt = new (EMM) CustomAttributeStructure(
+ UString("fontthemecolor"), UString("9"));
+ textDPrtVS->AddAttribute(textDFtcPrt);
+
+ CustomAttributeStructure* textDHaPrt = new (EMM) CustomAttributeStructure(
+ UString("horizontalalign"), UString("1"));
+ textDPrtVS->AddAttribute(textDHaPrt);
+
+ CustomAttributeStructure* textDVaPrt = new (EMM) CustomAttributeStructure(
+ UString("verticalalign"), UString("1"));
+ textDPrtVS->AddAttribute(textDVaPrt);
+
+ CustomAttributeStructure* textDRedPrt = new (EMM) CustomAttributeStructure(
+ UString("red"), UString("255"));
+ textDPrtVS->AddAttribute(textTRedPrt);
+
+ CustomAttributeStructure* textDGreenPrt = new (EMM) CustomAttributeStructure(
+ UString("green"), UString("255"));
+ textDPrtVS->AddAttribute(textTGreenPrt);
+
+ CustomAttributeStructure* textDBluePrt = new (EMM) CustomAttributeStructure(
+ UString("blue"), UString("255"));
+ textDPrtVS->AddAttribute(textTBluePrt);
+
+ CustomAttributeStructure* textDAlphaPrt = new (EMM) CustomAttributeStructure(
+ UString("alpha"), UString("0"));
+ textDPrtVS->AddAttribute(textTAlphaPrt);
+
+ CustomAttributeStructure* textDTsciPrt = new (EMM) CustomAttributeStructure(
+ UString("textskincolorid"), UString("KAknsIIDQsnTextColors"));
+ textDPrtVS->AddAttribute(textTTsciPrt);
+
+ CustomAttributeStructure* textDTcsiPrt = new (EMM) CustomAttributeStructure(
+ UString("textcolorskinindex"), UString("5"));
+ textDPrtVS->AddAttribute(textDTcsiPrt);
+
+ CustomAttributeStructure* textDOpacityPrt = new (EMM) CustomAttributeStructure(
+ UString("opacity"), UString("0.7"));
+ textDPrtVS->AddAttribute(textDOpacityPrt);
+
+ CustomAttributeStructure* textDMarqueePrt = new (EMM) CustomAttributeStructure(
+ UString("marquee"), UString("yes"));
+ textDPrtVS->AddAttribute(textDMarqueePrt);
+
+ prtBaseElem->AddVisualStructure(textDPrtVS);
+
+ prtBaseElem->AddVisualStructure(counterPrtVS);
+
+ mTemplatePrtStruct.push_back(prtBaseElem);
+
+ //now populate data for prtNonhilightElem element
+ //----------------------------------------------------------------------
+ LCTElementStructure* prtNonhilightElem = new (EMM) LCTElementStructure();
+ prtNonhilightElem->SetId(UString("nohighlight"));
+
+ //for backgroung of non-highlighted imagevisual
+ LCTVisualStructure* nHPrtDeckVs = new (EMM) LCTVisualStructure();
+ nHPrtDeckVs->SetId(UString("deck"));
+ CustomAttributeStructure* nHPrtDeckOpacity = new CustomAttributeStructure(
+ UString("opacity"),UString("1.0"),EAttributeOpacity);
+ nHPrtDeckVs->AddAttribute(nHPrtDeckOpacity);
+ prtNonhilightElem->AddVisualStructure(nHPrtDeckVs);
+
+ //for non-highlighted imagevisual
+ LCTVisualStructure* nonHPrtIcon = new (EMM) LCTVisualStructure();
+ nonHPrtIcon->SetVisualType(EVisualImage);
+ nonHPrtIcon->SetId(UString("mul_icon"));
+ nonHPrtIcon->SetPositions(0,0);
+ nonHPrtIcon->SetDimensions(340,340);
+ nonHPrtIcon->SetLCTId(UString("uiaccel_aacf_image_pane_g1"));
+ nonHPrtIcon->SetVarietyId(0);
+
+ //ADD EXTRA ATTRIBUTE FOR FITMODE
+
+ CustomAttributeStructure* nonHIPath = new CustomAttributeStructure(
+ UString("imagepath"),UString("mul_icon"),EAttributeNone,
+ ECategoryData);
+ nonHPrtIcon->AddAttribute(nonHIPath);
+
+ CustomAttributeStructure* nHIOpacity = new CustomAttributeStructure(
+ UString("opacity"),UString("1.0"),EAttributeOpacity);
+ nonHPrtIcon->AddAttribute(nHIOpacity);
+
+ prtNonhilightElem->AddVisualStructure(nonHPrtIcon);
+
+ mTemplatePrtStruct.push_back(prtNonhilightElem);
+
+ //now populate data for prthilightElem element
+ //----------------------------------------------------------------------
+ LCTElementStructure* prtHilightElem = new (EMM) LCTElementStructure();
+ prtHilightElem->SetId(UString("highlight"));
+
+ //for backgroung of non-highlighted imagevisual
+ LCTVisualStructure* hPrtDeckVs = new (EMM) LCTVisualStructure();
+ hPrtDeckVs->SetId(UString("deck"));
+ CustomAttributeStructure* hDeckOpacity = new CustomAttributeStructure(
+ UString("opacity"),UString("1.0"),EAttributeOpacity);
+ hPrtDeckVs->AddAttribute(hDeckOpacity);
+ prtHilightElem->AddVisualStructure(hPrtDeckVs);
+
+ //for non-highlighted imagevisual
+ LCTVisualStructure* hPrtIcon = new (EMM) LCTVisualStructure();
+ hPrtIcon->SetVisualType(EVisualImage);
+ hPrtIcon->SetId(UString("mul_icon"));
+ hPrtIcon->SetPositions(0,0);
+ hPrtIcon->SetDimensions(340,340);
+ hPrtIcon->SetLCTId(UString("uiaccel_main_aa_coverflow_pane"));
+ hPrtIcon->SetVarietyId(0);
+
+ //ADD EXTRA ATTRIBUTE FOR FITMODE
+
+ CustomAttributeStructure* hIPath = new CustomAttributeStructure(
+ UString("mul_icon"),UString("imagepath"),EAttributeNone,
+ ECategoryData);
+ hPrtIcon->AddAttribute(hIPath);
+
+ CustomAttributeStructure* hIOpacity = new CustomAttributeStructure(
+ UString("opacity"),UString("1.0"),EAttributeOpacity);
+ hPrtIcon->AddAttribute(hIOpacity);
+
+ prtHilightElem->AddVisualStructure(hPrtIcon);
+
+ mTemplatePrtStruct.push_back(prtHilightElem);
+
+ //==========================================================================
+ //same procedure for filling up of LSC
+ //==========================================================================
+ //for main layout
+ LCTElementStructure* lscBaseElem = new (EMM) LCTElementStructure();
+ lscBaseElem->SetId(UString("base"));
+ LCTVisualStructure* mainLscVS2 = new (EMM) LCTVisualStructure();
+ mainLscVS2->SetId(UString("mainlayout"));
+ mainLscVS2->SetPositions(0,0);
+ mainLscVS2->SetDimensions(502,299);
+ mainLscVS2->SetLCTId(UString("uiaccel_main_aa_coverflow_pane"));
+ mainLscVS2->SetVarietyId(0);
+ CustomAttributeStructure* mainLscOpacity = new (EMM) CustomAttributeStructure(
+ UString("opacity"), UString("1.0"));
+ mainLscVS2->AddAttribute(mainLscOpacity);
+ lscBaseElem->AddVisualStructure(mainLscVS2);
+ //for item_center
+ LCTVisualStructure* item_centerLscVs = new (EMM) LCTVisualStructure();
+ item_centerLscVs->SetId(UString("item_center"));
+ item_centerLscVs->SetPositions(114,16);
+ item_centerLscVs->SetDimensions(266,266);
+ item_centerLscVs->SetLCTId(UString("uiaccel_aacf_image_pane"));
+ item_centerLscVs->SetVarietyId(1);
+ CustomAttributeStructure* item_centerLscFM = new (EMM) CustomAttributeStructure(
+ UString("fitmode"), UString("off"));
+ item_centerLscVs->AddAttribute(item_centerLscFM);
+ lscBaseElem->AddVisualStructure(item_centerLscVs);
+ // For Counter
+ LCTVisualStructure* counterLscVS = new (EMM) LCTVisualStructure();
+ counterLscVS->SetId(UString("mul_count"));
+ counterLscVS->SetPositions(420,32);
+ counterLscVS->SetDimensions(112,21);
+ counterLscVS->SetLCTId(UString("uiaccel_main_aa_coverflow_pane_t1"));
+ counterLscVS->SetVarietyId(1);
+ //add extra attributes to the gridlayout
+ CustomAttributeStructure* styleLscC = new (EMM) CustomAttributeStructure(
+ UString("style"), UString("qfn_secondary"));
+
+ CustomAttributeStructure* opacityLscC = new (EMM) CustomAttributeStructure(
+ UString("opacity"), UString("1.0"));
+
+ CustomAttributeStructure* redLscC = new (EMM) CustomAttributeStructure(
+ UString("red"), UString("255"));
+
+ CustomAttributeStructure* greenLscC = new (EMM) CustomAttributeStructure(
+ UString("green"), UString("255"));
+
+ CustomAttributeStructure* blueLscC = new (EMM) CustomAttributeStructure(
+ UString("blue"), UString("255"));
+
+ CustomAttributeStructure* alphaLscC = new (EMM) CustomAttributeStructure(
+ UString("alpha"), UString("0"));
+
+ CustomAttributeStructure* horizontalalignLscC = new (EMM) CustomAttributeStructure(
+ UString("horizontalalign"), UString("2"));
+
+ counterLscVS->AddAttribute(styleLscC);
+ counterLscVS->AddAttribute(opacityLscC);
+ counterLscVS->AddAttribute(redLscC);
+ counterLscVS->AddAttribute(greenLscC);
+ counterLscVS->AddAttribute(blueLscC);
+ counterLscVS->AddAttribute(alphaLscC);
+ counterLscVS->AddAttribute(horizontalalignLscC);
+
+ lscBaseElem->AddVisualStructure(counterLscVS);
+
+ //for text layout
+ LCTVisualStructure* textLscLtVS = new (EMM) LCTVisualStructure();
+ textLscLtVS->SetId(UString(KText));
+ textLscLtVS->SetPositions(114,210);
+ textLscLtVS->SetDimensions(266,72);
+ textLscLtVS->SetLCTId(UString("uiaccel_aacf_image_title_pane"));
+ textLscLtVS->SetVarietyId(1);
+ lscBaseElem->AddVisualStructure(textLscLtVS);
+
+ //for text background
+ LCTVisualStructure* textLscBgVS = new (EMM) LCTVisualStructure();
+ textLscBgVS->SetId(UString(KMulBackGround));
+ textLscBgVS->SetPositions(0,0);
+ textLscBgVS->SetDimensions(266,72);
+ textLscBgVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_g1"));
+ textLscBgVS->SetVarietyId(0);
+ //Add attributes to the text background visual
+ CustomAttributeStructure* bgHaLscTV = new (EMM) CustomAttributeStructure(
+ UString("horizontalalign"), UString("1"));
+ textLscBgVS->AddAttribute(bgHaLscTV);
+ CustomAttributeStructure* bgoLscTV = new (EMM) CustomAttributeStructure(
+ UString("opacity"), UString("0.5"));
+ textLscBgVS->AddAttribute(bgoLscTV);
+ CustomAttributeStructure* bgcLscTV = new (EMM) CustomAttributeStructure(
+ UString("colour"), UString("0"));
+ textLscBgVS->AddAttribute(bgcLscTV);
+ lscBaseElem->AddVisualStructure(textLscBgVS);
+
+ //for text title
+ LCTVisualStructure* textTLscVS = new (EMM) LCTVisualStructure();
+ textTLscVS->SetId(UString(KMulTitle));
+ textTLscVS->SetPositions(3,4);
+ textTLscVS->SetDimensions(260,27);
+ textTLscVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_t1"));
+ textTLscVS->SetVarietyId(0);
+ //add extra attributes to the countervisual
+ CustomAttributeStructure* textTStyleLsc = new (EMM) CustomAttributeStructure(
+ UString("style"), UString("qfn_secondary"));
+ textTLscVS->AddAttribute(textTStyleLsc);
+
+ CustomAttributeStructure* textTFtcLsc = new (EMM) CustomAttributeStructure(
+ UString("fontthemecolor"), UString("9"));
+ textTLscVS->AddAttribute(textTFtcLsc);
+
+ CustomAttributeStructure* textTHaLsc = new (EMM) CustomAttributeStructure(
+ UString("horizontalalign"), UString("1"));
+ textTLscVS->AddAttribute(textTHaLsc);
+
+ CustomAttributeStructure* textTVaLsc = new (EMM) CustomAttributeStructure(
+ UString("verticalalign"), UString("1"));
+ textTLscVS->AddAttribute(textTVaLsc);
+
+ CustomAttributeStructure* textTRedLsc = new (EMM) CustomAttributeStructure(
+ UString("red"), UString("255"));
+ textTLscVS->AddAttribute(textTRedLsc);
+
+ CustomAttributeStructure* textTGreenLsc = new (EMM) CustomAttributeStructure(
+ UString("green"), UString("255"));
+ textTLscVS->AddAttribute(textTGreenLsc);
+
+ CustomAttributeStructure* textTBlueLsc = new (EMM) CustomAttributeStructure(
+ UString("blue"), UString("255"));
+ textTLscVS->AddAttribute(textTBlueLsc);
+
+ CustomAttributeStructure* textTAlphaLsc = new (EMM) CustomAttributeStructure(
+ UString("alpha"), UString("0"));
+ textTLscVS->AddAttribute(textTAlphaLsc);
+
+ CustomAttributeStructure* textTTsciLsc = new (EMM) CustomAttributeStructure(
+ UString("textskincolorid"), UString("KAknsIIDQsnTextColors"));
+ textTLscVS->AddAttribute(textTTsciLsc);
+
+ CustomAttributeStructure* textTTcsiLsc = new (EMM) CustomAttributeStructure(
+ UString("textcolorskinindex"), UString("5"));
+ textTLscVS->AddAttribute(textTTcsiLsc);
+
+ CustomAttributeStructure* textTOpacityLsc = new (EMM) CustomAttributeStructure(
+ UString("opacity"), UString("1.0"));
+ textTLscVS->AddAttribute(textTOpacityLsc);
+
+ lscBaseElem->AddVisualStructure(textTLscVS);
+
+ //for text detail
+ LCTVisualStructure* textDLscVS = new (EMM) LCTVisualStructure();
+ textDLscVS->SetId(UString(KMulDetail));
+ textDLscVS->SetPositions(4,38);
+ textDLscVS->SetDimensions(260,27);
+ textDLscVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_t2"));
+ textDLscVS->SetVarietyId(0);
+ //add extra attributes to the countervisual
+ CustomAttributeStructure* textDStyleLsc = new (EMM) CustomAttributeStructure(
+ UString("style"), UString("qfn_secondary"));
+ textDLscVS->AddAttribute(textDStyleLsc);
+
+ CustomAttributeStructure* textDFtcLsc = new (EMM) CustomAttributeStructure(
+ UString("fontthemecolor"), UString("9"));
+ textDLscVS->AddAttribute(textDFtcLsc);
+
+ CustomAttributeStructure* textDHaLsc = new (EMM) CustomAttributeStructure(
+ UString("horizontalalign"), UString("1"));
+ textDLscVS->AddAttribute(textDHaLsc);
+
+ CustomAttributeStructure* textDVaLsc = new (EMM) CustomAttributeStructure(
+ UString("verticalalign"), UString("1"));
+ textDLscVS->AddAttribute(textDVaLsc);
+
+ CustomAttributeStructure* textDRedLsc = new (EMM) CustomAttributeStructure(
+ UString("red"), UString("255"));
+ textDLscVS->AddAttribute(textDRedLsc);
+
+ CustomAttributeStructure* textDGreenLsc = new (EMM) CustomAttributeStructure(
+ UString("green"), UString("255"));
+ textDLscVS->AddAttribute(textDGreenLsc);
+
+ CustomAttributeStructure* textDBlueLsc = new (EMM) CustomAttributeStructure(
+ UString("blue"), UString("255"));
+ textDLscVS->AddAttribute(textDBlueLsc);
+
+ CustomAttributeStructure* textDAlphaLsc = new (EMM) CustomAttributeStructure(
+ UString("alpha"), UString("0"));
+ textDLscVS->AddAttribute(textDAlphaLsc);
+
+ CustomAttributeStructure* textDTsciLsc = new (EMM) CustomAttributeStructure(
+ UString("textskincolorid"), UString("KAknsIIDQsnTextColors"));
+ textDLscVS->AddAttribute(textDTsciLsc);
+
+ CustomAttributeStructure* textDTcsiLsc = new (EMM) CustomAttributeStructure(
+ UString("textcolorskinindex"), UString("5"));
+ textDLscVS->AddAttribute(textDTcsiLsc);
+
+ CustomAttributeStructure* textDOpacityLsc = new (EMM) CustomAttributeStructure(
+ UString("opacity"), UString("0.7"));
+ textDLscVS->AddAttribute(textDOpacityLsc);
+
+ CustomAttributeStructure* textDMarqueeLsc = new (EMM) CustomAttributeStructure(
+ UString("marquee"), UString("yes"));
+ textDLscVS->AddAttribute(textDMarqueeLsc);
+
+ lscBaseElem->AddVisualStructure(textDLscVS);
+ mTemplateLscStruct.push_back(lscBaseElem);
+
+ //now populate data for prtNonhilightElem element
+ //----------------------------------------------------------------------
+ LCTElementStructure* lscNonhilightElem = new (EMM) LCTElementStructure();
+ lscNonhilightElem->SetId(UString("nohighlight"));
+
+ //for backgroung of non-highlighted imagevisual
+ LCTVisualStructure* nHLscDeckVs = new (EMM) LCTVisualStructure();
+ nHLscDeckVs->SetId(UString("deck"));
+ CustomAttributeStructure* nHDeckOpacity = new CustomAttributeStructure(
+ UString("opacity"),UString("1"),EAttributeOpacity);
+ nHLscDeckVs->AddAttribute(nHDeckOpacity);
+ lscNonhilightElem->AddVisualStructure(nHLscDeckVs);
+
+ //for non-highlighted imagevisual
+ LCTVisualStructure* nonHLscIcon = new (EMM) LCTVisualStructure();
+ nonHLscIcon->SetVisualType(EVisualImage);
+ nonHLscIcon->SetId(UString("mul_icon"));
+ nonHLscIcon->SetPositions(0,0);
+ nonHLscIcon->SetDimensions(640,360);
+ nonHLscIcon->SetLCTId(UString("uiaccel_main_aa_coverflow_pane"));
+ nonHLscIcon->SetVarietyId(1);
+
+ //ADD EXTRA ATTRIBUTE FOR FITMODE
+
+ CustomAttributeStructure* nonHLscIPath = new CustomAttributeStructure(
+ UString("imagepath"),UString("mul_icon"),EAttributeNone,
+ ECategoryData);
+ nonHLscIcon->AddAttribute(nonHLscIPath);
+
+ CustomAttributeStructure* nHLscIOpacity = new CustomAttributeStructure(
+ UString("opacity"),UString("1"),EAttributeOpacity);
+ nonHLscIcon->AddAttribute(nHLscIOpacity);
+
+ lscNonhilightElem->AddVisualStructure(nonHLscIcon);
+
+ mTemplateLscStruct.push_back(lscNonhilightElem);
+
+ //now populate data for prthilightElem element
+ //----------------------------------------------------------------------
+ LCTElementStructure* lscHilightElem = new (EMM) LCTElementStructure();
+ lscHilightElem->SetId(UString("highlight"));
+
+ //for backgroung of non-highlighted imagevisual
+ LCTVisualStructure* hLscDeckVs = new (EMM) LCTVisualStructure();
+ hLscDeckVs->SetId(UString("deck"));
+ CustomAttributeStructure* hLscDeckOpacity = new CustomAttributeStructure(
+ UString("opacity"),UString("1"),EAttributeOpacity);
+ hLscDeckVs->AddAttribute(hLscDeckOpacity);
+ lscHilightElem->AddVisualStructure(hLscDeckVs);
+
+ //for non-highlighted imagevisual
+ LCTVisualStructure* hLscIcon = new (EMM) LCTVisualStructure();
+ hLscIcon->SetVisualType(EVisualImage);
+ hLscIcon->SetId(UString("mul_icon"));
+ hLscIcon->SetPositions(0,0);
+ hLscIcon->SetDimensions(360,640);
+ hLscIcon->SetLCTId(UString("uiaccel_main_aa_coverflow_pane"));
+ hLscIcon->SetVarietyId(1);
+
+ //ADD EXTRA ATTRIBUTE FOR FITMODE
+
+ CustomAttributeStructure* hLscIPath = new CustomAttributeStructure(
+ UString("imagepath"),UString("mul_icon"),EAttributeNone,
+ ECategoryData);
+ hLscIcon->AddAttribute(hLscIPath);
+
+ CustomAttributeStructure* hLscIOpacity = new CustomAttributeStructure(
+ UString("opacity"),UString("1"),EAttributeOpacity);
+ hLscIcon->AddAttribute(hLscIOpacity);
+
+ lscHilightElem->AddVisualStructure(hLscIcon);
+
+ mTemplateLscStruct.push_back(lscHilightElem);
+ }
+
+ }//namespace ends
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcovertemplate3.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,499 @@
+/*
+* 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: Description of various grid templates
+ *
+*/
+
+
+#include "mulcovertemplates.h"
+#include "mulcoverflowdefinitions.h"
+#include "mulvisualutility.h"
+#include "mulutility.h"
+#include <osn/osnnew.h>
+
+namespace Alf
+ {
+
+MulCoverLogicalTemplate3::~MulCoverLogicalTemplate3()
+ {
+
+ }
+
+//----------------------------------------------------------------
+// PopulateData
+//----------------------------------------------------------------
+//
+void MulCoverLogicalTemplate3::PopulateData ()
+ {
+ //For base element
+ LCTElementStructure* prtBaseElem = new (EMM) LCTElementStructure();
+ //for main layout
+ prtBaseElem->SetId(UString(KBase));
+ LCTVisualStructure* mainPrtVS = new (EMM) LCTVisualStructure();
+ mainPrtVS->SetId(UString(KMainLayout));
+ //@todo:: later these need to be retrieved from LCT utility
+ mainPrtVS->SetPositions(0,0);
+ mainPrtVS->SetDimensions(360,519);
+ mainPrtVS->SetLCTId(UString("uiaccel_main_aa_coverflow_pane"));
+ mainPrtVS->SetVarietyId(0);
+ CustomAttributeStructure* mainPrtOpacity = new (EMM) CustomAttributeStructure(
+ UString(KOpacity), UString("1.0"));
+ mainPrtVS->AddAttribute(mainPrtOpacity);
+ CustomAttributeStructure* mainPrtMCount = new (EMM) CustomAttributeStructure(
+ UString(KTempMaxCount), UString("3"));
+ mainPrtVS->AddAttribute(mainPrtMCount);
+ prtBaseElem->AddVisualStructure(mainPrtVS);
+ //for item_center
+ LCTVisualStructure* item_centerPrtVS = new (EMM) LCTVisualStructure();
+ item_centerPrtVS->SetId(UString(KItemCentre));
+ item_centerPrtVS->SetPositions(10,22);
+ item_centerPrtVS->SetDimensions(340,340);
+ item_centerPrtVS->SetLCTId(UString("uiaccel_aacf_image_pane"));
+ item_centerPrtVS->SetVarietyId(0);
+
+ CustomAttributeStructure* item_centerPrtFM = new (EMM) CustomAttributeStructure(
+ UString(KFitMode), UString(KOff));
+ item_centerPrtVS->AddAttribute(item_centerPrtFM);
+ prtBaseElem->AddVisualStructure(item_centerPrtVS);
+ //for counter visual
+ LCTVisualStructure* counterPrtVS = new (EMM) LCTVisualStructure();
+ counterPrtVS->SetId(UString(KMulCount));
+ counterPrtVS->SetPositions(238,0);
+ counterPrtVS->SetDimensions(112,21);
+ counterPrtVS->SetLCTId(UString("uiaccel_main_aa_coverflow_pane_t1"));
+ counterPrtVS->SetVarietyId(0);
+ //add extra attributes to the countervisual
+
+ CustomAttributeStructure* stylePrtC = new (EMM) CustomAttributeStructure(
+ UString(KTextStyle), UString("qfn_secondary"));
+
+ CustomAttributeStructure* opacityPrtC = new (EMM) CustomAttributeStructure(
+ UString(KOpacity), UString("1.0"));
+
+ CustomAttributeStructure* redPrtC = new (EMM) CustomAttributeStructure(
+ UString(KRedColorAttrib), UString("255"));
+
+ CustomAttributeStructure* greenPrtC = new (EMM) CustomAttributeStructure(
+ UString(KGreenColorAttrib), UString("255"));
+
+ CustomAttributeStructure* bluePrtC = new (EMM) CustomAttributeStructure(
+ UString(KBlueColorAttrib), UString("255"));
+
+ CustomAttributeStructure* alphaPrtC = new (EMM) CustomAttributeStructure(
+ UString(KAlphaColorAttrib), UString("0"));
+
+ CustomAttributeStructure* horizontalalignPrtC = new (EMM) CustomAttributeStructure(
+ UString("horizontalalign"), UString("2"));
+
+ counterPrtVS->AddAttribute(stylePrtC);
+ counterPrtVS->AddAttribute(opacityPrtC);
+ counterPrtVS->AddAttribute(redPrtC);
+ counterPrtVS->AddAttribute(greenPrtC);
+ counterPrtVS->AddAttribute(bluePrtC);
+ counterPrtVS->AddAttribute(alphaPrtC);
+ counterPrtVS->AddAttribute(horizontalalignPrtC);
+
+ prtBaseElem->AddVisualStructure(counterPrtVS);
+
+ //for text layout
+ LCTVisualStructure* textPrtLtVS = new (EMM) LCTVisualStructure();
+ textPrtLtVS->SetId(UString(KText));
+ textPrtLtVS->SetPositions(20,360);
+ textPrtLtVS->SetDimensions(340,82);
+ textPrtLtVS->SetLCTId(UString("uiaccel_aacf_image_title_pane"));
+ textPrtLtVS->SetVarietyId(4);
+ prtBaseElem->AddVisualStructure(textPrtLtVS);
+
+ //for text background
+ LCTVisualStructure* textPrtBgVS = new (EMM) LCTVisualStructure();
+ textPrtBgVS->SetId(UString(KMulBackGround));
+ textPrtBgVS->SetPositions(0,0);
+ textPrtBgVS->SetDimensions(340,82);
+ textPrtBgVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_g1"));
+ textPrtBgVS->SetVarietyId(0);
+ //Add attributes to the text background visual
+ CustomAttributeStructure* bgHaPrtTV = new (EMM) CustomAttributeStructure(
+ UString(KHorzAlign), UString("1"));
+ textPrtBgVS->AddAttribute(bgHaPrtTV);
+ CustomAttributeStructure* bgoPrtTV = new (EMM) CustomAttributeStructure(
+ UString(KOpacity), UString("0.0"));
+ textPrtBgVS->AddAttribute(bgoPrtTV);
+ CustomAttributeStructure* bgcPrtTV = new (EMM) CustomAttributeStructure(
+ UString(KColor), UString("0"));
+ textPrtBgVS->AddAttribute(bgcPrtTV);
+ prtBaseElem->AddVisualStructure(textPrtBgVS);
+
+ //for text title
+ LCTVisualStructure* textTPrtVS = new (EMM) LCTVisualStructure();
+ textTPrtVS->SetId(UString(KMulTitle));
+ textTPrtVS->SetPositions(15,9);
+ textTPrtVS->SetDimensions(310,27);
+ textTPrtVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_t1"));
+ textTPrtVS->SetVarietyId(0);
+ //add extra attributes to the countervisual
+ CustomAttributeStructure* textTStylePrt = new (EMM) CustomAttributeStructure(
+ UString(KTextStyle), UString("qfn_secondary"));
+ textTPrtVS->AddAttribute(textTStylePrt);
+
+ CustomAttributeStructure* textTFtcPrt = new (EMM) CustomAttributeStructure(
+ UString(KFontThemeColor), UString("9"));
+ textTPrtVS->AddAttribute(textTFtcPrt);
+
+ CustomAttributeStructure* textTHaPrt = new (EMM) CustomAttributeStructure(
+ UString(KHorzAlign), UString("1"));
+ textTPrtVS->AddAttribute(textTHaPrt);
+
+ CustomAttributeStructure* textTVaPrt = new (EMM) CustomAttributeStructure(
+ UString(KVertAlign), UString("1"));
+ textTPrtVS->AddAttribute(textTVaPrt);
+
+ CustomAttributeStructure* textTRedPrt = new (EMM) CustomAttributeStructure(
+ UString(KRedColorAttrib), UString("255"));
+ textTPrtVS->AddAttribute(textTRedPrt);
+
+ CustomAttributeStructure* textTGreenPrt = new (EMM) CustomAttributeStructure(
+ UString(KGreenColorAttrib), UString("255"));
+ textTPrtVS->AddAttribute(textTGreenPrt);
+
+ CustomAttributeStructure* textTBluePrt = new (EMM) CustomAttributeStructure(
+ UString(KBlueColorAttrib), UString("255"));
+ textTPrtVS->AddAttribute(textTBluePrt);
+
+ CustomAttributeStructure* textTAlphaPrt = new (EMM) CustomAttributeStructure(
+ UString(KAlphaColorAttrib), UString("0"));
+ textTPrtVS->AddAttribute(textTAlphaPrt);
+
+ CustomAttributeStructure* textTTsciPrt = new (EMM) CustomAttributeStructure(
+ UString(KTextSkinColorId), UString("KAknsIIDQsnTextColors"));
+ textTPrtVS->AddAttribute(textTTsciPrt);
+
+ CustomAttributeStructure* textTTcsiPrt = new (EMM) CustomAttributeStructure(
+ UString(KTextColorSkinIndex), UString("5"));
+ textTPrtVS->AddAttribute(textTTcsiPrt);
+
+ CustomAttributeStructure* textTOpacityPrt = new (EMM) CustomAttributeStructure(
+ UString(KOpacity), UString("1.0"));
+ textTPrtVS->AddAttribute(textTOpacityPrt);
+
+ prtBaseElem->AddVisualStructure(textTPrtVS);
+
+ //for text detail
+ LCTVisualStructure* textDPrtVS = new (EMM) LCTVisualStructure();
+ textDPrtVS->SetId(UString(KMulDetail));
+ textDPrtVS->SetPositions(15,46);
+ textDPrtVS->SetDimensions(310,27);
+ textDPrtVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_t2"));
+ textDPrtVS->SetVarietyId(0);
+ //add extra attributes to the countervisual
+ CustomAttributeStructure* textDStylePrt = new (EMM) CustomAttributeStructure(
+ UString(KTextStyle), UString("qfn_secondary"));
+ textDPrtVS->AddAttribute(textDStylePrt);
+
+ CustomAttributeStructure* textDFtcPrt = new (EMM) CustomAttributeStructure(
+ UString(KFontThemeColor), UString("9"));
+ textDPrtVS->AddAttribute(textDFtcPrt);
+
+ CustomAttributeStructure* textDHaPrt = new (EMM) CustomAttributeStructure(
+ UString(KHorzAlign), UString("1"));
+ textDPrtVS->AddAttribute(textDHaPrt);
+
+ CustomAttributeStructure* textDVaPrt = new (EMM) CustomAttributeStructure(
+ UString(KVertAlign), UString("1"));
+ textDPrtVS->AddAttribute(textDVaPrt);
+
+ CustomAttributeStructure* textDRedPrt = new (EMM) CustomAttributeStructure(
+ UString(KRedColorAttrib), UString("255"));
+ textDPrtVS->AddAttribute(textDRedPrt);
+
+ CustomAttributeStructure* textDGreenPrt = new (EMM) CustomAttributeStructure(
+ UString(KGreenColorAttrib), UString("255"));
+ textDPrtVS->AddAttribute(textDGreenPrt);
+
+ CustomAttributeStructure* textDBluePrt = new (EMM) CustomAttributeStructure(
+ UString(KBlueColorAttrib), UString("255"));
+ textDPrtVS->AddAttribute(textDBluePrt);
+
+ CustomAttributeStructure* textDAlphaPrt = new (EMM) CustomAttributeStructure(
+ UString(KAlphaColorAttrib), UString("0"));
+ textDPrtVS->AddAttribute(textDAlphaPrt);
+
+ CustomAttributeStructure* textDTsciPrt = new (EMM) CustomAttributeStructure(
+ UString(KTextSkinColorId), UString("KAknsIIDQsnTextColors"));
+ textDPrtVS->AddAttribute(textDTsciPrt);
+
+ CustomAttributeStructure* textDTcsiPrt = new (EMM) CustomAttributeStructure(
+ UString(KTextColorSkinIndex), UString("5"));
+ textDPrtVS->AddAttribute(textDTcsiPrt);
+
+ CustomAttributeStructure* textDOpacityPrt = new (EMM) CustomAttributeStructure(
+ UString(KOpacity), UString("0.7"));
+ textDPrtVS->AddAttribute(textDOpacityPrt);
+
+ CustomAttributeStructure* textDMarqueePrt = new (EMM) CustomAttributeStructure(
+ UString(KMarquee), UString("yes"));
+ textDPrtVS->AddAttribute(textDMarqueePrt);
+
+ prtBaseElem->AddVisualStructure(textDPrtVS);
+
+ mTemplatePrtStruct.push_back(prtBaseElem);
+
+ //now populate data for slider element
+ //----------------------------------------------------------------------
+ LCTElementStructure* prtSliderElem = new (EMM) LCTElementStructure();
+ prtSliderElem->SetId(UString(KSlider));
+
+ LCTVisualStructure* prtSliderVis = new (EMM)LCTVisualStructure();
+ prtSliderVis->SetPositions(0,441);
+ prtSliderVis->SetDimensions(340,78);
+ prtSliderVis->SetLCTId(UString("uiaccel_aacf_slider_pane"));
+ prtSliderVis->SetVarietyId(0);
+
+ CustomAttributeStructure* sliderPrtOpacity = new CustomAttributeStructure(
+ UString(KTemplateId),UString("1"));
+ prtSliderVis->AddAttribute(sliderPrtOpacity);
+
+ CustomAttributeStructure* sliderPrtTemplate = new CustomAttributeStructure(
+ UString(KOpacity),UString("1.0"),EAttributeOpacity);
+ prtSliderVis->AddAttribute(sliderPrtTemplate);
+
+ prtSliderElem->AddVisualStructure(prtSliderVis);
+
+ mTemplatePrtStruct.push_back(prtSliderElem);
+ //==========================================================================
+ //same procedure for filling up of LSC
+ //==========================================================================
+ //for main layout
+ LCTElementStructure* lscBaseElem = new (EMM) LCTElementStructure();
+ lscBaseElem->SetId(UString(KBase));
+ LCTVisualStructure* mainLscVS2 = new (EMM) LCTVisualStructure();
+ mainLscVS2->SetId(UString(KMainLayout));
+ mainLscVS2->SetPositions(0,0);
+ mainLscVS2->SetDimensions(640,360);
+ mainLscVS2->SetLCTId(UString("uiaccel_main_aa_coverflow_pane"));
+ mainLscVS2->SetVarietyId(1);
+ CustomAttributeStructure* mainLscOpacity = new (EMM) CustomAttributeStructure(
+ UString(KOpacity), UString("1.0"));
+ mainLscVS2->AddAttribute(mainLscOpacity);
+ CustomAttributeStructure* mainLscMCount = new (EMM) CustomAttributeStructure(
+ UString(KTempMaxCount), UString("3"));
+ mainLscVS2->AddAttribute(mainLscMCount);
+ CustomAttributeStructure* mainLscFScroll = new (EMM) CustomAttributeStructure(
+ UString(KFastScroll), UString("0"));
+ mainLscVS2->AddAttribute(mainLscFScroll);
+ lscBaseElem->AddVisualStructure(mainLscVS2);
+ //for item_center
+ LCTVisualStructure* item_centerLscVs = new (EMM) LCTVisualStructure();
+ item_centerLscVs->SetId(UString(KCentreItem));
+ item_centerLscVs->SetPositions(198,37);
+ item_centerLscVs->SetDimensions(242,242);
+ item_centerLscVs->SetLCTId(UString("uiaccel_aacf_image_pane"));
+ item_centerLscVs->SetVarietyId(2);
+ CustomAttributeStructure* item_centerLscFM = new (EMM) CustomAttributeStructure(
+ UString(KFitMode), UString(KOff));
+ item_centerLscVs->AddAttribute(item_centerLscFM);
+ lscBaseElem->AddVisualStructure(item_centerLscVs);
+
+ //For item right
+ LCTVisualStructure* item_rightLscVs = new (EMM) LCTVisualStructure();
+ item_rightLscVs->SetId(UString(KRightItem));
+ item_rightLscVs->SetPositions(480,50);
+ item_rightLscVs->SetDimensions(214,214);
+ item_rightLscVs->SetLCTId(UString("uiaccel_aacf_image_pane_cp002"));
+ item_rightLscVs->SetVarietyId(2);
+ lscBaseElem->AddVisualStructure(item_rightLscVs);
+ // For Counter
+ LCTVisualStructure* counterLscVS = new (EMM) LCTVisualStructure();
+ counterLscVS->SetId(UString(KMulCount));
+ counterLscVS->SetPositions(522,6);
+ counterLscVS->SetDimensions(112,21);
+ counterLscVS->SetLCTId(UString("uiaccel_main_aa_coverflow_pane_t1"));
+ counterLscVS->SetVarietyId(2);
+ //add extra attributes to the gridlayout
+
+ CustomAttributeStructure* styleLscC = new (EMM) CustomAttributeStructure(
+ UString(KTextStyle), UString("qfn_secondary"));
+
+ CustomAttributeStructure* opacityLscC = new (EMM) CustomAttributeStructure(
+ UString(KOpacity), UString("1.0"));
+
+ CustomAttributeStructure* redLscC = new (EMM) CustomAttributeStructure(
+ UString(KRedColorAttrib), UString("255"));
+
+ CustomAttributeStructure* greenLscC = new (EMM) CustomAttributeStructure(
+ UString(KGreenColorAttrib), UString("255"));
+
+ CustomAttributeStructure* blueLscC = new (EMM) CustomAttributeStructure(
+ UString(KBlueColorAttrib), UString("255"));
+
+ CustomAttributeStructure* alphaLscC = new (EMM) CustomAttributeStructure(
+ UString(KAlphaColorAttrib), UString("0"));
+
+ CustomAttributeStructure* horizontalalignLscC = new (EMM) CustomAttributeStructure(
+ UString(KHorzAlign), UString("2"));
+
+ counterLscVS->AddAttribute(styleLscC);
+ counterLscVS->AddAttribute(opacityLscC);
+ counterLscVS->AddAttribute(redLscC);
+ counterLscVS->AddAttribute(greenLscC);
+ counterLscVS->AddAttribute(blueLscC);
+ counterLscVS->AddAttribute(alphaLscC);
+ counterLscVS->AddAttribute(horizontalalignLscC);
+
+ lscBaseElem->AddVisualStructure(counterLscVS);
+
+ //for text layout
+ LCTVisualStructure* textLscLtVS = new (EMM) LCTVisualStructure();
+ textLscLtVS->SetId(UString(KText));
+ textLscLtVS->SetPositions(161,284);
+ textLscLtVS->SetDimensions(318,72);
+ textLscLtVS->SetLCTId(UString("uiaccel_aacf_image_title_pane"));
+ textLscLtVS->SetVarietyId(2);
+ lscBaseElem->AddVisualStructure(textLscLtVS);
+
+ //for text background
+ LCTVisualStructure* textLscBgVS = new (EMM) LCTVisualStructure();
+ textLscBgVS->SetId(UString(KMulBackGround));
+ textLscBgVS->SetPositions(0,0);
+ textLscBgVS->SetDimensions(318,72);
+ textLscBgVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_g1"));
+ textLscBgVS->SetVarietyId(1);
+ //Add attributes to the text background visual
+ CustomAttributeStructure* bgHaLscTV = new (EMM) CustomAttributeStructure(
+ UString(KHorzAlign), UString("1"));
+ textLscBgVS->AddAttribute(bgHaLscTV);
+ CustomAttributeStructure* bgoLscTV = new (EMM) CustomAttributeStructure(
+ UString(KOpacity), UString("0.0"));
+ textLscBgVS->AddAttribute(bgoLscTV);
+ CustomAttributeStructure* bgcLscTV = new (EMM) CustomAttributeStructure(
+ UString(KColor), UString("0"));
+ textLscBgVS->AddAttribute(bgcLscTV);
+ lscBaseElem->AddVisualStructure(textLscBgVS);
+
+ //for text title
+ LCTVisualStructure* textTLscVS = new (EMM) LCTVisualStructure();
+ textTLscVS->SetId(UString(KMulTitle));
+ textTLscVS->SetPositions(4,4);
+ textTLscVS->SetDimensions(310,27);
+ textTLscVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_t1"));
+ textTLscVS->SetVarietyId(1);
+ //add extra attributes to the countervisual
+ CustomAttributeStructure* textTStyleLsc = new (EMM) CustomAttributeStructure(
+ UString(KTextStyle), UString("qfn_secondary"));
+ textTLscVS->AddAttribute(textTStyleLsc);
+
+ CustomAttributeStructure* textTFtcLsc = new (EMM) CustomAttributeStructure(
+ UString(KFontThemeColor), UString("9"));
+ textTLscVS->AddAttribute(textTFtcLsc);
+
+ CustomAttributeStructure* textTHaLsc = new (EMM) CustomAttributeStructure(
+ UString(KHorzAlign), UString("1"));
+ textTLscVS->AddAttribute(textTHaLsc);
+
+ CustomAttributeStructure* textTVaLsc = new (EMM) CustomAttributeStructure(
+ UString(KVertAlign), UString("1"));
+ textTLscVS->AddAttribute(textTVaLsc);
+
+ CustomAttributeStructure* textTRedLsc = new (EMM) CustomAttributeStructure(
+ UString(KRedColorAttrib), UString("255"));
+ textTLscVS->AddAttribute(textTRedLsc);
+
+ CustomAttributeStructure* textTGreenLsc = new (EMM) CustomAttributeStructure(
+ UString(KGreenColorAttrib), UString("255"));
+ textTLscVS->AddAttribute(textTGreenLsc);
+
+ CustomAttributeStructure* textTBlueLsc = new (EMM) CustomAttributeStructure(
+ UString(KBlueColorAttrib), UString("255"));
+ textTLscVS->AddAttribute(textTBlueLsc);
+
+ CustomAttributeStructure* textTAlphaLsc = new (EMM) CustomAttributeStructure(
+ UString(KAlphaColorAttrib), UString("0"));
+ textTLscVS->AddAttribute(textTAlphaLsc);
+
+ CustomAttributeStructure* textTTsciLsc = new (EMM) CustomAttributeStructure(
+ UString(KTextSkinColorId), UString("KAknsIIDQsnTextColors"));
+ textTLscVS->AddAttribute(textTTsciLsc);
+
+ CustomAttributeStructure* textTTcsiLsc = new (EMM) CustomAttributeStructure(
+ UString(KTextColorSkinIndex), UString("5"));
+ textTLscVS->AddAttribute(textTTcsiLsc);
+
+ CustomAttributeStructure* textTOpacityLsc = new (EMM) CustomAttributeStructure(
+ UString(KOpacity), UString("1.0"));
+ textTLscVS->AddAttribute(textTOpacityLsc);
+
+ lscBaseElem->AddVisualStructure(textTLscVS);
+
+ //for text detail
+ LCTVisualStructure* textDLscVS = new (EMM) LCTVisualStructure();
+ textDLscVS->SetId(UString(KMulDetail));
+ textDLscVS->SetPositions(4,38);
+ textDLscVS->SetDimensions(310,27);
+ textDLscVS->SetLCTId(UString("uiaccel_aacf_image_title_pane_t2"));
+ textDLscVS->SetVarietyId(1);
+ //add extra attributes to the countervisual
+ CustomAttributeStructure* textDStyleLsc = new (EMM) CustomAttributeStructure(
+ UString(KTextStyle), UString("qfn_secondary"));
+ textDLscVS->AddAttribute(textDStyleLsc);
+
+ CustomAttributeStructure* textDFtcLsc = new (EMM) CustomAttributeStructure(
+ UString(KFontThemeColor), UString("9"));
+ textDLscVS->AddAttribute(textDFtcLsc);
+
+ CustomAttributeStructure* textDHaLsc = new (EMM) CustomAttributeStructure(
+ UString(KHorzAlign), UString("1"));
+ textDLscVS->AddAttribute(textDHaLsc);
+
+ CustomAttributeStructure* textDVaLsc = new (EMM) CustomAttributeStructure(
+ UString(KVertAlign), UString("1"));
+ textDLscVS->AddAttribute(textDVaLsc);
+
+ CustomAttributeStructure* textDRedLsc = new (EMM) CustomAttributeStructure(
+ UString(KRedColorAttrib), UString("255"));
+ textDLscVS->AddAttribute(textDRedLsc);
+
+ CustomAttributeStructure* textDGreenLsc = new (EMM) CustomAttributeStructure(
+ UString(KGreenColorAttrib), UString("255"));
+ textDLscVS->AddAttribute(textDGreenLsc);
+
+ CustomAttributeStructure* textDBlueLsc = new (EMM) CustomAttributeStructure(
+ UString(KBlueColorAttrib), UString("255"));
+ textDLscVS->AddAttribute(textDBlueLsc);
+
+ CustomAttributeStructure* textDAlphaLsc = new (EMM) CustomAttributeStructure(
+ UString(KAlphaColorAttrib), UString("0"));
+ textDLscVS->AddAttribute(textDAlphaLsc);
+
+ CustomAttributeStructure* textDTsciLsc = new (EMM) CustomAttributeStructure(
+ UString(KTextSkinColorId), UString("KAknsIIDQsnTextColors"));
+ textDLscVS->AddAttribute(textDTsciLsc);
+
+ CustomAttributeStructure* textDTcsiLsc = new (EMM) CustomAttributeStructure(
+ UString(KTextColorSkinIndex), UString("5"));
+ textDLscVS->AddAttribute(textDTcsiLsc);
+
+ CustomAttributeStructure* textDOpacityLsc = new (EMM) CustomAttributeStructure(
+ UString(KOpacity), UString("0.7"));
+ textDLscVS->AddAttribute(textDOpacityLsc);
+
+ CustomAttributeStructure* textDMarqueeLsc = new (EMM) CustomAttributeStructure(
+ UString(KMarquee), UString("yes"));
+ textDLscVS->AddAttribute(textDMarqueeLsc);
+
+ lscBaseElem->AddVisualStructure(textDLscVS);
+
+ mTemplateLscStruct.push_back(lscBaseElem);
+
+ }
+
+ }//namespace ends
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcovertemplate4.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,340 @@
+/*
+* 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: Description of various grid templates
+ *
+*/
+
+
+#include "mulcoverflowtemplate.h"
+
+#include <AknUtils.h>
+
+#include <alf/alftextvisual.h>
+#include <alf/alfutil.h>
+#include "mulassert.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulCoverLogicalTemplate4
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowTemplate4::MulCoverFlowTemplate4(MulCoverFlowControl &aControl,
+ MulBaseElement &aBaseElement):MulCoverFlowTemplate(aControl, aBaseElement)
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulCoverLogicalTemplate4
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowTemplate4::~MulCoverFlowTemplate4()
+ {
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// GetIconSize
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate4::GetIconSize(mulvisualitem::TVisualAttribute aAttribute,bool aIslandscape, int& aHeight, int& aWidth)
+ {
+ int appMainPaneVerityId;
+ int coverFlowPaneVarietyId;
+ int imagePaneVerityId ;
+ int videoIndVerityId ;
+ if (aIslandscape)
+ {
+ appMainPaneVerityId = 7;
+ coverFlowPaneVarietyId = 1;
+ imagePaneVerityId = 6;
+ videoIndVerityId = 0;
+ }
+ else
+ {
+ appMainPaneVerityId = 7;
+ coverFlowPaneVarietyId = 1;
+ imagePaneVerityId = 6;
+ videoIndVerityId = 0;
+ }
+
+ // Get the size of the appwindow
+ TAknWindowLineLayout appMainLayout =
+ AknLayoutScalable_UiAccel::main_pane(appMainPaneVerityId).LayoutLine();
+ TAknLayoutRect appMainRect;
+ appMainRect.LayoutRect( AlfUtil::ScreenSize(), appMainLayout );
+ TSize appMainSize(appMainRect.Rect().Size());
+
+ // Get the size of the coverflow main window
+ TAknWindowLineLayout mainLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane(coverFlowPaneVarietyId).LayoutLine();
+ TAknLayoutRect mainRect;
+ mainRect.LayoutRect( AlfUtil::ScreenSize(), mainLayout );
+ TSize mainSize(mainRect.Rect().Size());
+
+ switch(aAttribute)
+ {
+ case mulvisualitem::KMulIcon1:
+ {
+ TAknWindowLineLayout centerLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane(imagePaneVerityId).LayoutLine();
+ TAknLayoutRect centerRect;
+ centerRect.LayoutRect( TSize(mainSize), centerLayout );
+ aHeight = centerRect.Rect().Size().iHeight;
+ aWidth = centerRect.Rect().Size().iWidth;
+ break;
+ }
+ case mulvisualitem::KMulIndicator2:
+ {
+ TAknWindowLineLayout centerLayout =
+ AknLayoutScalable_UiAccel::main_aa_video_pane_g1(videoIndVerityId).LayoutLine();
+ TAknLayoutRect centerRect;
+ centerRect.LayoutRect( TSize(mainSize), centerLayout );
+ aHeight = centerRect.Rect().Size().iHeight;
+ aWidth = centerRect.Rect().Size().iWidth;
+ break;
+ }
+ default:
+ {
+ // invalid attribute
+ // raise exception.
+ __MUL_ASSERT(false,KInvalidAttribute);
+
+ break;
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CreateVisualisation
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate4::CreateVisualisation(bool aIsLandscape,bool aIsOrientationChange)
+ {
+ // set the default attribue of the template
+ // irrespective of the orientation
+ mData->mSliderEnabled = false;
+ mData->mUiOnOffFlag = true;
+ mData->mMaxVisibleCount = 1;
+ mData->mEnhancedSupportFlag = true;
+
+ // store the default attribute in base element
+ mData->mBaseElement->SetFitMode(true);
+ mData->mBaseElement->StoreTextVisibility( false );
+
+ // get the main text layout
+ CAlfLayout& textLayout = mData->mBaseElement->TextLayout();
+ textLayout.SetOpacity(0);
+
+ mData->mOrientationChange = aIsOrientationChange;
+ if (aIsLandscape)
+ {
+ // create visualisation for landscape
+ CreateLscStructure();
+ }
+ else
+ {
+ // create visualisation for potrait
+ CreatePrtStructure();
+ }
+ mData->mOrientationChange = false;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CreatePrtStructure
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate4::CreatePrtStructure()
+ {
+ // list of all component lct verity id.
+ int mainPaneVerityId = 1;
+ int imagePaneVerityId = 6;
+ int videoPaneVerityId = 0;
+ int counterPaneVerityId = 3;
+
+ CAlfVisual* main = mData->mBaseElement->findVisual(KMainLayoutIndex);
+ CAlfLayout* parentLayout = main->Layout();
+ TSize mainSize = parentLayout->Size().Target().AsSize();
+
+ // get for main layout
+ TAknWindowLineLayout componentLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane(mainPaneVerityId).LayoutLine();
+ TRect mainRect = IconWindowRect(componentLayout, mainSize);
+ main->SetPos(TAlfRealPoint(0,0));
+ main->SetSize(mainRect.Size());
+
+
+ // for deck layout
+ CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&>(
+ static_cast<CAlfLayout*>(main)->Visual(KMainLayoutIndex) );
+ deckLayout.SetSize(mainRect.Size(),0);
+
+ // if set background with some skin id is called before calling set model
+ // then the visual and texture would be created with 0,0 sizes
+ // hence we need to resize them
+ CAlfVisual* backgroundVisual = deckLayout.FindTag(backgroundvisual);
+ if(backgroundVisual)
+ {
+ backgroundVisual->SetSize(mainRect.Size(),0);
+ }
+
+ // for center item
+ componentLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane(imagePaneVerityId).LayoutLine();
+ TRect centerRect = IconWindowRect(componentLayout,mainRect);
+
+ TMulCoverFlowItem highlightItem(centerRect.iTl.iX,
+ centerRect.iTl.iY,centerRect.Size().iWidth,centerRect.Size().iHeight);
+
+ // apply attribute
+ mData->mBaseElement->StoreVisualDimensions(highlightItem,highlightItem,mData->mMaxVisibleCount );
+
+
+
+ // for indicator icon
+ componentLayout =
+ AknLayoutScalable_UiAccel::main_aa_video_pane_g1(videoPaneVerityId).LayoutLine();
+ TRect indRect = IconWindowRect(componentLayout,mainRect);
+ TSize indSize(indRect.Size());
+ mData->mIndicatorDimensions.height = indSize.iHeight;
+ mData->mIndicatorDimensions.width = indSize.iWidth;
+ mData->mIndicatorDimensions.posx = indRect.iTl.iX;
+ mData->mIndicatorDimensions.posy = indRect.iTl.iY;
+
+ // crete counter
+ ApplyCounterAttribute(counterPaneVerityId,mainRect);
+ }
+
+// ---------------------------------------------------------------------------
+// CreateLscStructure
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate4::CreateLscStructure()
+ {
+ // list of all component lct verity id.
+ int mainPaneVerityId = 1;
+ int imagePaneVerityId = 6;
+ int videoPaneVerityId = 0;
+ int counterPaneVerityId = 8;
+
+ CAlfVisual* main = mData->mBaseElement->findVisual(KMainLayoutIndex);
+ CAlfLayout* prntLay = main->Layout();
+ TSize main_size = prntLay->Size().Target().AsSize();
+ TAknWindowLineLayout componentLayout;
+
+ // get for main layout
+ componentLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane(mainPaneVerityId).LayoutLine();
+ TRect mainRect = IconWindowRect(componentLayout, main_size);
+ main->SetPos(TAlfRealPoint(0,0));
+ main->SetSize(mainRect.Size());
+
+ // for deck layout
+ CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&>(
+ static_cast<CAlfLayout*>(main)->Visual(KMainLayoutIndex) );
+ deckLayout.SetSize(mainRect.Size(),0);
+
+ // if set background with some skin id is called before calling set model
+ // then the visual and texture would be created with 0,0 sizes
+ // hence we need to resize them
+ CAlfVisual* backgroundVisual = deckLayout.FindTag(backgroundvisual);
+ if(backgroundVisual)
+ {
+ backgroundVisual->SetSize(mainRect.Size(),0);
+ }
+
+ // for center item
+
+ componentLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane(imagePaneVerityId).LayoutLine();
+ TRect centerRect = IconWindowRect(componentLayout,mainRect);
+
+ TMulCoverFlowItem highlightItem(centerRect.iTl.iX,
+ centerRect.iTl.iY,centerRect.Size().iWidth,centerRect.Size().iHeight);
+
+ // apply attribute
+ mData->mBaseElement->StoreVisualDimensions(highlightItem,highlightItem,mData->mMaxVisibleCount );
+
+
+ // for indicator icon
+ componentLayout =
+ AknLayoutScalable_UiAccel::main_aa_video_pane_g1(videoPaneVerityId).LayoutLine();
+ TRect indRect = IconWindowRect(componentLayout,mainRect);
+ TSize indSize(indRect.Size());
+ mData->mIndicatorDimensions.height = indSize.iHeight;
+ mData->mIndicatorDimensions.width = indSize.iWidth;
+ mData->mIndicatorDimensions.posx = indRect.iTl.iX;
+ mData->mIndicatorDimensions.posy = indRect.iTl.iY;
+
+ // crete counter
+ ApplyCounterAttribute(counterPaneVerityId,mainRect);
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyCounterAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate4::ApplyCounterAttribute(int acounterPaneVerityId,const TRect& aMainRect)
+ {
+ mData->mUiOnOffFlag = true;
+ TAknTextLineLayout counterComponentLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane_t1(acounterPaneVerityId).LayoutLine();
+
+ TRect counterRect = TextWindowRect(counterComponentLayout, aMainRect);
+ TSize counterSize(counterRect.Size());
+ mData->mCounterDimensions.posx = counterRect.iTl.iX;
+ mData->mCounterDimensions.posy = counterRect.iTl.iY;
+ mData->mCounterDimensions.width = counterSize.iWidth;
+ mData->mCounterDimensions.height = counterSize.iHeight;
+
+ // Create a Counter visual if it is not Created.
+ CAlfTextVisual& counterVisual = mData->mBaseElement->CounterVisual();
+
+ // Set Properties to Counter Visual if we are creating.
+ // no need to apply attribute for orientation change
+ // as all are same.
+ if(!mData->mOrientationChange)
+ {
+ //get font Id for counter
+ int fontId = counterComponentLayout.FontId();
+ int counterFontId = 0x000000FF & fontId;
+ // apply default brush color to the counter background
+ ApplyBrush(counterVisual,KRgbBlack,0.5);
+ // apply default attribute
+ counterVisual.SetAlign(EAlfAlignHCenter,EAlfAlignVCenter);
+ SetTextStyle(counterFontId, counterVisual);
+
+ // check if user has set some different attribute.
+ TMulVisualColorProperty counterColor = mData->mBaseElement->TextColor(ECounterVisual);
+ if (counterColor.mIsColorSet)
+ {
+ // apply the color set by the application
+ counterVisual.SetColor(counterColor.mColor);
+ }
+ else
+ {
+ // apply the default color
+ counterVisual.SetColor(KRgbWhite);
+ }
+ mData->mCounterFontMaxCharLength = UpdateMaxFontWidth(&counterVisual);
+ }
+
+ }
+
+ }//namespace ends
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/bwins/muldatamodelu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,23 @@
+EXPORTS
+ ?IsDirty@MulVisualItem@Alf@@QBE_NW4TVisualAttribute@mulvisualitem@2@@Z @ 1 NONAME ; bool Alf::MulVisualItem::IsDirty(enum Alf::mulvisualitem::TVisualAttribute) const
+ ??0MulModelImpl@Alf@@QAE@XZ @ 2 NONAME ; Alf::MulModelImpl::MulModelImpl(void)
+ ??0MulDataPath@Alf@@QAE@H@Z @ 3 NONAME ; Alf::MulDataPath::MulDataPath(int)
+ ??0MulDataPath@Alf@@QAE@ABV01@@Z @ 4 NONAME ; Alf::MulDataPath::MulDataPath(class Alf::MulDataPath const &)
+ ??1MulDataPath@Alf@@QAE@XZ @ 5 NONAME ; Alf::MulDataPath::~MulDataPath(void)
+ ?AttributeAsInt@MulVisualItem@Alf@@QBEHW4TVisualAttribute@mulvisualitem@2@@Z @ 6 NONAME ; int Alf::MulVisualItem::AttributeAsInt(enum Alf::mulvisualitem::TVisualAttribute) const
+ ?Attribute@MulVisualItem@Alf@@QBEPAVIMulVariantType@2@W4TVisualAttribute@mulvisualitem@2@@Z @ 7 NONAME ; class Alf::IMulVariantType * Alf::MulVisualItem::Attribute(enum Alf::mulvisualitem::TVisualAttribute) const
+ ??0MulDataPath@Alf@@QAE@XZ @ 8 NONAME ; Alf::MulDataPath::MulDataPath(void)
+ ?Attributes@MulVisualItem@Alf@@QBE?BV?$vector@W4TVisualAttribute@mulvisualitem@Alf@@V?$allocator@W4TVisualAttribute@mulvisualitem@Alf@@@std@@@std@@XZ @ 9 NONAME ; class std::vector<enum Alf::mulvisualitem::TVisualAttribute, class std::allocator<enum Alf::mulvisualitem::TVisualAttribute> > const Alf::MulVisualItem::Attributes(void) const
+ ?SetAttribute@MulVisualItem@Alf@@QAEXW4TVisualAttribute@mulvisualitem@2@PAVIMulVariantType@2@HW4TAttributeOwnership@12@@Z @ 10 NONAME ; void Alf::MulVisualItem::SetAttribute(enum Alf::mulvisualitem::TVisualAttribute, class Alf::IMulVariantType *, int, enum Alf::MulVisualItem::TAttributeOwnership)
+ ?Depth@MulDataPath@Alf@@QBEHXZ @ 11 NONAME ; int Alf::MulDataPath::Depth(void) const
+ ?SetAttribute@MulVisualItem@Alf@@QAEXW4TVisualAttribute@mulvisualitem@2@HH@Z @ 12 NONAME ; void Alf::MulVisualItem::SetAttribute(enum Alf::mulvisualitem::TVisualAttribute, int, int)
+ ?SetAttribute@MulVisualItem@Alf@@QAEXW4TVisualAttribute@mulvisualitem@2@ABVTDesC16@@H@Z @ 13 NONAME ; void Alf::MulVisualItem::SetAttribute(enum Alf::mulvisualitem::TVisualAttribute, class TDesC16 const &, int)
+ ??1MulVisualItem@Alf@@QAE@XZ @ 14 NONAME ; Alf::MulVisualItem::~MulVisualItem(void)
+ ??1MulModelImpl@Alf@@UAE@XZ @ 15 NONAME ; Alf::MulModelImpl::~MulModelImpl(void)
+ ??0MulDataPath@Alf@@QAE@HH@Z @ 16 NONAME ; Alf::MulDataPath::MulDataPath(int, int)
+ ??AMulDataPath@Alf@@QBEHH@Z @ 17 NONAME ; int Alf::MulDataPath::operator[](int) const
+ ??0MulVisualItem@Alf@@QAE@ABV01@@Z @ 18 NONAME ; Alf::MulVisualItem::MulVisualItem(class Alf::MulVisualItem const &)
+ ??0MulVisualItem@Alf@@QAE@XZ @ 19 NONAME ; Alf::MulVisualItem::MulVisualItem(void)
+ ?Append@MulDataPath@Alf@@QAEXH@Z @ 20 NONAME ; void Alf::MulDataPath::Append(int)
+ ?AttributeAsString@MulVisualItem@Alf@@QBEABVTDesC16@@W4TVisualAttribute@mulvisualitem@2@@Z @ 21 NONAME ; class TDesC16 const & Alf::MulVisualItem::AttributeAsString(enum Alf::mulvisualitem::TVisualAttribute) const
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/bwins/mulmodelutilityu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,48 @@
+EXPORTS
+ ??0MulVariantType@Alf@@QAE@XZ @ 1 NONAME ; Alf::MulVariantType::MulVariantType(void)
+ ?IsDirty@MulVisualItem@Alf@@QBE_NW4TVisualAttribute@mulvisualitem@2@@Z @ 2 NONAME ; bool Alf::MulVisualItem::IsDirty(enum Alf::mulvisualitem::TVisualAttribute) const
+ ??0MulVariantType@Alf@@QAE@ABN@Z @ 3 NONAME ; Alf::MulVariantType::MulVariantType(double const &)
+ ??0MulVariantType@Alf@@QAE@ABVTDesC16@@@Z @ 4 NONAME ; Alf::MulVariantType::MulVariantType(class TDesC16 const &)
+ ?uinteger@MulVariantType@Alf@@UBEIXZ @ 5 NONAME ; unsigned int Alf::MulVariantType::uinteger(void) const
+ ?IntToUString@MulModelUtility@Alf@@SA?AVUString@osncore@@H@Z @ 6 NONAME ; class osncore::UString Alf::MulModelUtility::IntToUString(int)
+ ?Type@MulVariantType@Alf@@UBE?AW4TMulType@IMulVariantType@2@XZ @ 7 NONAME ; enum Alf::IMulVariantType::TMulType Alf::MulVariantType::Type(void) const
+ ?ConvertUStringToTDes@MulModelUtility@Alf@@SAXABVUString@osncore@@AAVTDes16@@@Z @ 8 NONAME ; void Alf::MulModelUtility::ConvertUStringToTDes(class osncore::UString const &, class TDes16 &)
+ ?Attribute@MulVisualItem@Alf@@QBEPAVIMulVariantType@2@W4TVisualAttribute@mulvisualitem@2@@Z @ 9 NONAME ; class Alf::IMulVariantType * Alf::MulVisualItem::Attribute(enum Alf::mulvisualitem::TVisualAttribute) const
+ ?Attributes@MulVisualItem@Alf@@QBE?BV?$vector@W4TVisualAttribute@mulvisualitem@Alf@@V?$allocator@W4TVisualAttribute@mulvisualitem@Alf@@@std@@@std@@XZ @ 10 NONAME ; class std::vector<enum Alf::mulvisualitem::TVisualAttribute, class std::allocator<enum Alf::mulvisualitem::TVisualAttribute> > const Alf::MulVisualItem::Attributes(void) const
+ ??0MulDataPath@Alf@@QAE@XZ @ 11 NONAME ; Alf::MulDataPath::MulDataPath(void)
+ ?Map@MulVariantType@Alf@@UBEAAVIAlfMap@2@XZ @ 12 NONAME ; class Alf::IAlfMap & Alf::MulVariantType::Map(void) const
+ ?Depth@MulDataPath@Alf@@QBEHXZ @ 13 NONAME ; int Alf::MulDataPath::Depth(void) const
+ ??1MulVariantType@Alf@@UAE@XZ @ 14 NONAME ; Alf::MulVariantType::~MulVariantType(void)
+ ?ConvertVisualItemToMap@MulModelUtility@Alf@@SA?AV?$auto_ptr@VIAlfMap@Alf@@@std@@AAVMulVisualItem@2@@Z @ 15 NONAME ; class std::auto_ptr<class Alf::IAlfMap> Alf::MulModelUtility::ConvertVisualItemToMap(class Alf::MulVisualItem &)
+ ??0MulVariantType@Alf@@QAE@ABI@Z @ 16 NONAME ; Alf::MulVariantType::MulVariantType(unsigned int const &)
+ ?SetAttribute@MulVisualItem@Alf@@QAEXW4TVisualAttribute@mulvisualitem@2@ABVTDesC16@@H@Z @ 17 NONAME ; void Alf::MulVisualItem::SetAttribute(enum Alf::mulvisualitem::TVisualAttribute, class TDesC16 const &, int)
+ ??1MulVisualItem@Alf@@QAE@XZ @ 18 NONAME ; Alf::MulVisualItem::~MulVisualItem(void)
+ ??0MulDataPath@Alf@@QAE@HH@Z @ 19 NONAME ; Alf::MulDataPath::MulDataPath(int, int)
+ ??AMulDataPath@Alf@@QBEHH@Z @ 20 NONAME ; int Alf::MulDataPath::operator[](int) const
+ ?ConvertTDesToUString@MulModelUtility@Alf@@SAXABVTDesC16@@AAVUString@osncore@@@Z @ 21 NONAME ; void Alf::MulModelUtility::ConvertTDesToUString(class TDesC16 const &, class osncore::UString &)
+ ??0MulVariantType@Alf@@QAE@AAVIAlfMap@1@@Z @ 22 NONAME ; Alf::MulVariantType::MulVariantType(class Alf::IAlfMap &)
+ ??0MulVisualItem@Alf@@QAE@ABV01@@Z @ 23 NONAME ; Alf::MulVisualItem::MulVisualItem(class Alf::MulVisualItem const &)
+ ??0MulVisualItem@Alf@@QAE@XZ @ 24 NONAME ; Alf::MulVisualItem::MulVisualItem(void)
+ ?AttributeAsString@MulVisualItem@Alf@@QBEABVTDesC16@@W4TVisualAttribute@mulvisualitem@2@@Z @ 25 NONAME ; class TDesC16 const & Alf::MulVisualItem::AttributeAsString(enum Alf::mulvisualitem::TVisualAttribute) const
+ ?Append@MulDataPath@Alf@@QAEXH@Z @ 26 NONAME ; void Alf::MulDataPath::Append(int)
+ ?AlfStringToUString@MulModelUtility@Alf@@SA?AVUString@osncore@@ABV34@@Z @ 27 NONAME ; class osncore::UString Alf::MulModelUtility::AlfStringToUString(class osncore::UString const &)
+ ??0MulVariantType@Alf@@QAE@AB_N@Z @ 28 NONAME ; Alf::MulVariantType::MulVariantType(bool const &)
+ ?integer@MulVariantType@Alf@@UBEHXZ @ 29 NONAME ; int Alf::MulVariantType::integer(void) const
+ ?ConvertTDes8ToUString@MulModelUtility@Alf@@SAXABVTDesC8@@AAVUString@osncore@@@Z @ 30 NONAME ; void Alf::MulModelUtility::ConvertTDes8ToUString(class TDesC8 const &, class osncore::UString &)
+ ?CreateVisualItem@MulModelUtility@Alf@@SA?AV?$auto_ptr@VMulVisualItem@Alf@@@std@@W4TLogicalTemplate@mulwidget@2@@Z @ 31 NONAME ; class std::auto_ptr<class Alf::MulVisualItem> Alf::MulModelUtility::CreateVisualItem(enum Alf::mulwidget::TLogicalTemplate)
+ ??0MulDataPath@Alf@@QAE@H@Z @ 32 NONAME ; Alf::MulDataPath::MulDataPath(int)
+ ??0MulDataPath@Alf@@QAE@ABV01@@Z @ 33 NONAME ; Alf::MulDataPath::MulDataPath(class Alf::MulDataPath const &)
+ ?Clone@MulVariantType@Alf@@UAE?AV?$auto_ptr@VIMulVariantType@Alf@@@std@@XZ @ 34 NONAME ; class std::auto_ptr<class Alf::IMulVariantType> Alf::MulVariantType::Clone(void)
+ ??1MulDataPath@Alf@@QAE@XZ @ 35 NONAME ; Alf::MulDataPath::~MulDataPath(void)
+ ?real@MulVariantType@Alf@@UBENXZ @ 36 NONAME ; double Alf::MulVariantType::real(void) const
+ ?ConvertUStringToTDes8@MulModelUtility@Alf@@SAXABVUString@osncore@@AAVTDes8@@@Z @ 37 NONAME ; void Alf::MulModelUtility::ConvertUStringToTDes8(class osncore::UString const &, class TDes8 &)
+ ?CreateVariantType@MulModelUtility@Alf@@SAPAVIAlfVariantType@2@AAV32@@Z @ 38 NONAME ; class Alf::IAlfVariantType * Alf::MulModelUtility::CreateVariantType(class Alf::IAlfVariantType &)
+ ?AttributeAsInt@MulVisualItem@Alf@@QBEHW4TVisualAttribute@mulvisualitem@2@@Z @ 39 NONAME ; int Alf::MulVisualItem::AttributeAsInt(enum Alf::mulvisualitem::TVisualAttribute) const
+ ?UStringToAlfString@MulModelUtility@Alf@@SA?AVUString@osncore@@ABV34@@Z @ 40 NONAME ; class osncore::UString Alf::MulModelUtility::UStringToAlfString(class osncore::UString const &)
+ ??0MulVariantType@Alf@@QAE@ABH@Z @ 41 NONAME ; Alf::MulVariantType::MulVariantType(int const &)
+ ?SetAttribute@MulVisualItem@Alf@@QAEXW4TVisualAttribute@mulvisualitem@2@PAVIMulVariantType@2@HW4TAttributeOwnership@12@@Z @ 42 NONAME ; void Alf::MulVisualItem::SetAttribute(enum Alf::mulvisualitem::TVisualAttribute, class Alf::IMulVariantType *, int, enum Alf::MulVisualItem::TAttributeOwnership)
+ ?SetAttribute@MulVisualItem@Alf@@QAEXW4TVisualAttribute@mulvisualitem@2@HH@Z @ 43 NONAME ; void Alf::MulVisualItem::SetAttribute(enum Alf::mulvisualitem::TVisualAttribute, int, int)
+ ?boolean@MulVariantType@Alf@@UBE_NXZ @ 44 NONAME ; bool Alf::MulVariantType::boolean(void) const
+ ?ConvertMapToVisualItem@MulModelUtility@Alf@@SA?AV?$auto_ptr@VMulVisualItem@Alf@@@std@@AAVIAlfMap@2@@Z @ 45 NONAME ; class std::auto_ptr<class Alf::MulVisualItem> Alf::MulModelUtility::ConvertMapToVisualItem(class Alf::IAlfMap &)
+ ?DesC@MulVariantType@Alf@@UBEABVTDesC16@@XZ @ 46 NONAME ; class TDesC16 const & Alf::MulVariantType::DesC(void) const
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/data/2000d23e.rss Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2000 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: ECom resource file
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+#include "alf/alfecompluginfactoryuid.rh"
+
+
+RESOURCE REGISTRY_INFO theInfo
+{
+dll_uid = 0x2000D23E;
+interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KFactoryPluginUid;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x2000D23F;
+ version_no = 1;
+ display_name = "";
+ default_data = "mulmodel";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+}
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/eabi/muldatamodelu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,46 @@
+EXPORTS
+ _ZN3Alf11MulDataPath6AppendEi @ 1 NONAME
+ _ZN3Alf11MulDataPathC1ERKS0_ @ 2 NONAME
+ _ZN3Alf11MulDataPathC1Ei @ 3 NONAME
+ _ZN3Alf11MulDataPathC1Eii @ 4 NONAME
+ _ZN3Alf11MulDataPathC1Ev @ 5 NONAME
+ _ZN3Alf11MulDataPathC2ERKS0_ @ 6 NONAME
+ _ZN3Alf11MulDataPathC2Ei @ 7 NONAME
+ _ZN3Alf11MulDataPathC2Eii @ 8 NONAME
+ _ZN3Alf11MulDataPathC2Ev @ 9 NONAME
+ _ZN3Alf11MulDataPathD1Ev @ 10 NONAME
+ _ZN3Alf11MulDataPathD2Ev @ 11 NONAME
+ _ZN3Alf12MulModelImplC1Ev @ 12 NONAME
+ _ZN3Alf12MulModelImplC2Ev @ 13 NONAME
+ _ZN3Alf12MulModelImplD0Ev @ 14 NONAME
+ _ZN3Alf12MulModelImplD1Ev @ 15 NONAME
+ _ZN3Alf12MulModelImplD2Ev @ 16 NONAME
+ _ZN3Alf13MulVisualItem12SetAttributeENS_13mulvisualitem16TVisualAttributeEPNS_15IMulVariantTypeEiNS0_19TAttributeOwnershipE @ 17 NONAME
+ _ZN3Alf13MulVisualItem12SetAttributeENS_13mulvisualitem16TVisualAttributeERK7TDesC16i @ 18 NONAME
+ _ZN3Alf13MulVisualItem12SetAttributeENS_13mulvisualitem16TVisualAttributeEii @ 19 NONAME
+ _ZN3Alf13MulVisualItemC1ERKS0_ @ 20 NONAME
+ _ZN3Alf13MulVisualItemC1Ev @ 21 NONAME
+ _ZN3Alf13MulVisualItemC2ERKS0_ @ 22 NONAME
+ _ZN3Alf13MulVisualItemC2Ev @ 23 NONAME
+ _ZN3Alf13MulVisualItemD1Ev @ 24 NONAME
+ _ZN3Alf13MulVisualItemD2Ev @ 25 NONAME
+ _ZNK3Alf11MulDataPath5DepthEv @ 26 NONAME
+ _ZNK3Alf11MulDataPathixEi @ 27 NONAME
+ _ZNK3Alf13MulVisualItem10AttributesEv @ 28 NONAME
+ _ZNK3Alf13MulVisualItem14AttributeAsIntENS_13mulvisualitem16TVisualAttributeE @ 29 NONAME
+ _ZNK3Alf13MulVisualItem17AttributeAsStringENS_13mulvisualitem16TVisualAttributeE @ 30 NONAME
+ _ZNK3Alf13MulVisualItem7IsDirtyENS_13mulvisualitem16TVisualAttributeE @ 31 NONAME
+ _ZNK3Alf13MulVisualItem9AttributeENS_13mulvisualitem16TVisualAttributeE @ 32 NONAME
+ _ZTIN3Alf11MulPullModeE @ 33 NONAME ; #<TI>#
+ _ZTIN3Alf11MulPushModeE @ 34 NONAME ; #<TI>#
+ _ZTIN3Alf12MulModelImplE @ 35 NONAME ; #<TI>#
+ _ZTIN3Alf20MulAsyncDataProviderE @ 36 NONAME ; #<TI>#
+ _ZTVN3Alf11MulPullModeE @ 37 NONAME ; #<VT>#
+ _ZTVN3Alf11MulPushModeE @ 38 NONAME ; #<VT>#
+ _ZTVN3Alf12MulModelImplE @ 39 NONAME ; #<VT>#
+ _ZTVN3Alf20MulAsyncDataProviderE @ 40 NONAME ; #<VT>#
+ _ZThn4_N3Alf12MulModelImplD0Ev @ 41 NONAME ; #<thunk>#
+ _ZThn4_N3Alf12MulModelImplD1Ev @ 42 NONAME ; #<thunk>#
+ _ZThn8_N3Alf12MulModelImplD0Ev @ 43 NONAME ; #<thunk>#
+ _ZThn8_N3Alf12MulModelImplD1Ev @ 44 NONAME ; #<thunk>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/eabi/mulmodelutilityu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,67 @@
+EXPORTS
+ _ZN3Alf11MulDataPath6AppendEi @ 1 NONAME
+ _ZN3Alf11MulDataPathC1ERKS0_ @ 2 NONAME
+ _ZN3Alf11MulDataPathC1Ei @ 3 NONAME
+ _ZN3Alf11MulDataPathC1Eii @ 4 NONAME
+ _ZN3Alf11MulDataPathC1Ev @ 5 NONAME
+ _ZN3Alf11MulDataPathC2ERKS0_ @ 6 NONAME
+ _ZN3Alf11MulDataPathC2Ei @ 7 NONAME
+ _ZN3Alf11MulDataPathC2Eii @ 8 NONAME
+ _ZN3Alf11MulDataPathC2Ev @ 9 NONAME
+ _ZN3Alf11MulDataPathD1Ev @ 10 NONAME
+ _ZN3Alf11MulDataPathD2Ev @ 11 NONAME
+ _ZN3Alf13MulVisualItem12SetAttributeENS_13mulvisualitem16TVisualAttributeEPNS_15IMulVariantTypeEiNS0_19TAttributeOwnershipE @ 12 NONAME
+ _ZN3Alf13MulVisualItem12SetAttributeENS_13mulvisualitem16TVisualAttributeERK7TDesC16i @ 13 NONAME
+ _ZN3Alf13MulVisualItem12SetAttributeENS_13mulvisualitem16TVisualAttributeEii @ 14 NONAME
+ _ZN3Alf13MulVisualItemC1ERKS0_ @ 15 NONAME
+ _ZN3Alf13MulVisualItemC1Ev @ 16 NONAME
+ _ZN3Alf13MulVisualItemC2ERKS0_ @ 17 NONAME
+ _ZN3Alf13MulVisualItemC2Ev @ 18 NONAME
+ _ZN3Alf13MulVisualItemD1Ev @ 19 NONAME
+ _ZN3Alf13MulVisualItemD2Ev @ 20 NONAME
+ _ZN3Alf14MulVariantType5CloneEv @ 21 NONAME
+ _ZN3Alf14MulVariantTypeC1ERK7TDesC16 @ 22 NONAME
+ _ZN3Alf14MulVariantTypeC1ERKb @ 23 NONAME
+ _ZN3Alf14MulVariantTypeC1ERKd @ 24 NONAME
+ _ZN3Alf14MulVariantTypeC1ERKi @ 25 NONAME
+ _ZN3Alf14MulVariantTypeC1ERKj @ 26 NONAME
+ _ZN3Alf14MulVariantTypeC1ERNS_7IAlfMapE @ 27 NONAME
+ _ZN3Alf14MulVariantTypeC1Ev @ 28 NONAME
+ _ZN3Alf14MulVariantTypeC2ERK7TDesC16 @ 29 NONAME
+ _ZN3Alf14MulVariantTypeC2ERKb @ 30 NONAME
+ _ZN3Alf14MulVariantTypeC2ERKd @ 31 NONAME
+ _ZN3Alf14MulVariantTypeC2ERKi @ 32 NONAME
+ _ZN3Alf14MulVariantTypeC2ERKj @ 33 NONAME
+ _ZN3Alf14MulVariantTypeC2ERNS_7IAlfMapE @ 34 NONAME
+ _ZN3Alf14MulVariantTypeC2Ev @ 35 NONAME
+ _ZN3Alf14MulVariantTypeD0Ev @ 36 NONAME
+ _ZN3Alf14MulVariantTypeD1Ev @ 37 NONAME
+ _ZN3Alf14MulVariantTypeD2Ev @ 38 NONAME
+ _ZN3Alf15MulModelUtility12IntToUStringEi @ 39 NONAME
+ _ZN3Alf15MulModelUtility16CreateVisualItemENS_9mulwidget16TLogicalTemplateE @ 40 NONAME
+ _ZN3Alf15MulModelUtility17CreateVariantTypeERNS_15IAlfVariantTypeE @ 41 NONAME
+ _ZN3Alf15MulModelUtility18AlfStringToUStringERKN7osncore7UStringE @ 42 NONAME
+ _ZN3Alf15MulModelUtility18UStringToAlfStringERKN7osncore7UStringE @ 43 NONAME
+ _ZN3Alf15MulModelUtility20ConvertTDesToUStringERK7TDesC16RN7osncore7UStringE @ 44 NONAME
+ _ZN3Alf15MulModelUtility20ConvertUStringToTDesERKN7osncore7UStringER6TDes16 @ 45 NONAME
+ _ZN3Alf15MulModelUtility21ConvertTDes8ToUStringERK6TDesC8RN7osncore7UStringE @ 46 NONAME
+ _ZN3Alf15MulModelUtility21ConvertUStringToTDes8ERKN7osncore7UStringER5TDes8 @ 47 NONAME
+ _ZN3Alf15MulModelUtility22ConvertMapToVisualItemERNS_7IAlfMapE @ 48 NONAME
+ _ZN3Alf15MulModelUtility22ConvertVisualItemToMapERNS_13MulVisualItemE @ 49 NONAME
+ _ZNK3Alf11MulDataPath5DepthEv @ 50 NONAME
+ _ZNK3Alf11MulDataPathixEi @ 51 NONAME
+ _ZNK3Alf13MulVisualItem10AttributesEv @ 52 NONAME
+ _ZNK3Alf13MulVisualItem14AttributeAsIntENS_13mulvisualitem16TVisualAttributeE @ 53 NONAME
+ _ZNK3Alf13MulVisualItem17AttributeAsStringENS_13mulvisualitem16TVisualAttributeE @ 54 NONAME
+ _ZNK3Alf13MulVisualItem7IsDirtyENS_13mulvisualitem16TVisualAttributeE @ 55 NONAME
+ _ZNK3Alf13MulVisualItem9AttributeENS_13mulvisualitem16TVisualAttributeE @ 56 NONAME
+ _ZNK3Alf14MulVariantType3MapEv @ 57 NONAME
+ _ZNK3Alf14MulVariantType4DesCEv @ 58 NONAME
+ _ZNK3Alf14MulVariantType4TypeEv @ 59 NONAME
+ _ZNK3Alf14MulVariantType4realEv @ 60 NONAME
+ _ZNK3Alf14MulVariantType7booleanEv @ 61 NONAME
+ _ZNK3Alf14MulVariantType7integerEv @ 62 NONAME
+ _ZNK3Alf14MulVariantType8uintegerEv @ 63 NONAME
+ _ZTIN3Alf14MulVariantTypeE @ 64 NONAME ; #<TI>#
+ _ZTVN3Alf14MulVariantTypeE @ 65 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* 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: Project build file
+*
+*/
+
+
+#include <platform_paths.hrh>
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+
+../rom/muldatamodel.iby CORE_MW_LAYER_IBY_EXPORT_PATH(muldatamodel.iby)
+
+PRJ_MMPFILES
+
+mulmodelutility.mmp
+muldatamodel.mmp
+muldatamodelplugin.mmp
+
+
+PRJ_TESTMMPFILES
+
+
+//End of files
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/group/muldatamodel.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* 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: Project definition file
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET muldatamodel.dll
+TARGETTYPE dll
+UID 0x1000008D 0x2000D247
+
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+SOURCEPATH ../src
+SOURCE mulmodelimpl.cpp
+SOURCE mulpushmode.cpp
+SOURCE mulpullmode.cpp
+SOURCE mulcachemanager.cpp
+SOURCE mulvisualitem.cpp
+SOURCE muldatapath.cpp
+SOURCE mulpagedatawindow.cpp
+SOURCE mulasyncdataprovider.cpp
+
+
+USERINCLUDE ../inc
+USERINCLUDE ../../common/inc
+USERINCLUDE ../../mullogging/inc
+USERINCLUDE ../../../inc/alf
+USERINCLUDE ../../../inc
+
+//Required by muldatamodel.UID
+MW_LAYER_SYSTEMINCLUDE
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+LIBRARY alfwidgetmodel.lib
+LIBRARY osncore.lib
+LIBRARY libc.lib
+LIBRARY mulmodelutility.lib //For Visual Item and Filter
+LIBRARY libpthread.lib
+LIBRARY libstdcpp.lib
+LIBRARY mullogging.lib //for logging
+
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/group/muldatamodelplugin.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,67 @@
+/*
+* 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: Project definition file
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET muldatamodelplugin.dll
+TARGETTYPE PLUGIN
+UID 0x10009d8d 0x2000D23E
+
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+SOURCEPATH ../src
+
+SOURCE mulmodelfactoryplugin.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../../../inc
+USERINCLUDE ../../../inc/mul
+USERINCLUDE ../../common/inc
+
+//Required by muldatamodel.UID
+MW_LAYER_SYSTEMINCLUDE
+OS_LAYER_LIBC_SYSTEMINCLUDE
+
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+LIBRARY alfwidgetmodel.lib
+LIBRARY mullogging.lib //for logging
+LIBRARY osncore.lib
+LIBRARY libc.lib
+LIBRARY libpthread.lib
+LIBRARY libstdcpp.lib
+LIBRARY muldatamodel.lib
+
+SOURCEPATH ../data
+LANG SC
+START RESOURCE 2000d23e.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET muldatamodelplugin.rsc
+#endif
+END
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/group/mulmodelutility.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* 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: Project definition file
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET mulmodelutility.dll
+TARGETTYPE dll
+UID 0x1000008D 0x2000D246
+
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+SOURCEPATH ../src
+SOURCE mulmodelutility.cpp
+SOURCE mulvisualitem.cpp
+SOURCE muldatapath.cpp
+SOURCE mulvarianttype.cpp
+
+USERINCLUDE ../../common/inc
+USERINCLUDE ../inc
+USERINCLUDE ../../../inc
+
+MW_LAYER_SYSTEMINCLUDE
+OS_LAYER_LIBC_SYSTEMINCLUDE
+
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY alfwidgetmodel.lib
+LIBRARY osncore.lib
+LIBRARY libc.lib
+LIBRARY libpthread.lib
+LIBRARY libstdcpp.lib
+LIBRARY charconv.lib
+LIBRARY mullogging.lib //for logging
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulactionitem.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,178 @@
+/*
+* 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: Action Data class
+ *
+*/
+
+
+#ifndef MULACTIONITEM_H
+#define MULACTIONITEM_H
+
+#include <mul/imulvarianttype.h>
+#include <alf/alfvarianttype.h>
+#include <memory>
+
+#include <osn/osndefines.h>
+#include <osn/ustring.h>
+
+namespace osncore
+ {
+ class UString;
+ }
+using namespace osncore;
+
+
+namespace Alf
+ {
+
+ namespace mulactionitem
+ {
+ static const char* const KActionString = "actionItem";
+ }
+ /*! @struct MulActionData
+ * @brief Class holds the Action Data. Data varies on the basis of the type of
+ * the action. Individual data items are public and can be accessed
+ * once ref is obtained to the MulActionData structure.
+ */
+ struct MulActionData
+ {
+ /*! @var Contains command id in case of simple command. */
+ int mCmdId;
+ };
+
+ /*! @struct MulActionData
+ * @brief Client need to use this class to add action item to data model.
+ * Action can be of type simple command or a service api.
+ * More data about the action is also encapsulated within the same class
+ * Action item will represent one attribute within the visual item.
+ *
+ */
+ class MulActionItem : public IMulVariantType//public IAlfModelBase
+ {
+ public:
+
+ /*! @enum TMulActionType
+ * Action Type Definition.
+ */
+ enum TMulActionType
+ {
+ EActionSimple /*!< Type specifies that the action is a simple command. */
+ };
+
+ public: //Constructor and Destructor
+
+ /**
+ * C++ constructor
+ *
+ * @param aType Action type. Possible options are defined by TMulActionType.
+ * @param aData Action data based on type of the action. Ownership gets transfered.
+ * @throw Invalid_argument, In case aData is NULL.
+ */
+ OSN_IMPORT MulActionItem(TMulActionType aType, MulActionData* aData);
+
+ /**
+ * Copy constructor.
+ */
+ OSN_IMPORT MulActionItem( const MulActionItem& aActionItem );
+
+ /**
+ * Destructor.
+ */
+ OSN_IMPORT ~MulActionItem();
+
+ public: // New methods
+
+ /**
+ * Set/Change the action type of an action item.
+ * Default type of the action item is EActionSimple.
+ *
+ * @param aType Action type. Possible options are defined by TMulActionType.
+ */
+ OSN_IMPORT void SetActionType( TMulActionType aType = EActionSimple );
+
+ /**
+ * Returns the action type of the action item.
+ *
+ * @return Action type. Possible options are defined by TMulActionType.
+ */
+ OSN_IMPORT MulActionItem::TMulActionType ActionType() const;
+
+ /**
+ * Set/Change the action data of an action item.
+ * Ownership gets transfered.
+ *
+ * @param aData Action data based on type of the action. Ownership gets transfered.
+ * @throw Invalid_argument, In case aData is NULL.
+ */
+ OSN_IMPORT void SetActionData( MulActionData* aData );
+
+ /**
+ * Returns the action data of the action item.
+ *
+ * @return Action data of the action item. A const reference is returned.
+ */
+ OSN_IMPORT const MulActionData& ActionData() const;
+
+ public: // from IAlfModelBase
+
+ //virtual const UString& Type();
+
+ public: // from IMulVariantType
+
+ OSN_IMPORT std::auto_ptr< IMulVariantType > Clone();
+
+ private: // form IAlfVAriantType
+
+ void set(IAlfVariantType& aValue) ;
+
+ Type type() const ;
+
+ bool boolean() const ;
+
+ int integer() const ;
+
+ uint uinteger() const ;
+
+ double real() const ;
+
+ const UString& string() const ;
+
+ IAlfContainer* container() ;
+
+ IAlfMap* map() ;
+
+ IAlfBranch* branch() ;
+
+ IAlfModelBase* customData() ;
+
+ private: // form IAlfVariantType
+
+ private: // Class data
+
+ /*! @var Type of the action data the class instance holds. */
+ TMulActionType mType;
+
+ /*! @var Pointer to the action data. Data varies on the basis of the action type
+ * Class owns the action data. */
+ auto_ptr<MulActionData> mData;
+
+ /*! @var Pointer to the ActionString data. */
+ auto_ptr<UString> mActionString;
+ };
+
+ } // namespace Alf
+
+#endif //MULACTIONITEM_H
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulasyncdataprovider.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* 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: Active Object header for providing data asynchronously
+*
+*/
+
+
+#ifndef __MULASYNCDATAPROVIDER_H__
+#define __MULASYNCDATAPROVIDER_H__
+
+#include <e32base.h> // For CActive
+#include <mul/imulmodelprovider.h>
+#include <mul/muldatapath.h>
+#include <vector>
+
+#include "muldatawindow.h"
+#include "mulpagedatawindow.h"
+
+using namespace std;
+//Forward declarations
+
+
+namespace Alf
+ {
+//Forward declarations
+
+class MulAsyncData
+ {
+public:
+ bool operator == (const MulAsyncData& aData )
+ {
+ return ( this->mStartIndex == aData.mStartIndex && this->mRange == aData.mRange );
+ }
+public:
+ int mStartIndex;
+ int mRange;
+ MulDataPath mPath;
+ };
+
+class MulAsyncDataProvider : public CActive
+ {
+
+public : // Constructor and Destructor
+
+ /// need to have two-phase construction
+ /// - otherwise mixing leaves and throws
+ MulAsyncDataProvider( IMulModelProvider& aDataProvider, const MulPageDataWindow& aDataWindow );
+
+ ~MulAsyncDataProvider();
+
+ void ProvideData( int aStartIndex, int aRange, const MulDataPath& aPath, const bool aIsSync = false );
+
+private:
+
+ /**
+ * Active call back funtion .
+ */
+ void RunL();
+
+ void DoCancel();
+
+ void ActivateAndComplete();
+
+ int GetFirstIndexForWhichDataIsPresent(int aStartIndex, int aEndIndex);
+
+private: //data
+
+ IMulModelProvider& mDataProvider;
+ vector<MulAsyncData> mDataQueue;
+ const MulPageDataWindow& mDataWindow;
+ }; //end of class.
+
+ } // End of namespace .
+
+#endif //__MULASYNCDATAPROVIDER_H__
+
+// End of file
--- /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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulcallback.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* 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: Active object for performing Async filtering
+*
+*/
+
+
+#ifndef MULCALLBACK_H_
+#define MULCALLBACK_H_
+
+#include <vector>
+
+namespace Alf
+ {
+
+class MulCallback
+ {
+public:
+
+ MulCallback()
+ {
+ }
+
+ MulCallback( void (*aFunction) ( void* aObject, std::vector<int>& aArgument ), void* aObject )
+ {
+ mFunction = aFunction;
+ mObject = aObject;
+ }
+
+ void Callback( std::vector<int>& aArgument ) const
+ {
+ mFunction( mObject, aArgument );
+ }
+
+private:
+
+ void (*mFunction) ( void* aObject, std::vector<int>& aArgument );
+
+ void* mObject;
+
+ };
+
+ }//namespace Alf
+
+#endif //MULCALLBACK_H_
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/muldatawindow.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,356 @@
+/*
+* 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: Data Window Implemenation
+*
+*/
+
+
+#ifndef MULDATAWINDOW_H_
+#define MULDATAWINDOW_H_
+
+#include "mulmodeldef.h"
+
+namespace Alf
+ {
+
+//Forward Declaration
+class MulModelImpl;
+
+/**
+ * Implametation of Data Window Class
+ * This class maintain offset for buffer item that are required by widget,
+ * so only that much item remain present in alf model instance.It update buffer items
+ * when highlight changed and notify model to update alf model if items are not present
+ * in Alf model.
+ *
+ */
+class MulDataWindow
+ {
+public: //Constructor and Destructor
+
+ /**
+ * C++ constructor
+ *
+ * @param aMulModel refrece of model implementation
+ */
+ MulDataWindow( MulModelImpl& aMulModel );
+
+ /**
+ * Descturctor
+ */
+ ~MulDataWindow();
+
+public: //New Method
+
+ /**
+ * Set window size
+ *
+ * @param aWindowSize No of items that are visible on screen
+ */
+ void SetWindowSize( int aWindowSize );
+
+ /**
+ * Set Buffer size
+ * Here buffser size mean number of items that will be above and below window
+ * By default buffer size is equal to window size if following api is not called.
+ *
+ * @param aBufferSize Size of buffer
+ */
+ void SetBufferSize( int aBufferSize );
+
+ /**
+ * Change highlighted index.
+ * Changing highlight will check that data window needs to be updated or not
+ * and if required it update data window
+ *
+ * @aHighlightIndex New highlighted item in Data window
+ * @throws invaid_argument exception
+ */
+ void SetHighlight( int aHighlightIndex );
+
+ /**
+ * Scroll Window to mention item index
+ * it will check that data window needs to be updated or not
+ * and if required it update data window
+ *
+ * @aItemIndex item index
+ * @throws invaid_argument exception
+ */
+ void ScrollWindow( int aItemIndex );
+
+ /**
+ * Return Highlighted item's index
+ *
+ * @return Highlighted item's index
+ */
+ int Highlight() const
+ {
+ return mHighlight;
+ }
+
+ /**
+ * Return previous top offset
+ *
+ * @return Previos top offset
+ */
+ int OldTopOffset() const
+ {
+ return mOldBufferTop;
+ }
+
+ /**
+ * Return previous bottom offset
+ *
+ * @return Previos bottom offset
+ */
+ int OldBottomOffset() const
+ {
+ return mOldBufferBottom;
+ }
+
+ /**
+ * Return current top offset
+ *
+ * @return Current top offset
+ */
+ int TopOffset() const
+ {
+ return mBufferTop;
+ }
+
+ /**
+ * Return current bottom offset
+ *
+ * @return Current bottom offset
+ */
+ int BottomOffset() const
+ {
+ return mBufferBottom;
+ }
+
+ /**
+ * Return visible window top offset
+ *
+ * @return Current window top offset
+ */
+ int TopWindowOffset() const
+ {
+ return mWindowTop;
+ }
+
+ /**
+ * Return visible window bottom offset
+ *
+ * @return Current window bottom offset
+ */
+ int BottomWindowOffset() const
+ {
+ return mWindowBottom;
+ }
+
+ /**
+ * Return the Old Rear Top offset
+ *
+ * @return Old Rear Top offset
+ */
+ int OldRearTopOffset() const
+ {
+ return mOldRearBufferTop;
+ }
+
+ /**
+ * Return the Old Rear Bottom offset
+ *
+ * @return Old Rear Bottom offset
+ */
+ int OldRearBottomOffset() const
+ {
+ return mOldRearBufferBottom;
+ }
+
+ /**
+ * Return the Rear Top offset
+ *
+ * @return Rear Top offset
+ */
+ int RearTopOffset() const
+ {
+ return mRearBufferTop;
+ }
+
+ /**
+ * Return the Rear Bottom offset
+ *
+ * @return Rear Bottom offset
+ */
+ int RearBottomOffset() const
+ {
+ return mRearBufferBottom;
+ }
+
+ /**
+ * Return buffer size
+ *
+ * @return Current buffer size
+ */
+ int BufferSize() const
+ {
+ return mBufferSize;
+ }
+
+ /**
+ * Return window size
+ *
+ * @return Current window size
+ */
+ int WindowSize() const
+ {
+ return mWindowSize;
+ }
+
+ /**
+ * Check that items falls in data window or not
+ *
+ * @param aItemIndex index of item
+ * @return true if item is in data window otherwise false
+ */
+ bool IsItemInDataWindow(int aItemIndex ) const;
+
+ /**
+ * Returns Relative index in datawindow from Absolute index
+ *
+ * @param aAbsoluteIndex Absolute index
+ * @return Relative index
+ */
+ int RelativeIndex( int aAbsoluteIndex ) const;
+
+ /**
+ * Returns Absoulte index from relative index
+ *
+ * @param aRelativeIndex Relative index
+ * @return Absolute index
+ */
+ int AbsoluteIndex( int aRelativeIndex ) const;
+
+ /**
+ * Check that valid window size it set or not.
+ *
+ * @return true - valid window size is set
+ * false - otherwisze
+ */
+ bool IsWindowEnabled() const
+ {
+ return ( mWindowSize != KNotInitialized );
+ }
+
+ /**
+ * Adjust buffer offset according to window offset
+ */
+ void AdjustBuffer();
+
+ /**
+ * modify the window top and window bottom values
+ */
+ void SetVisibleWindow(int aWindowTop, int aWindowBottom);
+
+ /**
+ * Return the complete buffer size, i.e. both top, bottom buffer and the window
+ */
+ int ActualBufferSize() const
+ {
+ return (2 * mBufferSize) + mWindowSize;
+ }
+
+ /**
+ * Change highlighted index.
+ * This change will not check that data window needs to be updated or not
+ *
+ * @aHighlightIndex New highlighted item in Data window
+ * @throws invaid_argument exception
+ */
+ void UpdateHighlight( int aHighlightIndex );
+
+ /**
+ * Save old values
+ */
+ void SaveOldValues()
+ {
+ mOldBufferTop = mBufferTop;
+ mOldBufferBottom = mBufferBottom;
+
+ mOldRearBufferTop = mRearBufferTop;
+ mOldRearBufferBottom = mRearBufferBottom;
+ }
+
+ /**
+ * Compares the current and old buffer values and returns true if teh values are cahnged
+ */
+ bool IsBufferOffsetChanged();
+
+private://New Method
+
+ /**
+ * Check that visible window need to be updated or not.
+ * If required it update visible window.
+ */
+ void UpdateDataWindow();
+
+ /**
+ * Data window is updated and window need to sifted down
+ */
+ void ShiftWindowDown();
+
+ /**
+ * Data window is updated and window need to sifted up
+ */
+ void ShiftWindowUp();
+
+private: // Data
+
+ MulModelImpl& mMulModel; //not own
+
+ int mHighlight;
+
+ //this is index of item wich decide window offset
+ int mItemIndex; //dont know what should be better name
+ int mOldItemIndex;
+
+ int mBufferSize;
+
+ int mWindowSize;
+ int mWindowOffset;
+
+ int mWindowTop;
+ int mWindowBottom;
+
+ int mBufferTop;
+ int mBufferBottom;
+
+ int mOldBufferTop;
+ int mOldBufferBottom;
+
+ int mRearBufferTop;
+ int mRearBufferBottom;
+
+ int mOldRearBufferTop;
+ int mOldRearBufferBottom;
+
+ };
+
+ } //namespace Alf
+
+#endif /*MULDATAWINDOW_H_*/
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulfilterao.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,115 @@
+/*
+* 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: Active object for performing Async filtering
+*
+*/
+
+
+#ifndef MULFILTERAO_H_
+#define MULFILTERAO_H_
+
+#include <e32base.h>
+
+#include <alf/alfvarianttype.h>
+#include <osn/osndefines.h>
+
+#include "mulcallback.h"
+
+
+namespace osncore
+ {
+ template <class T> class CAlfPtrVector;
+ class UString;
+ }
+using namespace osncore;
+
+namespace Alf
+ {
+//Forward Declaration
+
+class MulCacheManager;
+class MulDataWindow;
+class MulFilter;
+class IMulFilterDataProvider;
+class MulCallback;
+
+class MulFilterAo : public CActive
+ {
+
+public: //constructor and destructor
+
+ /**
+ * symbian constcutor
+ *
+ * @param aModel Model refrence
+ */
+ //static MulFilterAo* NewL( IMulFilterDataProvider& aModel );
+
+ /**
+ * Destructor
+ */
+ ~MulFilterAo();
+
+public: //constructor and destructor
+
+ /**
+ * C++ constcutor
+ *
+ * @param aModel Model refrence
+ */
+ MulFilterAo(IMulFilterDataProvider& aModel );
+
+ /**
+ * symbian Second phase constructor
+ */
+ //void ConstructL();
+
+private: //from CActive
+
+ void RunL();
+
+ void DoCancel();
+
+public: //new method
+
+ /**
+ * Perform Async filtering. Model call this function when SetFilter is called on Model.
+ * After performing async filtering function will notify model via callback object.
+ *
+ * @param aFilter Filter object
+ * @param aCallback Callback object
+ */
+ void DoAsyncFilter(MulFilter& aFilter,MulCallback aCallback);
+
+private:
+
+ /**
+ * Perform garbage collection operation
+ */
+ void DoFilter();
+
+private: //data
+
+ IMulFilterDataProvider& mMulModel;
+ MulFilter* mFilter; //not own
+ MulCallback mCallback;
+ };
+
+ } //namespace Alf
+
+#endif /*MULFILTERAO_H_*/
+
+//End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulmodeldef.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* 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: Contains const character string for model
+*
+*/
+
+
+#ifndef __MULMODELDEF_H
+#define __MULMODELDEF_H
+
+#include <e32base.h>
+
+namespace Alf
+ {
+
+static const int KDefaultBufferSize = 50;
+static const int KDefaultWindowSize = 20;
+static const int KNotInitialized = -1;
+
+static const char* const KDefaultTemplate = "template";
+static const char* const KItem = "item";
+static const char* const KContainerIndex = "container";
+static const char* const KItemIndex = "itemindex";
+static const char* const KInvalidArgument = "invalid argument";
+static const char* const KIndex = "index";
+static const char* const KStartIndex = "index";
+static const char* const KCount = "count";
+
+_LIT(KLInvalidArgument,"Invalid Argument");
+_LIT(KLNotImplemented,"Not implemented");
+
+ } // namespace Alf
+
+#endif // __MULMODELDEF_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulmodelfactoryplugin.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* 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: Plugin factory header for model.
+*
+*/
+
+
+#ifndef MULMODELFACTORYPLUGIN_H
+#define MULMODELFACTORYPLUGIN_H
+
+#include <ecom/implementationproxy.h>
+#include <alf/ialffactoryplugin.h>
+
+namespace Alf
+ {
+
+class IfId;
+
+/**
+ * Factory plugin for creating list widget related products.
+ */
+class MulFactoryPlugin: public IAlfFactoryPlugin
+ {
+public:
+
+ /**
+ * Two-phased symbian constructor.
+ *
+ * @return New instance of this factory plugin.
+ */
+ static MulFactoryPlugin* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~MulFactoryPlugin();
+
+// From base class MAlfPluginFactory
+
+ /**
+ * Create factory product.
+ *
+ * @param aProduct Product to create.
+ * @param aInitData Initialization data for product
+ * @return Instance or NULL
+ */
+ IAlfInterfaceBase* createProduct( const char* aProduct, void* aInitData );
+
+ /**
+ * Count available products
+ *
+ * @return Product count
+ */
+ int productCount() const;
+
+ /**
+ * Fetch product info by index
+ *
+ * @param aIndex List index
+ * @return Descriptor describing product
+ */
+ const char* productInfo( int aIndex ) const;
+
+// From base class MAlfInterfaceBase
+
+ /**
+ * Creates interface based on the given type.
+ *
+ * @param aType Interface type to create.
+ * @return Requested interface.
+ */
+ IAlfInterfaceBase* makeInterface( const IfId& aType );
+ };
+
+ } // namespace Alf
+
+// Exported factory function required by ECOM-framework
+IMPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount );
+
+#endif //MULMODELFACTORYPLUGIN_H
+
+//End of file
+
--- /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
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulpagedatawindow.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,363 @@
+/*
+* 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: Page by Page Data Window Implemenation
+*
+*/
+
+
+#ifndef MULPAGEDATAWINDOW_H_
+#define MULPAGEDATAWINDOW_H_
+
+#include "mulmodeldef.h"
+
+namespace Alf
+ {
+
+//Forward Declaration
+class MulModelImpl;
+
+/**
+ * Implametation of Data Window Class
+ * This class maintain offset for buffer item that are required by widget,
+ * so only that much item remain present in alf model instance.It update buffer items
+ * when highlight changed and notify model to update alf model if items are not present
+ * in Alf model.
+ *
+ */
+class MulPageDataWindow
+ {
+public: //Constructor and Destructor
+
+ /**
+ * C++ constructor
+ *
+ * @param aMulModel refrece of model implementation
+ */
+ MulPageDataWindow( MulModelImpl& aMulModel );
+
+ /**
+ * Descturctor
+ */
+ ~MulPageDataWindow();
+
+public: //New Method
+
+ /**
+ * Set window size
+ *
+ * @param aWindowSize No of items that are visible on screen
+ */
+ void SetWindowSize( int aWindowSize, int aPageTopIndex = KNotInitialized );
+
+ /**
+ * Set Buffer size
+ * Here buffser size mean number of items that will be above and below window
+ * By default buffer size is equal to window size if following api is not called.
+ *
+ * @param aBufferSize Size of buffer
+ */
+ void SetBufferSize( int aBufferSize );
+
+ /**
+ * Change highlighted index.
+ * Changing highlight will check that data window needs to be updated or not
+ * and if required it update data window
+ *
+ * @aHighlightIndex New highlighted item in Data window
+ * @throws invaid_argument exception
+ */
+ void SetHighlight( int aHighlightIndex );
+
+ /**
+ * Scroll Window to mention item index
+ * it will check that data window needs to be updated or not
+ * and if required it update data window
+ *
+ * @aItemIndex item index
+ * @throws invaid_argument exception
+ */
+ void ScrollWindow( int aPageTopIndex );
+
+ /**
+ * Return Highlighted item's index
+ *
+ * @return Highlighted item's index
+ */
+ int Highlight() const
+ {
+ return mHighlight;
+ }
+
+ /**
+ * Return previous top offset
+ *
+ * @return Previos top offset
+ */
+ int OldTopOffset() const
+ {
+ return mOldBufferTop;
+ }
+
+ /**
+ * Return previous bottom offset
+ *
+ * @return Previos bottom offset
+ */
+ int OldBottomOffset() const
+ {
+ return mOldBufferBottom;
+ }
+
+ /**
+ * Return current top offset
+ *
+ * @return Current top offset
+ */
+ int TopOffset() const
+ {
+ return mBufferTop;
+ }
+
+ /**
+ * Return current bottom offset
+ *
+ * @return Current bottom offset
+ */
+ int BottomOffset() const
+ {
+ return mBufferBottom;
+ }
+
+ /**
+ * Return visible window top offset
+ *
+ * @return Current window top offset
+ */
+ int TopWindowOffset() const
+ {
+ return mWindowTop;
+ }
+
+ /**
+ * Return visible window bottom offset
+ *
+ * @return Current window bottom offset
+ */
+ int BottomWindowOffset() const
+ {
+ return mWindowBottom;
+ }
+
+ /**
+ * Return the Old Rear Top offset
+ *
+ * @return Old Rear Top offset
+ */
+ int OldRearTopOffset() const
+ {
+ return mOldRearBufferTop;
+ }
+
+ /**
+ * Return the Old Rear Bottom offset
+ *
+ * @return Old Rear Bottom offset
+ */
+ int OldRearBottomOffset() const
+ {
+ return mOldRearBufferBottom;
+ }
+
+ /**
+ * Return the Rear Top offset
+ *
+ * @return Rear Top offset
+ */
+ int RearTopOffset() const
+ {
+ return mRearBufferTop;
+ }
+
+ /**
+ * Return the Rear Bottom offset
+ *
+ * @return Rear Bottom offset
+ */
+ int RearBottomOffset() const
+ {
+ return mRearBufferBottom;
+ }
+
+ /**
+ * Return buffer size
+ *
+ * @return Current buffer size
+ */
+ int BufferSize() const
+ {
+ return mBufferSize;
+ }
+
+ /**
+ * Return window size
+ *
+ * @return Current window size
+ */
+ int WindowSize() const
+ {
+ return mWindowSize;
+ }
+
+ /**
+ * Check that items falls in data window or not
+ *
+ * @param aItemIndex index of item
+ * @return true if item is in data window otherwise false
+ */
+ bool IsItemInDataWindow(int aItemIndex ) const;
+
+
+ /**
+ * Check that items falls in visible window or not
+ *
+ * @param aItemIndex index of item
+ * @return true if item is in visible window otherwise false
+ */
+ bool IsItemInVisibleWindow(int aItemIndex ) const;
+
+ /**
+ * Returns Relative index in datawindow from Absolute index
+ *
+ * @param aAbsoluteIndex Absolute index
+ * @return Relative index
+ */
+ int RelativeIndex( int aAbsoluteIndex ) const;
+
+ /**
+ * Returns Absoulte index from relative index
+ *
+ * @param aRelativeIndex Relative index
+ * @return Absolute index
+ */
+ int AbsoluteIndex( int aRelativeIndex ) const;
+
+ /**
+ * Check that valid window size it set or not.
+ *
+ * @return true - valid window size is set
+ * false - otherwisze
+ */
+ bool IsWindowEnabled() const
+ {
+ return ( mWindowSize != KNotInitialized );
+ }
+
+ /**
+ * Adjust buffer offset according to window offset
+ */
+ void AdjustBuffer();
+
+ /**
+ * Return the complete buffer size, i.e. both top, bottom buffer and the window
+ */
+ int ActualBufferSize() const
+ {
+ return (2 * mBufferSize) + mWindowSize;
+ }
+
+ /**
+ * Change highlighted index.
+ * This change will not check that data window needs to be updated or not
+ *
+ * @aHighlightIndex New highlighted item in Data window
+ */
+ void UpdateHighlight( int aHighlightIndex );
+
+ /**
+ * Adjust Window and buffer offset after insert or remove
+ *
+ */
+ void AdjustOffset();
+
+ /**
+ * Save old values
+ */
+ void SaveOldValues()
+ {
+ mOldBufferTop = mBufferTop;
+ mOldBufferBottom = mBufferBottom;
+
+ mOldRearBufferTop = mRearBufferTop;
+ mOldRearBufferBottom = mRearBufferBottom;
+ }
+
+ /**
+ * Compares the current and old buffer values and returns true if teh values are cahnged
+ */
+ bool IsBufferOffsetChanged();
+
+private://New Method
+
+ /**
+ * Check that visible window need to be updated or not.
+ * If required it update visible window.
+ */
+ void UpdateDataWindow();
+
+ /**
+ * Data window is updated and window need to sifted down
+ */
+ //void ShiftWindowDown();
+
+ /**
+ * Data window is updated and window need to sifted up
+ */
+ //void ShiftWindowUp();
+
+private: // Data
+
+ MulModelImpl& mMulModel; //not own
+
+ int mHighlight;
+
+ int mPageTopIndex;
+ int mOldPageTopIndex;
+
+ int mBufferSize;
+
+ int mWindowSize;
+
+ int mWindowTop;
+ int mWindowBottom;
+
+ int mBufferTop;
+ int mBufferBottom;
+
+ int mOldBufferTop;
+ int mOldBufferBottom;
+
+ int mRearBufferTop;
+ int mRearBufferBottom;
+
+ int mOldRearBufferTop;
+ int mOldRearBufferBottom;
+
+ };
+
+ } //namespace Alf
+
+#endif //MULPAGEDATAWINDOW_H_
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulpullmode.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,105 @@
+/*
+* 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: Header for Pull Mode
+ *
+*/
+
+
+#ifndef MULPULLMODE_H
+#define MULPULLMODE_H
+
+//Includes
+#include "mulpushmode.h"
+
+namespace Alf
+ {
+
+//Forward Declaration
+
+class IMulModelProvider;
+class MulAsyncDataProvider;
+
+/**
+ * Implementation for Pull Mode
+ */
+class MulPullMode : public MulPushMode
+ {
+
+public:
+
+ /**
+ * C++ constructor.
+ *
+ * @param aDataWindow DataWindow for model
+ * @param aModelProvider Data Provider for model
+ */
+ MulPullMode( MulPageDataWindow& aDataWindow,
+ const IMulModelProvider& aModelProvider);
+
+ /**
+ * Destructor.
+ */
+ ~MulPullMode();
+
+public: //from MulPushMode
+
+
+ void Update( int aIndex, int aCount,
+ const MulDataPath& aPath);
+
+ void Refresh(int aCount, const MulDataPath& aPath);
+
+ void SetData( int aIndex, auto_ptr<MulVisualItem> aVisualItem,
+ const MulDataPath& aPath);
+
+ void SetTemplate( mulwidget::TLogicalTemplate aTemplateId );
+
+ void WindowSiftedDown();
+
+ void WindowSiftedUp();
+
+ void ModelCountChanged(int aOldCount, int aNewCount);
+
+ void DataWindowUpdated();
+
+ const MulVisualItem& Item( int aAbsoluteIndex );
+
+private:
+
+ /**
+ * Create list of indices and call ProvideData method
+ *
+ * @param aStartIndex, Index form where the data should be fetched
+ * @param aRange, Number of items for which data should be fetched
+ */
+ void ProvideData(int aStartIndex, int aRange);
+
+ /**
+ * Update Loop buffer because of data window updation
+ *
+ */
+ void UpdateLoopBuffer();
+
+private: //data
+
+ //IMulModelProvider* mModelProvider; // Not own
+ auto_ptr<MulAsyncDataProvider> mModelProvider; // own
+ };
+
+ } // namespace Alf
+
+#endif // MULPULLMODE_H
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulpushmode.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,229 @@
+/*
+* 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 base
+ *
+*/
+
+
+#ifndef MULPUSHMODE_H
+#define MULPUSHMODE_H
+
+//Includes
+#include <osn/ustring.h>
+
+#include <mul/muldatapath.h>
+
+#include "mul/imulwidget.h"
+
+
+namespace Alf
+ {
+
+//Forward Declaration
+
+class MulVisualItem;
+class MulCacheManager;
+class MulPageDataWindow;
+class MulAlfModelImpl;
+
+
+/**
+ * Base implementation class for pull/push model.
+ * @lib
+ */
+class MulPushMode
+ {
+
+public:
+
+ /**
+ * C++ constructor.
+ *
+ * @param aDataWindow DataWindow for model
+ */
+ MulPushMode( MulPageDataWindow& aDataWindow );
+
+ /**
+ * Destructor
+ */
+ virtual ~MulPushMode();
+
+ /**
+ * Informs the data model that new items have been added to client's
+ * internal model. Data model is expected to sync its indices as a
+ * result.
+ *
+ * @param aIndex Position where items were inserted.
+ * @param aCount Number of items inserted.
+ * @return true if highlight is modified else false.
+ */
+ bool Insert( int aIndex, int aCount,
+ const MulDataPath& aPath = MulDataPath() );
+
+ /**
+ * Informs the data model that items have been removed from the client's.
+ * internal data model.Data model is expected to sync its indices as a
+ * result.
+ *
+ * @param aIndex Position from where items have to be removed.
+ * @param aCount Number of items to be removed.
+ * @return true if highlight is modified else false.
+ */
+ bool Remove( int aIndex, int aCount,
+ const MulDataPath& aPath = MulDataPath() );
+
+ /**
+ * Informs the data model that an item has been updated in the client's
+ * internal model. Data model will use to input to determine whether
+ * a visualization change is required.
+ *
+ * @param aIndex Position from where items have to be updated.
+ * @param aCount Number of items to be updated.
+ */
+ virtual void Update( int aIndex, int aCount,
+ const MulDataPath& aPath = MulDataPath() );
+
+
+ /**
+ * A refresh data request. Informs that the data model has to be
+ * repopulated with mentioned number of items. So the data model
+ * will remove all the existing data and issue request to the
+ * provider for new data.
+ *
+ * @param aCount Number of items to be repopulated.
+ * @param aPath Path of parent item in the data hierarchy.
+ * Default is Null path i.e. no parent.
+ */
+ virtual void Refresh( int aCount, const MulDataPath& aPath = MulDataPath());
+
+ /**
+ * Provide data for the specified item. This is a unified API for
+ * adding & updating data.
+ *
+ * @param aIndex Position of item to be updated.
+ * @param aVisualItem Collection of attributes. Ownership is transfered.
+ * @throw Invalid Argument, in case index is out of bound or visual
+ * item is NULL.
+ * @throw Logic Error, in case item could not be updated.
+ */
+ virtual void SetData( int aIndex,
+ std::auto_ptr<MulVisualItem> aVisualItem,
+ const MulDataPath& aPath);
+
+ /**
+ * Get the data for item at the specified index.
+ *
+ * @param aIndex Position of item in the data model.
+ * @return A constant reference to the data at the given index.
+ */
+ const MulVisualItem* Data( int aIndex, const MulDataPath& aPath ) const;
+
+ /**
+ * Get the count of items in the model.
+ *
+ * @return Count of items in the model.
+ */
+ int Count(const MulDataPath& aPath ) const;
+
+ /**
+ * Set the default logical template id for widget elements.
+ * Logical templates map to visualization of the element(s).
+ *
+ * @param aTemplateId Logical template id for the widget elements.
+ */
+ virtual void SetTemplate( mulwidget::TLogicalTemplate aTemplateId ) ;
+
+ /**
+ * Returns the default template.
+ *
+ * @return Logical template id for the widget elements.
+ */
+ mulwidget::TLogicalTemplate Template( ) ;
+
+ /**
+ * Set the logical template id for a specific widget element.
+ * Logical templates map to visualization of the element.
+ *
+ * @param aItemIndex Unique id of item of which template needs to be applied.
+ * @param aTemplateId Logical template id for the widget element.
+ * @throw Invalid Argument, in case index is out of bound.
+ */
+ void SetTemplate( int aItemIndex, mulwidget::TLogicalTemplate aTemplateId,
+ const MulDataPath& aPath );
+
+ /**
+ * Returns the total number of items in model.
+ */
+ int CurrentItemCount() const;
+
+ /**
+ * When ever data window update data window, it will use this method to notify
+ * Data model to update data window and update alf model
+ */
+ virtual void DataWindowUpdated(){ };
+
+ /**
+ * Return cachemanager
+ *
+ * @return cachae manager
+ */
+ MulCacheManager& CacheManager() const;
+
+ /**
+ * Get Visualte item from absolute index
+ *
+ * @param aAbsoluteIndex Absolute index
+ * @return VisualItem at index
+ */
+ virtual const MulVisualItem& Item( int aAbsoluteIndex );
+
+ /**
+ * Check that visual item has Templatte or not
+ * If visualte item is not poper exception will be throws
+ *
+ * @param aVisualItem Visual item to be tested
+ */
+ void ValidateVisualItem( MulVisualItem& aVisualItem );
+
+ /**
+ * Modify the data alfmodel to handle remove, insert, or expand/colapse operation
+ *
+ * @param, aOldCount Total number of items in Alf model before the current operation
+ */
+ virtual void ModelCountChanged(int aOldCount, int aNewCount);
+
+private:
+
+ /**
+ * If current highlight is greater than the number of items in model then update the highlight.
+ *
+ * @return Ture if highlight value is modified else false
+ */
+ bool ValidateCurrentHighlight();
+
+protected: // data members
+
+ std::auto_ptr<MulCacheManager> mCacheManager; //own
+ MulPageDataWindow& mDataWindow; // Not own
+ //UString mDefaultTemplate; //default template for data
+ mulwidget::TLogicalTemplate mDefaultTemplate;
+
+ };
+
+ } // namespace Alf
+
+#endif // MULPUSHMODE_H
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/multree.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,333 @@
+/*
+* 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: Header for MulTree
+*
+*/
+
+
+#ifndef MULTREE_H_
+#define MULTREE_H_
+
+#include <memory>
+#include <vector>
+#include <osn/osnnew.h>
+
+namespace Alf
+ {
+//Forward declaration
+class MulDataPath;
+
+class MulTreeNode
+ {
+public:
+
+ /**
+ * Constuctor
+ *
+ * @param aIndex Index of this node
+ */
+ MulTreeNode( int aIndex )
+ {
+ mParent = NULL;
+ mExpandedState = false;
+ mIndex = aIndex;
+ }
+
+ /**
+ * Constuctor
+ *
+ * @param aParent Parent node for this node. Node dosent take ownership of aParent
+ * @param aIndex Index of this node
+ */
+ MulTreeNode( MulTreeNode* aParent, int aIndex )
+ {
+ mParent = aParent;
+ mExpandedState = false;
+ mIndex = aIndex;
+ }
+
+ /**
+ * Destructor
+ */
+ ~MulTreeNode()
+ {
+ int count = mChilds.size();
+ for(int i = 0 ; i < count ; ++i )
+ {
+ delete Child(i);
+ }
+ mChilds.clear();
+ }
+
+ /**
+ * Insert child node in this node at given index
+ *
+ * @param aChild Child node.Takes ownership of aChild
+ * @param aIndex index at which child node to be inserted
+ */
+ void InsertChild( std::auto_ptr<MulTreeNode> aChild, int aIndex )
+ {
+ aChild->mParent = this;
+ mChilds.insert( mChilds.begin() + aIndex, aChild.get() );
+ aChild.release();
+ }
+
+ /**
+ * Remove child node from this node.
+ *
+ * @param aIndex Index of child that need to be removed
+ */
+ void RemoveChild( int aIndex )
+ {
+ MulTreeNode* childNode = Child(aIndex);
+ delete childNode;
+ childNode = NULL;
+ mChilds.erase( mChilds.begin() + aIndex );
+ }
+
+ /**
+ * Number of child node that this node contains
+ *
+ * @return Number of childs
+ */
+ int ChildCount() const
+ {
+ return mChilds.size();
+ }
+
+ /**
+ * Return child node at given index
+ *
+ * @param aIndex index of child node
+ * @return Child node at given index
+ */
+ MulTreeNode* Child( int aIndex )
+ {
+ //At checks for out of bound condition we dont need to check again
+ return mChilds.at(aIndex);
+ }
+
+ /**
+ * Check that weather this node is parent node and has any childs
+ *
+ * @retrun true if node has cilds false otherwise
+ */
+ bool HasChild() const
+ {
+ return ( ChildCount() > 0 );
+ }
+
+ /**
+ * Return parent of this node
+ *
+ * @return Parent of node
+ */
+ MulTreeNode* Parent() const
+ {
+ return mParent;
+ }
+
+ /**
+ * Set Index of node to current path
+ *
+ * @param aIndex index of node
+ */
+ void SetIndex( int aIndex )
+ {
+ mIndex = aIndex;
+ }
+
+ /**
+ * Return index of node
+ *
+ * @return index of node.
+ */
+ int Index() const
+ {
+ return mIndex;
+ }
+
+ /**
+ * Expand or unexpand node.
+ *
+ * @param aExpendedState New state of node
+ */
+ void SetExpanded( bool aExpandedState )
+ {
+ mExpandedState = aExpandedState;
+ }
+
+ /**
+ * Return weather this node is expended or not
+ *
+ * @return true if expended, false otherwise
+ */
+ bool IsExpanded() const
+ {
+ return mExpandedState;
+ }
+
+private:
+
+ MulTreeNode* mParent; //not own
+ int mIndex;
+ bool mExpandedState;
+ std::vector<MulTreeNode*> mChilds; //owns all children
+ };
+
+class MulTree
+ {
+public: //Constructor and Destructor
+
+ /**
+ * C++ Constructor
+ */
+ MulTree()
+ {
+ //create root node for tree
+ mRootNode.reset( new (EMM) MulTreeNode(0) );
+ mRootNode->SetExpanded( true );
+ mRootNode->SetIndex(0);
+ }
+
+ /**
+ * Destructor
+ */
+ ~MulTree()
+ {
+ }
+
+public: //New method
+
+ /**
+ * Create new node at specified index
+ *
+ * @param aPath Path to parent node
+ * @param aIndex Position at which node to be inserted in parent node
+ */
+ void AddNode( const MulDataPath& aPath, int aIndex );
+
+ /**
+ * Remove node from specified index
+ *
+ * @param aPath Path to parent node
+ * @param aIndex Posiotin at which node to be remove from parent node
+ */
+ void RemoveNode( const MulDataPath& aPath, int aIndex );
+
+ /**
+ * Finds node with specified path
+ *
+ * @param aPath path of node to be find
+ * @return Node does not return ownership
+ */
+ MulTreeNode* FindNode( const MulDataPath& aPath ) const;
+
+ /**
+ * Finds node with specified index in specified node
+ *
+ * @param aParentNode Parent node in which search required to be made
+ * @param aIndex Index of node to be find
+ * @return Node does not return ownership
+ */
+ MulTreeNode* FindChildNode( MulTreeNode* aParentNode, int aIndex ) const;
+
+ /**
+ * Find node with specified absolute index and return path to that node.
+ *
+ * @param aIndex Index of node
+ * @return Path to node
+ */
+ MulDataPath FindNode( int aIndex ) const;
+
+ /**
+ * Create and return path for given node
+ *
+ * @param aNode Node of which path is required
+ * @return Path of node
+ */
+ MulDataPath Path( MulTreeNode& aNode ) const;
+
+ /**
+ * Return number of node this tree contains
+ *
+ * @return Number of nodes
+ */
+ int NodeCount() const;
+
+ /**
+ * Return number of node this node branch
+ *
+ * @return Number of nodes
+ */
+ int NodeCount(MulTreeNode* aCurrentNode ) const;
+
+ /**
+ * Return number of items,
+ * Checks that node is expanded or not,
+ * if expanded then add it counts child count else ignore child count.
+ *
+ * @return Node count
+ */
+ int ExpandedNodeCount() const;
+
+ /**
+ * Return number of items,
+ * Checks that node is expanded or not,
+ * if expanded then add it couts child count else ignore child count.
+ *
+ * @param aCurrentNode Node of which count is needed
+ *
+ * @return Node count
+ */
+ int ExpandedNodeCount(MulTreeNode* aCurrentNode ) const;
+
+ /**
+ * Returns node's absolute index
+ *
+ * @param aPath Path to node
+ * @param aIndex index of node in path
+ * @return position of node in whole tree
+ */
+ int NodeIndex( const MulDataPath& aPath, int aIndex ) const;
+
+private:
+
+ /**
+ * Find node with specified absolute index and return path to that node.
+ *
+ * @param aNode Node in which index to be find
+ * @param aIndex Index of node
+ * @return Path to node
+ */
+ MulDataPath FindNode( MulTreeNode* aNode, int& aAbsoluteIndex, int aIndex ) const;
+
+ /**
+ * Returns node's absolute index
+ *
+ * @param aCurrentNode Node to compare path with
+ * @param aPath Path of node which absolute index is required
+ * @param aAbsoluteIndex Counter variable
+ * @return position of node in whole tree
+ */
+ int NodeIndex( MulTreeNode* aCurrentNode, const MulDataPath& aPath,int& aAbsoluteIndex ) const;
+
+private: //data
+
+ std::auto_ptr<MulTreeNode> mRootNode; //root of tree - owned
+ };
+
+ } //namespace Alf
+
+#endif /*MULTREE_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulvectoradaptor.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,152 @@
+/*
+* 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: Adaptor class for AlfPtrVector and Stt vector
+*
+*/
+
+
+#ifndef MULVECTORADAPTOR_H_
+#define MULVECTORADAPTOR_H_
+
+#include <vector>
+#include <algorithm> //for find algorithm
+
+using namespace std;
+
+namespace Alf
+ {
+
+//Forward Declaration
+
+/**
+ * Adaptor class for stl vector with interface similar to AlfPtrVector
+ */
+template <class T> class MulVectorAdaptor
+ {
+public: //new method
+
+ /**
+ * Return number of element in vector
+ *
+ * @return no of element in vector
+ */
+ int count()
+ {
+ return mVector.size();
+ }
+
+ /**
+ * Insert item in vector
+ *
+ * @param aPosition Position of item
+ * @param aItem item to be inserted
+ */
+ void insert( uint aPosition, T aItem )
+ {
+ mVector.insert( mVector.begin() + aPosition, aItem );
+ }
+
+ /**
+ * Insert item in vector at last
+ *
+ * @param aItem item to be inserted
+ */
+ void insert( T aItem )
+ {
+ mVector.push_back( aItem );
+ }
+
+ /**
+ * Return item at specified index
+ *
+ * @param aPosition position of item
+ * @return itmem at specified index
+ */
+ T operator[] ( uint aPosition ) const
+ {
+ return mVector[aPosition];
+ }
+
+ /**
+ * Remove item from specified position
+ *
+ * @param aPosition Position of item to be removed
+ */
+ void remove( uint aPosition )
+ {
+ mVector.erase( mVector.begin() + aPosition );
+ }
+
+ /**
+ * Remove specified item
+ *
+ * @param aItem Item to be removed
+ */
+ void remove( T aItem )
+ {
+// vector<T>::iterator iter = std::find( mVector.begin(), mVector.end(), aItem) ;
+// if( iter != mVector.end())
+// {
+// mVector.erase( iter );
+// }
+
+ if( std::find( mVector.begin(), mVector.end(), aItem) != mVector.end())
+ {
+ mVector.erase( std::find( mVector.begin(), mVector.end(), aItem) );
+ }
+ }
+
+ /**
+ * Return actual std vector of this adaptor class
+ *
+ * @return Return std vector.
+ */
+ const vector<T>& actualVector()
+ {
+ return mVector;
+ }
+
+ /**
+ * Find specifed item in vecotr
+ *
+ * @return return true if item found false otherwise
+ */
+ bool find( T aItem )
+ {
+// vector<T>::iterator iter = std::find(mVector.begin(), mVector.end(), aItem) ;
+// return (iter != mVector.end());
+
+ return (std::find(mVector.begin(), mVector.end(), aItem) != mVector.end());
+ }
+
+ /**
+ * Clear the content of vector
+ */
+ void clear()
+ {
+ mVector.clear();
+ }
+
+private: //data
+
+ vector<T> mVector;
+ };
+
+ } //namespace Alf
+
+#endif /*MULVECTORADAPTOR_H_*/
+
+//End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/rom/muldatamodel.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* 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: Data model iby file.
+*
+*/
+
+
+#ifndef __MULDATAMODEL_IBY__
+#define __MULDATAMODEL_IBY__
+
+ECOM_PLUGIN(muldatamodelplugin.dll, muldatamodelplugin.rsc)
+file=\epoc32\release\armv5\urel\mulmodelutility.dll \sys\bin\mulmodelutility.dll
+file=\epoc32\release\armv5\urel\muldatamodel.dll \sys\bin\muldatamodel.dll
+//file=\epoc32\release\armv5\udeb\mulmodelutility.dll \sys\bin\mulmodelutility.dll
+//file=\epoc32\release\armv5\udeb\muldatamodel.dll \sys\bin\muldatamodel.dll
+#endif // __MULDATAMODEL_IBY__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulactionitem.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,227 @@
+/*
+* 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: Action item class implementation.
+ *
+*/
+
+
+// includes
+#include "mulactionitem.h"
+
+#include <stdexcept>
+
+namespace Alf
+ {
+
+static const char* const KNotImplemented = "Not Implemented";
+static const char* const KInvalidArgument = "Invalid Parameter";
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulActionItem::MulActionItem(TMulActionType aType, MulActionData* aData):
+ mType(aType)
+ {
+ if( !aData )
+ {
+ throw std::invalid_argument(std::string(KInvalidArgument));
+ }
+ mData = aData;
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulActionItem::MulActionItem( const MulActionItem& aActionItem )
+ {
+ mType = aActionItem.mType;
+ mData.reset( new (EMM) MulActionData(*aActionItem.mData.get()));
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulActionItem::~MulActionItem()
+ {
+ // No implemnetation.
+ }
+
+// ---------------------------------------------------------------------------
+// SetActionType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulActionItem::SetActionType( TMulActionType aType)
+ {
+ mType = aType;
+ }
+
+// ---------------------------------------------------------------------------
+// ActionType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulActionItem::TMulActionType MulActionItem::ActionType() const
+ {
+ return mType;
+ }
+
+// ---------------------------------------------------------------------------
+// SetActionData
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulActionItem::SetActionData( MulActionData* aData )
+ {
+ if( !aData )
+ {
+ throw std::invalid_argument(std::string(KInvalidArgument));
+ }
+
+ mData = aData;
+ }
+
+// ---------------------------------------------------------------------------
+// ActionData
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const MulActionData& MulActionItem::ActionData() const
+ {
+ return *mData.get();
+ }
+
+// ---------------------------------------------------------------------------
+// Type
+// ---------------------------------------------------------------------------
+//
+//const UString& MulActionItem::Type()
+// {
+// mActionString.reset(new UString(mulactionitem::KActionString));
+// return *mActionString.get();
+// }
+
+// ---------------------------------------------------------------------------
+// Clone
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT std::auto_ptr< IMulVariantType > MulActionItem::Clone()
+ {
+ std::auto_ptr<MulActionData> actionData( new (EMM) MulActionData(*mData));
+ std::auto_ptr<IMulVariantType> clone ( new (EMM) MulActionItem( ActionType(), actionData.get()));
+ actionData.release();
+ return clone;
+ }
+
+// ---------------------------------------------------------------------------
+// set
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulActionItem::set(IAlfVariantType& /*aValue*/)
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType::Type MulActionItem::type() const
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// boolean
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool MulActionItem::boolean() const
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// integer
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int MulActionItem::integer() const
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// uinteger
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT uint MulActionItem::uinteger() const
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// real
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT double MulActionItem::real() const
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// string
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const UString& MulActionItem::string() const
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// container
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfContainer* MulActionItem::container()
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfMap* MulActionItem::map()
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// branch
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfBranch* MulActionItem::branch()
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// customData
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfModelBase* MulActionItem::customData()
+ {
+ throw std::logic_error(KNotImplemented);
+ }
+
+ } // namespace ends
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulasyncdataprovider.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,241 @@
+/*
+* 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: Active Object Implementation for providing data asynchronously
+*
+*/
+
+
+#include "mulasyncdataprovider.h"
+
+#include <osn/osnnew.h>
+#include <algorithm> //for find algorithm
+
+#include "mullog.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulAsyncDataProvider
+// ---------------------------------------------------------------------------
+//
+MulAsyncDataProvider::MulAsyncDataProvider( IMulModelProvider& aDataProvider,
+ const MulPageDataWindow& aDataWindow )
+ :CActive( EPriorityNormal ),
+ mDataProvider(aDataProvider),
+ mDataWindow(aDataWindow)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulAsyncDataProvider::MulAsyncDataProvider");
+ CActiveScheduler::Add(this);
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulAsyncDataProvider
+// ---------------------------------------------------------------------------
+//
+MulAsyncDataProvider::~MulAsyncDataProvider()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulAsyncDataProvider::~MulAsyncDataProvider");
+ Cancel();
+ mDataQueue.clear();
+ }
+
+// ---------------------------------------------------------------------------
+// RunL
+// ---------------------------------------------------------------------------
+//
+void MulAsyncDataProvider::RunL()
+ {
+ vector<MulAsyncData>::iterator iter = mDataQueue.begin();
+ if( iter < mDataQueue.end() )
+ {
+ bool inDataWindow = false;
+ MulAsyncData asyncData = *iter;
+
+ if(mDataWindow.IsItemInDataWindow(asyncData.mStartIndex) /*&& mDataWindow->IsItemInDataWindow(mStartIndex+ITEMS)*/)
+ {
+ if( asyncData.mRange < mDataWindow.WindowSize() )
+ {
+ mDataProvider.ProvideData( asyncData.mStartIndex, asyncData.mRange, asyncData.mPath);
+ }
+ else
+ {
+ mDataProvider.ProvideData( asyncData.mStartIndex, mDataWindow.WindowSize() , asyncData.mPath);
+ }
+ inDataWindow = true;
+ }
+
+ asyncData.mStartIndex += mDataWindow.WindowSize();
+ asyncData.mRange -= mDataWindow.WindowSize();
+ mDataQueue.erase(iter);
+
+ if( asyncData.mRange > 0 && inDataWindow )
+ {
+ mDataQueue.insert( iter, asyncData );
+ if( !IsActive() )
+ {
+ ActivateAndComplete();
+ }
+ }
+ else if(mDataQueue.begin() < mDataQueue.end())
+ {
+ if( !IsActive() )
+ {
+ ActivateAndComplete();
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// DoCancel
+// ---------------------------------------------------------------------------
+//
+void MulAsyncDataProvider::DoCancel()
+ {
+ //does this function required??
+ }
+//
+// ---------------------------------------------------------------------------
+// ProvideData
+// ---------------------------------------------------------------------------
+//
+void MulAsyncDataProvider::ProvideData( int aStartIndex, int aRange, const MulDataPath& aPath, const bool aIsSync )
+ {
+ if( aIsSync )
+ {
+ mDataProvider.ProvideData( aStartIndex, aRange, aPath);
+ return;
+ }
+ MulAsyncData asyncData;
+ asyncData.mStartIndex = aStartIndex;
+ asyncData.mRange = aRange;
+ asyncData.mPath = aPath;
+ if( std::find( mDataQueue.begin(), mDataQueue.end(), asyncData ) == mDataQueue.end())
+ {
+ mDataQueue.push_back( asyncData );
+ }
+
+ for( int i = 0 ; i < mDataQueue.size() ; ++i )
+ {
+ MulAsyncData data = mDataQueue[i];
+ if ( (mDataWindow.IsItemInDataWindow( data.mStartIndex ) &&
+ !mDataWindow.IsItemInDataWindow( data.mStartIndex + data.mRange - 1 ) ) )
+ {
+ int index = GetFirstIndexForWhichDataIsPresent(data.mStartIndex , data.mStartIndex + data.mRange - 1 );
+ if( index!= -1 &&( index - data.mStartIndex + 1) > 0)
+ {
+ mDataQueue.erase(mDataQueue.begin() + i);
+ data.mRange = index - data.mStartIndex + 1;
+ mDataQueue.insert(mDataQueue.begin() + i, data);
+ }
+ else
+ {
+ mDataQueue.erase(mDataQueue.begin() + i);
+ i--;
+ }
+
+ }
+ else if ( (!mDataWindow.IsItemInDataWindow( data.mStartIndex ) &&
+ mDataWindow.IsItemInDataWindow( data.mStartIndex + data.mRange - 1 ) ) )
+ {
+ int index = GetFirstIndexForWhichDataIsPresent(data.mStartIndex , data.mStartIndex + data.mRange - 1 );
+ if( index!= -1 &&( data.mStartIndex + data.mRange - index ) > 0 )
+ {
+ mDataQueue.erase(mDataQueue.begin() + i);
+ int endIndex = (data.mStartIndex + data.mRange - 1);
+ data.mStartIndex = index;
+ data.mRange = (endIndex - index + 1);
+ mDataQueue.insert(mDataQueue.begin() + i, data);
+ }
+ else
+ {
+ mDataQueue.erase(mDataQueue.begin() + i);
+ i--;
+ }
+ }
+ else if ( (!mDataWindow.IsItemInDataWindow( data.mStartIndex ) &&
+ !mDataWindow.IsItemInDataWindow( data.mStartIndex + data.mRange - 1 ) ) )
+ {
+ mDataQueue.erase(mDataQueue.begin() + i);
+ i--;
+ MUL_LOG_INFO2( "MUL::MulAsyncDataProvider::ProvideData Removing From Q: startIndx=%d,range=%d", data.mStartIndex, data.mRange );
+ }
+ }
+
+ if( !IsActive() )
+ {
+ ActivateAndComplete();
+ }
+ }
+// ---------------------------------------------------------------------------
+// GetFirstIndexForWhichDataIsPresent
+// ---------------------------------------------------------------------------
+//
+int MulAsyncDataProvider::GetFirstIndexForWhichDataIsPresent(int aStartIndex, int aEndIndex)
+ {
+ if ( aStartIndex > aEndIndex )
+ {
+ return -1;
+ }
+ int mid = (aStartIndex + aEndIndex)/2;
+ if(mDataWindow.IsItemInDataWindow(aStartIndex))
+ {
+ if(mid == aStartIndex)
+ {
+ return mid;
+ }
+ if(mDataWindow.IsItemInDataWindow(mid))
+ {
+ return GetFirstIndexForWhichDataIsPresent(mid, aEndIndex);
+ }
+ else
+ {
+ return GetFirstIndexForWhichDataIsPresent(aStartIndex, mid);
+ }
+ }
+ else if(mDataWindow.IsItemInDataWindow(aEndIndex))
+ {
+ if(mid == aStartIndex)
+ {
+ return (mid + 1);
+ }
+ if(mDataWindow.IsItemInDataWindow(mid))
+ {
+ return GetFirstIndexForWhichDataIsPresent(aStartIndex, mid);
+ }
+ else
+ {
+ return GetFirstIndexForWhichDataIsPresent(mid, aEndIndex);
+ }
+ }
+ return -1;
+ }
+
+// ---------------------------------------------------------------------------
+// ActivateAndComplete
+// ---------------------------------------------------------------------------
+//
+ void MulAsyncDataProvider::ActivateAndComplete()
+ {
+ TRequestStatus* lStatus = &iStatus;
+ iStatus = KRequestPending;
+ SetActive();
+ User::RequestComplete(lStatus, KErrNone);
+ }
+
+ } // End of namespace Alf .
+
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulcachemanager.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,435 @@
+/*
+* 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
+ *
+*/
+
+
+#include "mulcachemanager.h"
+
+#include <mul/imulvarianttype.h>
+#include <mul/muldatapath.h>
+
+#include <alf/alfvarianttype.h>
+#include <alf/ialfmap.h>
+#include <alf/ialfcontainer.h>
+#include <mul/muldatapath.h>
+
+#include <stdexcept>
+#include <osn/ustring.h>
+
+#include "mulassert.h"
+#include "mulmodeldef.h"
+#include "mulmodelimpl.h"
+#include "mul/mulmodelutility.h"
+#include "mullog.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+MulCacheManager::MulCacheManager()
+ : mTotalCount(0)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+MulCacheManager::~MulCacheManager()
+ {
+ MulVisualItemMap::iterator itr;
+ for( itr = mVisualItemMap.begin(); itr!= mVisualItemMap.end(); ++itr )
+ {
+ delete itr->second;
+ itr->second = NULL;
+ }
+ mVisualItemMap.clear();
+ }
+
+// ---------------------------------------------------------------------------
+// CreateNodes
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::CreateNodes(int aStartIndex, int aCount, const MulDataPath& /*aPath*/)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::CreateNodes()");
+
+ __MUL_ASSERT_DEBUG( aStartIndex >= 0 && aStartIndex <= ExpandedNodeCount() && aCount > 0 , KLInvalidArgument );
+
+ if(mTotalCount > 0 && aStartIndex < mTotalCount )
+ {
+ UpdataPathInMapAfterInsert(mVisualItemMap, aStartIndex, aCount);
+ UpdataPathInMapAfterInsert(mSelectionMap, aStartIndex, aCount);
+ }
+
+ mTotalCount += aCount;
+ }
+
+// ---------------------------------------------------------------------------
+// AddVisualItem
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::AddVisualItem( std::auto_ptr<MulVisualItem> aVisualItem,
+ const MulDataPath& /*aPath*/ , int aIndex)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::AddVisualItem()");
+ __MUL_ASSERT_DEBUG( aIndex >= 0 && aIndex < ExpandedNodeCount() , KLInvalidArgument );
+
+ //adding item now
+ mVisualItemMap[aIndex] = aVisualItem.release();
+ }
+
+// ---------------------------------------------------------------------------
+// AddVisualItem
+// ---------------------------------------------------------------------------
+//
+//void MulCacheManager::AddVisualItem( std::auto_ptr<MulVisualItem> aVisualItem, int aItemIndex )
+// {
+// MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::AddVisualItem()");
+// __MUL_ASSERT_DEBUG( aItemIndex >= 0 && aItemIndex < ExpandedNodeCount() , KLInvalidArgument );
+//
+// MulDataPath path ;//= mTree.FindNode( aItemIndex );
+// AddVisualItem( aVisualItem, path, aItemIndex );
+// }
+
+// ---------------------------------------------------------------------------
+// RemoveVisualItem
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::RemoveVisualItem( int aIndex )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::RemoveVisualItem()");
+
+ __MUL_ASSERT_DEBUG( aIndex >= 0 && aIndex < ExpandedNodeCount() , KLInvalidArgument );
+
+ //MulDataPath path = mTree.FindNode( aIndex );
+ MulDataPath path;
+ RemoveItemFromMap( path, aIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveVisualItem
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::RemoveVisualItem(const MulDataPath& aPath , int aIndex )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::RemoveVisualItem()");
+
+ __MUL_ASSERT_DEBUG( aIndex >= 0 && aIndex < ExpandedNodeCount() , KLInvalidArgument );
+
+ RemoveItemFromMap( aPath, aIndex );
+ mSelectionMap.erase( aIndex ); //remove marking information for this path, index
+
+ UpdataPathInMapAfterRemove( mVisualItemMap, aIndex,1 );
+ UpdataPathInMapAfterRemove( mSelectionMap, aIndex,1 );
+ mTotalCount--;
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveVisualItem
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::RemoveVisualItem(int aIndex, int aCount, const MulDataPath& aPath)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::RemoveVisualItem()");
+
+ __MUL_ASSERT_DEBUG( aIndex >= 0 && aIndex+aCount <= ExpandedNodeCount() , KLInvalidArgument );
+
+ for(int i = aIndex ; i < aIndex+aCount; i++ )
+ {
+ RemoveItemFromMap( aPath, i );
+ mSelectionMap.erase( i ); //remove marking information for this path, index
+ }
+
+ if(aIndex + aCount < ExpandedNodeCount() )
+ {
+ UpdataPathInMapAfterRemove( mVisualItemMap, aIndex, aCount);
+ UpdataPathInMapAfterRemove( mSelectionMap, aIndex, aCount );
+ }
+
+ mTotalCount-= aCount;
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveItemFromMap
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::RemoveItemFromMap( const MulDataPath& /*aPath*/ , int aIndex )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::RemoveItemFromMap()");
+
+ MulVisualItemMap::iterator findIter = mVisualItemMap.find(aIndex);
+ if( findIter!= mVisualItemMap.end() )
+ {
+ delete findIter->second;
+ findIter->second = NULL;
+ mVisualItemMap.erase( aIndex );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// UpdataPathInMapAftreRemove
+// ---------------------------------------------------------------------------
+//
+template <typename T> void MulCacheManager::UpdataPathInMapAfterRemove( std::map<int,T >& aMap, int aIndex, int aCount )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::UpdataPathInMapAfterRemove()");
+
+ //loop through all items
+ //for(int i = 0 ; i < ExpandedNodeCount() ; ++i )
+ for(int i = aIndex ; i < ExpandedNodeCount() ; ++i )
+ {
+ // if index is greater than path index then index need to be modified
+ //if( i >= aIndex )
+ {
+
+ if( aMap.find( i ) != aMap.end() )
+ {
+ T item = aMap.find( i )->second;
+ aMap.erase( i );
+ aMap[i-aCount] = item; //add item in to new index
+ }
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// UpdataPathInMapAftreInsert
+// ---------------------------------------------------------------------------
+//
+template <typename T> void MulCacheManager::UpdataPathInMapAfterInsert( std::map<int,T >& aMap, int aIndex, int aCount )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::UpdataPathInMapAfterInsert()");
+
+ //for( int i = ExpandedNodeCount() ; i > 0 ; --i )
+ for( int i = ExpandedNodeCount() ; i >= aIndex ; --i )
+ {
+ // if index is greater than path index then index need to be modified
+ //if( i >= aIndex )
+ {
+
+ if( aMap.find( i ) != aMap.end() )
+ {
+ T item = aMap.find( i )->second;
+ aMap.erase( i );
+ aMap[ i + aCount] = item; //add item in to new index
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// UpdateVisualItem
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::UpdateVisualItem( MulVisualItem& aUpdatedVisualItem, int aItemIndex )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::UpdateVisualItem()");
+
+ __MUL_ASSERT_DEBUG( aItemIndex >= 0 && aItemIndex < ExpandedNodeCount() , KLInvalidArgument );
+
+ MulDataPath path ;
+ UpdateVisualItem( aUpdatedVisualItem, path, aItemIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// UpdateVisualItem
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::UpdateVisualItem( MulVisualItem& aVisualItem,const MulDataPath& /*aPath*/, int aIndex )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::UpdateVisualItem()");
+
+ MulVisualItem* visualItem = Data( aIndex );
+ std::vector<mulvisualitem::TVisualAttribute> existingAttributes = aVisualItem.Attributes( );
+ for( int i = 0 ; i < existingAttributes.size() ; ++i )
+ {
+ mulvisualitem::TVisualAttribute attributeName = existingAttributes[i];
+ IMulVariantType* newValue = aVisualItem.Attribute( attributeName );
+ if(newValue)
+ {
+ std::auto_ptr<IMulVariantType> cloneValue = newValue->Clone();
+ int newflags = aVisualItem.Flag( attributeName );
+
+ visualItem->SetAttribute( attributeName , cloneValue.get(), newflags );
+ cloneValue.release();
+ }
+ }
+ visualItem->ResetDirtyAttribute(aVisualItem);
+ }
+
+// ---------------------------------------------------------------------------
+// Data
+// ---------------------------------------------------------------------------
+//
+MulVisualItem* MulCacheManager::Data(const MulDataPath& /*aPath*/, int aIndex ) const
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::Data()");
+
+ //__MUL_ASSERT_DEBUG( aIndex >= 0 && aIndex < ExpandedNodeCount() , KLInvalidArgument );
+
+ MulVisualItemMap::const_iterator findIter = mVisualItemMap.find(aIndex);
+ if( findIter != mVisualItemMap.end() )
+ {
+ return findIter->second;
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Data
+// ---------------------------------------------------------------------------
+//
+MulVisualItem* MulCacheManager::Data( int aIndex ) const
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::Data()");
+
+ __MUL_ASSERT_DEBUG( aIndex >= 0 && aIndex < ExpandedNodeCount() , KLInvalidArgument );
+
+ MulDataPath path ;
+ return Data( path, aIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// Count
+// ---------------------------------------------------------------------------
+//
+int MulCacheManager::Count() const
+ {
+ return mVisualItemMap.size();
+ }
+
+// ---------------------------------------------------------------------------
+// ExpandedNodeCount
+// ---------------------------------------------------------------------------
+//
+int MulCacheManager::ExpandedNodeCount( ) const
+ {
+ //return mTree.ExpandedNodeCount();
+ return mTotalCount;
+ }
+
+// ---------------------------------------------------------------------------
+// SetMarkedIndices
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::SetMarkedIndices( MulWidgetDef::TMulWidgetMarkingType aType ,
+ const std::vector<int>& aItemsIndex,
+ const MulDataPath& /*aPath*/)
+
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::SetMarkedIndices()");
+
+ bool selection( false );
+ // If selection type is not mark or unmark throw invalid argument exception
+ aType == MulWidgetDef::EMulMark || aType == MulWidgetDef::EMulUnmark ?
+ selection = ( aType == MulWidgetDef::EMulMark ) :
+ throw std::invalid_argument( KInvalidArgument );
+
+ // Add selected indices to vector and remove unselected
+ for(int i = 0 ; i < aItemsIndex.size() ; i++ )
+ {
+ int index = aItemsIndex[i];
+ selection ? mSelectionMap[index] = index : mSelectionMap.erase(index);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetMarkedIndices
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::SetMarkedIndices(MulWidgetDef::TMulWidgetMarkingType aType)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::SetMarkedIndices()");
+
+ bool selection(false);
+ // If selection type is not mark all or unmark all throw invalid argument exception
+ aType == MulWidgetDef::EMulMarkAll || aType == MulWidgetDef::EMulUnmarkAll ?
+ selection = ( aType == MulWidgetDef::EMulMarkAll ) :
+ throw std::invalid_argument( KInvalidArgument );
+
+ int count = ExpandedNodeCount();
+ for(int i = 0 ; i < count ; ++i )
+ {
+ selection ? mSelectionMap[i] = i : mSelectionMap.erase(i);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// MarkedIndices
+// ---------------------------------------------------------------------------
+//
+const std::vector<int>& MulCacheManager::MarkedIndices( const MulDataPath& /*aPath*/ )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::MarkedIndices()");
+
+ mSelectionVector.clear();
+
+ int count = ExpandedNodeCount();
+ for( int i=0; i < count ;++i )
+ {
+ MulSelectionMap::const_iterator itr = mSelectionMap.find(i);
+ if( itr != mSelectionMap.end() )
+ {
+ mSelectionVector.insert(i);
+ }
+ }
+ return mSelectionVector.actualVector();
+ }
+
+// ---------------------------------------------------------------------------
+// IsItemMarked
+// ---------------------------------------------------------------------------
+//
+bool MulCacheManager::IsItemMarked( int aIndex ) const
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::IsItemMarked()");
+
+ __MUL_ASSERT_DEBUG( aIndex >= 0 && aIndex < ExpandedNodeCount() , KLInvalidArgument );
+
+ MulSelectionMap::const_iterator itr = mSelectionMap.find( aIndex );
+ return ( itr != mSelectionMap.end() );
+ }
+
+// ---------------------------------------------------------------------------
+// SetMarkedIndex
+// ---------------------------------------------------------------------------
+//
+void MulCacheManager::SetMarkedIndex( MulWidgetDef::TMulWidgetMarkingType aType, int aIndex )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulCacheManager::SetMarkedIndex()");
+
+ __MUL_ASSERT_DEBUG( aIndex >= 0 && aIndex < ExpandedNodeCount() , KLInvalidArgument );
+
+ bool selection( false );
+ // If selection type is not mark or unmark throw invalid argument exception
+ aType == MulWidgetDef::EMulMark || aType == MulWidgetDef::EMulUnmark ?
+ selection = ( aType == MulWidgetDef::EMulMark ) :
+ throw std::invalid_argument( KInvalidArgument );
+
+ selection ? mSelectionMap[aIndex] = aIndex : mSelectionMap.erase(aIndex);
+ }
+
+} //end of namespace alf
+
+//end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/muldatapath.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,272 @@
+/*
+* 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: Header for MulDataPath
+*
+*/
+
+
+#include <mul/muldatapath.h>
+
+#include <vector>
+#include <osn/osnnew.h>
+#include <osn/ustring.h>
+#include <algorithm> //for equal algorithm
+
+namespace Alf
+ {
+
+class MulDataPathImpl
+ {
+
+public:
+
+ MulDataPathImpl():mIndex(-1)
+ {
+ }
+
+ ~MulDataPathImpl()
+ {
+ mPath.clear();
+ }
+
+public:
+ std::vector<int> mPath; //store index of node for each depth
+ int mIndex;
+ };
+
+// ---------------------------------------------------------------------------
+// MulDataPath
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulDataPath::MulDataPath()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// MulDataPath
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulDataPath::MulDataPath( int aIndexForDepth1 )
+ {
+ Append( aIndexForDepth1 );
+ }
+
+// ---------------------------------------------------------------------------
+// MulDataPath
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulDataPath::MulDataPath( int aIndexForDepth1, int aIndexForDepth2)
+ {
+ Append( aIndexForDepth1 );
+ Append( aIndexForDepth2 );
+ }
+
+// ---------------------------------------------------------------------------
+// MulDataPath
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulDataPath::MulDataPath( const MulDataPath& aPath )
+ {
+ if(aPath.mData.get())
+ {
+ SetIndex( aPath.Index() );
+ for( int i = 0 ; i < aPath.Depth() ; ++i )
+ {
+ Append( aPath[i] );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulDataPath
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulDataPath::~MulDataPath()
+ {
+ if( mData.get() )
+ {
+ mData->mPath.clear();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Append
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulDataPath::Append(int aIndex)
+ {
+ if( !mData.get() )
+ {
+ mData.reset( new (EMM) MulDataPathImpl() );
+ }
+ mData->mPath.push_back(aIndex);
+ }
+
+// ---------------------------------------------------------------------------
+// Depth
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int MulDataPath::Depth() const
+ {
+ if( mData.get() )
+ {
+ return mData->mPath.size();
+ }
+ else
+ {
+ return -1;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// operator[]
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int MulDataPath::operator[]( int aDepth ) const
+ {
+ if( mData.get() )
+ {
+ return (mData->mPath)[aDepth];
+ }
+ else
+ {
+ return -1;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// operator[]
+// ---------------------------------------------------------------------------
+//
+bool MulDataPath::operator< ( MulDataPath& aPath)
+ {
+ bool result(false);
+
+ //i dont wanted to add Index to original path because it is not part of path
+ //but index is quite necessary for comparition so creating temp vector
+ //and copying path to temp vector and also appending index to path
+ std::vector<int> v1 = mData->mPath;
+ v1.push_back(Index());
+
+ std::vector<int> v2 = aPath.mData->mPath;
+ v2.push_back(aPath.Index());
+
+ result = lexicographical_compare(v1.begin(),v1.end(),v2.begin(),v2.end());
+
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// Index
+// ---------------------------------------------------------------------------
+//
+int MulDataPath::Index() const
+ {
+ if(mData.get())
+ {
+ return mData->mIndex;
+ }
+ return -1;
+ }
+
+// ---------------------------------------------------------------------------
+// SetIndex
+// ---------------------------------------------------------------------------
+//
+void MulDataPath::SetIndex(int aIndex)
+ {
+ if( !mData.get() )
+ {
+ mData.reset( new (EMM) MulDataPathImpl() );
+ }
+ mData->mIndex = aIndex;
+ }
+
+// ---------------------------------------------------------------------------
+// IsEqual
+// ---------------------------------------------------------------------------
+//
+bool MulDataPath::IsEqual( const MulDataPath& aPath )
+ {
+ if( (*this) == aPath )
+ {
+ if( Depth() == -1 && aPath.Depth() == -1 )
+ {
+ return true;
+ }
+ else
+ {
+ return Index() == aPath.Index();
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Operator ==
+// ---------------------------------------------------------------------------
+//
+bool MulDataPath::operator == ( const MulDataPath& aPath)
+ {
+ #ifdef _DEBUG
+ int depth1 = Depth();
+ int depth2 = aPath.Depth();
+ #endif
+
+ //if depth is -1 , it mean that it points to root node
+ if( Depth() == -1 && aPath.Depth() == -1 )
+ {
+ return true;
+ }
+ else if((Depth() == -1 && aPath.Depth() == 0 ) || (Depth() == 0 && aPath.Depth() == -1 ))
+ {
+ return true;
+ }
+ else if( Depth() != aPath.Depth() )
+ {
+ return false;
+ }
+ else
+ {
+ return equal( mData->mPath.begin(), mData->mPath.end(), aPath.mData->mPath.begin());
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Operator =
+// ---------------------------------------------------------------------------
+//
+void MulDataPath::operator= ( MulDataPath aPath )
+ {
+ if( aPath.mData.get() )
+ {
+ if( mData.get() )
+ {
+ mData->mPath.clear();
+ }
+
+ SetIndex( aPath.Index() );
+ for( int i = 0 ; i < aPath.Depth() ; ++i )
+ {
+ Append( aPath[i] );
+ }
+ }
+ }
+
+ } //namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/muldatawindow.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,498 @@
+/*
+* 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 Data window
+*
+*/
+
+
+//Includes
+#include "muldatawindow.h"
+
+#include <stdexcept>
+#include <e32debug.h>
+
+//Internal includes
+#include "mulassert.h"
+#include "mulmodelimpl.h"
+#include "mullog.h"
+
+using namespace std;
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulDataWindow
+// ---------------------------------------------------------------------------
+//
+MulDataWindow::MulDataWindow( MulModelImpl& aMulModel )
+ :mMulModel( aMulModel ),
+ mHighlight(KNotInitialized),
+ mItemIndex(KNotInitialized),
+ mOldItemIndex(KNotInitialized),
+ mBufferSize(KNotInitialized),
+ mWindowSize(KNotInitialized),
+ mWindowOffset(KNotInitialized),
+ mWindowTop(0),
+ mWindowBottom(0),
+ mBufferTop(0),
+ mBufferBottom(0),
+ mOldBufferTop(KNotInitialized),
+ mOldBufferBottom(KNotInitialized),
+ mRearBufferTop(0),
+ mRearBufferBottom(0),
+ mOldRearBufferTop(KNotInitialized),
+ mOldRearBufferBottom(KNotInitialized)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// SetWindowSize
+// ---------------------------------------------------------------------------
+//
+void MulDataWindow::SetWindowSize( int aWindowSize )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulDataWindow::SetWindowSize()");
+
+ __MUL_ASSERT( aWindowSize > 0, KLInvalidArgument );
+
+ if( mWindowSize != aWindowSize )
+ {
+ if( KNotInitialized == mBufferSize )
+ {
+ mBufferSize = aWindowSize;
+ }
+
+ mWindowSize = aWindowSize;
+ //devide window half
+ //Try to keep this much item above highlight and below highlight
+ mWindowOffset = mWindowSize / 2;
+
+ //adjusting window offset
+ //if window size changes then the top and bottom offset should be
+ // adjusted such that highlight remains at the centre
+ //window top and bottom are inclusive
+
+ mWindowTop = mItemIndex - mWindowOffset;
+ mWindowTop = mWindowTop < 0 ? 0 : mWindowTop ;
+ mWindowBottom = mWindowTop + mWindowSize - 1;
+ mWindowBottom = mWindowBottom >= mMulModel.CurrentItemCount() ? (mMulModel.CurrentItemCount() -1) : mWindowBottom;
+
+ MUL_LOG_INFO2("MUL::MulDataWindow::SetWindowSize() mWindowTop:%d,mWindowBottom:%d",mWindowTop,mWindowBottom);
+
+ AdjustBuffer();
+ mMulModel.DataWindowUpdated();
+ }
+ //else nothing needed
+ }
+
+// ---------------------------------------------------------------------------
+// SetBufferSize
+// ---------------------------------------------------------------------------
+//
+void MulDataWindow::SetBufferSize( int aBufferSize )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulDataWindow::SetBufferSize()");
+
+ __MUL_ASSERT( aBufferSize > 0, KLInvalidArgument );
+
+ if( mBufferSize != aBufferSize )
+ {
+ mBufferSize = aBufferSize;
+
+ if(mMulModel.CurrentItemCount() > 0)
+ {
+ AdjustBuffer();
+ mMulModel.DataWindowUpdated();
+ }
+ }
+ //else nothing needed
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulDataWindow
+// ---------------------------------------------------------------------------
+//
+MulDataWindow::~MulDataWindow()
+ {
+ // do nothing
+ }
+
+// ---------------------------------------------------------------------------
+// SetHighlight
+// ---------------------------------------------------------------------------
+//
+void MulDataWindow::SetHighlight( int aHighlightIndex )
+ {
+ MUL_LOG_INFO2("MUL::MulDataWindow::SetHighlight() mHighlight:%d,modelCount:%d",aHighlightIndex,mMulModel.CurrentItemCount());
+
+ __MUL_ASSERT( aHighlightIndex >= 0 && aHighlightIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
+
+ if( mHighlight != aHighlightIndex )
+ {
+ mHighlight = aHighlightIndex;
+
+ ScrollWindow( mHighlight );
+ }
+ //else same highlight
+ }
+
+
+// ---------------------------------------------------------------------------
+// UpdateHighlight
+// ---------------------------------------------------------------------------
+//
+void MulDataWindow::UpdateHighlight( int aHighlightIndex )
+ {
+ // No need to assert. We should send highlight -1 when all the items are removed.
+ // Widget should handle. to show emty text visualization
+ mHighlight = aHighlightIndex;
+ }
+
+// ---------------------------------------------------------------------------
+// ScrollWindow
+// ---------------------------------------------------------------------------
+//
+void MulDataWindow::ScrollWindow( int aItemIndex )
+ {
+ MUL_LOG_INFO2("MUL::MulDataWindow::ScrollWindow() aItemIndex:%d,modelCount:%d",aItemIndex,mMulModel.CurrentItemCount());
+
+ __MUL_ASSERT( aItemIndex >= 0 && aItemIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
+
+ if( mItemIndex != aItemIndex )
+ {
+ mOldItemIndex = mItemIndex;
+ mItemIndex = aItemIndex;
+
+ if(IsWindowEnabled())
+ {
+ UpdateDataWindow();
+ }
+ }
+ //else same highlight
+ }
+
+
+// ---------------------------------------------------------------------------
+// UpdateDataWindow
+// ---------------------------------------------------------------------------
+//
+void MulDataWindow::UpdateDataWindow()
+ {
+#ifdef _DEBUG
+ int diff = mItemIndex - mOldItemIndex;
+#endif //_DEBUG
+
+ //If diffrence is negative than highlight is moved up else down
+ (( mItemIndex - mOldItemIndex ) < 0 ) ? ShiftWindowUp() : ShiftWindowDown() ;
+ }
+
+// ---------------------------------------------------------------------------
+// ShiftWindowDown
+// ---------------------------------------------------------------------------
+//
+void MulDataWindow::ShiftWindowDown()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulDataWindow::ShiftWindowDown()");
+ MUL_LOG_INFO2("MUL::MulDataWindow::ShiftWindowDown() mItemIndex:%d,mWindowBottom:%d",mItemIndex,mWindowBottom);
+
+ if( mItemIndex > mWindowBottom )
+ {
+ mWindowTop = mItemIndex - mWindowOffset;
+ mWindowBottom = mWindowTop + mWindowSize -1;
+ //bottom is exceeding model count
+ mWindowBottom = mWindowBottom >= mMulModel.CurrentItemCount() ?
+ mWindowBottom = mMulModel.CurrentItemCount() - 1 : mWindowBottom;
+
+ mWindowTop = mWindowBottom - mWindowSize + 1;
+ //top can't be negative
+ mWindowTop = mWindowTop < 0 ? 0 : mWindowTop ;
+
+ MUL_LOG_INFO2("MUL::MulDataWindow::ShiftWindowDown() mWindowTop:%d,mWindowBottom:%d",mWindowTop,mWindowBottom);
+ SaveOldValues();
+ AdjustBuffer();
+ mMulModel.DataWindowUpdated();
+ }
+ //else nothing needed
+ }
+
+// ---------------------------------------------------------------------------
+// ShiftWindowUp
+// ---------------------------------------------------------------------------
+//
+void MulDataWindow::ShiftWindowUp()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulDataWindow::ShiftWindowUp() Start");
+ MUL_LOG_INFO2("MUL::MulDataWindow::ShiftWindowUp() mItemIndex:%d,mWindowBottom:%d",mItemIndex,mWindowBottom);
+
+ if( mItemIndex < mWindowTop )
+ {
+ mWindowTop = mItemIndex - mWindowOffset;
+ //top can't be negative
+ mWindowTop = mWindowTop < 0 ? 0 : mWindowTop ;
+
+ mWindowBottom = mWindowTop + mWindowSize -1;
+
+ //bottom cant exceed model count
+ mWindowBottom = mWindowBottom >= mMulModel.CurrentItemCount() ?
+ mWindowBottom = mMulModel.CurrentItemCount() - 1 : mWindowBottom;
+
+ MUL_LOG_INFO2("MUL::MulDataWindow::ShiftWindowUp() mWindowTop:%d,mWindowBottom:%d",mWindowTop,mWindowBottom);
+
+ SaveOldValues();
+ AdjustBuffer();
+ mMulModel.DataWindowUpdated();
+ }
+ //else nothing needed
+ }
+
+// ---------------------------------------------------------------------------
+// AdjustBuffer
+// ---------------------------------------------------------------------------
+//
+void MulDataWindow::AdjustBuffer()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulDataWindow::AdjustBuffer()");
+
+ int modelCount = mMulModel.CurrentItemCount() -1;
+
+ //remove data is new window is smaller/add is new window is bigger
+ if( mWindowTop == 0 && ActualBufferSize() <= modelCount )
+ {
+ MUL_LOG_INFO("MUL::MulDataWindow::AdjustBuffer() mWindowTop == 0 ");
+
+ mBufferTop = mWindowTop;
+ mBufferBottom = mBufferTop + mWindowSize + mBufferSize - 1;
+
+ //Create rear top and rear bottom only in looping case
+ //window top is zero so data at other end should be buffered
+ mRearBufferBottom = modelCount;
+ mRearBufferTop = mRearBufferBottom - mBufferSize +1;
+ }
+ else if( mWindowBottom == modelCount && ActualBufferSize() <= modelCount )
+ {
+ MUL_LOG_INFO("MUL::MulDataWindow::AdjustBuffer() mWindowBottom == modelCount ");
+
+ mBufferBottom = mWindowBottom ;
+ mBufferTop = mBufferBottom - (mWindowSize + mBufferSize) + 1;
+
+ //Create rear top and rear bottom only in looping case
+ //window bottom is equal to model count so data at other end should be buffered
+ mRearBufferTop = 0;
+ mRearBufferBottom = mRearBufferTop + mBufferSize -1;
+ }
+ else
+ {
+ MUL_LOG_INFO("MUL::MulDataWindow::AdjustBuffer() else ");
+
+ mBufferTop = mWindowTop - mBufferSize;
+ mBufferBottom = mWindowBottom + mBufferSize;
+
+ //check if top or bottom is out of bound and update offset accordingly
+ if( mBufferTop < 0 )
+ {
+ MUL_LOG_INFO("MUL::MulDataWindow::AdjustBuffer() mBufferTop < 0 ");
+
+ mBufferTop = 0;
+ mBufferBottom = mBufferTop + ActualBufferSize() - 1;
+ //buffer bottom cant be larger then model count
+ mBufferBottom = mBufferBottom > modelCount ? modelCount : mBufferBottom;
+ }
+ else if( mBufferBottom > modelCount )
+ {
+ MUL_LOG_INFO("MUL::MulDataWindow::AdjustBuffer() mBufferBottom > modelCount");
+
+ mBufferBottom = modelCount ;
+ mBufferTop = mBufferBottom - ActualBufferSize() + 1;
+ //buffer top cant be less then 0
+ mBufferTop = mBufferTop < 0 ? 0 : mBufferTop;
+ }
+
+ //in other case rear top and rear bottom is not use set to -1
+ mRearBufferTop = KNotInitialized;
+ mRearBufferBottom = KNotInitialized;
+ }
+
+ MUL_LOG_INFO2("MUL::MulDataWindow::AdjustBuffer() mOldBufferTop:%d,mOldBufferBottom:%d",mOldBufferTop,mOldBufferBottom);
+ MUL_LOG_INFO2("MUL::MulDataWindow::AdjustBuffer() mOldRearBufferBottom:%d,mOldRearBufferTop:%d",mOldRearBufferBottom,mOldRearBufferTop);
+
+ MUL_LOG_INFO2("MUL::MulDataWindow::AdjustBuffer() mBufferTop:%d,mBufferBottom:%d",mBufferTop,mBufferBottom);
+ MUL_LOG_INFO2("MUL::MulDataWindow::AdjustBuffer() mRearBufferBottom:%d,mRearBufferTop:%d",mRearBufferBottom,mRearBufferTop);
+
+ __MUL_ASSERT_DEBUG( mWindowTop >= 0 && mWindowBottom < mMulModel.CurrentItemCount(), _L("Invlid Window"));
+ __MUL_ASSERT_DEBUG( mBufferTop >= 0 && mBufferBottom < mMulModel.CurrentItemCount(), _L("Invlid Buffer"));
+ }
+
+// ---------------------------------------------------------------------------
+// IsItemInDataWindow
+// ---------------------------------------------------------------------------
+//
+bool MulDataWindow::IsItemInDataWindow(int aItemIndex ) const
+ {
+ //__MUL_ASSERT_DEBUG( aItemIndex >= 0 && aItemIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
+
+ bool result( false );
+
+ if(mWindowSize == KNotInitialized )
+ {
+ result = false;
+ }
+ //check that rear buffer is on or not in looping case
+ else if( mRearBufferTop != KNotInitialized && mRearBufferBottom != KNotInitialized )
+ {
+ if( ( aItemIndex >= mBufferTop && aItemIndex <= mBufferBottom ) ||
+ ( aItemIndex >= mRearBufferTop && aItemIndex <= mRearBufferBottom ) )
+ {
+ result = true;
+ }
+ }
+ else if( aItemIndex >= mBufferTop && aItemIndex <= mBufferBottom )
+ {
+ result = true;
+ }
+ return result;
+ }
+
+
+// ---------------------------------------------------------------------------
+// RelativeIndex
+// ---------------------------------------------------------------------------
+//
+int MulDataWindow::RelativeIndex( int aAbsoluteIndex ) const
+ {
+ __MUL_ASSERT_DEBUG( aAbsoluteIndex >= 0 && aAbsoluteIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
+
+ if( !IsItemInDataWindow(aAbsoluteIndex) )
+ {
+ return -1;
+ }
+
+ if( mRearBufferTop != KNotInitialized && mRearBufferBottom != KNotInitialized )
+ {
+ if( mRearBufferBottom == mMulModel.CurrentItemCount() - 1 )
+ {
+ if( aAbsoluteIndex >= mRearBufferTop && aAbsoluteIndex <= mRearBufferBottom )
+ {
+ int bufferSize = BottomOffset() - TopOffset() + 1;
+ int rearDiff = aAbsoluteIndex - mRearBufferTop;
+ int relativeIndex = bufferSize + rearDiff;
+ return relativeIndex;
+ }
+ else
+ {
+ int relativeIndex = aAbsoluteIndex < TopOffset() ?
+ aAbsoluteIndex : aAbsoluteIndex - TopOffset() ;
+ return relativeIndex;
+ }
+ }
+ else
+ {
+ if( aAbsoluteIndex >= mRearBufferTop && aAbsoluteIndex <= mRearBufferBottom )
+ {
+ int relativeIndex = aAbsoluteIndex < TopOffset() ?
+ aAbsoluteIndex : aAbsoluteIndex - TopOffset() ;
+ return relativeIndex;
+ }
+ else
+ {
+ int bufferSize = mRearBufferBottom - mRearBufferTop + 1;
+ int diff = aAbsoluteIndex - TopOffset();
+ int relativeIndex = bufferSize + diff;
+ return relativeIndex;
+ }
+ }
+ }
+ else
+ {
+ int relativeIndex = aAbsoluteIndex < TopOffset() ?
+ aAbsoluteIndex : aAbsoluteIndex - TopOffset() ;
+ return relativeIndex;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// AbsoluteIndex
+// ---------------------------------------------------------------------------
+//
+int MulDataWindow::AbsoluteIndex( int aRelativeIndex ) const
+ {
+ __MUL_ASSERT_DEBUG( aRelativeIndex >= 0 && aRelativeIndex <= ActualBufferSize(), _L("Invalid Relative Index"));
+
+ if( mRearBufferTop != KNotInitialized && mRearBufferBottom != KNotInitialized )
+ {
+ if( mRearBufferBottom == mMulModel.CurrentItemCount() - 1 )
+ {
+ if( aRelativeIndex > BottomOffset() )
+ {
+ //relative index is in loop buffer
+ int diff = aRelativeIndex - BottomOffset() - 1;
+ int absoluteIndex = RearTopOffset() + diff;
+ return absoluteIndex;
+ }
+ else
+ {
+ int absoluteIndex = TopOffset() + aRelativeIndex;
+ return absoluteIndex;
+ }
+ }
+ else
+ {
+ if( aRelativeIndex <= RearBottomOffset() )
+ {
+ //relative index is in loop buffer
+ int absoluteIndex = RearTopOffset() + aRelativeIndex;
+ return absoluteIndex;
+ }
+ else
+ {
+ int diff = aRelativeIndex - RearBottomOffset() - 1;
+ int absoluteIndex = TopOffset() + diff;
+ return absoluteIndex;
+ }
+ }
+ }
+ else
+ {
+ int absoluteIndex = TopOffset() + aRelativeIndex;
+ return absoluteIndex;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetVisibleWindow
+// ---------------------------------------------------------------------------
+//
+void MulDataWindow::SetVisibleWindow(int aWindowTop, int aWindowBottom)
+ {
+ mWindowTop = aWindowTop;
+ mWindowBottom = aWindowBottom;
+ }
+
+// ---------------------------------------------------------------------------
+// IsBufferOffsetChanged
+// ---------------------------------------------------------------------------
+//
+bool MulDataWindow::IsBufferOffsetChanged()
+ {
+ if(mRearBufferBottom != mOldRearBufferBottom || mRearBufferTop != mOldRearBufferTop
+ || mBufferTop != mOldBufferTop || mBufferBottom != mOldBufferBottom)
+ {
+ return true;
+ }
+ return false;
+ }
+
+ } // namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulmodelfactoryplugin.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,136 @@
+/*
+* 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: Plugin factory implementation for model.
+*
+*/
+
+#include "mulmodelfactoryplugin.h"
+
+#include <osn/ustring.h>
+#include "alf/alfwidget.h"
+#include <ecom/ecom.h>
+#include <libc/string.h>
+
+#include <mul/imulmodel.h>
+
+#include "mulmodelimpl.h"
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+const TInt KMulModelFactoryPluginUid = {0x2000D23F};
+const int KProductCount = 1;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased Symbian constructor.
+// ---------------------------------------------------------------------------
+//
+MulFactoryPlugin* MulFactoryPlugin::NewL()
+ {
+ return new (ELeave) MulFactoryPlugin;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+MulFactoryPlugin::~MulFactoryPlugin()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Creates either a list widget or a list model.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulFactoryPlugin::createProduct(const char* aProduct,
+ void* /*aInitData*/ )
+ {
+ IAlfInterfaceBase* ret(0);
+ const char* KLoadNameModel("mulmodel");
+ //if( !strcmp( aProduct, IMulModel::Type().iImplementationId ) )
+ if( !strcmp( aProduct, KLoadNameModel ) )
+ {
+ // create list model
+ IMulModel* model = new (EMM) MulModelImpl();
+ ret = IAlfInterfaceBase::makeInterface<IMulModel>( model );
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// From MAlfInterfaceBase.
+// Creates interface based on the given type.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulFactoryPlugin::makeInterface(const IfId& aType)
+ {
+ UString param( aType.mImplementationId );
+
+ if( param == UString( IAlfFactoryPlugin::type().mImplementationId ) )
+ {
+ return static_cast<IAlfFactoryPlugin*>( this );
+ }
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the amount of products this factory can produce.
+// ---------------------------------------------------------------------------
+//
+int MulFactoryPlugin::productCount()const
+ {
+ return KProductCount;
+ }
+
+// ---------------------------------------------------------------------------
+// Returns product information.
+// ---------------------------------------------------------------------------
+//
+const char* MulFactoryPlugin::productInfo(int aIndex)const
+ {
+ switch( aIndex )
+ {
+ case 0: return mulmodel::Ident.mImplementationId;
+ default: break;
+ }
+ return 0;
+ }
+
+ } // namespace Alf
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+using namespace Alf;
+const TImplementationProxy ImplementationTable[] =
+ {
+#ifdef __EABI__
+ IMPLEMENTATION_PROXY_ENTRY( KMulModelFactoryPluginUid,
+ MulFactoryPlugin::NewL )
+ #else
+ { {KMulModelFactoryPluginUid}, MulFactoryPlugin::NewL }
+#endif
+ };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
+
+ return ImplementationTable;
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulmodelimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,648 @@
+/*
+* 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
+*
+*/
+
+
+//Includes
+// class headers
+#include "mulmodelimpl.h"
+
+#include <mul/mulvarianttype.h>
+
+// Local Headers
+#include "mulcachemanager.h"
+#include "muldatawindow.h"
+#include "mulpagedatawindow.h"
+#include "mulpushmode.h"
+#include "mulpullmode.h"
+#include "mulassert.h"
+#include "mulmodeldef.h"
+#include "mullog.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulModelImpl()
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulModelImpl::MulModelImpl()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulModelImpl::MulModelImpl()");
+
+ //mDataWindow.reset( new ( EMM ) MulDataWindow( *this ));
+ mDataWindow.reset( new ( EMM ) MulPageDataWindow( *this ));
+ mModelHelper.reset(new (EMM) MulPushMode(*mDataWindow ));
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulModelImpl()
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulModelImpl::~MulModelImpl()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulModelImpl::~MulModelImpl()");
+ mObserverArray.clear();
+ }
+
+// ------------------------ From IMulModel -----------------------------------
+
+// ---------------------------------------------------------------------------
+// Insert
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::Insert(int aIndex, int aCount,const MulDataPath& aPath)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulModelImpl::Insert()");
+ MUL_LOG_INFO2("MUL::MulModelImpl::Insert() index:%d,count:%d",aIndex,aCount);
+
+ mModelHelper->Insert(aIndex, aCount,aPath);
+
+ if( aCount > 0 && mDataWindow->Highlight() == KNotInitialized )
+ {
+ mDataWindow->UpdateHighlight(0);
+ NotifyDataChange( IMulModelObserver::EHighlightChanged , 0 );
+ }
+
+ NotifyDataChange( IMulModelObserver::EItemsInserted, aIndex, aCount );
+ }
+
+// ---------------------------------------------------------------------------
+// Remove
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::Remove(int aIndex, int aCount, const MulDataPath& aPath)
+ {
+ // If the highlight has changed because of the remove then inform the widget
+ if( mModelHelper->Remove(aIndex, aCount, aPath) )
+ {
+ NotifyDataChange( IMulModelObserver::EHighlightChanged , mDataWindow->Highlight() );
+ }
+ NotifyDataChange( IMulModelObserver::EItemsRemoved, aIndex, aCount );
+ }
+
+// ---------------------------------------------------------------------------
+// Update
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::Update( int aIndex, int aCount, const MulDataPath& aPath )
+ {
+ mModelHelper->Update( aIndex, aCount, aPath );
+ }
+
+// ---------------------------------------------------------------------------
+// Refresh
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::Refresh( int aCount, const MulDataPath& aPath )
+ {
+ mModelHelper->Refresh( aCount, aPath );
+ NotifyDataChange( IMulModelObserver::EModelRefreshed , aCount );
+ }
+
+// ---------------------------------------------------------------------------
+// SetData
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetData( int aIndex, auto_ptr<MulVisualItem> aVisualItem, const MulDataPath& aPath )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulModelImpl::SetData()");
+ MUL_LOG_INFO1("MUL::MulModelImpl::SetData() index:%d",aIndex );
+
+ mModelHelper->SetData( aIndex, aVisualItem, aPath );
+ NotifyDataChange( IMulModelObserver::EItemUpdated , aIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// Data
+// ---------------------------------------------------------------------------
+//
+const MulVisualItem* MulModelImpl::Data( int aIndex, const MulDataPath& aPath) const
+ {
+ return mModelHelper->Data( aIndex, aPath );
+ }
+
+// ---------------------------------------------------------------------------
+// Count
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::Count( const MulDataPath& aPath) const
+ {
+ return mModelHelper->Count( aPath );
+ }
+
+// ---------------------------------------------------------------------------
+// SetDataProvider
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetDataProvider( const IMulModelProvider& aDataProvider )
+ {
+ mModelHelper.reset(new (EMM) MulPullMode( *mDataWindow, aDataProvider ) );
+ }
+
+// ---------------------------------------------------------------------------
+// SetTemplate
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetTemplate( mulwidget::TLogicalTemplate aTemplateId )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulModelImpl::SetTemplate");
+ mModelHelper->SetTemplate( aTemplateId );
+ // default template updated
+ NotifyTemplateChange( -1, aTemplateId );
+ }
+
+// ---------------------------------------------------------------------------
+// SetTemplate
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetTemplate(int aItemIndex, mulwidget::TLogicalTemplate aTemplateId, const MulDataPath& aPath )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulModelImpl::SetTemplate");
+ mModelHelper->SetTemplate(aItemIndex, aTemplateId, aPath );
+ NotifyTemplateChange( aItemIndex, aTemplateId );
+ }
+
+// ---------------------------------------------------------------------------
+// SetDataWindow
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetDataWindow( int aBufferSize )
+ {
+ mDataWindow->SetBufferSize( aBufferSize );
+ }
+
+// ---------------------------------------------------------------------------
+// DataWindow
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::DataWindow() const
+ {
+ return mDataWindow->BufferSize();
+ }
+
+// ---------------------------------------------------------------------------
+// SetHighlight
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetHighlight( int aItemIndex, const MulDataPath& /*aPath*/ )
+ {
+ mDataWindow->SetHighlight( aItemIndex );
+
+ NotifyDataChange( IMulModelObserver::EHighlightChanged , aItemIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// Highlight
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::Highlight( MulDataPath& /*aPath*/ )
+ {
+ return mDataWindow->Highlight();
+ }
+
+// ---------------------------------------------------------------------------
+// Highlight
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::Highlight()
+ {
+ return mDataWindow->Highlight();
+ }
+
+// ---------------------------------------------------------------------------
+// SetMarkedIndices
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetMarkedIndices( MulWidgetDef::TMulWidgetMarkingType aType,
+ const std::vector<int>& aItemsIndex,
+ const MulDataPath& aPath )
+
+ {
+ //fire update event in alf model
+ mModelHelper->CacheManager().SetMarkedIndices( aType, aItemsIndex, aPath );
+
+ for( int i = 0 ; i < aItemsIndex.size() ; i++ )
+ {
+ if(mDataWindow->IsItemInDataWindow(aItemsIndex[i]))
+ {
+ CreateMarkingEvent(aItemsIndex[i]);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetMarkedIndices
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetMarkedIndices(MulWidgetDef::TMulWidgetMarkingType aType)
+ {
+ //fire update event in alf model
+ mModelHelper->CacheManager().SetMarkedIndices( aType );
+
+ for( int i = mDataWindow->TopOffset() ; i <= mDataWindow->BottomOffset() ; i++ )
+ {
+ CreateMarkingEvent(i);
+ }
+
+ for( int i = mDataWindow->RearTopOffset( ); i <= mDataWindow->RearBottomOffset() && i > 0 ; i++ )
+ {
+ CreateMarkingEvent(i);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CreateMarkingEvent
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::CreateMarkingEvent(int aAbsoluteIndex)
+ {
+ NotifyDataChange( IMulModelObserver::EMarkingChanged , aAbsoluteIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// NotifyStateChange
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::NotifyStateChange( IMulModelObserver::TMulChangedState aState,
+ std::auto_ptr<IMulVariantType> aData)
+ {
+ for( int i = 0; i < mObserverArray.size(); ++i )
+ {
+ mObserverArray[i]->ModelStateChanged( aState, *aData );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// NotifyDataChange
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::NotifyDataChange( IMulModelObserver::TMulChangedState aState,
+ int aStartIndex, int aCount )
+ {
+ std::auto_ptr<IAlfMap> map( new ( EMM )AlfMap() );
+ map->addItem( new (EMM) AlfVariantType(aStartIndex),UString(KStartIndex));
+ map->addItem( new (EMM) AlfVariantType(aCount),UString(KCount));
+
+ std::auto_ptr<IMulVariantType> data(new (EMM)MulVariantType(*map));
+ NotifyStateChange( aState , data );
+ }
+
+// ---------------------------------------------------------------------------
+// NotifyDataChange
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::NotifyDataChange( IMulModelObserver::TMulChangedState aState, int aIndex )
+ {
+ std::auto_ptr<IMulVariantType> data(new (EMM)MulVariantType(aIndex));
+ NotifyStateChange( aState , data );
+ }
+
+// ---------------------------------------------------------------------------
+// NotifyTemplateChange
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::NotifyTemplateChange( int aIndex, mulwidget::TLogicalTemplate aTamplateId )
+ {
+ std::auto_ptr<IAlfMap> map( new ( EMM )AlfMap() );
+ map->addItem(new (EMM) AlfVariantType(aTamplateId),osncore::UString(KDefaultTemplate));
+ map->addItem(new (EMM) AlfVariantType(aIndex),osncore::UString(KIndex));
+
+ std::auto_ptr<IMulVariantType> data(new (EMM)MulVariantType(*map));
+ NotifyStateChange( IMulModelObserver::ETemplateChanged , data );
+ }
+
+// ---------------------------------------------------------------------------
+// MarkedIndices
+// ---------------------------------------------------------------------------
+//
+const std::vector<int>& MulModelImpl::MarkedIndices(const MulDataPath& aPath )
+ {
+ return mModelHelper->CacheManager().MarkedIndices( aPath );
+ }
+
+// ---------------------------------------------------------------------------
+// IsLoopingOn
+// ---------------------------------------------------------------------------
+//
+bool MulModelImpl::IsLoopingOn()
+ {
+ return ( mDataWindow->RearBottomOffset() != -1 && mDataWindow->OldRearBottomOffset() != -1 );
+ }
+
+// ---------------------------------------------------------------------------
+// AddModelObserver
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::AddModelObserver( IMulModelObserver* aObserver )
+ {
+ __MUL_ASSERT(aObserver, KLInvalidArgument );
+ if( std::find(mObserverArray.begin(), mObserverArray.end(), aObserver) == mObserverArray.end() )
+ {
+ mObserverArray.push_back( aObserver );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveModelObserver
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::RemoveModelObserver( IMulModelObserver* aObserver )
+ {
+ __MUL_ASSERT(aObserver, KLInvalidArgument );
+ if( std::find(mObserverArray.begin(), mObserverArray.end(), aObserver ) != mObserverArray.end() )
+ {
+ mObserverArray.erase( std::find( mObserverArray.begin(), mObserverArray.end(), aObserver ));
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveModelObserver
+// ---------------------------------------------------------------------------
+//
+mulwidget::TLogicalTemplate MulModelImpl::Template()
+ {
+ return mModelHelper->Template();
+ }
+
+// ---------------------------------------------------------------------------
+// Accessor
+// ---------------------------------------------------------------------------
+//
+IMulModelAccessor* MulModelImpl::Accessor()
+ {
+ return this;
+ }
+
+// ------------------------ From IMulModelAccessor ---------------------------
+
+// ---------------------------------------------------------------------------
+// SetHighlight
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetHighlight( int aItemIndex )
+ {
+ mDataWindow->SetHighlight( aItemIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// ScrollWindow
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::ScrollWindow( int aItemIndex )
+ {
+ mDataWindow->ScrollWindow( aItemIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// CurrentItemCount
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::CurrentItemCount()
+ {
+ return mModelHelper->CurrentItemCount();
+ }
+
+// ---------------------------------------------------------------------------
+// SetDataWindow
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetVisibleWindow( int aWindowSize, int aPageTopIndex )
+ {
+ mDataWindow->SetWindowSize( aWindowSize, aPageTopIndex );
+ }
+// ------------------------ Member Function ----------------------------------
+
+// ---------------------------------------------------------------------------
+// DataWindowUpdated
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::DataWindowUpdated()
+ {
+ mModelHelper->DataWindowUpdated();
+ std::auto_ptr<IMulVariantType> dummyData;
+ NotifyStateChange( IMulModelObserver::EDataWindowUpdated, dummyData );
+ }
+
+// ---------------------------------------------------------------------------
+// RelativeIndex
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::RelativeIndex( int aAbsoluteIndex ) const
+ {
+ return mDataWindow->RelativeIndex(aAbsoluteIndex);
+ }
+
+// ---------------------------------------------------------------------------
+// TopWindowOffset
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::TopWindowOffset() const
+ {
+ return mDataWindow->TopWindowOffset();
+ }
+
+// ---------------------------------------------------------------------------
+// BottomWindowOffset
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::BottomWindowOffset() const
+ {
+ return mDataWindow->BottomWindowOffset();
+ }
+
+// ---------------------------------------------------------------------------
+// TopOffset
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::TopOffset() const
+ {
+ return mDataWindow->TopOffset();
+ }
+
+// ---------------------------------------------------------------------------
+// BottomOffset
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::BottomOffset() const
+ {
+ return mDataWindow->BottomOffset();
+ }
+
+// ---------------------------------------------------------------------------
+// RearTopOffset
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::RearTopOffset() const
+ {
+ return mDataWindow->RearTopOffset();
+ }
+
+// ---------------------------------------------------------------------------
+// RearBottomOffset
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::RearBottomOffset() const
+ {
+ return mDataWindow->RearBottomOffset();
+ }
+
+// ---------------------------------------------------------------------------
+// IsItemMarked
+// ---------------------------------------------------------------------------
+//
+bool MulModelImpl::IsItemMarked( int aIndex )
+ {
+ return mModelHelper->CacheManager().IsItemMarked(aIndex);
+ }
+
+// ---------------------------------------------------------------------------
+// Item
+// ---------------------------------------------------------------------------
+//
+const MulVisualItem& MulModelImpl::Item( int aAbsoluteIndex )
+ {
+ return mModelHelper->Item( aAbsoluteIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// AbsoluteIndex
+// ---------------------------------------------------------------------------
+//
+int MulModelImpl::AbsoluteIndex( int aRelativeIndex )
+ {
+ return mDataWindow->AbsoluteIndex(aRelativeIndex);
+ }
+
+// ---------------------------------------------------------------------------
+// SetMarkedIndex
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::SetMarkedIndex( MulWidgetDef::TMulWidgetMarkingType aType, int aIndex )
+ {
+ mModelHelper->CacheManager().SetMarkedIndex(aType,aIndex);
+ }
+
+// ------------- Function from IAlfModel -------------------------------------
+
+// ---------------------------------------------------------------------------
+// AddModelChangeObserver
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::addModelChangeObserver( IAlfModelChangeObserver& /*aObserver*/ )
+ {
+ //__MUL_ASSERT_DEBUG(false, KLNotImplemented );
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveModelChangeObserver
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::removeModelChangeObserver( IAlfModelChangeObserver& /*aObserver*/ )
+ {
+ //__MUL_ASSERT_DEBUG(false, KLNotImplemented );
+ }
+// ---------------------------------------------------------------------------
+// SetData
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::setData( IAlfVariantType* /*aData*/ )
+ {
+ __MUL_ASSERT_DEBUG(false, KLNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// UpdateData
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::updateData( int /*aNumContainerIndices*/,
+ int* /*aContainerIndices*/,
+ IAlfVariantType* /*aData*/ )
+ {
+ __MUL_ASSERT_DEBUG(false, KLNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// AddData
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::addData( int /*aNumContainerIndices*/,
+ int* /*aContainerIndices*/,
+ IAlfVariantType* /*aData*/ )
+ {
+ __MUL_ASSERT_DEBUG(false, KLNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveData
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::removeData( int /*aNumContainerIndices*/, int* /*aContainerIndices*/ )
+ {
+ __MUL_ASSERT_DEBUG(false, KLNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// ExecuteOperations
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::executeOperations( AlfPtrVector<AlfModelOperation>& /*aOperationsArray*/ )
+ {
+ __MUL_ASSERT_DEBUG(false, KLNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// ExecuteOperation
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::executeOperation( AlfModelOperation* /*aOperation*/ )
+ {
+ __MUL_ASSERT_DEBUG(false, KLNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// ClearModel
+// ---------------------------------------------------------------------------
+//
+void MulModelImpl::clearModel()
+ {
+ __MUL_ASSERT_DEBUG(false, KLNotImplemented);
+ }
+
+// ---------------------------------------------------------------------------
+// Data
+// ---------------------------------------------------------------------------
+//
+IAlfVariantType* MulModelImpl::data() const
+ {
+ __MUL_ASSERT_DEBUG(false, KLNotImplemented);
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// From class MAlfInterfaceBase.
+// Getter for interfaces provided by the list model.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulModelImpl::makeInterface( const IfId& /*aType*/ )
+ {
+ return static_cast<IMulModel*>( this );
+ }
+
+
+ } // namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulmodelutility.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,302 @@
+/*
+* 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: Utility class for data model
+*
+*/
+
+
+//Includes
+#include "mul/mulmodelutility.h"
+
+#include <e32cmn.h>
+#include <mul/mulvisualitem.h>
+#include <mul/imulvarianttype.h>
+#include <mul/mulvarianttype.h>
+#include <stdexcept> // for standard exceptions
+#include <osn/ustring.h>
+#include <utf.h>
+
+//#include "mulactionitem.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// CreateVariantType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType* MulModelUtility::CreateVariantType( IAlfVariantType& aValue )
+ {
+/* IAlfVariantType* data = new (EMM) AlfVariantType();
+ data->set(aValue);
+ return data;*/
+ switch( aValue.type() )
+ {
+ case IAlfVariantType::EBool:
+ {
+ return new AlfVariantType( aValue.boolean() );
+ }
+ case IAlfVariantType::EInt:
+ {
+ return new AlfVariantType( aValue.integer() );
+ }
+ case IAlfVariantType::EUint:
+ {
+ return new AlfVariantType( aValue.uinteger() );
+ }
+ case IAlfVariantType::EReal:
+ {
+ return new AlfVariantType( aValue.real() );
+ }
+ case IAlfVariantType::EString:
+ {
+ return new AlfVariantType( aValue.string() );
+ }
+ case IAlfVariantType::EContainer:
+ {
+ return new AlfVariantType( aValue.container() );
+ }
+ case IAlfVariantType::EMap:
+ {
+ return new AlfVariantType( aValue.map() );
+ }
+ case IAlfVariantType::EBranch:
+ {
+ return new AlfVariantType( aValue.branch() );
+ }
+ case IAlfVariantType::ECustomData:
+ default :
+ {
+ return NULL;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ConvertVisualItemToMap
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT std::auto_ptr<IAlfMap> MulModelUtility::ConvertVisualItemToMap( MulVisualItem& /*aVisualItem*/ )
+ {
+ auto_ptr<IAlfMap> map( new ( EMM ) AlfMap());
+
+ return map;
+ }
+
+// ---------------------------------------------------------------------------
+// ConvertMapToVisualItem
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT std::auto_ptr<MulVisualItem> MulModelUtility::ConvertMapToVisualItem( IAlfMap& /*aMap*/ )
+ {
+ auto_ptr<MulVisualItem> visualItem( new ( EMM ) MulVisualItem());
+// for( int i = 0 ; i < aMap.count() ; ++i )
+// {
+// const UString& attributeName = aMap.name(i);
+// IAlfVariantType* origValue = aMap.item( attributeName );
+// std::auto_ptr< IMulVariantType> value ( new (EMM) MulVariantType() );
+// value->set(*origValue);
+// visualItem->SetAttribute( attributeName , value.get() );
+// value.release();
+// }
+ return visualItem;
+ }
+
+// ---------------------------------------------------------------------------
+// CheckNamePrefix
+// ---------------------------------------------------------------------------
+//
+bool MulModelUtility::CheckNamePrefix( UString aName )
+ {
+ _LIT8(KMulPrefix,"mul_");
+ TPtrC8 debugString1 = ((TUint8*)aName.getUtf8());
+ int index = debugString1.Find(KMulPrefix);
+ if( index == KErrNotFound )
+ {
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// UStringToAlfString
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT UString MulModelUtility::UStringToAlfString( const UString& aUString )
+ {
+ if(aUString.isEmpty())
+ {
+ return UString("");
+ }
+ else
+ {
+ return UString( aUString.getUtf8() );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// AlfStringToUString
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT UString MulModelUtility::AlfStringToUString( const UString& aAlfString )
+ {
+ return UString( aAlfString.getUtf8() );
+ }
+
+// ---------------------------------------------------------------------------
+// IntToAlfString
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT UString MulModelUtility::IntToUString( int aNumber )
+ {
+ TBuf8<20> buf;
+ buf.AppendNum(aNumber);
+ return UString( (char*)buf.PtrZ());
+ }
+
+// ---------------------------------------------------------------------------
+// ConvertTDesToUString
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulModelUtility::ConvertTDesToUString (const TDesC& aDes, UString& aString)
+ {
+ HBufC8* utf8Buffer( NULL );
+ TRAPD( error, utf8Buffer = CnvUtfConverter::ConvertFromUnicodeToUtf8L( aDes ) );
+ if ( !utf8Buffer || error != KErrNone )
+ {
+ delete utf8Buffer;
+ throw std::exception();
+ }
+
+ TPtrC8 ptr = utf8Buffer->Des();
+ std::auto_ptr<osncore::UString> ret;
+ try
+ {
+ if ( ptr.Length() )
+ {
+ ret.reset( new osncore::UString( ( osncore::Utf8* ) &ptr[0], ptr.Length() ));
+ }
+ else
+ {
+ ret.reset( new osncore::UString( "" ) );
+ }
+ }
+ catch ( std::exception e )
+ {
+ delete utf8Buffer;
+ throw e;
+ }
+
+ delete utf8Buffer;
+ utf8Buffer = NULL;
+ aString = UString(*ret);
+ }
+
+// ---------------------------------------------------------------------------
+// ConvertTDes8ToUString
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulModelUtility::ConvertTDes8ToUString (const TDesC8& aDes, UString& aString)
+ {
+ TPtrC8 ptr = aDes;
+ std::auto_ptr<osncore::UString> ret;
+ try
+ {
+ if ( ptr.Length() )
+ {
+ ret.reset( new osncore::UString( ( osncore::Utf8* ) &ptr[0], ptr.Length() ));
+ }
+ else
+ {
+ ret.reset( new osncore::UString( "" ) );
+ }
+ }
+ catch ( std::exception e )
+ {
+ throw e;
+ }
+
+ aString = UString(*ret);
+ }
+
+// ---------------------------------------------------------------------------
+// ConvertUStringToTDes
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulModelUtility::ConvertUStringToTDes (const UString& aString, TDes& aDes)
+ {
+ HBufC* unicodeBuffer = NULL;
+ if ( !aString.isEmpty() )
+ {
+ TRAPD( error, unicodeBuffer = CnvUtfConverter::ConvertToUnicodeFromUtf8L(TPtrC8((TUint8*)aString.getUtf8())) );
+ if ( !unicodeBuffer || error != KErrNone )
+ {
+ delete unicodeBuffer;
+ throw std::exception();
+ }
+ aDes.Copy(*unicodeBuffer);
+ delete unicodeBuffer;
+ unicodeBuffer = NULL;
+ }
+ else
+ {
+ aDes.Zero();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ConvertUStringToTDes8
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulModelUtility::ConvertUStringToTDes8(const UString& aString, TDes8& aDes)
+ {
+ /// @see comments in MulModelUtility::ConvertUStringToTDes
+ HBufC* unicodeBuffer = NULL;
+ if ( !aString.isEmpty() )
+ {
+ TRAPD( error, unicodeBuffer = CnvUtfConverter::ConvertToUnicodeFromUtf8L(TPtrC8((TUint8*)aString.getUtf8())) );
+ if ( !unicodeBuffer || error != KErrNone )
+ {
+ delete unicodeBuffer;
+ throw std::exception();
+ }
+ aDes.Copy(*unicodeBuffer);
+ delete unicodeBuffer;
+ unicodeBuffer = NULL;
+ }
+ else
+ {
+ aDes.Zero();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CreateVisualItem
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT std::auto_ptr<MulVisualItem> MulModelUtility::CreateVisualItem( mulwidget::TLogicalTemplate aDefaultTemplate )
+ {
+ std::auto_ptr<MulVisualItem> visualItem( new (EMM) MulVisualItem() );
+ visualItem->SetAttribute( mulvisualitem::KAttributeTemplate , aDefaultTemplate);
+ return visualItem;
+ }
+
+} // namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulpagedatawindow.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,485 @@
+/*
+* 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 Data window
+*
+*/
+
+
+//Includes
+#include "mulpagedatawindow.h"
+
+#include <stdexcept>
+
+//Internal includes
+#include "mulassert.h"
+#include "mulmodelimpl.h"
+#include "mullog.h"
+
+using namespace std;
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulPageDataWindow
+// ---------------------------------------------------------------------------
+//
+MulPageDataWindow::MulPageDataWindow( MulModelImpl& aMulModel )
+ :mMulModel( aMulModel ),
+ mHighlight(KNotInitialized),
+ mPageTopIndex(KNotInitialized),
+ mOldPageTopIndex(KNotInitialized),
+ mBufferSize(KNotInitialized),
+ mWindowSize(KNotInitialized),
+ mWindowTop(KNotInitialized),
+ mWindowBottom(KNotInitialized),
+ mBufferTop(0),
+ mBufferBottom(0),
+ mOldBufferTop(KNotInitialized),
+ mOldBufferBottom(KNotInitialized),
+ mRearBufferTop(0),
+ mRearBufferBottom(0),
+ mOldRearBufferTop(KNotInitialized),
+ mOldRearBufferBottom(KNotInitialized)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// SetWindowSize
+// ---------------------------------------------------------------------------
+//
+void MulPageDataWindow::SetWindowSize( int aWindowSize, int aPageTopIndex )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulDataWindow::SetWindowSize()");
+
+ __MUL_ASSERT( aWindowSize > 0, KLInvalidArgument );
+
+ if( mWindowSize != aWindowSize || mWindowTop != aPageTopIndex)
+ {
+ if( KNotInitialized == mBufferSize )
+ {
+ mBufferSize = aWindowSize;
+ }
+
+ mWindowSize = aWindowSize;
+ mOldPageTopIndex = mPageTopIndex;
+ mPageTopIndex = aPageTopIndex;
+
+
+ /*adjusting window offset
+ //if window size changes then the top and bottom offset should be
+ //adjusted such that highlight remains at the centre
+ //window top and bottom are inclusive*/
+
+ //assing page top index to window top by default aPageTopIndex is KNotInitialized
+ mWindowTop = aPageTopIndex ;
+ mWindowTop = ( mWindowTop == KNotInitialized ) ? 0 : mWindowTop;
+ mWindowBottom = mWindowTop + mWindowSize - 1;
+ //make sure that window bottom is not more than model count
+ mWindowBottom = mWindowBottom >= mMulModel.CurrentItemCount() ? ( mMulModel.CurrentItemCount() -1) : mWindowBottom;
+
+ MUL_LOG_INFO2("MUL::MulDataWindow::SetWindowSize() mWindowTop:%d,mWindowBottom:%d",mWindowTop,mWindowBottom);
+
+ AdjustBuffer();
+ mMulModel.DataWindowUpdated();
+ }
+ //else nothing needed
+ }
+
+// ---------------------------------------------------------------------------
+// SetBufferSize
+// ---------------------------------------------------------------------------
+//
+void MulPageDataWindow::SetBufferSize( int aBufferSize )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulDataWindow::SetBufferSize()");
+
+ __MUL_ASSERT( aBufferSize > 0, KLInvalidArgument );
+
+ if( mBufferSize != aBufferSize )
+ {
+ mBufferSize = aBufferSize;
+
+ if(mMulModel.CurrentItemCount() > 0)
+ {
+ AdjustBuffer();
+ mMulModel.DataWindowUpdated();
+ }
+ }
+ //else nothing needed
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulDataWindow
+// ---------------------------------------------------------------------------
+//
+MulPageDataWindow::~MulPageDataWindow()
+ {
+ // do nothing
+ }
+
+// ---------------------------------------------------------------------------
+// SetHighlight
+// ---------------------------------------------------------------------------
+//
+void MulPageDataWindow::SetHighlight( int aHighlightIndex )
+ {
+ MUL_LOG_INFO2("MUL::MulDataWindow::SetHighlight() mHighlight:%d,modelCount:%d",aHighlightIndex,mMulModel.CurrentItemCount());
+
+ __MUL_ASSERT( aHighlightIndex >= 0 && aHighlightIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
+
+ mHighlight = aHighlightIndex;
+ }
+
+
+// ---------------------------------------------------------------------------
+// UpdateHighlight
+// ---------------------------------------------------------------------------
+//
+void MulPageDataWindow::UpdateHighlight( int aHighlightIndex )
+ {
+ // No need to assert. We should send highlight -1 when all the items are removed.
+ // Widget should handle. to show emty text visualization
+ mHighlight = aHighlightIndex;
+ }
+
+// ---------------------------------------------------------------------------
+// AdjustOffset
+// ---------------------------------------------------------------------------
+//
+void MulPageDataWindow::AdjustOffset()
+ {
+ if( BottomWindowOffset() >= mMulModel.CurrentItemCount() )
+ {
+ mWindowBottom = mMulModel.CurrentItemCount() -1;
+ mWindowTop = mWindowBottom - WindowSize() + 1;
+ mWindowTop = mWindowTop < 0 ? 0 : mWindowTop;
+
+ MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustOffset() : windowTop:%d::windowBottom%d",mWindowTop,mWindowBottom);
+ }
+ else if( (BottomWindowOffset() - TopWindowOffset() +1 ) < WindowSize() )
+ {
+ mWindowTop = 0;
+ mWindowBottom = mWindowTop + WindowSize() -1;
+ int modelCount = mMulModel.CurrentItemCount();
+ mWindowBottom = mWindowBottom >= modelCount ? (modelCount - 1) : mWindowBottom;
+
+ MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustOffset() :: windowTop:%d::windowBottom%d",mWindowTop,mWindowBottom);
+ }
+
+ // save old values to check if teh buffer offsets are modified. If the buffer offsets are
+ // modified then should inform the widget to update the visualization
+ SaveOldValues();
+ AdjustBuffer();
+ }
+
+
+// ---------------------------------------------------------------------------
+// ScrollWindow
+// ---------------------------------------------------------------------------
+//
+void MulPageDataWindow::ScrollWindow( int aPageTopIndex )
+ {
+ MUL_LOG_INFO2("MUL::MulDataWindow::ScrollWindow() aPageTopIndex:%d,modelCount:%d",aPageTopIndex,mMulModel.CurrentItemCount());
+
+ __MUL_ASSERT( aPageTopIndex >= 0 && aPageTopIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
+
+ if( mPageTopIndex != aPageTopIndex )
+ {
+ mOldPageTopIndex = mPageTopIndex;
+ mPageTopIndex = aPageTopIndex;
+
+ UpdateDataWindow();
+ }
+ //else same highlight
+ }
+
+
+// ---------------------------------------------------------------------------
+// UpdateDataWindow
+// ---------------------------------------------------------------------------
+//
+void MulPageDataWindow::UpdateDataWindow()
+ {
+ MUL_LOG_INFO1("MUL::MulPageDataWindow::UpdateDataWindow() diff:%d ", mPageTopIndex - mOldPageTopIndex );
+
+ //If diffrence is negative than highlight is moved up else down
+ //(( mPageTopIndex - mOldPageTopIndex ) < 0 ) ? ShiftWindowUp() : ShiftWindowDown() ;
+
+ MUL_LOG_ENTRY_EXIT("MUL::MulPageDataWindow::ShiftWindowDown()");
+ MUL_LOG_INFO2("MUL::MulPageDataWindow::ShiftWindowDown() mPageTopIndex:%d,mWindowBottom:%d",mPageTopIndex,mWindowBottom);
+
+ mWindowTop = mPageTopIndex;
+ mWindowBottom = mWindowTop + mWindowSize -1;
+ //bottom can't exceeding model count
+ mWindowBottom = mWindowBottom >= mMulModel.CurrentItemCount() ?
+ mWindowBottom = mMulModel.CurrentItemCount() - 1 : mWindowBottom;
+
+ MUL_LOG_INFO2("MUL::MulDataWindow::ShiftWindowDown() mWindowTop:%d,mWindowBottom:%d",mWindowTop,mWindowBottom);
+
+ SaveOldValues();
+ AdjustBuffer();
+ mMulModel.DataWindowUpdated();
+ }
+
+// ---------------------------------------------------------------------------
+// AdjustBuffer
+// ---------------------------------------------------------------------------
+//
+void MulPageDataWindow::AdjustBuffer()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulPageDataWindow::AdjustBuffer()");
+
+ int modelCount = mMulModel.CurrentItemCount() -1;
+
+ //remove data is new window is smaller/add is new window is bigger
+ //create rear buffer only if model has more data
+ if( mWindowTop == 0 && ActualBufferSize() <= modelCount )
+ {
+ MUL_LOG_INFO("MUL::MulPageDataWindow::AdjustBuffer() mWindowTop == 0 ");
+
+ mBufferTop = mWindowTop;
+ mBufferBottom = mBufferTop + mWindowSize + mBufferSize - 1;
+
+ //Create rear top and rear bottom only in looping case
+ //window top is zero so data at other end should be buffered
+ mRearBufferBottom = modelCount;
+ mRearBufferTop = mRearBufferBottom - mBufferSize +1;
+ }
+ else if( mWindowBottom == modelCount && ActualBufferSize() <= modelCount )
+ {
+ MUL_LOG_INFO("MUL::MulPageDataWindow::AdjustBuffer() mWindowBottom == modelCount ");
+
+ mBufferBottom = mWindowBottom ;
+ mBufferTop = mBufferBottom - (mWindowSize + mBufferSize) + 1;
+
+ //Create rear top and rear bottom only in looping case
+ //window bottom is equal to model count so data at other end should be buffered
+ mRearBufferTop = 0;
+ mRearBufferBottom = mRearBufferTop + mBufferSize -1 ;
+ }
+ else
+ {
+ MUL_LOG_INFO("MUL::MulPageDataWindow::AdjustBuffer() else ");
+
+ mBufferTop = mWindowTop - mBufferSize;
+ mBufferBottom = mWindowBottom + mBufferSize;
+
+ //check if top or bottom is out of bound and update offset accordingly
+ if( mBufferTop < 0 )
+ {
+ MUL_LOG_INFO("MUL::MulPageDataWindow::AdjustBuffer() mBufferTop < 0 ");
+
+ mBufferTop = 0;
+ mBufferBottom = mBufferTop + ActualBufferSize() - 1;
+ //buffer bottom cant be larger then model count
+ mBufferBottom = mBufferBottom > modelCount ? modelCount : mBufferBottom;
+ }
+ else if( mBufferBottom > modelCount )
+ {
+ MUL_LOG_INFO("MUL::MulPageDataWindow::AdjustBuffer() mBufferBottom > modelCount");
+
+ mBufferBottom = modelCount ;
+ mBufferTop = mBufferBottom - ActualBufferSize() + 1;
+ //buffer top cant be less then 0
+ mBufferTop = mBufferTop < 0 ? 0 : mBufferTop;
+ }
+
+ //in other case rear top and rear bottom is not use set to -1
+ mRearBufferTop = KNotInitialized;
+ mRearBufferBottom = KNotInitialized;
+ }
+
+ MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustBuffer() mOldBufferTop:%d,mOldBufferBottom:%d",mOldBufferTop,mOldBufferBottom);
+ MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustBuffer() mOldRearBufferBottom:%d,mOldRearBufferTop:%d",mOldRearBufferBottom,mOldRearBufferTop);
+
+ MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustBuffer() mBufferTop:%d,mBufferBottom:%d",mBufferTop,mBufferBottom);
+ MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustBuffer() mRearBufferBottom:%d,mRearBufferTop:%d",mRearBufferBottom,mRearBufferTop);
+
+ __MUL_ASSERT_DEBUG( mWindowTop >= 0 && mWindowBottom < mMulModel.CurrentItemCount(), _L("Invlid Window"));
+ __MUL_ASSERT_DEBUG( mBufferTop >= 0 && mBufferBottom < mMulModel.CurrentItemCount(), _L("Invlid Buffer"));
+ }
+
+// ---------------------------------------------------------------------------
+// IsItemInDataWindow
+// ---------------------------------------------------------------------------
+//
+bool MulPageDataWindow::IsItemInDataWindow(int aItemIndex ) const
+ {
+ //__MUL_ASSERT_DEBUG( aItemIndex >= 0 && aItemIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
+
+ bool result( false );
+
+ if(mWindowSize == KNotInitialized )
+ {
+ result = false;
+ }
+ //check that rear buffer is on or not in looping case
+ else if( mRearBufferTop != KNotInitialized && mRearBufferBottom != KNotInitialized )
+ {
+ if( ( aItemIndex >= mBufferTop && aItemIndex <= mBufferBottom ) ||
+ ( aItemIndex >= mRearBufferTop && aItemIndex <= mRearBufferBottom ) )
+ {
+ result = true;
+ }
+ }
+ else if( aItemIndex >= mBufferTop && aItemIndex <= mBufferBottom )
+ {
+ result = true;
+ }
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// IsItemInDataWindow
+// ---------------------------------------------------------------------------
+//
+bool MulPageDataWindow::IsItemInVisibleWindow(int aItemIndex ) const
+ {
+ //__MUL_ASSERT_DEBUG( aItemIndex >= 0 && aItemIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
+
+ if(mWindowSize == KNotInitialized )
+ {
+ return false;
+ }
+ else if( aItemIndex >= mWindowTop && aItemIndex <= mWindowBottom )
+ {
+ return true;
+ }
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// RelativeIndex
+// ---------------------------------------------------------------------------
+//
+int MulPageDataWindow::RelativeIndex( int aAbsoluteIndex ) const
+ {
+ __MUL_ASSERT_DEBUG( aAbsoluteIndex >= 0 && aAbsoluteIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
+
+ if( !IsItemInDataWindow(aAbsoluteIndex) )
+ {
+ return -1;
+ }
+
+ if( mRearBufferTop != KNotInitialized && mRearBufferBottom != KNotInitialized )
+ {
+ if( mRearBufferBottom == mMulModel.CurrentItemCount() - 1 )
+ {
+ if( aAbsoluteIndex >= mRearBufferTop && aAbsoluteIndex <= mRearBufferBottom )
+ {
+ int bufferSize = BottomOffset() - TopOffset() + 1;
+ int rearDiff = aAbsoluteIndex - mRearBufferTop;
+ int relativeIndex = bufferSize + rearDiff;
+ return relativeIndex;
+ }
+ else
+ {
+ int relativeIndex = aAbsoluteIndex < TopOffset() ?
+ aAbsoluteIndex : aAbsoluteIndex - TopOffset() ;
+ return relativeIndex;
+ }
+ }
+ else
+ {
+ if( aAbsoluteIndex >= mRearBufferTop && aAbsoluteIndex <= mRearBufferBottom )
+ {
+ int relativeIndex = aAbsoluteIndex < TopOffset() ?
+ aAbsoluteIndex : aAbsoluteIndex - TopOffset() ;
+ return relativeIndex;
+ }
+ else
+ {
+ int bufferSize = mRearBufferBottom - mRearBufferTop + 1;
+ int diff = aAbsoluteIndex - TopOffset();
+ int relativeIndex = bufferSize + diff;
+ return relativeIndex;
+ }
+ }
+ }
+ else
+ {
+ int relativeIndex = aAbsoluteIndex < TopOffset() ?
+ aAbsoluteIndex : aAbsoluteIndex - TopOffset() ;
+ return relativeIndex;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// AbsoluteIndex
+// ---------------------------------------------------------------------------
+//
+int MulPageDataWindow::AbsoluteIndex( int aRelativeIndex ) const
+ {
+ __MUL_ASSERT_DEBUG( aRelativeIndex >= 0 && aRelativeIndex <= ActualBufferSize(), _L("Invalid Relative Index"));
+
+ if( mRearBufferTop != KNotInitialized && mRearBufferBottom != KNotInitialized )
+ {
+ if( mRearBufferBottom == mMulModel.CurrentItemCount() - 1 )
+ {
+ if( aRelativeIndex > BottomOffset() )
+ {
+ //relative index is in loop buffer
+ int diff = aRelativeIndex - BottomOffset() - 1;
+ int absoluteIndex = RearTopOffset() + diff;
+ return absoluteIndex;
+ }
+ else
+ {
+ int absoluteIndex = TopOffset() + aRelativeIndex;
+ return absoluteIndex;
+ }
+ }
+ else
+ {
+ if( aRelativeIndex <= RearBottomOffset() )
+ {
+ //relative index is in loop buffer
+ int absoluteIndex = RearTopOffset() + aRelativeIndex;
+ return absoluteIndex;
+ }
+ else
+ {
+ int diff = aRelativeIndex - RearBottomOffset() - 1;
+ int absoluteIndex = TopOffset() + diff;
+ return absoluteIndex;
+ }
+ }
+ }
+ else
+ {
+ int absoluteIndex = TopOffset() + aRelativeIndex;
+ return absoluteIndex;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// IsBufferOffsetChanged
+// ---------------------------------------------------------------------------
+//
+bool MulPageDataWindow::IsBufferOffsetChanged()
+ {
+ if(mRearBufferBottom != mOldRearBufferBottom ||
+ mRearBufferTop != mOldRearBufferTop ||
+ mBufferTop != mOldBufferTop ||
+ mBufferBottom != mOldBufferBottom )
+ {
+ return true;
+ }
+ return false;
+ }
+
+ } // namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulpullmode.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,467 @@
+/*
+* 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 Pull Mode
+*
+*/
+
+
+//Includes
+#include "mulpullmode.h"
+
+#include <mul/imulmodelprovider.h>
+
+
+#include "mulassert.h"
+#include "mulcachemanager.h"
+#include "muldatawindow.h"
+#include "mulpagedatawindow.h"
+#include "mul/mulmodelutility.h"
+#include "mullog.h"
+#include "mulasyncdataprovider.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulPullMode()
+// ---------------------------------------------------------------------------
+//
+MulPullMode::MulPullMode(MulPageDataWindow& aDataWindow,
+ const IMulModelProvider& aModelProvider)
+ :MulPushMode( aDataWindow )
+ {
+ //mModelProvider = const_cast<IMulModelProvider*>( &aModelProvider );
+ MUL_LOG_ENTRY_EXIT("MUL::MulPullModeImpl::MulPullModeImpl()");
+ mModelProvider.reset( new (ELeave) MulAsyncDataProvider( const_cast<IMulModelProvider&>(aModelProvider), aDataWindow ));
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulPullMode()
+// ---------------------------------------------------------------------------
+//
+MulPullMode::~MulPullMode()
+ {
+ // No implementation is required.
+ MUL_LOG_ENTRY_EXIT("MUL::MulPullModeImpl::~MulPullModeImpl()");
+ }
+
+// ------------------------ From IMulModel -----------------------------------
+
+// ---------------------------------------------------------------------------
+// Update
+// ---------------------------------------------------------------------------
+//
+void MulPullMode::Update(int aIndex, int aCount, const MulDataPath& /*aPath*/)
+ {
+ // throw exception if index is out of bound
+ __MUL_ASSERT( aIndex >= 0 && aCount > 0 && aIndex+aCount <= mCacheManager->ExpandedNodeCount(), KLInvalidArgument );
+
+ int startIndex = aIndex;
+ int range = 0;
+ bool firstTime = true;
+ for(int i = aIndex; i < aCount+aIndex ; ++i)
+ {
+ if( mDataWindow.IsItemInDataWindow(i) )
+ {
+ range++;
+ firstTime = true;
+ }
+ else
+ {
+ if(firstTime)
+ {
+ firstTime = false;
+ if(range>0)
+ {
+ ProvideData(startIndex,range);
+ range = 0;
+ }
+ }
+ startIndex = i + 1;
+ }
+ }
+ ProvideData(startIndex,range);
+ }
+
+// ---------------------------------------------------------------------------
+// Refresh
+// ---------------------------------------------------------------------------
+//
+void MulPullMode::Refresh( int aCount, const MulDataPath& aPath )
+ {
+ int modelCountBefore = mCacheManager->ExpandedNodeCount();
+
+ // remove all old nodes
+ for(int currentIndex = 0; currentIndex < modelCountBefore; currentIndex++)
+ {
+ mCacheManager->RemoveVisualItem(aPath,0);
+ }
+
+ //mCacheManager->RemoveVisalItem(0, aCount, aPath );
+
+ // insert new nodes
+ mCacheManager->CreateNodes( 0, aCount, aPath );
+
+ int modelCount = mCacheManager->ExpandedNodeCount();
+ // update alf model accordingly
+ if(mDataWindow.IsWindowEnabled())
+ {
+ if(modelCountBefore == modelCount)
+ {
+ Update(0,aCount,aPath);
+ }
+ else
+ {
+ ModelCountChanged(modelCountBefore,modelCount);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetData
+// ---------------------------------------------------------------------------
+//
+void MulPullMode::SetData(int aIndex, auto_ptr<MulVisualItem> aVisualItem,const MulDataPath& aPath)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulPullModeImpl::SetData()");
+
+ __MUL_ASSERT( aIndex >= 0 && aIndex < Count(aPath),_L("Invalid Argument."));
+
+ //Set data to model
+ if( mDataWindow.IsItemInDataWindow( aIndex ) )
+ {
+ MulPushMode::SetData( aIndex, aVisualItem, aPath );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetTemplate
+// ---------------------------------------------------------------------------
+//
+void MulPullMode::SetTemplate( mulwidget::TLogicalTemplate aTemplateId )
+ {
+ mDefaultTemplate = aTemplateId;
+
+ MulDataPath path ;
+ if( mDataWindow.IsWindowEnabled() )
+ {
+ int topOffset = mDataWindow.TopOffset();
+ int bottomOffset = mDataWindow.BottomOffset();
+ for( int i = topOffset ; i <= bottomOffset ; i++ )
+ {
+ MulPushMode::SetTemplate( i, mDefaultTemplate, path);
+ }
+
+ int rearTopOffset = mDataWindow.RearTopOffset();
+ int rearBottomOffset = mDataWindow.RearBottomOffset();
+ for( int i = rearTopOffset; i <= rearBottomOffset && i >= 0 ; i++ )
+ {
+ MulPushMode::SetTemplate( i, mDefaultTemplate, path);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// WindowSiftedDown
+// ---------------------------------------------------------------------------
+//
+void MulPullMode::WindowSiftedDown()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulPullModeImpl::WindowSiftedDown");
+
+ // If the complete datawindow is invalid.
+// if(mDataWindow.TopOffset() - mDataWindow.OldTopOffset() > mDataWindow.ActualBufferSize()
+// && mDataWindow.OldTopOffset() != KNotInitialized)
+ //if(mDataWindow.TopOffset() - mDataWindow.OldTopOffset() > mDataWindow.ActualBufferSize() )
+ int oldTopOffset = mDataWindow.OldTopOffset();
+ int oldBottomOffset = mDataWindow.OldBottomOffset();
+ int topOffset = mDataWindow.TopOffset();
+ int bottomOffset = mDataWindow.BottomOffset();
+ int oldRearTopOffset = mDataWindow.OldRearTopOffset();
+ int oldRearBottomOffset = mDataWindow.OldRearBottomOffset();
+
+ if( ( oldTopOffset == KNotInitialized && oldBottomOffset == KNotInitialized ) ||
+ ( topOffset - oldTopOffset >= mDataWindow.ActualBufferSize()) ||
+ ( oldRearTopOffset != KNotInitialized &&
+ ( topOffset - oldTopOffset >= ( mDataWindow.WindowSize() + mDataWindow.BufferSize() ) )
+ ) )
+ {
+ //remove old data from cache
+ for( int i = oldTopOffset ; i <= oldBottomOffset && i >= 0 ; i++ )
+ {
+ mCacheManager->RemoveVisualItem( i );
+ }
+
+ for( int i = oldRearTopOffset; i <= oldRearBottomOffset && i >= 0 ; i++ )
+ {
+ mCacheManager->RemoveVisualItem( i );
+ }
+
+ int startIndex = topOffset;
+ int range = bottomOffset - startIndex + 1;
+
+ MUL_LOG_INFO2("MUL::MulPullModeImpl::WindowSiftedUp ProvideData startIndex:%d,range:%d",startIndex,range);
+ ProvideData(startIndex,range);
+ }
+ else
+ {
+ //remove extra items from top and add new items at bottom
+ for( int i = oldTopOffset ; i >= 0 && i < topOffset ; i++ )
+ {
+ //remove item from top
+ mCacheManager->RemoveVisualItem( i );
+ }
+
+ int startIndex = oldBottomOffset +1 ;
+ int range = ( bottomOffset - oldBottomOffset );
+ MUL_LOG_INFO2("MUL::MulPullModeImpl::DataWindowUpdated ProvideData startIndex:%d,range:%d",startIndex,range);
+ ProvideData(startIndex,range);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// WindowSiftedUp
+// ---------------------------------------------------------------------------
+//
+void MulPullMode::WindowSiftedUp()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulPullModeImpl::WindowSiftedUp ");
+ // If the complete datawindow is invalid.
+// if(mDataWindow.OldBottomOffset() - mDataWindow.BottomOffset() > mDataWindow.ActualBufferSize()
+// && mDataWindow.OldBottomOffset() != KNotInitialized)
+
+ if( mDataWindow.OldBottomOffset() - mDataWindow.BottomOffset() >= mDataWindow.ActualBufferSize() ||
+ ( mDataWindow.OldRearBottomOffset() != KNotInitialized &&
+ ( mDataWindow.OldBottomOffset() - mDataWindow.BottomOffset() >= ( mDataWindow.WindowSize() + mDataWindow.BufferSize() ) )
+ ) )
+ {
+ //remove old data from cache
+ for( int i = mDataWindow.OldTopOffset() ; i <= mDataWindow.OldBottomOffset() && i >= 0 ; i++ )
+ {
+ mCacheManager->RemoveVisualItem( i );
+ }
+
+ for( int i = mDataWindow.OldRearTopOffset( ); i <= mDataWindow.OldRearBottomOffset() && i >= 0 ; i++ )
+ {
+ mCacheManager->RemoveVisualItem( i );
+ }
+
+ int startIndex = mDataWindow.TopOffset();
+ int range = mDataWindow.BottomOffset() - startIndex + 1;
+
+ MUL_LOG_INFO2("MUL::MulPullModeImpl::WindowSiftedUp ProvideData startIndex:%d,range:%d",startIndex,range);
+ ProvideData(startIndex,range);
+ }
+ else
+ {
+ //remove extra items from bottom and add at top
+ for( int i = mDataWindow.BottomOffset() ; i < mDataWindow.OldBottomOffset() ; i++ )
+ {
+ mCacheManager->RemoveVisualItem(i+1);
+ }
+
+ int startIndex = mDataWindow.TopOffset();
+ int range = mDataWindow.OldTopOffset() - mDataWindow.TopOffset();
+
+ MUL_LOG_INFO2("MUL::MulPullModeImpl::WindowSiftedUp ProvideData startIndex:%d,range:%d",startIndex,range);
+ ProvideData(startIndex,range);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ProvideData
+// ---------------------------------------------------------------------------
+//
+void MulPullMode::ProvideData(int aStartIndex, int aRange)
+ {
+ //call provide data for visible window first then for buffer
+ if( aRange > 0 )
+ {
+ // check if the current higlighted item is there in the data asked for
+ if( mDataWindow.Highlight() >= aStartIndex &&
+ mDataWindow.Highlight() < aStartIndex+aRange )
+ {
+ mModelProvider->ProvideData( mDataWindow.Highlight(), 1 ,MulDataPath(),true );
+ }
+ //__MUL_ASSERT( ( aRange % 18 ) == 0, _L("Invalid Renage") );
+ //check that visible data is there in provide data call
+ if( aStartIndex < mDataWindow.TopWindowOffset() &&
+ aStartIndex+aRange > mDataWindow.BottomWindowOffset() )
+ {
+ {
+ //request visible item
+ int startIndex = mDataWindow.TopWindowOffset();
+ int range = ( mDataWindow.BottomWindowOffset() - mDataWindow.TopWindowOffset() ) + 1 ;
+
+ MUL_LOG_INFO2("MUL::MulPullModeImpl::ProvideData visible buffer startIndex:%d,range:%d",startIndex,range);
+ mModelProvider->ProvideData(startIndex, range ,MulDataPath() );
+ }
+
+ {
+ //request item from top
+ int startIndex = aStartIndex;
+ int range = mDataWindow.TopWindowOffset() - startIndex;
+
+ MUL_LOG_INFO2("MUL::MulPullModeImpl::ProvideData top buffer startIndex:%d,range:%d",startIndex,range);
+ mModelProvider->ProvideData(startIndex, range ,MulDataPath() );
+ }
+
+ {
+ //request item from bottom
+ int startIndex = mDataWindow.BottomWindowOffset() + 1 ;
+ int range = ( aStartIndex + aRange - 1) - mDataWindow.BottomWindowOffset();
+
+ MUL_LOG_INFO2("MUL::MulPullModeImpl::ProvideData bottom buffer startIndex:%d,range:%d",startIndex,range);
+ mModelProvider->ProvideData(startIndex, range ,MulDataPath() );
+ }
+ }
+ else
+ {
+ //there is not provide data pending for visible window
+ mModelProvider->ProvideData(aStartIndex, aRange ,MulDataPath() );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ModelCountChanged
+// ---------------------------------------------------------------------------
+//
+void MulPullMode::ModelCountChanged(int aOldCount, int aNewCount)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulPullMode::AdjustOffsetAndData()");
+
+ MUL_LOG_INFO1("MUL::MulPullMode::AdjustAlfModelData() modelCount:%d", aNewCount );
+
+ MulPushMode::ModelCountChanged( aOldCount, aNewCount );
+
+ // fetch data for the new buffers
+ if( mDataWindow.RearTopOffset() != KNotInitialized &&
+ mDataWindow.RearBottomOffset() != KNotInitialized )
+ {
+ if(mDataWindow.RearTopOffset() == 0)
+ {
+ //updating all buffer
+ ProvideData( mDataWindow.RearTopOffset() , mDataWindow.RearBottomOffset() -
+ mDataWindow.RearTopOffset() + 1);
+
+ ProvideData( mDataWindow.TopOffset() , mDataWindow.BottomOffset() -
+ mDataWindow.TopOffset() + 1);
+ }
+ else
+ {
+ ProvideData( mDataWindow.TopOffset() , mDataWindow.BottomOffset() -
+ mDataWindow.TopOffset() + 1);
+
+ ProvideData( mDataWindow.RearTopOffset() , mDataWindow.RearBottomOffset() -
+ mDataWindow.RearTopOffset() + 1);
+ }
+ }
+ else
+ {
+ ProvideData( mDataWindow.TopOffset() , mDataWindow.BottomOffset() -
+ mDataWindow.TopOffset() + 1);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// DataWindowUpdated
+// ---------------------------------------------------------------------------
+//
+void MulPullMode::DataWindowUpdated()
+ {
+ //here sequence of Function call are important dont change function call sequences
+ //UpdateLoopBuffer must be called first
+ if( mDataWindow.RearTopOffset() != KNotInitialized &&
+ mDataWindow.OldRearTopOffset() != KNotInitialized ) //there is looping on
+ {
+ UpdateLoopBuffer();
+ //returning from here only dont need to do any thing else
+ return ;
+ }
+ //window shifted down
+ if( mDataWindow.OldBottomOffset() < mDataWindow.BottomOffset() )
+ {
+ WindowSiftedDown();
+ }
+ //window shifted up
+ else if( mDataWindow.OldTopOffset() > mDataWindow.TopOffset())
+ {
+ WindowSiftedUp();
+ }
+
+ //add buffer in looping case
+ if(mDataWindow.RearTopOffset() != KNotInitialized && mDataWindow.RearBottomOffset() != KNotInitialized) //rear offset changed
+ {
+ // here ask data from top to bottom
+ int startIndex = mDataWindow.RearTopOffset() ;
+ int range = mDataWindow.RearBottomOffset() - mDataWindow.RearTopOffset() + 1;
+
+ MUL_LOG_INFO2("MUL::MulPullMode::DataWindowUpdated startIndex:%d,range:%d",startIndex,range);
+ ProvideData(startIndex,range);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// UpdateLoopBuffer
+// ---------------------------------------------------------------------------
+//
+void MulPullMode::UpdateLoopBuffer()
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulPushMode::UpdateLoopBuffer");
+ if( mDataWindow.RearTopOffset() < mDataWindow.OldRearTopOffset() )
+ {
+ int startIndex = mDataWindow.TopOffset();
+ int range = mDataWindow.OldRearTopOffset() - startIndex;
+
+ MUL_LOG_INFO2("MUL::MulPushMode::UpdateLoopBuffer startIndex:%d,range:%d",startIndex,range);
+ ProvideData(startIndex,range);
+ }
+ else
+ {
+ int startIndex = mDataWindow.OldRearBottomOffset()+1 ;
+ int range = mDataWindow.BottomOffset() - startIndex + 1;
+
+ MUL_LOG_INFO2("MUL::MulPushMode::UpdateLoopBuffer startIndex:%d,range:%d",startIndex,range);
+ ProvideData(startIndex,range);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Item
+// ---------------------------------------------------------------------------
+//
+const MulVisualItem& MulPullMode::Item( int aAbsoluteIndex )
+ {
+ MulVisualItem* visualItem = mCacheManager->Data( aAbsoluteIndex );
+ if( !visualItem )
+ {
+ if( mDataWindow.IsItemInDataWindow(aAbsoluteIndex) )
+ {
+ std::auto_ptr<MulVisualItem> dummyItem = MulModelUtility::CreateVisualItem( Template() );
+ visualItem = dummyItem.get();
+ mCacheManager->AddVisualItem(dummyItem, MulDataPath() ,aAbsoluteIndex );
+ }
+ else
+ {
+ throw std::invalid_argument(KInvalidArgument);
+ }
+ }
+ return *visualItem;
+ }
+
+
+ } // namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulpushmode.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,302 @@
+/*
+* 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: Base implementation of pull and push mode
+ *
+*/
+
+
+
+//Includes
+#include "mulpushmode.h"
+
+#include "mulassert.h"
+#include "mulcachemanager.h"
+#include "mulpagedatawindow.h"
+#include "mullog.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulPushMode()
+// ---------------------------------------------------------------------------
+//
+MulPushMode::MulPushMode( MulPageDataWindow& aDataWindow )
+ : mDataWindow(aDataWindow)
+ {
+ mCacheManager.reset( new ( EMM ) MulCacheManager());
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulPushMode()
+// ---------------------------------------------------------------------------
+//
+MulPushMode::~MulPushMode()
+ {
+ // No implementation is required.
+ }
+
+// ---------------------------------------------------------------------------
+// Insert
+// ---------------------------------------------------------------------------
+//
+bool MulPushMode::Insert(int aIndex, int aCount, const MulDataPath& aPath )
+ {
+ __MUL_ASSERT( aIndex >= 0 && aIndex <= mCacheManager->ExpandedNodeCount() && aCount > 0, KLInvalidArgument );
+
+ int modelCountBefore = mCacheManager->ExpandedNodeCount();
+ mCacheManager->CreateNodes( aIndex, aCount, aPath );
+
+ int modelCount = mCacheManager->ExpandedNodeCount();
+
+ // if there is a change in expanded node count of model then update
+ // the alf model. THis case would happen if we are inserting childnodes
+ // for a node which is not expanded. Then no need to update the alf model
+ if(mDataWindow.IsWindowEnabled() && modelCount != modelCountBefore)
+ {
+ ModelCountChanged(modelCountBefore,modelCount);
+ }
+
+ // The highlight is the same but its relative index is changed
+ // because the buffer offsets are changed. Even in this case widget has to update the visualization
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// Remove
+// ---------------------------------------------------------------------------
+//
+bool MulPushMode::Remove( int aIndex, int aCount,const MulDataPath& aPath)
+ {
+ __MUL_ASSERT( aIndex >= 0 && aCount > 0 && aIndex+aCount <= mCacheManager->ExpandedNodeCount(), KLInvalidArgument );
+
+ int modelCountBefore = mCacheManager->ExpandedNodeCount();
+
+ mCacheManager->RemoveVisualItem( aIndex, aCount, aPath );
+
+ int modelCount = mCacheManager->ExpandedNodeCount();
+
+ // To inform the calling class whether the highlight has changed
+ // If the current highlight is more than the total number of items. Then udjust teh highlight
+ bool highlightUpdated = ValidateCurrentHighlight();
+
+ // if there is a change in expanded node count of model then update
+ // the alf model. This case would happen if we are removing childnodes
+ // for a node which is not expanded. Then no need to update the alf model
+ if(mDataWindow.IsWindowEnabled() && modelCount != modelCountBefore)
+ {
+ ModelCountChanged(modelCountBefore,modelCount);
+ }
+
+ // If the highlight is changed because it was greater than current model count or if
+ // the buffer offsets are changed then return true
+ return ( highlightUpdated );
+ }
+
+// ---------------------------------------------------------------------------
+// Update
+// ---------------------------------------------------------------------------
+//
+void MulPushMode::Update(int /*aIndex*/, int /*aCount*/, const MulDataPath& /*aPath*/)
+ {
+ //no implementation required
+ }
+
+// ---------------------------------------------------------------------------
+// Refresh
+// ---------------------------------------------------------------------------
+//
+void MulPushMode::Refresh( int /*aCount*/, const MulDataPath& /*aPath*/)
+ {
+ // throw exception not implemented in push mode
+ throw std::logic_error("Not Implemented");
+ }
+
+
+// ---------------------------------------------------------------------------
+// SetTemplate
+// ---------------------------------------------------------------------------
+//
+void MulPushMode::SetTemplate( mulwidget::TLogicalTemplate aTemplateId )
+ {
+ mDefaultTemplate = aTemplateId ;
+
+ MulDataPath path;
+ for( int i = 0 ; i < mCacheManager->Count() ; i++ )
+ {
+ MulPushMode::SetTemplate( i, mDefaultTemplate, path );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Template
+// ---------------------------------------------------------------------------
+//
+mulwidget::TLogicalTemplate MulPushMode::Template( )
+ {
+ return mDefaultTemplate;
+ }
+
+// ---------------------------------------------------------------------------
+// Data
+// ---------------------------------------------------------------------------
+//
+const MulVisualItem* MulPushMode::Data( int aIndex, const MulDataPath& /*aPath*/) const
+ {
+ __MUL_ASSERT( aIndex >= 0 && aIndex < mCacheManager->ExpandedNodeCount(), KLInvalidArgument );
+
+ return mCacheManager->Data( aIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// SetData
+// ---------------------------------------------------------------------------
+//
+void MulPushMode::SetData( int aIndex, std::auto_ptr<MulVisualItem> aVisualItem,
+ const MulDataPath& aPath)
+ {
+ __MUL_ASSERT( aIndex >= 0 && aIndex < mCacheManager->ExpandedNodeCount(),_L("Invalid Argument"));
+
+ MulVisualItem* visualItem = mCacheManager->Data( aIndex );
+ MUL_LOG_INFO2("MUL::MulPushMode::SetData() Index:%d,item:%x",aIndex, visualItem);
+ if( visualItem )
+ {
+ mCacheManager->UpdateVisualItem( *aVisualItem , aPath, aIndex );
+ }
+ else
+ {
+ // Validating input visual item
+ ValidateVisualItem( *aVisualItem );
+ mCacheManager->AddVisualItem( aVisualItem, aPath, aIndex );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Count
+// ---------------------------------------------------------------------------
+//
+int MulPushMode::Count(const MulDataPath& /*aPath*/) const
+ {
+ return mCacheManager->ExpandedNodeCount();
+ }
+
+// ---------------------------------------------------------------------------
+// SetTemplate
+// ---------------------------------------------------------------------------
+//
+void MulPushMode::SetTemplate( int aItemIndex, mulwidget::TLogicalTemplate aTemplateId,
+ const MulDataPath& /*aPath*/ )
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulPushMode::SetTemplate");
+
+ MulVisualItem* visualItem = mCacheManager->Data( aItemIndex );
+ if( visualItem )
+ {
+ mulwidget::TLogicalTemplate logicalTemplate = (mulwidget::TLogicalTemplate) visualItem->AttributeAsInt( mulvisualitem::KAttributeTemplate );
+ //if template is not same then only change it
+ if( logicalTemplate != aTemplateId )
+ {
+ visualItem->SetAttribute( mulvisualitem::KAttributeTemplate, aTemplateId );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CurrentItemCount
+// ---------------------------------------------------------------------------
+//
+int MulPushMode::CurrentItemCount() const
+ {
+ return mCacheManager->ExpandedNodeCount();
+ }
+
+// ---------------------------------------------------------------------------
+// CacheManager
+// ---------------------------------------------------------------------------
+//
+MulCacheManager& MulPushMode::CacheManager() const
+ {
+ return *mCacheManager;
+ }
+
+// ---------------------------------------------------------------------------
+//ValidateVisualItem
+// ---------------------------------------------------------------------------
+//
+void MulPushMode::ValidateVisualItem( MulVisualItem& aVisualItem )
+ {
+ //add default template to item if template is not already set and default template is not null
+ IMulVariantType* itemTemplate = aVisualItem.Attribute( mulvisualitem::KAttributeTemplate );
+ if( !itemTemplate )
+ {
+ if( mDefaultTemplate != mulwidget::KTemplateUnknown )
+ {
+ //add default template to this visual item
+ aVisualItem.SetAttribute( mulvisualitem::KAttributeTemplate, mDefaultTemplate, 0 );
+ }
+ else
+ {
+ //template must be there
+ throw std::invalid_argument("Default template not available.");
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ModelCountChanged
+// ---------------------------------------------------------------------------
+//
+void MulPushMode::ModelCountChanged(int aOldCount, int aNewCount)
+ {
+ MUL_LOG_ENTRY_EXIT("MUL::MulPushMode::ModelCountChanged()");
+
+ MUL_LOG_INFO2("MUL::MulPushMode::ModelCountChanged() aOldCount:%d,aNewCount:%d", aOldCount, aNewCount );
+
+ mDataWindow.AdjustOffset();
+ }
+
+// ---------------------------------------------------------------------------
+// ValidateCurrentHighlight
+// ---------------------------------------------------------------------------
+//
+bool MulPushMode::ValidateCurrentHighlight()
+ {
+ // To inform the calling class whether the highlight has changed
+ int modelCount = mCacheManager->ExpandedNodeCount();
+ if( mDataWindow.Highlight() >= modelCount)
+ {
+ mDataWindow.UpdateHighlight( modelCount-1 );
+ return true;
+ }
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// Item
+// ---------------------------------------------------------------------------
+//
+const MulVisualItem& MulPushMode::Item( int aAbsoluteIndex )
+ {
+ MulVisualItem* visualItem = mCacheManager->Data( aAbsoluteIndex );
+ if(!visualItem)
+ {
+ throw std::invalid_argument(KInvalidArgument);
+ }
+ return *visualItem;
+ }
+
+ } // namespace ends here
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/multree.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,321 @@
+/*
+* 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: MulTree Implementaiton
+*
+*/
+
+
+#include "multree.h"
+
+#include <stdexcept>
+
+#include "mulassert.h"
+#include "mulmodeldef.h"
+#include "muldatapath.h"
+
+namespace Alf
+ {
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// AddNode
+// -----------------------------------------------------------------------------
+//
+void MulTree::AddNode(const MulDataPath& aPath,int aIndex)
+ {
+ //Find parent node
+ MulTreeNode* node = FindNode( aPath );
+
+ //update index of other child
+ for( int i = 0 ; i < node->ChildCount() ; i++ )
+ {
+ MulTreeNode* childNode = node->Child(i);
+ int index = childNode->Index();
+ if( childNode->Index() >= aIndex )
+ {
+ childNode->SetIndex( childNode->Index()+1 );
+ }
+ }
+
+ //insert node in to parent node
+ std::auto_ptr<MulTreeNode> childNode( new (EMM) MulTreeNode(aIndex));
+ node->InsertChild(childNode,aIndex);
+ }
+
+// -----------------------------------------------------------------------------
+// RemoveNode
+// -----------------------------------------------------------------------------
+//
+void MulTree::RemoveNode(const MulDataPath& aPath, int aIndex )
+ {
+ MulTreeNode* node = FindNode( aPath );
+ node->RemoveChild(aIndex);
+
+ //update index of other child
+ for( int i = 0 ; i < node->ChildCount() ; i++ )
+ {
+ MulTreeNode* childNode = node->Child(i);
+ int index = childNode->Index();
+ if( childNode->Index() > aIndex )
+ {
+ childNode->SetIndex( childNode->Index()-1 );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// FindNode
+// -----------------------------------------------------------------------------
+//
+MulTreeNode* MulTree::FindNode( const MulDataPath& aPath ) const
+ {
+ MulTreeNode* currentNode = mRootNode.get();
+ for( int i = 0; i < aPath.Depth() ;i++ )
+ {
+ int index = aPath[i];
+ if( currentNode->HasChild() )
+ {
+ currentNode = FindChildNode( currentNode,index);
+ }
+ else
+ {
+ __MUL_ASSERT_DEBUG( false , KLInvalidArgument );
+ }
+ }
+ return currentNode;
+ }
+
+// -----------------------------------------------------------------------------
+// FindNode
+// -----------------------------------------------------------------------------
+//
+MulTreeNode* MulTree::FindChildNode(MulTreeNode* aParentNode,int aIndex) const
+ {
+ MulTreeNode* currentNode = aParentNode;
+ MulTreeNode* foundNode = NULL;
+ int index = 0;
+ bool found(false);
+ int childCount = currentNode->ChildCount();
+ while( !found && index < childCount )
+ {
+ MulTreeNode* childNode = currentNode->Child(index);
+ if( aIndex == childNode->Index() )
+ {
+ found = true;
+ foundNode = childNode;
+ }
+ index++;
+ }
+
+ if( found == false )
+ {
+ __MUL_ASSERT_DEBUG( false , KLInvalidArgument );
+ }
+
+ return foundNode;
+ }
+
+// -----------------------------------------------------------------------------
+// FindNode
+// -----------------------------------------------------------------------------
+//
+MulDataPath MulTree::FindNode( int aIndex ) const
+ {
+ int absoluteIndex = -1;
+ return FindNode( mRootNode.get(), absoluteIndex, aIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// FindNode
+// -----------------------------------------------------------------------------
+//
+MulDataPath MulTree::FindNode( MulTreeNode* aNode, int& aAbsoluteIndex, int aIndex ) const
+ {
+ MulTreeNode* currentNode = aNode;
+ if( currentNode->HasChild() )
+ {
+ for(int i = 0 ; i < currentNode->ChildCount() ; i++ )
+ {
+ aAbsoluteIndex++;
+ MulTreeNode* childNode = currentNode->Child(i);
+
+#ifdef _DEBUG
+ bool hasChild = childNode->HasChild();
+ int count = childNode->ChildCount();
+ bool isExpanded = childNode->IsExpanded();
+#endif //_DEBUG
+
+ if( aAbsoluteIndex == aIndex )
+ {
+ MulDataPath path= Path(*childNode);
+ path.SetIndex(i);
+ return path;
+ }
+ else if( childNode->HasChild() && childNode->IsExpanded() )
+ {
+ MulDataPath path = FindNode( childNode, aAbsoluteIndex , aIndex );
+ if(path.Index() != KNotInitialized )
+ {
+ return path;
+ }
+ }
+ }
+ }
+ //__MUL_ASSERT_DEBUG( false , KLInvalidArgument );
+ MulDataPath path;
+ path.SetIndex(KNotInitialized);
+ return path;
+ }
+
+// -----------------------------------------------------------------------------
+// Path
+// -----------------------------------------------------------------------------
+//
+MulDataPath MulTree::Path(MulTreeNode& aNode) const
+ {
+ MulTreeNode* parentNode = aNode.Parent();
+ std::vector<int> pathArray;
+ while( parentNode && parentNode != mRootNode.get() )
+ {
+ int index = parentNode->Index();
+ pathArray.push_back( parentNode->Index() );
+ parentNode = parentNode->Parent();
+ }
+
+ int count = pathArray.size();
+
+ MulDataPath path;
+ for( int i= pathArray.size()- 1 ; i >=0 ; i-- )
+ {
+ path.Append( pathArray[i] );
+ }
+ pathArray.clear();
+ return path;
+ }
+
+// -----------------------------------------------------------------------------
+// NodeCount
+// -----------------------------------------------------------------------------
+//
+int MulTree::NodeCount() const
+ {
+ int nodeCount =NodeCount( mRootNode.get() );
+ return nodeCount;
+ }
+
+// -----------------------------------------------------------------------------
+// NodeCount
+// -----------------------------------------------------------------------------
+//
+int MulTree::NodeCount(MulTreeNode* aCurrentNode ) const
+ {
+ int nodeCount = 0;
+ if(aCurrentNode->HasChild())
+ {
+ nodeCount = aCurrentNode->ChildCount();
+ for(int i=0;i< aCurrentNode->ChildCount();i++)
+ {
+ nodeCount+= NodeCount(aCurrentNode->Child(i));
+ }
+ }
+ return nodeCount;
+ }
+
+// -----------------------------------------------------------------------------
+// ExpandedNodeCount
+// -----------------------------------------------------------------------------
+//
+int MulTree::ExpandedNodeCount() const
+ {
+ int nodeCount = ExpandedNodeCount( mRootNode.get() );
+ return nodeCount;
+ }
+
+// -----------------------------------------------------------------------------
+// ExpandedNodeCount
+// -----------------------------------------------------------------------------
+//
+int MulTree::ExpandedNodeCount(MulTreeNode* aCurrentNode ) const
+ {
+ int nodeCount = 0;
+ if( aCurrentNode->HasChild() && aCurrentNode->IsExpanded() )
+ {
+ nodeCount = aCurrentNode->ChildCount();
+ for( int i=0; i< aCurrentNode->ChildCount() ; i++ )
+ {
+ nodeCount+= ExpandedNodeCount( aCurrentNode->Child(i) );
+ }
+ }
+ return nodeCount;
+ }
+
+// -----------------------------------------------------------------------------
+// NodeIndex
+// -----------------------------------------------------------------------------
+//
+int MulTree::NodeIndex( const MulDataPath& aPath, int aIndex ) const
+ {
+ MulDataPath path( aPath );
+ path.SetIndex( aIndex );
+
+ int absoluteIndex = -1;
+ int index = NodeIndex( mRootNode.get(), path, absoluteIndex );
+
+ return index;
+ }
+
+// -----------------------------------------------------------------------------
+// NodeIndex
+// -----------------------------------------------------------------------------
+//
+int MulTree::NodeIndex( MulTreeNode* aCurrentNode, const MulDataPath& aPath, int& aAbsoluteIndex ) const
+ {
+ MulTreeNode* currentNode = aCurrentNode;
+ if( currentNode->HasChild() )
+ {
+ for(int i = 0 ; i < currentNode->ChildCount() ; i++ )
+ {
+ aAbsoluteIndex++;
+ MulTreeNode* childNode = currentNode->Child(i);
+
+#ifdef _DEBUG
+ bool hasChild = childNode->HasChild();
+ int count = childNode->ChildCount();
+ bool isExpanded = childNode->IsExpanded();
+#endif //_DEBUG
+
+ MulDataPath path = Path(*childNode);
+ path.SetIndex(i);
+
+ if( path.IsEqual(aPath) )
+ {
+ return aAbsoluteIndex;
+ }
+ else if( childNode->HasChild() && childNode->IsExpanded() )
+ {
+ int index = NodeIndex( childNode, aPath, aAbsoluteIndex );
+ if( index != KNotInitialized )
+ {
+ return index;
+ }
+ }
+ }
+ }
+ return KNotInitialized;
+ }
+
+ } //namespace Alf
+
+ //End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulvarianttype.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,309 @@
+/*
+* 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: MulVarianttype implementation
+*
+*/
+
+
+#include <mul/mulvarianttype.h>
+
+#include <mul/imulvarianttype.h>
+#include <osn/osnnew.h>
+
+#include "mulassert.h"
+
+using namespace osncore;
+using namespace std;
+
+namespace Alf
+ {
+
+_LIT( KUnknownDataType, "Unknown data type" );
+
+// ---------------------------------------------------------------------------
+// Defination of class MulVariantTypeImpl
+// ---------------------------------------------------------------------------
+//
+
+class MulVariantType::MulVariantTypeImpl
+ {
+public:
+
+ ~MulVariantTypeImpl()
+ {
+ if( mDataType == IMulVariantType::EDes )
+ {
+ if( mData.mDes )
+ {
+ delete mData.mDes;
+ }
+ }
+ else if( mDataType == IMulVariantType::EMap )
+ {
+ if( mData.mMap )
+ {
+ delete mData.mMap;
+ }
+ }
+
+ }
+
+ MulVariantTypeImpl()
+ {
+ mData.mDes = NULL;
+ mData.mMap = NULL;
+ mDataType = IMulVariantType::EUnknown;
+ }
+
+public:
+
+ union TData
+ {
+ bool mBool; // Boolean
+ int mInt; // 32-bit integer
+ uint mUint; // 32-bit unsigned integer
+ double mReal; // 64-bit real
+ HBufC* mDes; // 16 bit descriptor
+ IAlfMap* mMap;
+ };
+
+ TData mData;
+ IMulVariantType::TMulType mDataType;
+
+ };
+
+void MulVariantType::Construct( TMulType aType )
+ {
+ mVarData.reset( new (EMM) MulVariantTypeImpl() );
+ mVarData->mDataType = aType;
+ }
+
+// ---------------------------------------------------------------------------
+// MulVariantType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVariantType::MulVariantType()
+ {
+ Construct(IMulVariantType::EUnknown );
+ // No implementation required
+ }
+
+// ---------------------------------------------------------------------------
+// MulVariantType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVariantType::MulVariantType( const TDesC& aDes )
+ {
+ Construct(IMulVariantType::EDes );
+ mVarData->mData.mDes = aDes.AllocL();
+ }
+
+// ---------------------------------------------------------------------------
+// MulVariantType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVariantType::MulVariantType(const int& aValue)
+ {
+ Construct(IMulVariantType::EInt );
+ mVarData->mData.mInt = aValue;
+ }
+
+// ---------------------------------------------------------------------------
+// MulVariantType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVariantType::MulVariantType(const uint& aValue)
+ {
+ Construct(IMulVariantType::EUint );
+ mVarData->mData.mUint = aValue;
+ }
+
+// ---------------------------------------------------------------------------
+// MulVariantType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVariantType::MulVariantType(const double& aValue)
+ {
+ Construct(IMulVariantType::EReal );
+ mVarData->mData.mReal = aValue;
+ }
+
+// ---------------------------------------------------------------------------
+// MulVariantType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVariantType::MulVariantType(const bool& aValue)
+ {
+ Construct(IMulVariantType::EBool );
+ mVarData->mData.mBool = aValue;
+ }
+
+// ---------------------------------------------------------------------------
+// MulVariantType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVariantType::MulVariantType( IAlfMap& aData )
+ {
+ Construct(IMulVariantType::EMap );
+ mVarData->mData.mMap = aData.clone();
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulVariantType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVariantType::~MulVariantType()
+ {
+ // No implementation required
+ }
+
+// ---------------------------------------------------------------------------
+// MulType
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IMulVariantType::TMulType MulVariantType::Type() const
+ {
+ return mVarData->mDataType;
+ }
+
+// ---------------------------------------------------------------------------
+// DesC
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const TDesC& MulVariantType::DesC() const
+ {
+ if ( Type() != IMulVariantType::EDes )
+ {
+ __MUL_ASSERT(false, KUnknownDataType );
+ }
+ return *mVarData->mData.mDes;
+ }
+
+// ---------------------------------------------------------------------------
+// Clone
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT std::auto_ptr< IMulVariantType > MulVariantType::Clone()
+ {
+ std::auto_ptr<IMulVariantType> clone;
+
+ switch( Type() )
+ {
+ case IMulVariantType::EBool:
+ {
+ clone.reset( new (EMM) MulVariantType( boolean() ) );
+ return clone;
+ }
+ case IMulVariantType::EInt:
+ {
+ clone.reset( new (EMM) MulVariantType( integer() ) ) ;
+ return clone;
+ }
+ case IMulVariantType::EUint:
+ {
+ clone.reset( new (EMM) MulVariantType( uinteger() ) );
+ return clone;
+ }
+ case IMulVariantType::EReal:
+ {
+ clone.reset( new (EMM) MulVariantType( real() ) );
+ return clone;
+ }
+ case IMulVariantType::EDes:
+ {
+ clone.reset( new (EMM) MulVariantType( DesC() ) ) ;
+ return clone;
+ }
+ case IAlfVariantType::EMap:
+ {
+ clone.reset( new (EMM) MulVariantType( Map() ) ) ;
+ return clone;
+ }
+ case IAlfVariantType::ECustomData: //delebrate fallthrough
+ default :
+ {
+ __MUL_ASSERT( false, KUnknownDataType );
+ return clone;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// boolean
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool MulVariantType::boolean() const
+ {
+ if ( Type() != IMulVariantType::EBool )
+ {
+ __MUL_ASSERT( false, KUnknownDataType );
+ }
+ return mVarData->mData.mBool;
+ }
+
+// ---------------------------------------------------------------------------
+// integer
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int MulVariantType::integer() const
+ {
+ if ( Type() != IMulVariantType::EInt )
+ {
+ __MUL_ASSERT( false, KUnknownDataType );
+ }
+ return mVarData->mData.mInt;
+ }
+
+// ---------------------------------------------------------------------------
+// uinteger
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT uint MulVariantType::uinteger() const
+ {
+ if ( Type() != IMulVariantType::EUint )
+ {
+ __MUL_ASSERT( false, KUnknownDataType );
+ }
+ return mVarData->mData.mUint;
+ }
+
+// ---------------------------------------------------------------------------
+// real
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT double MulVariantType::real() const
+ {
+ if ( Type() != IMulVariantType::EUint )
+ {
+ __MUL_ASSERT( false, KUnknownDataType );
+ }
+ return mVarData->mData.mReal;
+ }
+
+// ---------------------------------------------------------------------------
+// map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfMap& MulVariantType::Map() const
+ {
+ if ( Type() != IMulVariantType::EMap )
+ {
+ __MUL_ASSERT( false, KUnknownDataType );
+ }
+ return *mVarData->mData.mMap;
+ }
+
+ }// namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/src/mulvisualitem.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,374 @@
+/*
+* 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: Visual item class
+*
+*/
+
+
+#include <mul/mulvisualitem.h>
+
+#include <mul/imulvarianttype.h>
+#include <mul/mulvarianttype.h>
+
+#include <osn/ustring.h>
+#include <stdexcept>
+
+#include <e32math.h> // for Pow function
+#include "mul/mulmodelutility.h"
+
+using namespace osncore;
+using namespace std;
+
+namespace Alf
+ {
+// ---------------------------------------------------------------------------
+// Defination of class MulAttribute
+// ---------------------------------------------------------------------------
+//
+class MulVisualItem::MulAttribute
+ {
+public: //Constructor and destructor
+
+ /**
+ * C++ constructor.
+ */
+ MulAttribute():mValue(NULL),mFlag(0)
+ {
+ }
+
+ /**
+ * C++ constructor.
+ *
+ * @param aValue value of the attribute
+ * @param aAttributeFlags property of this attribute
+ */
+ MulAttribute( IMulVariantType* aValue, int aAttributeFlags = 0 )
+ {
+ mValue = aValue;
+ mFlag = aAttributeFlags;
+ }
+
+ /**
+ * Copy constructor.
+ *
+ * @param aAttribute existing attribute
+ */
+ MulAttribute( const MulAttribute& aAttribute )
+ {
+ mValue = aAttribute.mValue->Clone().release();
+ mFlag = aAttribute.mFlag;
+ }
+
+ /**
+ * Destructor.
+ */
+ ~MulAttribute()
+ {
+ delete mValue;
+ }
+
+public: //data
+
+ IMulVariantType* mValue ; //own
+ int mFlag ;
+
+ };
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVisualItem::MulVisualItem( )
+ {
+ // Clearing dirty bit flags to 0;
+ mBitAttrFlag1 = 0;
+ mBitAttrFlag2 = 0;
+ }
+
+// ---------------------------------------------------------------------------
+// Copy Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVisualItem::MulVisualItem( const MulVisualItem& aVisualItem )
+ {
+ map<mulvisualitem::TVisualAttribute,MulAttribute*> mapToCopy = aVisualItem.mVisualItem;
+ map<mulvisualitem::TVisualAttribute,MulAttribute*>::iterator itr;
+ for( itr = mapToCopy.begin(); itr!= mapToCopy.end(); ++itr )
+ {
+ mVisualItem[itr->first] = new (EMM) MulAttribute( *itr->second );
+ }
+ mBitAttrFlag1 = aVisualItem.mBitAttrFlag1;
+ mBitAttrFlag2 = aVisualItem.mBitAttrFlag2;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT MulVisualItem::~MulVisualItem()
+ {
+ map<mulvisualitem::TVisualAttribute,MulAttribute* >::iterator itr;
+ for( itr = mVisualItem.begin(); itr!= mVisualItem.end(); ++itr )
+ {
+ delete itr->second;
+ itr->second = NULL;
+ }
+ mVisualItem.clear();
+ }
+
+// ---------------------------------------------------------------------------
+// Add new attributes to visual item
+// ---------------------------------------------------------------------------
+//
+//OSN_EXPORT void MulVisualItem::SetAttribute( mulvisualitem::TVisualAttribute aName,
+// const UString& aValue, int aAttributeFlags )
+// {
+// auto_ptr<MulVariantType> variantdata(new (EMM) MulVariantType( aValue ));
+//
+// SetAttribute( aName, variantdata.release(),aAttributeFlags,EDoesOwn);
+// }
+
+// ---------------------------------------------------------------------------
+// Add new attributes to visual item
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulVisualItem::SetAttribute( mulvisualitem::TVisualAttribute aName,
+ const TDesC& aValue, int aAttributeFlags )
+ {
+ auto_ptr<MulVariantType> variantdata(new (EMM) MulVariantType( aValue ));
+
+ SetAttribute( aName, variantdata.release(),aAttributeFlags,EDoesOwn);
+ }
+
+
+// ---------------------------------------------------------------------------
+// Add new attributes to visual item
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulVisualItem::SetAttribute( mulvisualitem::TVisualAttribute aName,
+ int aValue,int aAttributeFlags )
+ {
+ auto_ptr<MulVariantType> variantdata(new ( EMM ) MulVariantType( aValue ));
+
+ SetAttribute(aName,variantdata.release(),aAttributeFlags,EDoesOwn);
+ }
+
+
+// ---------------------------------------------------------------------------
+// Add new attributes to visual item
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void MulVisualItem::SetAttribute( mulvisualitem::TVisualAttribute aName, IMulVariantType* aValue,
+ int aAttributeFlags ,
+ TAttributeOwnership /*aAttributeOwership*/ )
+ {
+ map<mulvisualitem::TVisualAttribute,MulAttribute* >::iterator findIter = mVisualItem.find( aName );
+ if( findIter != mVisualItem.end() )
+ {
+ delete findIter->second;
+ findIter->second = NULL;
+ mVisualItem.erase( aName );
+ }
+ mVisualItem[aName] = new (EMM) MulAttribute(aValue,aAttributeFlags );
+ SetDirty(aName, true);
+ }
+
+
+// ---------------------------------------------------------------------------
+// Is the input attribute dirty, to be queried before a redraw
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool MulVisualItem::IsDirty(mulvisualitem::TVisualAttribute aAttr) const
+{
+ int i = (int)aAttr;
+ TReal base = 2.0;
+ TReal r = 0.0;
+ TReal val = 0.0;
+ TInt err = KErrNone;
+
+ // If mBitAttrflag is binary 101, AND'ing it with 100(attribute 3) will
+ // set 100 to return true for attribute 3 being dirty
+
+ // if attribute index <18 check against mBitAttrFlag1, else check
+ // against mBitAttrFlag2
+ if(i < 18)
+ {
+ val = i;
+ err = Math::Pow(r, base, val);
+ if(KErrNone != err)
+ return true;
+
+ return mBitAttrFlag1 & (int)r;
+ }
+ else
+ {
+ val = (int)(mulvisualitem::KMul_n) - i;
+ err = Math::Pow(r, base, val);
+ if(KErrNone != err)
+ return true;
+
+ return mBitAttrFlag2 & (int)r;
+ }
+
+}
+
+
+// ---------------------------------------------------------------------------
+// Set the attribute as dirty in this Visual item based on input flag
+// ---------------------------------------------------------------------------
+//
+void MulVisualItem::SetDirty(mulvisualitem::TVisualAttribute aAttr, bool aDirty)
+{
+ int i = (int)aAttr;
+ TReal base = 2.0;
+ TReal r = 0.0;
+ TReal val = i;
+ TInt err = KErrNone;
+ // If mBitAttrflag is binary 001, OR'ing it with 100(attribute 3) will
+ // set 101 to set bit for attribute 3 as 1 in dirty flag
+ if(aDirty)
+ {
+ // if attribute index <18 operate on mBitAttrFlag1
+ // else operate against mBitAttrFlag1
+ if(i < 18)
+ {
+ err = Math::Pow(r,base,val);
+ mBitAttrFlag1 |= (int)r;
+ }
+ else
+ {
+ err = Math::Pow(r,base,(TReal)((int)(mulvisualitem::KMul_n) - i));
+ mBitAttrFlag2 |= (int)r;
+ }
+ }
+ else
+ {
+ // if attribute index <18 operate on mBitAttrFlag1
+ // else operate against mBitAttrFlag1
+ if(i < 18)
+ {
+ err = Math::Pow(r,base,val);
+ mBitAttrFlag1 &= ~(int)r;
+ }
+ else
+ {
+ err = Math::Pow(r, base,(TReal)((int)(mulvisualitem::KMul_n) - i));
+ mBitAttrFlag2 &= ~(int)r;
+ }
+ }
+ if(KErrNone != err)
+ throw std::invalid_argument("Error setting dirty flag for attribute");
+}
+
+
+// ---------------------------------------------------------------------------
+// ResetDirtyAttribute
+// ---------------------------------------------------------------------------
+//
+void MulVisualItem::ResetDirtyAttribute(const MulVisualItem& aVisualItem)
+{
+ mBitAttrFlag1 = aVisualItem.mBitAttrFlag1;
+ mBitAttrFlag2 = aVisualItem.mBitAttrFlag2;
+}
+// ---------------------------------------------------------------------------
+// Attribute
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IMulVariantType* MulVisualItem::Attribute( mulvisualitem::TVisualAttribute aName ) const
+ {
+ map<mulvisualitem::TVisualAttribute,MulAttribute* >::const_iterator findIter = mVisualItem.find( aName );
+ if( findIter != mVisualItem.end() )
+ {
+ MulAttribute* attribute = findIter->second;
+ IMulVariantType* attributeValue = attribute->mValue;
+ return attributeValue;
+ }
+ else
+ {
+ //throw std::invalid_argument("Invalid attribute name.");
+ return NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// AttributeAsInt
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int MulVisualItem::AttributeAsInt( mulvisualitem::TVisualAttribute aName ) const
+ {
+ IMulVariantType* attributeValue = Attribute(aName);
+ if( attributeValue )
+ {
+ return attributeValue->integer();
+ }
+ throw std::invalid_argument("Invalid attribute name.");
+ }
+
+// ---------------------------------------------------------------------------
+// AttributeAsString
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const TDesC& MulVisualItem::AttributeAsString( mulvisualitem::TVisualAttribute aName ) const
+ {
+ IMulVariantType* attributeValue = Attribute(aName);
+ if( attributeValue )
+ {
+ return attributeValue->DesC();
+ }
+ throw std::invalid_argument("Invalid attribute name.");
+ }
+
+// ---------------------------------------------------------------------------
+// ExistingAttributes
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const std::vector<mulvisualitem::TVisualAttribute> MulVisualItem::Attributes() const
+ {
+ map<mulvisualitem::TVisualAttribute,MulAttribute* >::const_iterator itr;
+ std::vector<mulvisualitem::TVisualAttribute> attributesName;
+ for( itr = mVisualItem.begin(); itr!= mVisualItem.end(); ++itr )
+ {
+ attributesName.push_back( itr->first );
+ }
+ return attributesName;
+ }
+
+// ---------------------------------------------------------------------------
+// Flag
+// ---------------------------------------------------------------------------
+//
+int MulVisualItem::Flag( mulvisualitem::TVisualAttribute aName )
+ {
+ MulAttribute* attribute = mVisualItem.find( aName )->second;
+ return attribute->mFlag;
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveAttribute
+// ---------------------------------------------------------------------------
+//
+void MulVisualItem::RemoveAttribute( mulvisualitem::TVisualAttribute aName )
+ {
+ map<mulvisualitem::TVisualAttribute,MulAttribute* >::iterator findIter = mVisualItem.find( aName );
+ if( findIter != mVisualItem.end() )
+ {
+ delete findIter->second;
+ findIter->second = NULL;
+ mVisualItem.erase( aName );
+ }
+ }
+
+ }// namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mullogging/bwins/mulloggingu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,9 @@
+EXPORTS
+ ?Close@RMulLogClient@@QAEXXZ @ 1 NONAME ; void RMulLogClient::Close(void)
+ ?CommitToFileL@RMulLogManager@@QAEXABVTDesC16@@@Z @ 2 NONAME ; void RMulLogManager::CommitToFileL(class TDesC16 const &)
+ ?CreateL@RMulLogManager@@QAEXXZ @ 3 NONAME ; void RMulLogManager::CreateL(void)
+ ?Open@RMulLogClient@@QAEHVTObjectId@@@Z @ 4 NONAME ; int RMulLogClient::Open(class TObjectId)
+ ?Release@RMulLogManager@@QAEXXZ @ 5 NONAME ; void RMulLogManager::Release(void)
+ ?Write@RMulLogClient@@QAEXABVTDesC8@@@Z @ 6 NONAME ; void RMulLogClient::Write(class TDesC8 const &)
+ ?WriteFormat@MulLogger@@YAXV?$TRefByValue@$$CBVTDesC8@@@@ZZ @ 7 NONAME ; void MulLogger::WriteFormat(class TRefByValue<class TDesC8 const >, ...)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mullogging/eabi/mulloggingu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,9 @@
+EXPORTS
+ _ZN13RMulLogClient4OpenE9TObjectId @ 1 NONAME
+ _ZN13RMulLogClient5CloseEv @ 2 NONAME
+ _ZN13RMulLogClient5WriteERK6TDesC8 @ 3 NONAME
+ _ZN14RMulLogManager13CommitToFileLERK7TDesC16 @ 4 NONAME
+ _ZN14RMulLogManager7CreateLEv @ 5 NONAME
+ _ZN14RMulLogManager7ReleaseEv @ 6 NONAME
+ _ZN9MulLogger11WriteFormatE11TRefByValueIK6TDesC8Ez @ 7 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mullogging/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2006-2007 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: Logging client side
+ *
+*/
+
+
+
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+PRJ_MMPFILES
+mullogging.mmp
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mullogging/group/mullogging.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2006 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: MMP for Logging utility
+*
+*/
+
+#include <platform_paths.hrh>
+
+#include <bldvariant.hrh>
+#include <data_caging_paths.hrh>
+
+TARGET mullogging.dll
+TARGETTYPE dll
+UID 0x1000008d 0x2000FA89
+
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+
+USERINCLUDE ../inc
+
+MW_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH ../src
+SOURCE mullogger.cpp
+SOURCE mullogchunk.cpp
+
+LIBRARY euser.lib
+LIBRARY efsrv.lib
+LIBRARY flogger.lib
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mullogging/inc/mullog.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,419 @@
+/*
+* Copyright (c) 2006-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: Logging macros
+*
+*/
+
+
+#ifndef MULLOG_H
+#define MULLOG_H
+
+// log on debug builds because of performance
+#ifdef _DEBUG
+#define MUL_LOGGING_ENABLED
+#endif
+
+#ifndef MUL_LOGGING_ENABLED
+
+ // empty declarations to clean up code
+ #define MUL_LOG_ENTRY_EXIT( s )
+ #define MUL_LOG_ENTRY_EXIT_LEAVE_L( s )
+ #define MUL_LOG_INFO( s )
+ #define MUL_LOG_INFO1( s, i )
+ #define MUL_LOG_INFO2( s, i, j )
+ #define MUL_LOG_INFO3( s, i, j, k )
+ #define MUL_LOG_INFO4( s, i, j, k, l )
+ #define MUL_LOG_INFO5( s, i, j, k, l, m )
+ #define MUL_LOG_WARNING( s )
+ #define MUL_LOG_WARNING1( s, i )
+ #define MUL_LOG_WARNING2( s, i, j )
+ #define MUL_LOG_WARNING3( s, i, j, k )
+ #define MUL_LOG_ERROR( s )
+ #define MUL_LOG_ERROR1( s, i )
+ #define MUL_LOG_ERROR2( s, i, j )
+ #define MUL_LOG_ERROR3( s, i, j, k )
+ #define MUL_FUNC( s )
+ #define MUL_FUNCL( s )
+ #define MUL_DEBUG1( s )
+ #define MUL_DEBUG2( s, i )
+ #define MUL_DEBUG3( s, i, j )
+ #define MUL_DEBUG4( s, i, j, k )
+ #define MUL_DEBUG5( s, i, j, k, l )
+
+#else
+
+// only include headers if logging is enabled
+#include <e32std.h>
+#include <e32base.h>
+#include "mullogger.h"
+
+
+ /**
+ * Helper macro for defining debug string with filename
+ * Note! this is internal so dont use outside this header
+ */
+ #ifdef __arm__
+ // use the module name instead as its the filename without path
+ #define MUL_DEBUG_STR( cat, str ) __MODULE__ "(%d) : " ##cat " : " ##str
+ #else
+ // put full file paths off for __FILE__ macro to make the log entries shorter
+ #pragma fullpath_file off
+ #define MUL_DEBUG_STR( cat, str ) __FILE__ "(%d) : " ##cat " : " ##str
+ #endif
+
+ /**
+ * Helper macro for defining debug string with filename and linenumber
+ * @param category the category string for the log entry
+ * @param string the string for the log entry
+ * Note! this is internal so dont use outside this header
+ */
+ #define MUL_DEBUG_LINE( category, string ) \
+ TPtrC8((const TText8*) MUL_DEBUG_STR( category, string ) ), __LINE__
+
+ /**
+ * Output to mul logger
+ * Note! this is internal so dont use outside this header
+ */
+ #define MUL_DEBUG_PRINT MulLogger::WriteFormat
+
+ // LOGGING MACROS
+ /**
+ * Logs the entry and exit point of the function
+ * Does not log the filename nor linenumber as inlining does not work
+ * if you want to log the filename and linenumber,
+ * use MUL_LOG_INFO macros instead
+ * Example usage:
+ * MUL_LOG_ENTRY_EXIT( "CFoo::Bar()" );
+ * @param a string to be added to the log
+ */
+ #define MUL_LOG_ENTRY_EXIT( s ) TMulFunctionTrace _tracer( _L8( s ) )
+
+ /**
+ * Logs the entry, exit and possible leave point of the function.
+ * Note! cannot be used in a non leaving function or inside a LC function
+ * as this macro uses the cleanup stack
+ * Does not log the filename nor linenumber as inlining does not work
+ * if you want to log the filename and linenumber,
+ * use MUL_LOG_INFO macros instead
+ * Example usage:
+ * MUL_LOG_ENTRY_EXIT_LEAVE_L( "CFoo::Bar()" );
+ * @param a string to be added to the log
+ * @deprecated use MUL_LOG_ENTRY_EXIT instead as it also detects leave and does not require cleanupstack to work
+ */
+ #define MUL_LOG_ENTRY_EXIT_LEAVE_L( s ) \
+ TMulFunctionTraceWithLeaveDetection _tracer( _L8( s ) ); \
+ CleanupClosePushL( _tracer )
+
+ /**
+ * Logs a single line of information and the filename and linenumber
+ * Example usage:
+ * MUL_LOG_INFO( "CFoo::Bar()" );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ */
+ #define MUL_LOG_INFO( s ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "info", s ) )
+
+ /**
+ * Logs a single line of information with one parameter
+ * and the filename and linenumber
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * Example usage:
+ * MUL_LOG_INFO1( "CFoo::Bar(%d)", aInt );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_INFO1( s, i ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "info", s ), i )
+
+ /**
+ * Logs a single line of information with two parameters
+ * along with the filename and linenumber
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_INFO2( "CFoo::Bar(%d,%f)", aInt, aFloat );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ * @param j, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_INFO2( s, i, j ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "info", s ), i, j )
+
+ /**
+ * Logs a single line of information with three parameters
+ * along with the filename and linenumber
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_INFO3( "CFoo::Bar(%d,%S,%f)", aInt, &aDesC, aFloat );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ * @param j, value to be inserted to the string, can be of any type
+ * @param k, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_INFO3( s, i, j, k ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "info", s ), i, j, k )
+
+ /**
+ * Logs a single line of information with four parameters
+ * along with the filename and linenumber
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_INFO4( "CFoo::Bar(%d,%f,%S,%s)", aInt, aFloat, "string" );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ * @param j, value to be inserted to the string, can be of any type
+ * @param k, value to be inserted to the string, can be of any type
+ * @param l, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_INFO4( s, i, j, k, l ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "info", s ), i, j, k, l )
+
+ /**
+ * Logs a single line of information with five parameters
+ * along with the filename and linenumber
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_INFO5(
+ * "CFoo::Bar(%.1f,%.2f,%.3f,%.4f,%.5f)", aFloat1, aFloat2, aFloat3, aFloat4, aFloat5 );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ * @param j, value to be inserted to the string, can be of any type
+ * @param k, value to be inserted to the string, can be of any type
+ * @param l, value to be inserted to the string, can be of any type
+ * @param m, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_INFO5( s, i, j, k, l, m ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "info", s ), i, j, k, l, m )
+
+ /**
+ * Logs a single line of warning and the filename and linenumber
+ * Example usage:
+ * MUL_LOG_WARNING( "Incorrect state, resetting state" );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ */
+ #define MUL_LOG_WARNING( s ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "warning", s ) )
+
+ /**
+ * Logs a single line of warning with one parameter
+ * and the filename and linenumber
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_WARNING1( "Incorrect parameter %d", aInt );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_WARNING1( s, i ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "warning", s ), i )
+
+ /**
+ * Logs a single line of warning with two parameters
+ * along with the filename and linenumber
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_WARNING2( "Incorrect parameter %f, defaulting to %f", aInputFloat, KDefaultFloat );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ * @param j, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_WARNING2( s, i, j ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "warning", s ), i , j )
+
+ /**
+ * Logs a single line of warning with three parameters
+ * along with the filename and linenumber
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_WARNING3( "Incorrect size (%d,%d), scale is %f", aWidth, aHeight, aScale );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ * @param j, value to be inserted to the string, can be of any type
+ * @param k, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_WARNING3( s, i, j, k ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "warning", s ), i, j, k )
+
+ /**
+ * Logs a single line of error and the filename and linenumber.
+ * Use this macro to track your asserts and panics so you can see them in the log and
+ * have a trace to come back to later on.
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_ERROR( "Incorrect state, going to panic" );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ */
+ #define MUL_LOG_ERROR( s ) MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "error", s ) )
+
+ /**
+ * Logs a single line of error with one parameter and the filename and linenumber
+ * Use this macro to track your asserts and panics so you can see them in the log and
+ * have a trace to come back to later on.
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_ERROR1( "Incorrect parameter %d, panicing", aInt );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_ERROR1( s, i ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "error", s ), i )
+
+ /**
+ * Logs a single line of error with one parameter and the filename and linenumber
+ * Use this macro to track your asserts and panics so you can see them in the log and
+ * have a trace to come back to later on.
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_ERROR2( "Incorrect size (%d,%d), panicking", aWidth, aHeight );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ * @param j, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_ERROR2( s, i, j ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "error", s ), i, j )
+
+ /**
+ * Logs a single line of error with one parameter and the filename and linenumber
+ * Use this macro to track your asserts and panics so you can see them in the log and
+ * have a trace to come back to later on.
+ * For the parameter string, use %d for int, %f for float and %S for address of descriptor
+ * NOTE! logging is done in 8 bit strings so you cannot format 16 bit descriptor
+ * values.
+ * Example usage:
+ * MUL_LOG_ERROR3( "Incorrect state %d,%d,%f, panicking", aInt, aInt2, aFloat );
+ * @param s, the string to be inserted to the log, plain compile time string, not a descriptor
+ * @param i, value to be inserted to the string, can be of any type
+ * @param j, value to be inserted to the string, can be of any type
+ * @param k, value to be inserted to the string, can be of any type
+ */
+ #define MUL_LOG_ERROR3( s, i, j, k ) \
+ MUL_DEBUG_PRINT( MUL_DEBUG_LINE( "error", s ), i, j, k )
+
+ // Old macros for compatibility
+ ///@deprecated, use MUL_LOG_ENTRY_EXIT instead
+ #define MUL_FUNC( s ) MUL_LOG_ENTRY_EXIT( s )
+ ///@deprecated, use MUL_LOG_ENTRY_EXIT_LEAVE_L instead
+ #define MUL_FUNCL( s ) MUL_LOG_ENTRY_EXIT_LEAVE_L( s )
+ ///@deprecated, use MUL_LOG_INFO instead
+ #define MUL_DEBUG1( s ) MUL_LOG_INFO( s )
+ ///@deprecated, use MUL_LOG_INFO1 instead
+ #define MUL_DEBUG2( s, i ) MUL_LOG_INFO1( s, i )
+ ///@deprecated, use MUL_LOG_INFO2 instead
+ #define MUL_DEBUG3( s, i, j ) MUL_LOG_INFO2( s, i, j )
+ ///@deprecated, use MUL_LOG_INFO3 instead
+ #define MUL_DEBUG4( s, i, j, k ) MUL_LOG_INFO3( s, i, j, k )
+ ///@deprecated, use MUL_LOG_INFO4 instead
+ #define MUL_DEBUG5( s, i, j, k, l ) MUL_LOG_INFO4( s, i, j, k, l )
+
+ /**
+ * TRAP instrumentation for Leave
+ */
+ #undef TRAP_INSTRUMENTATION_LEAVE
+ #define TRAP_INSTRUMENTATION_LEAVE( aResult ) \
+ MUL_LOG_INFO1( "Leave %d TRAPPED", aResult )
+
+ /**
+ * Helper class to track function entry and exit.
+ */
+ class TMulFunctionTrace
+ {
+ public:
+ inline TMulFunctionTrace( TRefByValue< const TDesC8 > aName )
+ : iStr( aName )
+ {
+ // not using MUL_DEBUG2 as this function does not inline
+ MUL_DEBUG_PRINT( _L8( "Entry : %S" ), &iStr );
+ }
+ inline ~TMulFunctionTrace()
+ {
+ if( std::uncaught_exception() )
+ {
+ // not using MUL_DEBUG2 as this function does not inline
+ MUL_DEBUG_PRINT( _L8( "Leave: %S" ), &iStr );
+ }
+ else
+ {
+ // not using MUL_DEBUG2 as this function does not inline
+ MUL_DEBUG_PRINT( _L8( "Exit : %S" ), &iStr );
+ }
+ }
+ private:
+ TPtrC8 iStr;
+ };
+
+ /**
+ * Helper class to track function entry, exit and possible leave.
+ * Never instantiate this class by itself.
+ * Only ever user the macro MUL_FUNCL as this calls CleanupClosePushL
+ * If you don't use the macro the destructor will panic in CleanupStack::Pop( this )
+ * DO NOT use this in a LC method such as NewLC.
+ * Cleanup stack will be popped in the wrong order causing unwanted behaviour
+ */
+ class TMulFunctionTraceWithLeaveDetection
+ {
+ public:
+ inline TMulFunctionTraceWithLeaveDetection( TRefByValue<const TDesC8> aName )
+ : iStr( aName ), iLeave( EFalse )
+ {
+ // not using MUL_DEBUG2 as this function does not inline
+ MUL_DEBUG_PRINT( _L8( "Entry : %S" ), &iStr );
+ }
+ inline ~TMulFunctionTraceWithLeaveDetection()
+ {
+ // Did we leave
+ if( iLeave )
+ {
+ // not using MUL_DEBUG2 as this function does not inline
+ MUL_DEBUG_PRINT( _L8( "Leave : %S" ), &iStr );
+ }
+ else
+ {
+ // not using MUL_DEBUG2 as this function does not inline
+ MUL_DEBUG_PRINT( _L8( "Exit : %S" ), &iStr );
+ // Remove this from Cleanup.
+ CleanupStack::Pop( this );
+ }
+ }
+ void Close() // This is only called if a leave happens.
+ {
+ iLeave = ETrue;
+ }
+ private:
+ TPtrC8 iStr;
+ TBool iLeave;
+ };
+
+#endif // MULLOG_H
+
+#endif //
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mullogging/inc/mullogchunk.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2006-2007 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: Logging to chunk wrapper for MC Photos
+*
+*/
+
+
+#ifndef T_MULLOGCHUNK_H
+#define T_MULLOGCHUNK_H
+
+// EXTERNAL INCLUDES
+#include <e32std.h>
+#include <f32file.h>
+
+/**
+ * RMulLogUtility.
+ * Encapsulates the use of RChunk for log writing
+ */
+NONSHARABLE_CLASS( RMulLogUtility )
+ {
+ public:
+ /**
+ * Opens the log chunk with given name
+ * @param aName, the full name of the chunk
+ * @param aReadOnly, whether to open in readonly or read-write
+ */
+ TInt Open( const TDesC& aName, TBool aReadOnly );
+
+ /**
+ * Creates the log chunk with given name
+ * @param aName, the full name of the chunk
+ */
+ void CreateL( const TDesC& aName );
+
+ /**
+ * Closes the opened chunk. This needs to be called
+ * before an object of this class goes out of scope
+ */
+ void Close();
+
+ /**
+ * @return the size of the log chunk
+ */
+ TInt ChunkSize();
+
+ /**
+ * @return the chunk unique Id (set by client)
+ */
+ TObjectId Id();
+
+ /**
+ * Sets the unique id for the log chunk
+ * @param aId the id to set for the chunk
+ */
+ void SetId( TObjectId aId );
+
+ /**
+ * @return Current chunk write address
+ */
+ TUint8* CurrentAddress();
+
+ /**
+ * Sets the current write address
+ * @param New write address
+ */
+ void SetCurrentAddress( TUint8* aValue );
+
+ /**
+ * @return Last address written to file
+ */
+ TUint8* LastLoggedAddress();
+
+ /**
+ * Sets the last logged address
+ * @param New last logged address
+ */
+ void SetLastLoggedAddress( TUint8* aValue );
+
+ /**
+ * @return The topmost writable address of the chunk
+ */
+ TUint8* BaseAddress();
+
+ /**
+ * @return The bottom most writable address of the chunk
+ */
+ TUint8* LastAddress();
+
+ private:
+
+ /// Own: chunk to write to
+ RChunk iChunk;
+ };
+
+/**
+ * RMulLogClient.
+ * Client API for log writing to chunk
+ */
+NONSHARABLE_CLASS( RMulLogClient )
+ {
+ public:
+
+ /**
+ * Opens the log chunk with the given unique id
+ * @param aId unique id for the log writing thread
+ */
+ IMPORT_C TInt Open( TObjectId aId );
+
+ /**
+ * Closes the log handle, needs to be called before an
+ * object of this class goes out of scope
+ */
+ IMPORT_C void Close();
+
+ /**
+ * Writes a descriptor to the log
+ * @param aLogEntry the log entry to write
+ */
+ IMPORT_C void Write( const TDesC8& aLogEntry );
+
+ private:
+
+ /// Own: log utility
+ RMulLogUtility iLogUtility;
+
+ };
+
+/**
+ * RMulLogManager.
+ * Management API for log creation and committing to file
+ */
+NONSHARABLE_CLASS( RMulLogManager )
+ {
+ public:
+
+ /**
+ * Creates the log chunks
+ */
+ IMPORT_C void CreateL();
+
+ /**
+ * Releases the log chunks
+ */
+ IMPORT_C void Release();
+
+ /**
+ * Writes the log to a file
+ * One file is created per chunk.
+ * @param aFolder the directory where to store the logs
+ */
+ IMPORT_C void CommitToFileL( const TDesC& aFolder );
+
+ private:
+
+ // helper method to write all descriptors of a chunk to a
+ // file
+ void CommitToFileL( RMulLogUtility& aUtility, RFile& aFile );
+
+ private:
+
+ /// Own: log utility
+ RMulLogUtility iLogUtility1;
+ /// Own: log utility
+ RMulLogUtility iLogUtility2;
+ /// Own: file server handle
+ RFs iFs;
+
+ };
+
+#endif // T_MULLOGCHUNK_H
+
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mullogging/inc/mullogger.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2006-2007 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: Logging utility for MUL
+*
+*/
+
+
+#ifndef T_MULLOGGER_H
+#define T_MULLOGGER_H
+
+// CLASS HEADER
+#include "mullogger.h"
+
+// EXTERNAL INCLUDES
+#include <e32std.h>
+
+namespace MulLogger
+ {
+ /**
+ * Logging utility, writes the given log to a shared chunk if the chunk
+ * exists or to RDebug if not.
+ * Note! due to performance reasons only 8 bit descriptor allowed
+ * @param The descriptor containing the format string.
+ * @param The arguments to append to the format string (ellipsis notation)
+ */
+ IMPORT_C void WriteFormat( TRefByValue<const TDesC8> aFmt, ... );
+ }
+
+#endif // T_MULLOGGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mullogging/src/mullogchunk.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,451 @@
+/*
+* Copyright (c) 2006-2007 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: Logging to chunk wrappe for Mul
+*
+*/
+
+
+// CLASS HEADER
+#include "mullogchunk.h"
+
+// EXTERNAL INCLUDES
+#include <e32svr.h>
+
+// LOCAL DECLARATIONS
+namespace
+ {
+ // size for the chunks
+ const TInt KLogChunkSize = 1000000; // 1 million bytes
+ // name for chunk 1
+ _LIT( KLogChunk1Name, "MUL_Logchunk1" );
+ // name for chunk 2
+ _LIT( KLogChunk2Name, "MUL_Logchunk2" );
+ // extension for log file
+ _LIT( KLogFileExtension, ".log" );
+ // carriage return / line feed
+ _LIT8( KLogCR, "\r" );
+ _LIT8( KLogLF, "\n" );
+ // constant for machine word alignment
+ const TInt KBytesInAWord = sizeof( TInt32 );
+ }
+
+inline void Panic(TInt aReason)
+ {
+ _LIT(applicationName,"Mul Logging");
+ User::Panic(applicationName, aReason);
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::Open
+// -----------------------------------------------------------------------------
+TInt RMulLogUtility::Open( const TDesC& aName, TBool aReadOnly )
+ {
+ // open the chunk
+ return iChunk.OpenGlobal( aName, aReadOnly );
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::CreateL
+// -----------------------------------------------------------------------------
+void RMulLogUtility::CreateL( const TDesC& aName )
+ {
+ // create the chunk, leave if error
+ TInt error = iChunk.CreateGlobal( aName, KLogChunkSize, KLogChunkSize );
+ // dont treate already exists as an error
+ if( KErrAlreadyExists == error )
+ {
+ // open in read-write
+ User::LeaveIfError( iChunk.OpenGlobal( aName, EFalse ) );
+ }
+ else
+ {
+ User::LeaveIfError( error );
+ }
+
+ // initialise the iChunk to all zeros.
+ Mem::FillZ( iChunk.Base(), iChunk.Size() );
+ // initialise current address to base
+ SetCurrentAddress( BaseAddress() );
+ // initialise last logged address to base
+ SetLastLoggedAddress( BaseAddress() );
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::Close
+// -----------------------------------------------------------------------------
+void RMulLogUtility::Close()
+ {
+ iChunk.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::ChunkSize
+// -----------------------------------------------------------------------------
+TInt RMulLogUtility::ChunkSize()
+ {
+ return iChunk.Size();
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::Id
+// -----------------------------------------------------------------------------
+TObjectId RMulLogUtility::Id()
+ {
+ // take chunk base address
+ TUint8* ptr_in_chunk = iChunk.Base();
+ // cast that to TObjectId*
+ TObjectId* ptr_as_tobjectid = reinterpret_cast< TObjectId* >( ptr_in_chunk );
+ // return the id
+ return *ptr_as_tobjectid;
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::SetId
+// -----------------------------------------------------------------------------
+void RMulLogUtility::SetId( TObjectId aId )
+ {
+ // take chunk base address
+ TUint8* ptr_in_chunk = iChunk.Base();
+ // cast that to TObjectId*
+ TObjectId* ptr_as_tobjectid = reinterpret_cast< TObjectId* >( ptr_in_chunk );
+ // assign the id in place
+ *ptr_as_tobjectid = aId;
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::CurrentAddress
+// -----------------------------------------------------------------------------
+TUint8* RMulLogUtility::CurrentAddress()
+ {
+ // take chunk base address plus object id
+ TUint8* ptr_in_chunk = iChunk.Base() + sizeof( TObjectId );
+ // cast that to TInt*
+ TUint32* ptr_as_tint = reinterpret_cast< TUint32* >( ptr_in_chunk );
+ // dereference that pointer to read the 32 bits that are the address
+ TUint32 value_of_pointer = *ptr_as_tint;
+ // then return the value as TUint8*
+ return reinterpret_cast< TUint8* >( value_of_pointer );
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::SetCurrentAddress
+// -----------------------------------------------------------------------------
+void RMulLogUtility::SetCurrentAddress( TUint8* aValue )
+ {
+ // take chunk base address plus object id
+ TUint8* ptr_in_chunk = iChunk.Base() + sizeof( TObjectId );
+ // cast that to TInt*
+ TUint32* ptr_as_tint = reinterpret_cast< TUint32* >( ptr_in_chunk );
+ // assign the addres to TInt
+ TUint32 new_value = reinterpret_cast< TUint32 >( aValue );
+ // ensure we're byte aligned - ARM requires 32 bit alignment to machine word
+ // boundary!!
+ TInt remainder = new_value % KBytesInAWord;
+ if ( remainder > 0 )
+ {
+ new_value += ( KBytesInAWord - remainder );
+ }
+ // set the new value to the chunk
+ *ptr_as_tint = new_value;
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::LastLoggedAddress
+// -----------------------------------------------------------------------------
+TUint8* RMulLogUtility::LastLoggedAddress()
+ {
+ // take chunk base address plus object id plus one pointer
+ TUint8* ptr_in_chunk =
+ iChunk.Base() + sizeof( TObjectId ) + sizeof( TUint8* );
+ // cast that to TInt*
+ TUint32* ptr_as_tint = reinterpret_cast< TUint32* >( ptr_in_chunk );
+ // dereference that pointer to read the 32 bits that are the address
+ TUint32 value_of_pointer = *ptr_as_tint;
+ // then return the value as TUint8*
+ return reinterpret_cast< TUint8* >( value_of_pointer );
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::SetLastLoggedAddress
+// -----------------------------------------------------------------------------
+void RMulLogUtility::SetLastLoggedAddress( TUint8* aValue )
+ {
+ // take chunk base address plus object id plus one pointer
+ TUint8* ptr_in_chunk =
+ iChunk.Base() + sizeof( TObjectId ) + sizeof( TUint8* );
+ // cast that to TInt*
+ TUint32* ptr_as_tint = reinterpret_cast< TUint32* >( ptr_in_chunk );
+ // assign the addres to TInt
+ TUint32 new_value = reinterpret_cast< TUint32 >( aValue );
+ // ensure we're byte aligned - ARM requires 32 bit alignment to machine word
+ // boundary!!
+ TInt remainder = new_value % KBytesInAWord;
+ if ( remainder > 0 )
+ {
+ new_value += ( KBytesInAWord - remainder );
+ }
+ // set the new value to the chunk
+ *ptr_as_tint = new_value;
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::BaseAddress
+// -----------------------------------------------------------------------------
+TUint8* RMulLogUtility::BaseAddress()
+ {
+ // take chunks base address
+ TUint8* base = iChunk.Base();
+ // calculate the topmost write address, our header is
+ // TObjectId and two TUint8*
+ return base + sizeof( TObjectId ) + sizeof( TUint8* ) * 2;
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogUtility::LastAddress
+// -----------------------------------------------------------------------------
+TUint8* RMulLogUtility::LastAddress()
+ {
+ // return chunks base address plus its size
+ return iChunk.Base() + iChunk.Size();
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogClient::Open
+// -----------------------------------------------------------------------------
+EXPORT_C TInt RMulLogClient::Open( TObjectId aId )
+ {
+ // try to open first log chunk, in read-write mode
+ TInt err = iLogUtility.Open( KLogChunk1Name(), EFalse );
+ if ( err != KErrNone )
+ {
+ return err;
+ }
+ // check id
+ TObjectId id = iLogUtility.Id();
+ if ( id == TObjectId( 0 ) )
+ {
+ // no id set, so reserve this for us and use this chunk
+ iLogUtility.SetId( aId );
+ }
+ // check if our id was there?
+ else if( id != aId )
+ {
+ // not our chunk, try second chunk in read-write mode
+ err = iLogUtility.Open( KLogChunk2Name(), EFalse );
+ if ( err != KErrNone )
+ {
+ return err;
+ }
+ // check id
+ id = iLogUtility.Id();
+ if ( id == TObjectId( 0 ) )
+ {
+ // no id, reserve this for us and use this chunk
+ iLogUtility.SetId( aId );
+ }
+ else if ( id != aId )
+ {
+ // both chunks already reserved, return error
+ return KErrNotFound;
+ }
+ }
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogClient::Close
+// -----------------------------------------------------------------------------
+EXPORT_C void RMulLogClient::Close()
+ {
+ iLogUtility.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogClient::Write
+// -----------------------------------------------------------------------------
+EXPORT_C void RMulLogClient::Write( const TDesC8& aLogEntry )
+ {
+ // get the size of log entry (in bytes)
+ TInt num_bytes = aLogEntry.Size();
+ // take current address and chunk size to ensure log entry fits
+ TUint8* current_address = iLogUtility.CurrentAddress();
+ // calculate the new current address, we write the size and the data
+ TUint8* after_write = current_address + num_bytes + sizeof( TInt );
+ // chck that we fit
+ if( after_write >= iLogUtility.LastAddress() )
+ {
+ // we dont fit in the end
+ // need to mark the old current_address so that
+ // manager knows we jumped to the start
+ TInt* last_indicator_ptr =
+ reinterpret_cast< TInt* >( current_address );
+ // assign KErrNotFound there
+ *last_indicator_ptr = KErrNotFound;
+ // write this entry to the base address
+ current_address = iLogUtility.BaseAddress();
+ }
+ // we need to store the size in the chunk first so take a TInt*
+ TInt* size_ptr = reinterpret_cast< TInt* >( current_address );
+ // assign new value in place
+ *size_ptr = num_bytes;
+ // increase address
+ current_address += sizeof( TInt );
+ // copy the data, first target, then source and last number of bytes
+ Mem::Copy( current_address, aLogEntry.Ptr(), num_bytes );
+ // and set the new current address
+ iLogUtility.SetCurrentAddress( current_address + num_bytes );
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogManager::CreateL
+// -----------------------------------------------------------------------------
+EXPORT_C void RMulLogManager::CreateL()
+ {
+ // connect to the file server
+ User::LeaveIfError( iFs.Connect() );
+
+ // create two log chunks
+ iLogUtility1.CreateL( KLogChunk1Name );
+ iLogUtility2.CreateL( KLogChunk2Name );
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogManager::Release
+// -----------------------------------------------------------------------------
+EXPORT_C void RMulLogManager::Release()
+ {
+ // close file server handle
+ iFs.Close();
+
+ // release both log chunks
+ iLogUtility1.Close();
+ iLogUtility2.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogManager::CommitToFileL
+// -----------------------------------------------------------------------------
+EXPORT_C void RMulLogManager::CommitToFileL( const TDesC& aFolder )
+ {
+ // open the file
+ RFile file;
+ CleanupClosePushL( file );
+
+ // chunk1
+ // create the file name
+ TFileName fileName;
+ fileName = aFolder;
+ fileName.Append( KLogChunk1Name );
+ fileName.Append( KLogFileExtension );
+ // try to open the file
+ TInt err = file.Open( iFs, fileName, EFileWrite );
+ if ( err == KErrNotFound )
+ {
+ // file doesn't exist so create it
+ err = file.Create( iFs, fileName, EFileWrite );
+ }
+ User::LeaveIfError( err );
+ // write the first chunk to file
+ CommitToFileL( iLogUtility1, file );
+ // close the file
+ file.Close();
+
+ // chunk2
+ // reset the file name
+ fileName.Zero();
+ // create the file name
+ fileName = aFolder;
+ fileName.Append( KLogChunk2Name );
+ fileName.Append( KLogFileExtension );
+ // try to open the file
+ err = file.Open( iFs, fileName, EFileWrite );
+ if ( err == KErrNotFound )
+ {
+ // file doesn't exist so create it
+ err = file.Create( iFs, fileName, EFileWrite );
+ }
+ User::LeaveIfError( err );
+ // write the second chunk to file
+ CommitToFileL( iLogUtility2, file );
+
+ CleanupStack::PopAndDestroy( &file );
+ }
+
+// -----------------------------------------------------------------------------
+// RMulLogManager::CommitToFileL
+// -----------------------------------------------------------------------------
+void RMulLogManager::CommitToFileL( RMulLogUtility& aUtility, RFile& aFile )
+ {
+ // Need to explicitly move to the end of the file as it's not done
+ // automatically on call to Write
+ TInt pos = 0;
+ TInt err = aFile.Seek( ESeekEnd, pos );
+ User::LeaveIfError( err );
+ TPtr8 logEntryPtr( 0, 0 );
+ TInt logEntrySize = 0;
+
+ // what's previously been logged to the file?
+ TUint8* lastLoggedAddress = aUtility.LastLoggedAddress();
+
+ // how much more has been added to the chunk?
+ TUint8* currentAddress = aUtility.CurrentAddress();
+
+ // write each of the chunk's logged entries to the file
+ TInt32* sizePtr = NULL;
+ while ( currentAddress != lastLoggedAddress && err == KErrNone )
+ {
+ // get the logEntry's size
+ sizePtr = reinterpret_cast< TInt32* >( lastLoggedAddress );
+ logEntrySize = *sizePtr;
+ if ( logEntrySize == KErrNotFound )
+ {
+ // logged entries have wrapped around the end of the chunk
+ // so start from the beginning
+ lastLoggedAddress = aUtility.BaseAddress();
+ sizePtr = reinterpret_cast< TInt32* >( lastLoggedAddress );
+ logEntrySize = *sizePtr;
+ }
+ // set an error - this will be reset to KErrNone if we succeed
+ // with finding and writing a log entry
+ err = KErrNotFound;
+ if ( logEntrySize > 0 )
+ {
+ // move the current address to the data
+ lastLoggedAddress += sizeof( TInt32 );
+ // extract the log entry's data
+ logEntryPtr.Set( lastLoggedAddress, logEntrySize, logEntrySize );
+ // write the log entry to the file
+ err = aFile.Write( logEntryPtr );
+ // append carriage return and line feed to the entry
+ err = aFile.Write( KLogCR );
+ err = aFile.Write( KLogLF );
+ // ensure we align to a multiple of a 4-byte boundary
+ TInt remainder = logEntrySize % KBytesInAWord;
+ if ( remainder > 0 )
+ {
+ // not aligned so add some padding
+ logEntrySize += ( KBytesInAWord - remainder );
+ }
+
+ // update the last logged address
+ lastLoggedAddress += logEntrySize;
+ }
+ }
+ // update the last logged address
+ aUtility.SetLastLoggedAddress( lastLoggedAddress );
+ //
+ // commit the data
+ err = aFile.Flush();
+ User::LeaveIfError( err );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mullogging/src/mullogger.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2006-2007 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: Logging utility for MC Photos
+*
+*/
+
+
+// CLASS HEADER
+#include "mullogger.h"
+
+// EXTERNAL INCLUDES
+#include <e32debug.h>
+//#include <flogger.h>
+
+// INTERNAL INCLUDES
+//#include "mullogchunk.h"
+
+namespace MulLogger
+ {
+ /// constants
+ const TInt KMaxLoggingBufferLength = 256;
+
+
+/**
+ * TDes overflow handler
+ * Default overflow handler panics and we dont want to do
+ * that in logging so need to implement our own handler.
+ */
+class TDes8OverFlowHandler : public TDes8Overflow
+ {
+ public: // from TDes8Overflow
+ /// @ref TDes8Overflow::Overflow
+ void Overflow( TDes8& /*aDes*/ )
+ {
+ // do nothing, we cant allocate so just eat the error
+ }
+ };
+
+// -----------------------------------------------------------------------------
+// MulLogger::WriteFormat
+// -----------------------------------------------------------------------------
+EXPORT_C void WriteFormat( TRefByValue< const TDesC8 > aFmt, ... )
+ {
+ /// writeable buffer, in emulator this is in stack
+ TBuf8< KMaxLoggingBufferLength > gWriteBuffer;
+ // take the ellipsis parameter
+ VA_LIST args;
+ VA_START( args, aFmt );
+ // create overflow handler
+ TDes8OverFlowHandler overflowhandler;
+ // clear old data by setting length to zero
+ gWriteBuffer.SetLength( 0 );
+ // append the parameters to the descriptor
+ gWriteBuffer.AppendFormatList( aFmt, args, &overflowhandler );
+ // end the ellipsis handling
+ VA_END( args );
+
+ TBuf16<256> buffer;
+ buffer.Copy(gWriteBuffer);
+ RDebug::Print(_L("MUL:-%S"),&buffer);
+
+ } // namespace
+
+} // namespace
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/mui_cover_handle.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="100%" viewBox="0 0 56 47" width="100%">
+<g>
+<g>
+<linearGradient gradientUnits="userSpaceOnUse" id="XMLID_3_" x1="28.0522" x2="28.0522" y1="1.0229" y2="45.8506">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.4438" style="stop-color:#FFFFFF"/>
+<stop offset="0.5288" style="stop-color:#FBFBFB"/>
+<stop offset="0.6216" style="stop-color:#EDEEEE"/>
+<stop offset="0.718" style="stop-color:#D8D8D8"/>
+<stop offset="0.8171" style="stop-color:#B9BABA"/>
+<stop offset="0.917" style="stop-color:#929393"/>
+<stop offset="1" style="stop-color:#6C6D6D"/>
+</linearGradient>
+<path d="M49.062,1.023H7.043c-3.484,0-6.313,2.889-6.313,6.448v31.93 c0,3.562,2.828,6.449,6.313,6.449h42.018c3.484,0,6.313-2.888,6.313-6.449V7.471C55.374,3.912,52.546,1.023,49.062,1.023z M49.22,35.814c0,2.796-2.22,5.064-4.956,5.064H11.271c-2.736,0-4.957-2.269-4.957-5.064V10.743c0-2.796,2.22-5.063,4.957-5.063 h32.993c2.736,0,4.956,2.268,4.956,5.063V35.814z" fill="url(#XMLID_3_)" stroke="#000000"/>
+<rect fill="none" height="47" width="56"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="XMLID_4_" x1="27.7915" x2="27.7915" y1="40.4839" y2="6.0732">
+<stop offset="0" style="stop-color:#000000"/>
+<stop offset="0.0884" style="stop-color:#1E1F1F"/>
+<stop offset="0.2062" style="stop-color:#404040"/>
+<stop offset="0.3182" style="stop-color:#585959"/>
+<stop offset="0.4209" style="stop-color:#676868"/>
+<stop offset="0.5056" style="stop-color:#6C6D6D"/>
+<stop offset="0.5911" style="stop-color:#676868"/>
+<stop offset="0.6896" style="stop-color:#595A5A"/>
+<stop offset="0.7944" style="stop-color:#434343"/>
+<stop offset="0.9029" style="stop-color:#232323"/>
+<stop offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<path d="M48.771,35.787c0,2.734-2.172,4.697-4.848,4.697H11.658c-2.676,0-4.847-1.963-4.847-4.697V10.728 c0-2.734,2.171-4.655,4.847-4.655h32.499c2.676,0,4.615,1.973,4.615,4.707V35.787z" fill="url(#XMLID_4_)"/>
+</g>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/mui_dl_progress_lsc.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="100%" version="1.1" viewBox="0 0 12 12" width="100%" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g>
+<g>
+<linearGradient gradientTransform="matrix(0 1 1 0 318.2246 -318.2256)" gradientUnits="userSpaceOnUse" id="XMLID_4_" x1="330.5391" x2="315.4766" y1="-312.2241" y2="-312.2241">
+<stop offset="0" style="stop-color:#333333"/>
+<stop offset="1" style="stop-color:#333333"/>
+</linearGradient>
+<rect fill="url(#XMLID_4_)" height="0.75" width="12" y="0"/>
+<linearGradient gradientTransform="matrix(0 1 1 0 318.2246 -318.2256)" gradientUnits="userSpaceOnUse" id="XMLID_5_" x1="330.5381" x2="315.4756" y1="-312.2241" y2="-312.2241">
+<stop offset="0" style="stop-color:#333333"/>
+<stop offset="1" style="stop-color:#333333"/>
+</linearGradient>
+<rect fill="url(#XMLID_5_)" height="0.746" width="12" y="11.254"/>
+<linearGradient gradientTransform="matrix(0 1 1 0 318.2246 -318.2256)" gradientUnits="userSpaceOnUse" id="XMLID_6_" x1="320.9756" x2="327.4795" y1="-312.2246" y2="-312.2246">
+<stop offset="0" style="stop-color:#00FF00"/>
+<stop offset="0.2198" style="stop-color:#01EA0C"/>
+<stop offset="0.4176" style="stop-color:#01C91E"/>
+<stop offset="0.5945" style="stop-color:#02AF2C"/>
+<stop offset="0.7211" style="stop-color:#039D36"/>
+<stop offset="0.8533" style="stop-color:#03923C"/>
+<stop offset="1" style="stop-color:#038E3E"/>
+</linearGradient>
+<rect fill="url(#XMLID_6_)" fill-opacity="1.0" height="10.504" stroke-opacity="1" width="12" y="0.75"/>
+</g>
+<rect fill="none" height="12" width="12"/>
+</g>
+</svg>
Binary file mulwidgets/mulsliderwidget/data/mui_handle.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/mui_slider_lsc.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="100%" version="1.1" viewBox="0 0 12 12" width="100%" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g>
+<g>
+<linearGradient gradientTransform="matrix(0 1 1 0 318.2246 -318.2256)" gradientUnits="userSpaceOnUse" id="XMLID_4_" x1="330.5391" x2="315.4766" y1="-312.2241" y2="-312.2241">
+<stop offset="0" style="stop-color:#333333"/>
+<stop offset="1" style="stop-color:#333333"/>
+</linearGradient>
+<rect fill="url(#XMLID_4_)" height="0.75" width="12" y="0"/>
+<linearGradient gradientTransform="matrix(0 1 1 0 318.2246 -318.2256)" gradientUnits="userSpaceOnUse" id="XMLID_5_" x1="330.5381" x2="315.4756" y1="-312.2241" y2="-312.2241">
+<stop offset="0" style="stop-color:#333333"/>
+<stop offset="1" style="stop-color:#333333"/>
+</linearGradient>
+<rect fill="url(#XMLID_5_)" height="0.746" width="12" y="11.254"/>
+<linearGradient gradientTransform="matrix(0 1 1 0 318.2246 -318.2256)" gradientUnits="userSpaceOnUse" id="XMLID_6_" x1="320.9756" x2="327.4795" y1="-312.2246" y2="-312.2246">
+<stop offset="0" style="stop-color:#E6E6E6"/>
+<stop offset="0.0841" style="stop-color:#D5D5D5"/>
+<stop offset="0.3977" style="stop-color:#9B9B9B"/>
+<stop offset="0.6659" style="stop-color:#707070"/>
+<stop offset="0.8753" style="stop-color:#565656"/>
+<stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+<rect fill="url(#XMLID_6_)" fill-opacity="0.6" height="10.504" stroke-opacity="1" width="12" y="0.75"/>
+</g>
+<rect fill="none" height="12" width="12"/>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/mui_slider_progress.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="100%" version="1.1" viewBox="0 0 12 12" width="100%" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g>
+<g>
+<linearGradient gradientTransform="matrix(0 1 1 0 318.2246 -318.2256)" gradientUnits="userSpaceOnUse" id="XMLID_4_" x1="330.5391" x2="315.4766" y1="-312.2241" y2="-312.2241">
+<stop offset="0" style="stop-color:#333333"/>
+<stop offset="1" style="stop-color:#333333"/>
+</linearGradient>
+<rect fill="url(#XMLID_4_)" height="0.75" width="12" y="0"/>
+<linearGradient gradientTransform="matrix(0 1 1 0 318.2246 -318.2256)" gradientUnits="userSpaceOnUse" id="XMLID_5_" x1="330.5381" x2="315.4756" y1="-312.2241" y2="-312.2241">
+<stop offset="0" style="stop-color:#333333"/>
+<stop offset="1" style="stop-color:#333333"/>
+</linearGradient>
+<rect fill="url(#XMLID_5_)" height="0.746" width="12" y="11.254"/>
+<linearGradient gradientTransform="matrix(0 1 1 0 318.2246 -318.2256)" gradientUnits="userSpaceOnUse" id="XMLID_6_" x1="320.9756" x2="327.4795" y1="-312.2246" y2="-312.2246">
+<stop offset="0" style="stop-color:#8ADBFF"/>
+<stop offset="0.0322" style="stop-color:#7AD6FB"/>
+<stop offset="0.3313" style="stop-color:#09AEE1"/>
+<stop offset="0.382" style="stop-color:#00ABDF"/>
+<stop offset="1" style="stop-color:#006585"/>
+</linearGradient>
+<rect fill="url(#XMLID_6_)" fill-opacity="0.6" height="10.504" stroke-opacity="1" width="12" y="0.75"/>
+</g>
+<rect fill="none" height="12" width="12"/>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/mui_slider_prt.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="100%" viewBox="0 0 12 12" width="100%" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g>
+<g>
+<rect fill="#333333" height="12" width="0.857" x="11.143"/>
+<rect fill="#333333" height="12" width="0.857"/>
+<rect fill="url(#XMLID_2_)" height="12" width="10.286" x="0.869"/>
+<defs>
+<linearGradient gradientTransform="matrix(-2.185569e-007 -5 5 -2.185569e-007 -2466.9353 -2021.2244)" gradientUnits="userSpaceOnUse" id="XMLID_2_" x1="-405.4448" x2="-405.4448" y1="493.5605" y2="495.6182">
+<stop offset="0" style="stop-color:#E6E6E6"/>
+<stop offset="0.0841" style="stop-color:#D5D5D5"/>
+<stop offset="0.3977" style="stop-color:#9B9B9B"/>
+<stop offset="0.6659" style="stop-color:#707070"/>
+<stop offset="0.8753" style="stop-color:#565656"/>
+<stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+</defs>
+</g>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/qgn_indi_slider_zoom_in.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 34 34">
+<g>
+<g>
+<path fill="#FFFFFF" d="M28.35,23.392l-4.012-4.01c0.615-1.332,0.968-2.806,0.968-4.366c0-2.789-1.086-5.412-3.059-7.385 c-1.974-1.973-4.597-3.06-7.387-3.06C9.1,4.571,4.414,9.257,4.414,15.016c0,5.76,4.686,10.445,10.446,10.445 c1.57,0,3.055-0.358,4.393-0.981l4.002,4.003c0.682,0.682,1.588,1.057,2.551,1.056c0.962,0,1.866-0.376,2.546-1.059 c0.678-0.676,1.052-1.579,1.052-2.541C29.404,24.978,29.03,24.072,28.35,23.392z"/>
+<path fill="#333333" d="M19.268,22.307l5.081,5.081c0.803,0.805,2.104,0.805,2.906,0c0.801-0.8,0.801-2.101,0-2.903l-5.082-5.08 L19.268,22.307z"/>
+<path fill="#333333" d="M14.86,6.12c-4.914,0-8.898,3.983-8.898,8.897s3.984,8.897,8.898,8.897c4.915,0,8.898-3.983,8.898-8.897 S19.775,6.12,14.86,6.12z M14.86,21.98c-3.846,0-6.965-3.117-6.965-6.963s3.119-6.964,6.965-6.964s6.964,3.118,6.964,6.964 C21.824,18.862,18.706,21.98,14.86,21.98z"/>
+<circle fill="#FFFFFF" cx="14.86" cy="15.017" r="6.963"/>
+<polygon fill="#333333" points="19.513,13.935 16.241,13.935 16.241,10.66 14.086,10.66 14.086,13.935 10.813,13.935 10.813,16.097 14.086,16.097 14.086,19.369 16.241,19.369 16.241,16.097 19.513,16.097 "/>
+<rect fill="none" width="34" height="34"/>
+</g>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/qgn_indi_slider_zoom_out.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 34 34">
+<g>
+<g>
+<path fill="#FFFFFF" d="M28.35,23.392l-4.012-4.01c0.615-1.332,0.968-2.806,0.968-4.366c0-2.789-1.086-5.412-3.059-7.385 c-1.974-1.973-4.597-3.06-7.387-3.06C9.1,4.571,4.414,9.257,4.414,15.016c0,5.76,4.686,10.445,10.446,10.445 c1.57,0,3.055-0.358,4.393-0.981l4.002,4.003c0.683,0.682,1.588,1.057,2.551,1.056c0.962,0,1.866-0.376,2.546-1.059 c0.678-0.676,1.052-1.579,1.052-2.541C29.404,24.978,29.03,24.072,28.35,23.392z"/>
+<path fill="#333333" d="M19.268,22.307l5.081,5.081c0.803,0.805,2.104,0.805,2.906,0c0.801-0.8,0.801-2.101,0-2.903l-5.082-5.08 L19.268,22.307z"/>
+<path fill="#333333" d="M14.86,6.12c-4.914,0-8.898,3.983-8.898,8.897s3.984,8.897,8.898,8.897c4.915,0,8.898-3.983,8.898-8.897 S19.775,6.12,14.86,6.12z M14.86,21.98c-3.846,0-6.964-3.117-6.964-6.963s3.118-6.964,6.964-6.964s6.964,3.118,6.964,6.964 C21.824,18.862,18.706,21.98,14.86,21.98z"/>
+<circle fill="#FFFFFF" cx="14.86" cy="15.017" r="6.963"/>
+<rect x="10.996" y="13.902" fill="#333333" width="7.664" height="2.237"/>
+<rect fill="none" width="34" height="34"/>
+</g>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/qgn_indi_volumeslider_audio_off.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 34 34">
+<g>
+<g>
+<rect fill="none" width="34" height="34"/>
+<g>
+<path d="M12.869,12.177l-6.132-0.039v8.812h6.099l10.438,8.302V3.824L12.869,12.177z M22.211,26.977l-8.951-7.108h-5.48 l0.034-6.687h5.446l8.951-7.132V26.977z"/>
+<polygon fill="#FFFFFF" points="7.813,13.182 13.261,13.182 22.211,6.049 22.211,26.977 13.261,19.869 7.779,19.869 "/>
+</g>
+<g>
+<rect x="5.177" y="15.131" transform="matrix(0.6582 0.7529 -0.7529 0.6582 19.3213 -8.56)" fill="#FFFFFF" width="27.82" height="3.734"/>
+<path d="M27.24,28.346L8.93,7.402L8.879,8.158L11.69,5.7l-0.755-0.051l18.31,20.946l0.05-0.756l-2.811,2.457L27.24,28.346z M30.051,25.889L11.741,4.944L11.39,4.541l-0.404,0.353L8.174,7.351L7.771,7.704l0.354,0.403l18.311,20.945l0.353,0.402 l0.402-0.353L30,26.645l0.403-0.352L30.051,25.889z"/>
+</g>
+</g>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/qgn_indi_volumeslider_audio_on.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 34 34">
+<g>
+<g>
+<path fill="none" d="M0,0v34h34V0H0z M15.594,26.714L7.24,20.081H2.125l0.031-6.241H7.24l8.354-6.656V26.714z"/>
+<polygon fill="none" points="2.156,13.839 2.125,20.081 7.24,20.081 15.594,26.714 15.594,7.183 7.24,13.839 "/>
+<g>
+<g>
+<path fill="#FFFFFF" d="M25.791,6.2c6.414,7.377,4.08,15.764-0.033,21.594l1.822,1.822c5.646-7.58,6.959-17.863,0.029-25.235 L25.791,6.2z"/>
+<path d="M25.414,6.528c7.342,8.444,2.4,17.483-0.064,20.978l-0.243,0.344l0.298,0.298l1.822,1.822l0.409,0.409l0.346-0.464 c5.351-7.184,7.424-17.971-0.008-25.876L27.62,3.662l-0.364,0.365l-1.818,1.819l-0.33,0.33L25.414,6.528z M27.245,4.723 c7.035,7.484,5.036,17.746-0.066,24.594l0.755-0.055l-1.822-1.822l0.055,0.642c2.602-3.687,7.809-13.231,0.002-22.21 l-0.023,0.682l1.818-1.819L27.245,4.723z"/>
+</g>
+</g>
+<g>
+<path fill="#FFFFFF" d="M20.635,11.362c2.807,3.43,2.285,7.756-0.053,11.238l1.832,1.837 c3.299-4.799,3.881-10.415,0.029-14.883L20.635,11.362z"/>
+<path d="M20.248,11.679c2.43,2.969,2.399,6.948-0.081,10.643l-0.229,0.341l0.29,0.291l1.832,1.837l0.426,0.426l0.341-0.496 c3.709-5.396,3.707-11.187-0.004-15.493L22.471,8.82L22.09,9.201l-1.809,1.808l-0.32,0.32L20.248,11.679z M22.064,9.881 c3.447,3.999,3.425,9.201-0.063,14.273l0.767-0.07l-1.832-1.837l0.061,0.632c2.739-4.08,2.749-8.504,0.024-11.833l-0.033,0.67 l1.809-1.808L22.064,9.881z"/>
+</g>
+<g>
+<path d="M6.875,12.902l-5.723-0.036v8.224h5.692l9.742,7.748V5.106L6.875,12.902z M15.594,26.714L7.24,20.081H2.125 l0.031-6.241H7.24l8.354-6.656V26.714z"/>
+<polygon fill="#FFFFFF" points="2.156,13.839 7.24,13.839 15.594,7.183 15.594,26.714 7.24,20.081 2.125,20.081 "/>
+</g>
+</g>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/qgn_indi_volumeslider_minus.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 34 34">
+<g>
+<g>
+<rect fill="none" width="34" height="34"/>
+<rect x="5.671" y="13.694" fill="#FFFFFF" stroke="#000000" width="22.657" height="6.613"/>
+</g>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/data/qgn_indi_volumeslider_plus.svg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 34 34">
+<g>
+<g>
+<rect fill="none" width="34" height="34"/>
+<polygon fill="#FFFFFF" stroke="#000000" points="28.101,14.243 19.752,14.243 19.752,5.888 14.251,5.888 14.251,14.243 5.898,14.243 5.898,19.762 14.251,19.762 14.251,28.112 19.752,28.112 19.752,19.762 28.101,19.762 "/>
+</g>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* 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: Build information file for Slider widget component
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+
+ARMV5 WINSCW
+
+
+PRJ_EXPORTS
+../rom/mulsliderwidget.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mulsliderwidget.iby)
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE mulsliderwidget.mif
+OPTION HEADERFILE mulsliderwidget.mbg
+OPTION SOURCEFILE iconlist.txt
+END
+
+PRJ_MMPFILES
+
+mulsliderwidget.mmp
+
+PRJ_TESTMMPFILES
+
+
+
+
+PRJ_TESTEXPORTS
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/group/iconlist.txt Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,2 @@
+-c24,8 qgn_indi_nslider_zoom_in
+-c24,8 qgn_indi_nslider_zoom_out
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/group/mulsliderwidget.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2007 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: Project definition file
+*
+*/
+#include <platform_paths.hrh>
+//#include "../../../group/stdinc.mmh" //for STL includes
+#define ALF_LINK_STDCPP_DLL
+
+TARGET mulsliderwidget.dll
+TARGETTYPE PLUGIN
+
+UID 0x10009d8d 0x2000FA7F
+
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+
+
+SOURCEPATH ../src
+SOURCE mulsliderwidgetfactoryplugin.cpp
+SOURCE mulsliderwidget.cpp
+SOURCE mulslidercontrol.cpp
+SOURCE mulslidermodel.cpp
+SOURCE mulprogressbarslider.cpp
+SOURCE mulhorizontalslider.cpp
+SOURCE mulsliderlongtaptimer.cpp
+SOURCE mulverticalslider.cpp
+SOURCE mulsliderutils.cpp
+
+USERINCLUDE ../../common/inc
+USERINCLUDE ../../muldatamodel/inc
+USERINCLUDE ../inc
+USERINCLUDE ../../mullogging/inc
+USERINCLUDE ../../../inc
+
+MW_LAYER_SYSTEMINCLUDE
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+LIBRARY osncore.lib
+LIBRARY alfclient.lib
+LIBRARY alfwidgetmodel.lib
+LIBRARY alfwidgetutils.lib
+LIBRARY charconv.lib
+LIBRARY libc.lib
+LIBRARY libstdcpp.lib
+LIBRARY cone.lib
+LIBRARY gdi.lib
+LIBRARY libpthread.lib
+LIBRARY aknlayout2hierarchy.lib
+LIBRARY aknlayout2scalable.lib
+LIBRARY avkon.lib
+LIBRARY cdlengine.lib
+LIBRARY mulutility.lib
+LIBRARY mulmodelutility.lib
+LIBRARY aknicon.lib
+LIBRARY aknskins.lib
+LIBRARY fbscli.lib
+LIBRARY touchfeedback.lib
+
+
+LANG SC
+START RESOURCE 2000FA7F.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET mulsliderwidget.rsc
+#endif
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/imulsliderbaseelementinternal.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2007 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: interface for the slider base element internal functions.
+ *
+*/
+
+#ifndef I_MULSLIDERBASEELEMENTINTERNAL_H
+#define I_MULSLIDERBASEELEMENTINTERNAL_H
+
+//Widget Model include
+#include <alf/ialfinterfacebase.h>
+
+//Toolkit include
+#include <alf/alfevent.h>
+#include <alf/alftypes.h>
+#include <mul/imulsliderwidget.h>
+namespace Alf
+ {
+ enum SliderLCTIDs
+ {
+ EHSliderPane,// horizontal slider aacf_slider_pane(0) for base layout
+ EHSliderBase,
+ EHSliderCentre,
+ EHSliderCenter,// horizontal slider aaslider_bg_pane(0) for track
+ EHSliderRight,
+ EHSliderLeft,
+ EHSliderHandle,// horizontal slider aacf_slider_pane_g1(0) for thumb
+ EHSliderHandleExtended,
+ EVSliderPane, // vertical slider aaslider_pane(2) for mainlayout
+ EVSliderBackground, // vertical slider aaslider_pane_g1(2) for mainlayout
+ EVSliderBgPane , // aaslider_bg_pane_cp001
+ EVSliderTop ,
+ EVSliderMiddle ,
+ EVSliderEnd ,
+ EVSliderPlus, //aid_touch_size_slider_max
+ EVSliderMinus, //aid_touch_size_slider_min
+ EVSliderMarker, //aacf_slider_pane_g1
+ EVSliderMarkerExtended,
+ EVSliderZoomText, //aaslider_pane_t3
+ EVSliderAudioImage,
+ EVSliderInnerRect,
+ EPSliderLeft,
+ EPSliderCentre,
+ EPSliderRight
+ };
+enum TOperation
+{
+ENop, // Nothing is going on.
+EMoveItem // Item is begin moved.
+};
+/**
+ * @namespace mulsliderbaseelementinternal
+ *
+ * internal interface.
+ */
+namespace mulsliderbaseelementinternal
+ {
+ static const IfId ident =
+ {
+ 0,"mulsliderbaseelementinternal"
+ };
+ }
+
+
+class IMulSliderBaseElementInternal : public IAlfInterfaceBase
+ {
+
+public:
+
+
+ static inline const IfId& type()
+ {
+ return mulsliderbaseelementinternal :: ident;
+ }
+
+ /**
+ * Notified when the base layout of Slider changes .
+ * Relayouts all the visuals with respect to the new size.
+ */
+
+ virtual void baseLayoutSizeChanged()=0;
+ /**
+ * Creates the Visualization of Slider
+ *
+ */
+
+ virtual void createVisualization(sliderTemplate aTemplate) = 0;
+ /**
+ * Updates the Visualization of Slider
+ *
+ */
+
+ virtual void updateVisualization() = 0;
+ /**
+ * Updates the Text Visualization of Slider
+ *
+ */
+
+ virtual void updateTextVisualization() = 0;
+ /**
+ * Stops all the event handling operations
+ *
+ */
+
+ virtual void stopEvents()
+ {
+
+ }
+ /**
+ * API to make the widget transparent.
+ * @param aTransparent - True will make it transparent.
+ * - False for Opaque.
+ */
+
+ virtual void MakeTransparent( bool /*aTransparent*/ )
+ {
+
+ }
+ /**
+ * API to Handle Long Tap events.
+ */
+ virtual AlfEventStatus handleLongTap()
+ {
+ return EEventNotHandled;
+ }
+
+ /**
+ *virtual Destructor.
+ *
+ */
+ virtual ~IMulSliderBaseElementInternal() {}
+
+ }; // end of class IMulSliderBaseElementInternal
+
+ } // end of namespace Alf
+
+#endif // I_MULSLIDERBASEELEMENTINTERNAL_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/mulprogressbarslider.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2007 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: Header for slider presentation elements.
+ *
+*/
+
+
+#ifndef MUL_SLIDERPROGRESSIVE_H
+#define MUL_SLIDERPROGRESSIVE_H
+
+//INCLUDES
+
+#include "alf/alfelement.h"
+#include "mulslidermodel.h"
+#include "imulsliderbaseelementinternal.h"
+#include <alf/alfbitmapprovider.h>
+#include <alf/ialfwidgeteventhandler.h>
+namespace Alf
+ {
+ class CAlfWidgetControl;
+ /**
+ * Default Base Element of the slider.
+ */
+ class MulSliderProgressive :
+ public AlfElement,
+ public IAlfWidgetEventHandler,
+ public IMulSliderBaseElementInternal,
+ public MAlfBitmapProvider
+ {
+ public:
+ /**
+ * Constructor
+ * @param aControl Widget control.
+ * @param aName Name of the item element.
+ * @param aCustomData .
+ * @param mNode .
+ * @since S60 ?S60_version
+ */
+ MulSliderProgressive (
+ CAlfWidgetControl& aControl,
+ const char* aName, AlfCustomInitDataBase* /*aCustomData*/);
+ /**
+ * Destructor
+ */
+ virtual ~MulSliderProgressive();
+
+ /**
+ * bitmap provider.
+ * @since S60 ?S60_version
+ * @param aId bitmap ID.
+ * @param aBitmap bitmap.
+ * @param aMaskBitmap mask for the bitmap.
+ * @return
+ */
+ void ProvideBitmapL (TInt aId,
+ CFbsBitmap *& aBitmap,
+ CFbsBitmap *& aMaskBitmap);
+
+ /**
+ * From IAlfInterfaceBase.
+ * Getter for interfaces provided by the widget class.
+ * @since S60 ?S60_version
+ * @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);
+ /**
+ * @see IAlfWidgetEventHandler
+ */
+ virtual AlfEventHandlerType eventHandlerType();
+ /**
+ * @see IAlfWidgetEventHandler
+ */
+ virtual AlfEventHandlerExecutionPhase eventExecutionPhase();
+
+
+ //--------------------------------------------------------------------------
+ //Overriden Apis from IAlfWidgetEventHandlers
+ //--------------------------------------------------------------------------
+ //
+ /**
+ * Used to identify event handlers that are capable of handling
+ * a specified key or custom event.
+ * Pointer event handlers cannot be identified directly,
+ * since they are dependent on the presentation.
+ * Therefore, pointer event handlers should be associated with
+ * a custom event ID that can be used to
+ * simulate the actual pointer event.
+ * @since S60 ?S60_version
+ * @param aEvent The event.
+ * @param aControl
+ * @return <code>ETrue</code> if the event can be processed.
+ * Otherwise <code>EFalse</code>.
+ */
+ bool accept(
+ CAlfWidgetControl& aControl, const TAlfEvent& aEvent) const;
+ /**
+ * Called when an input event is being offered to this event handler.
+ * The return value is used to indicate if the event was processed.
+ * Processed events may not be offered to other event handlers.
+ * @since S60 ?S60_version
+ * @param aControl The parent control of this event handler.
+ * @param aEvent The event.
+ * @return <code>ETrue</code> if the event was processed.
+ * Otherwise <code>EFalse</code>.
+ */
+ virtual AlfEventStatus offerEvent(
+ CAlfWidgetControl& aControl,
+ const TAlfEvent& aEvent );
+ /**
+ * Defines the widget states, where the event handler is active.
+ * By default, if this method
+ * is not called, the event handler is expected
+ * to be active in all states.
+ * @param aStates A bitmask defining the widget
+ * states, where the event
+ * handler is active. The low 16 bits are reserved for the states
+ * defined by the framework in <TODO: add reference>.
+ * The high 16 bits are
+ * available for states defined by the client code.
+ */
+ void setActiveStates(unsigned int aStates);
+ /**
+ * Sets AlfWidgetEventHandlerInitData to event handler.
+ * @param aData A data structure which contains
+ * for example id of the event
+ * handler.
+ */
+ virtual void setEventHandlerData(
+ const AlfWidgetEventHandlerInitData& /*aData*/ )
+ {
+
+ }
+ /**
+ * Returns AlfWidgetEventHandlerInitData.
+ * @return A pointer to AlfWidgetEventHandlerInitData structure
+ * which contains for example id of the event handler.
+ */
+ virtual AlfWidgetEventHandlerInitData* eventHandlerData()
+ {
+ return NULL;
+ }
+
+ //--------------------------------------------------------------------------
+ //Overriden Apis from IMulSliderBaseElementInternal
+ //--------------------------------------------------------------------------
+ //
+
+ /**
+ * Notified when the base layout of slider changes .
+ * Relayouts all the visuals with respect to the new size.
+ */
+ void baseLayoutSizeChanged();
+
+ /**
+ * update visualization
+ *
+ */
+ void updateVisualization();
+
+ /**
+ * create visulization for slider
+ * @param aTemplateId - template id
+ */
+ void createVisualization(sliderTemplate aTemplateId);
+
+
+ /**
+ * Updates Text visualization.
+ *
+ */
+ void updateTextVisualization();
+
+ private:
+
+ /**
+ * layoutVisuals setpos visulization for slider
+ * @param aTemplateId - template id
+ */
+ void layoutVisuals(sliderTemplate templateid);
+
+ /**
+ * initializeSliderData to initialize the model and widget pointers
+ */
+ void initializeSliderData();
+
+ /**
+ * Normalise the template specific data with that from the Model.
+ */
+
+ void NormalizeRange();
+ /**
+ * Sets the position of the handle
+ *
+ * @param aCurrTick The new position of the progress bar
+ *
+ */
+ void SetTickPosition(int aCurrTick);
+
+ private: // Class Data
+ struct MulSliderProgressBarImpl* mData;
+ MulSliderModel * mSliderModel;
+ MulSliderWidget * mSliderWidget;
+ CFbsBitmap* iBitmap;
+ }; // end of class
+
+ } // end of namespace Alf
+
+#endif //MUL_SLIDERPROGRESSIVE_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/mulslidercontrol.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2009 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: Control interface with utilities for slider widget.
+*
+*/
+
+#ifndef MUL_SLIDERCONTROL_H
+#define MUL_SLIDERCONTROL_H
+
+//WidgetModel Includes
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfwidgeteventhandler.h>
+#include "alf/alfelement.h"
+#include <touchfeedback.h>
+//Osn Includes
+#include <osn/ustring.h>
+
+
+using namespace osncore;
+using namespace Alf;
+
+// Forward declarations
+class TAlfCustomEventCommand;
+
+const float roundOff = 0.5;
+namespace Alf
+ {
+ // Forward declaration
+class IAlfModel;
+class AlfModelOperation;
+class MulSliderControl : public CAlfWidgetControl
+ {
+public:
+
+ /**
+ * Constructor.
+ */
+ MulSliderControl ( CAlfEnv& aEnv );
+
+ /**
+ * Class Destructor.
+ * @since S60 ?S60_version
+ */
+ virtual ~MulSliderControl();
+
+ //--------------------------------------------------------------------------
+ //Overriden Apis from Base class CAlfControl
+ //--------------------------------------------------------------------------
+ //
+
+ /**
+ * Notifies the owner that the layout of a visual has been recalculated.
+ * Called only when the EAlfVisualFlagLayoutUpdateNotification flag has
+ * been set for the visual.
+ *
+ * @param aVisual Visual that has been laid out.
+ */
+ void VisualLayoutUpdated ( CAlfVisual& aVisual );
+
+ /**
+ * Returns top level layout. Returns NULL if this control does not
+ * implement the IAlfHostAPI interface or if there is no base layout.
+ *
+ * @return Pointer to top level layout, or NULL if not available.
+ */
+ CAlfLayout* ContainerLayout ( const CAlfControl* aConnected ) const;
+
+// from base class CAlfWidgetControl
+
+ /**
+ * @see IAlfWidgetControl
+ */
+ AlfEventStatus handleEvent( const TAlfEvent& aEvent );
+
+ /**
+ * Update the presentation according to the data changes.
+ *
+ * @since S60 ?S60_version
+ * @param aArrayOfOperation An Array containing the operations performed on
+ * the model.
+ */
+ void dataChanging ( const AlfModelOperation& aOperation );
+
+ /**
+ * removes an element.
+ */
+ void removeAndDestroyElement(const IAlfElement& aElement );
+
+
+// From base class IAlfInterfaceBase
+
+ /**
+ * From IAlfInterfaceBase.
+ * Getter for interfaces provided by the control classes.
+ * Derived classes should always call the base class method
+ * from the overridden MakeInterface.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ IAlfInterfaceBase* makeInterface ( const IfId& aType );
+
+public:
+
+ /**
+ * Generates the feedback based on the events recieved
+ *
+ */
+ void TactileEffectOnTouchandHold();
+
+ /**
+ * Generates the feedback based on the events recieved
+ *
+ * @param aEvent Events recieved by the widget on Drag
+ * @param aIntensity Intensity of the feedback.If not passed default will be 50
+ */
+ void TactileEffectOnDrag(TAlfEvent& aEvent , int aIntensity = 50 );
+
+ /**
+ * Generates the feedback based on the thumb release
+ * or drag on thumb is stopped
+ */
+ void TactileEffectOnRelease();
+
+private:
+
+ /**
+ * Rounds float to int
+ *
+ * @param aFloatValue float value
+ * @return int
+ */
+ inline int roundFloatToInt ( float aFloatValue )
+ {
+ return(int)(aFloatValue + roundOff);
+ }
+
+ /**
+ * Sets whether or not tactile feedback is enabled.
+ *
+ * @param aEnabled Whether or not tactile is enabled.
+ */
+ void EnableTactileFeedback( bool aEnabled );
+
+private:
+
+ /**
+ * Default contructor
+ */
+ MulSliderControl();
+
+ /**
+ * IAlfAttributeOwner implementation. Own.
+ */
+
+ /**
+ * height of the Layout.
+ */
+ int mLayoutHeight;
+
+ /**
+ * width of the Layout.
+ */
+ int mLayoutWidth;
+
+ /**
+ * tactile is enabled or not.
+ */
+ bool mEnableTactile;
+
+ /**
+ * Tactile Feedback for drag started
+ */
+ bool mDragTactileFeedbackStarted;
+ /**
+ * pointer to get the current tactile instance
+ */
+ MTouchFeedback *mTactilefdbInstance;
+
+ }; // class MulSliderControl
+
+ } // namespace Alf
+
+#endif //MUL_SLIDERCONTROL_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/mulsliderdefinitions.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,60 @@
+/*
+* 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: header for defining all the common variables
+*
+*/
+
+#ifndef MULSLIDERDEFINITIONS_H_
+#define MULSLIDERDEFINITIONS_H_
+
+namespace Alf
+ {
+ // For Slider template class
+ static const char* const KHORPROGDWNLD = "\\resource\\slider\\mui_dl_progress_lsc.svg";
+ static const char* const KHORPROGCTR = "\\resource\\slider\\mui_slider_progress.svg";
+ static const char* const KHORHANDLE = "\\resource\\slider\\mui_cover_handle.svg";
+ static const char* const KHORCENTRE = "\\resource\\slider\\mui_slider_lsc.svg";
+ static const char* const KVOLAUDIOOFF = "\\resource\\slider\\qgn_indi_volumeslider_audio_off.svg";
+ static const char* const KVOLAUDIOON = "\\resource\\slider\\qgn_indi_volumeslider_audio_on.svg";
+ static const char* const KVOLPLUS = "\\resource\\slider\\qgn_indi_volumeslider_plus.svg";
+ static const char* const KVOLMINUS = "\\resource\\slider\\qgn_indi_volumeslider_minus.svg";
+ static const char* const KZOOMIN = "\\resource\\slider\\qgn_indi_slider_zoom_in.svg";
+ static const char* const KZOOMOUT = "\\resource\\slider\\qgn_indi_slider_zoom_out.svg";
+ static const char* const KVERTCENTRE = "\\resource\\slider\\mui_slider_prt.svg";
+ static const char* const KVERTHANDLE = "\\resource\\slider\\mui_cover_handle.svg";
+ const float KRoundupvalue = 0.5;
+ const float KMinopacity = 0.4;
+
+ const int KImageHeight = 50;
+ const int KImageWidth = 50;
+
+ const int KHandleImageWidth = 56;
+ const int KHandleImageHeight = 47;
+ const int KYToleranceInPixel = 10;
+ const int KXToleranceInPixel = 10;
+
+ const float KMaxopacity = 0.7;
+
+ const int KVariety0 = 0;
+ const int KVariety1 = 1;
+ const int KVariety2 = 2;
+ const int KVariety3 = 3;
+ const int KVariety4 = 4;
+ const int KVariety5 = 5;
+ const int KVariety6 = 6;
+ const int KVariety7 = 7;
+ const int KVariety8 = 8;
+ } //namespace Alf
+
+#endif /*MULSLIDERDEFINITIONS_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/mulsliderhorizontal.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,459 @@
+/*
+* Copyright (c) 2007 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: Header for presentation elements - horizontal slider.
+ *
+*/
+
+
+
+
+#ifndef MUL_SLIDERHORIZONTAL_H
+#define MUL_SLIDERHORIZONTAL_H
+
+//INCLUDES
+#include <alf/alfanchorlayout.h>
+#include "alf/alfelement.h"
+#include <alf/alfimagevisual.h>
+#include <alf/alflayout.h>
+#include <alf/alfvisual.h>
+#include <alf/ialfwidgeteventhandler.h>
+
+
+#include <AknLayout2Def.h>
+
+#include <mul/imulsliderwidget.h>
+#include "mulslidermodel.h"
+
+#include "imulsliderbaseelementinternal.h"
+
+namespace duiuimodel
+ {
+ class DuiNode;
+ }
+
+using namespace osncore;
+
+namespace Alf
+ {
+ struct MulSliderPos;
+
+
+// Forward declarations
+class IAlfWidgetEventHandler;
+class CAlfWidgetControl;
+class MulSliderLongTapTimer;
+
+/**
+ * Default Base Element of the Slider.
+ */
+class MulSliderHorizontal :
+ public AlfElement,
+ public IAlfWidgetEventHandler,
+ public IMulSliderBaseElementInternal,
+ public MAlfBitmapProvider
+ {
+public:
+
+ /**
+ * Constructor
+ * @param aControl Widget control.
+ * @param aName Name of the item element.
+ * @param aCustomData .
+ * @param mNode .
+ * @since S60 ?S60_version
+ */
+ MulSliderHorizontal (
+ CAlfWidgetControl& aControl,
+ const char* aName,
+ AlfCustomInitDataBase* aCustomData=NULL);
+
+ /**
+ * Destructor
+ */
+ virtual ~MulSliderHorizontal();
+
+ /**
+ * bitmap provider.
+ * @since S60 ?S60_version
+ * @param aId bitmap ID.
+ * @param aBitmap bitmap.
+ * @param aMaskBitmap mask for the bitmap.
+ * @return
+ */
+ void ProvideBitmapL (TInt aId,
+ CFbsBitmap *& aBitmap,
+ CFbsBitmap *& aMaskBitmap);
+ /**
+ * From IAlfInterfaceBase.
+ * Getter for interfaces provided by the Button widget class.
+ * @since S60 ?S60_version
+ * @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);
+
+
+
+ //void createVisualization();
+ //--------------------------------------------------------------------------
+ //Overriden Apis from IAlfWidgetEventHandlers
+ //--------------------------------------------------------------------------
+ //
+
+ /**
+ * Used to identify event handlers that are capable of handling
+ * a specified key or custom event.
+ * Pointer event handlers cannot be identified directly,
+ * since they are dependent on the presentation.
+ * Therefore, pointer event handlers should be associated with
+ * a custom event ID that can be used to simulate the actual pointer event.
+ * @since S60 ?S60_version
+ * @param aEvent The event.
+ * @param aControl
+ * @return <code>ETrue</code> if the event can be processed.
+ * Otherwise <code>EFalse</code>.
+ */
+ bool accept(CAlfWidgetControl& aControl, const TAlfEvent& aEvent) const;
+
+
+
+ /**
+ * @see IAlfWidgetEventHandler
+ */
+ virtual AlfEventHandlerType eventHandlerType();
+
+ /**
+ * @see IAlfWidgetEventHandler
+ */
+ virtual AlfEventHandlerExecutionPhase eventExecutionPhase();
+ /**
+ * Called when an input event is being offered to this event handler.
+ * The return value is used to indicate if the event was processed.
+ * Processed events may not be offered to other event handlers.
+ * @since S60 ?S60_version
+ * @param aControl The parent control of this event handler.
+ * @param aEvent The event.
+ * @return <code>ETrue</code> if the event was processed.
+ * Otherwise <code>EFalse</code>.
+ */
+
+
+ virtual AlfEventStatus offerEvent(
+ CAlfWidgetControl& aControl,
+ const TAlfEvent& aEvent );
+
+ /**
+ * Defines the widget states, where the event handler is active.
+ * By default, if this method is not called, the event handler is expected
+ * to be active in all states.
+ * @param aStates A bitmask defining the widget states, where the event
+ * handler is active. The low 16 bits are reserved for the states
+ * defined by the framework in <TODO: add reference>. The high 16 bits are
+ * available for states defined by the client code.
+ */
+ void setActiveStates(unsigned int aStates);
+
+ /**
+ * Sets AlfWidgetEventHandlerInitData to event handler.
+ * @param aData A data structure which contains for example id of the event
+ * handler.
+ */
+ virtual void setEventHandlerData(
+ const AlfWidgetEventHandlerInitData& /*aData*/ )
+ {
+
+ }
+
+ /**
+ * Returns AlfWidgetEventHandlerInitData.
+ * @return A pointer to AlfWidgetEventHandlerInitData structure
+ * which contains for example id of the event handler.
+ */
+ virtual AlfWidgetEventHandlerInitData* eventHandlerData()
+ {
+ return NULL;
+ }
+
+ /**
+ * Friend class for timer functions.
+ *
+ */
+ friend class MulSliderLongTapTimer;
+
+
+// From IAlfScrollBarBaseElementInternal
+
+ /**
+ * Notified when the base layout of scrollbar changes .
+ * Relayouts all the visuals with respect to the new size.
+ */
+ void baseLayoutSizeChanged();
+
+ /**
+ * Initialises slider data
+ */
+ void initializeSliderData();
+ /**
+ * Updates visualization
+ */
+ void updateVisualization();
+ /**
+ * Updates text visualization
+ */
+ void updateTextVisualization();
+ /**
+ * handles Long tap event
+ */
+ AlfEventStatus handleLongTap();
+
+ /**
+ * Changes Thumb image
+ */
+ void changeThumbImage(bool aPressed = false);
+ /**
+ * Gets thumb minimum length.
+ */
+ void getThumbMinMaxLength();
+ /**
+ * Creates visualization
+ */
+ void createVisualization(sliderTemplate aTemplateId);
+ // Creates Slider Template 3 ( Zoom Slider)
+ //void createZoomSlider();
+ /**
+ * create a Dual progressive slider
+ */
+ void createDualProgressiveSlider();
+
+ private: // New Methods
+
+ /**
+ * SetBackgroundBrush
+ *
+ */
+ void SetBackgroundBrush();
+
+ /**
+ * Retrieves the data for the slider from the model into structure
+ */
+ void RetrieveData();
+
+ /**
+ * Sets the position of the handle
+ *
+ * @param aCurrTick The new position of the handle
+ */
+ void SetThumbPosition();//int aCurrTick);
+
+ /**
+ * Sets the text for the counter visual
+ *
+ * @param aNewString The counter visual text value
+ * @throw Invalid Argument incase there is no layout at zeroth position
+ */
+ void SetTextLabels(const UString& aNewString);
+
+ /**
+ * Sets the image for the image visual
+ *
+ * @param aImagePath The path of the new image
+ * @throw Invalid Argument incase there is no layout at zeroth position
+ */
+ void SetNewImagePath(const UString& aImagePath);
+
+ /**
+ * Sets the image for the image visual from thr provided texture id
+ *
+ * @param aTextureId The texture id of the new image
+ * @throw Invalid Argument incase there is no layout at zeroth position
+ */
+ void SetNewImageTexture(const int aTextureId);
+
+ /**
+ * Notifies about the initiation of pointer down event on the visual.
+ *
+ * @returns true after the drag has started
+ */
+ //bool StartDrag(CAlfVisual *aDragVisual);
+
+ /**
+ * Sets the starting position of the pointer doen event and will
+ * start ignoring the visual for further possible pointer events
+ *
+ * @param aOperation true to signify start of drag.
+ */
+ //void Begin(TBool aOperation);
+
+ /**
+ * Checks if the drag event is On
+ *
+ * @returns true if the drag event is on.
+ */
+ //bool BeingDragged() const;
+
+ /**
+ * Clears the flag for ignoring the visual for pointer events.
+ */
+ //void StopDrag();
+
+ /**
+ * Handles the key events only.
+ *
+ * @param aEvent event to be handled
+ * @returns if the event was handled or not
+ */
+ AlfEventStatus HandleKeyEvents(const TAlfEvent& aEvent);
+
+ /**
+ * Handles the pointer events only.
+ *
+ * @aControl The alfwidget control
+ * @param aEvent Event to be handled
+ * @returns if the event was handled or not
+ */
+ AlfEventStatus HandlePointerEvents( TAlfEvent* aEvent);
+ /**
+ * Handles pointer down event
+ */
+ AlfEventStatus handlePointerDownEvent(TAlfEvent * aPntrEvent);
+ /**
+ * Checks if the slider visual is hit
+ *
+ * @param aVisual Visual that has been touched.
+ * @param aPointerPt position of the pointer
+ * @param aEvent Event to be handled
+ * @returns true/false if the visual is touched
+ */
+ bool IsSldVisualHit(const CAlfVisual& aVisual,TPoint aPointerPt,const TAlfEvent& aEvent);
+
+ /**
+ * Checks if the hit point is within the tappable area
+ *
+ * @param aPointerPt position of the pointer
+ * @param aEvent Event to be handled
+ * @returns true/false if the point is in tappable area
+ */
+ bool InTappableArea(const TPoint& aPointerPt,const TAlfEvent& aEvent) ;
+
+ /**
+ * Converts pixel to value according to range of slider
+ * @param aPixel The pixel value passed
+ * @param aMaxPixel The maximum value to be considered for calculation
+ * returns rounded int value after conversion
+ */
+ int PixelToValue(int aPixel,int aMaxPixel);
+
+ /**
+ * Converts value to pixel according to range of slider
+ * @param aVal The value passed
+ * @param aMaxPixel The maximum value to be considered for calculation
+ * returns rounded int pixel after conversion
+ */
+ int ValueToPixel(int aVal, int aMaxPixel);
+
+ /**
+ * Creates the new image for the given path
+ * @param aImageVisual The visual to which the image is to be set
+ * @param aPath The new path of the image
+ * @returns Returns the new image to be set
+ */
+ TAlfImage CreateImageFromImagePath( const CAlfImageVisual& aImageVisual, const TPtrC8& aPath );
+
+ /**
+ * Sets the new value for max and min range considering min range as zero.Its helpful
+ * for the negative min range values or greater than zero min range values.
+ *
+ * @param aMap Contains data.Used to get the data from current model.
+ */
+ void NormalizeRange(/*IAlfMap& aMap*/);
+
+ /**
+ * Stores the value for x and y coordinate of baselayout position in structure.
+ * Later the values from the structure is used to get/set the relative values
+ * according to the new position of baselayout.
+ */
+ void RelativePos();
+ void mirrorPointerPosition(const TPoint& aPointerPos );
+
+ /*
+ * Change volume icon
+ */
+ void VolumeIconChange(bool aFlag,int aValue);
+private:
+ /**
+ * IsSliderVisual
+ */
+ bool IsSliderVisual(CAlfVisual *aVisual);
+
+
+ /** returns pixel values
+ */
+ void ConvertDataToPixels();
+
+ /**
+ * updateModelPrimaryValue
+ *
+ */
+ void updateModelPrimaryValue(int aNewPosValue);
+ /**
+ * Start drag
+ */
+ bool initializeThumbDragData( const TPoint& aPointerPos );
+
+ /**
+ * Stop drag
+ */
+ bool stopDrag();
+
+
+ /**
+ * Handles pointer Events
+ */
+ void handlePointerUpEvent();
+ /**
+ * Snaps primary value to ticks
+ */
+ void snapPrimaryValueToTicks();
+ /**
+ * Set images for three part track
+ *
+ */
+ void setTrackImage();
+ /**
+ * Checks if the track visual is Hit
+ */
+ AlfEventStatus trackVisualHit(CAlfVisual * aHitVisual);
+ /**
+ * layout the visuals
+ *
+ */
+ void layoutVisuals(sliderTemplate aTemplateId);
+private: // Class Data
+
+// auto_ptr< MulSliderHorizontalImpl>mData; // Owned
+ struct MulHorizontalSliderDataImpl* mData;
+// auto_ptr<SliderDefaultLCTBaseElementData> mData;
+ auto_ptr<MulSliderPos> mPosData; // Structure for storing current and previous values
+// const UString& mStyle;
+ auto_ptr<MulSliderLongTapTimer> mLongTapTimer;
+ CAlfVisual *mDragVisual;
+ MulSliderModel * mSliderModel;
+ MulSliderWidget * mSliderWidget;
+ }; // end of class AlfScrollBarDefaultLCTBaseElement
+
+ } // end of namespace Alf
+
+#endif //MUL_SLIDERHORIZONTAL_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/mulsliderlongtaptimer.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2007 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: Header for presentation elements - Slider long tap timer.
+*
+*/
+
+#ifndef MULSLIDERLONGTAPTIMER_H_
+#define MULSLIDERLONGTAPTIMER_H_
+
+#include <e32std.h>
+#include <e32base.h>
+#include<alf/alfevent.h>
+#include "imulsliderbaseelementinternal.h"
+
+
+namespace Alf
+ {
+
+class MulSliderLongTapTimer: public CActive
+ {
+
+ enum TState
+ {
+ //To indicate the event is in running state.
+ ERunning,
+
+ //To indicate the event is in stopped state.
+ EStopped
+ };
+public:
+ /**
+ * Constructor
+ * @param aBaseElement
+ */
+ MulSliderLongTapTimer(IMulSliderBaseElementInternal* aSliderElement);
+
+ /**
+ * Destructor
+ */
+ ~MulSliderLongTapTimer();
+
+ /**
+ * Start the Timer.
+ */
+ void Start();
+
+ /**
+ * Stops the Timer.
+ */
+ void Stop();
+
+ /**
+ * user code runs under this active object.
+ */
+ void RunL();
+
+ /**
+ * Implements cancellation of an outstanding request.
+ */
+ void DoCancel();
+
+
+private:
+
+ RTimer iTimer;
+ TState iState;
+ IMulSliderBaseElementInternal *iBaseElement;
+ };
+
+ }
+
+#endif /*MULSLIDERLONGTAPTIMER_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/mulslidermodel.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,363 @@
+/*
+* Copyright (c) 2007 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: Header for presentation element - slider model interface.
+*
+*/
+
+
+#ifndef MUL_SLIDERMODEL_H
+#define MUL_SLIDERMODEL_H
+
+// Widget Model and Exported API includes
+#include <mul/imulslidermodel.h>
+
+// OsnCore includes
+#include <osn/alfptrvector.h>
+#include <osn/ustring.h>
+#include "imulsliderbaseelementinternal.h"
+#include <mul/mulvisualitem.h>
+#include <mul/imulsliderwidget.h>
+// Namespace
+using namespace osncore;
+
+namespace Alf
+ {
+
+//Forward Declarations
+class AlfModel;
+class MulSliderWidget;
+
+/**
+ * slider model implementation.
+ *
+ * Implements utility methods to create and update
+ * the data hierarchy of a slider.
+ */
+class MulSliderModel : public IMulSliderModel
+ {
+public:
+ /////////////////////////////////////////
+ /////// FROM MULSLIDER//////////////////
+ /**
+ * Set the value of the primary thumb.
+ *
+ * @param aValue Position of the primary thumb.
+ *
+ */
+ void SetPrimaryValue(int aValue) ;
+
+ /**
+ * Return the value of the primary thumb of the slider.
+ *
+ * @return Value of the primary thumb.
+ *
+ */
+ int PrimaryValue() const ;
+
+ /**
+ * Set the value of the secondary thumb.
+ *
+ * @param aValue Position of the secondary thumb.
+ *
+ */
+ void SetSecondaryValue(int aValue) ;
+
+ /**
+ * Return the value of the secondary thumb of the slider.
+ *
+ * @return Value of the secondary thumb.
+ *
+ */
+ int SecondaryValue() const ;
+
+ /**
+ * Return the total number of ticks.
+ *
+ * @return Number of ticks (int)
+ *
+ */
+ int TotalTicks() const ;
+
+
+ /**
+ * Set Template that will be used to represent data.
+ *
+ * @param aTemplateId Template associated with the widget.
+ *
+ */
+ void SetTemplate( sliderTemplate aTemplateId) ;
+
+ /**
+ * Get Template that will be used to represent data.
+ *
+ *
+ *
+ */
+ sliderTemplate GetTemplate();
+
+ /**
+ * SetRightText that will be used to represent data.
+ *
+ * @param aRightText
+ *
+ */
+ void SetRightText(char* aRightText) ;
+
+ /**
+ * GetRightText that will be used to represent data.
+ *
+ *
+ *
+ */
+ const char* GetRightText() ;
+
+ /**
+ * SetLeftText that will be used to represent data.
+ *
+ * @param aLeftText
+ *
+ */
+ void SetLeftText(char* aLeftText) ;
+
+ /**
+ * GetLeftText that will be used to represent data.
+ *
+ *
+ *
+ */
+ const char* GetLeftText() ;
+
+ /**
+ * SetPercentText that will be used to represent data.
+ *
+ *
+ */
+ void SetPercentText(char* aPercText) ;
+
+ /**
+ * GetPercentText that will be used to represent data.
+ *
+ *
+ */
+ const char* GetPercentText() ;
+
+ /**
+ * SetMinRange that will be used to represent data.
+ *
+ *
+ */
+ void SetMinRange(int aMinRange) ;
+
+ /**
+ * GetMinRange that will be used to represent data.
+ *
+ *
+ */
+ int MinRange()const ;
+
+ /**
+ * SetMaxRange that will be used to represent data.
+ *
+ *
+ */
+ void SetMaxRange(int aMaxRange) ;
+
+ /**
+ * MaxRange that will be used to represent data.
+ *
+ *
+ */
+ int MaxRange()const ;
+
+ /**
+ * SetTick that will be used to represent data.
+ *
+ *
+ */
+ void SetTick(int aTick) ;
+
+ /**
+ * GetTick that will be used to represent data.
+ *
+ *
+ */
+ int Tick()const ;
+
+ /**
+ * Constructor.
+ */
+ MulSliderModel();
+
+ /**
+ * Destructor.
+ */
+ ~MulSliderModel();
+
+
+
+ /** From base class IAlfModel
+ *
+ */
+
+ /**
+ * Add a new observer to be notified of any changes in the model.
+ *
+ * @param aObserver The model change observer to be added.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void addModelChangeObserver(IAlfModelChangeObserver& aObserver);
+
+ /**
+ * Remove an observer which is added to get notified of any changes
+ * in the model.
+ *
+ * @param aObserver The model change observer to be removed.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void removeModelChangeObserver(IAlfModelChangeObserver& aObserver);
+
+ /**
+ * API to change the model completely at one short.
+ *
+ * @see IAlfModel
+ * @param aData The new data.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void setData(IAlfVariantType* aData);
+
+ /**
+ * Change a given of data fields in the model . All model change
+ * observers are notified about the change.
+ *
+ * @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 to be set.
+ * @since S60 ?S60_version
+ */
+ void updateData(int aNumContainerIndices,
+ int* aContainerIndices,
+ IAlfVariantType* aData);
+
+ /**
+ * Add a number of data fields in the model data. All model change
+ * observers are notified about the change.
+ *
+ * @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.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void addData(int aNumContainerIndices,
+ int* aContainerIndices,
+ IAlfVariantType* aData);
+
+ /**
+ * Remove a number of data fields in the model data. All model change
+ * observers are notified about the change.
+ *
+ * @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.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void removeData(int aNumContainerIndices, int* aContainerIndices);
+
+ /**
+ * API for executing batch operations
+ *
+ * @param aOperationsArray An RPOinterArray containing the list of
+ * operations to be executed in batch.
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void executeOperations(AlfPtrVector<AlfModelOperation>& aOperationsArray);
+
+ /**
+ * API for executing one operation at a Time
+ *
+ * @param aOperation An Operation to be executed on the model.
+ * @since S60 ?S60_version
+ */
+ void executeOperation(AlfModelOperation* aOperation);
+
+ /**
+ * Clears the Model.
+ *
+ * @return void
+ * @since S60 ?S60_version
+ */
+ void clearModel();
+
+ IAlfVariantType* data() const;
+
+ IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+ /**
+ * Get the Element Interface.
+ *
+ * @return The Element pointer.
+ * @since S60 ?S60_version
+ */
+ IMulSliderBaseElementInternal* GetElement();
+
+
+ /**
+ * SetData
+ */
+ void SetData(const MulVisualItem& aSliderItem);
+
+
+ /**
+ * Data
+ */
+ const MulVisualItem& Data() const;
+
+
+ /*
+ * IsLandscape
+ */
+ bool IsLandscape();
+
+
+ /**
+ * pointer to slidermodelData.
+ */
+ void storeWidget(MulSliderWidget* aWidget);
+
+ void UpdateElement();
+
+private:
+
+ /*
+ * pointer to slidermodelData.
+ */
+ struct SliderModelDataImpl *mSldrModelData;
+
+ AlfModel* mModel; //Owned
+ }; // class MulSliderModel
+
+ } // End of namespace Alf
+
+#endif // MUL_SLIDERMODEL_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/mulsliderutils.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2007 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: Header for presentation element - Utilities for slider widget.
+*
+*/
+
+
+#ifndef MUL_SLIDERUTILS_H
+#define MUL_SLIDERUTILS_H
+
+
+#include "imulsliderbaseelementinternal.h"
+#include <AknUtils.h>
+#include <alf/alfimagevisual.h>
+
+namespace Alf
+ {
+
+
+/**
+ * Slider Utils implementation.
+ *
+ * Implements utility methods to support the slider
+ */
+class MulSliderUtils
+ {
+public:
+
+ /**
+ * Get the component layout rect value from lct.
+ *
+ * @param aId SliderLCTIDs, the LCTID of the component.
+ * @param aLayout CAlfLayout, the parent layout of the component.
+ * @param aVariety variety ID of the component.
+ */
+ static TAknLayoutRect GetComponentRect(SliderLCTIDs aId, CAlfLayout *aLayout, int aVariety);
+
+ /**
+ * Get the text component layout rect value.
+ *
+ * @param aId SliderLCTIDs, the LCTID of the component.
+ * @param aLayout CAlfLayout, the parent layout of the component.
+ * @param aVariety variety ID of the component.
+ */
+ static TAknLayoutText GetTextComponentRect(SliderLCTIDs aId, CAlfLayout *aLayout, int aVariety);
+
+
+ }; // class MulSliderUtils
+
+ } // End of namespace Alf
+
+#endif // MUL_SLIDERUTILS_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/mulslidervertical.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,386 @@
+/*
+* Copyright (c) 2007 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: Header for presentation element - vertical slider.
+ *
+*/
+
+
+
+
+#ifndef MUL_SLIDERVERTICAL_H
+#define MUL_SLIDERVERTICAL_H
+
+//INCLUDES
+#include <alf/alfanchorlayout.h>
+#include "alf/alfelement.h"
+#include <alf/alfimagevisual.h>
+#include <alf/alflayout.h>
+#include <alf/alftexture.h>
+#include <mul/imulsliderwidget.h>
+
+#include <alf/ialfwidgeteventhandler.h>
+#include <alf/alfbitmapprovider.h>
+
+#include "mulslidermodel.h"
+#include <AknLayout2Def.h>
+#include "imulsliderbaseelementinternal.h"
+
+
+namespace duiuimodel
+ {
+ class DuiNode;
+ }
+
+using namespace osncore;
+
+namespace Alf
+ {
+ struct MulSliderPos;
+
+
+// Forward declarations
+class IAlfWidgetEventHandler;
+class CAlfWidgetControl;
+class MulSliderLongTapTimer;
+
+/**
+ * Default Base Element of the Scrollbar.
+ */
+class MulSliderVertical :
+ public AlfElement,
+ public IAlfWidgetEventHandler,
+ public IMulSliderBaseElementInternal,
+ public MAlfBitmapProvider
+ {
+public:
+
+ /**
+ * Constructor
+ * @param aControl Widget control.
+ * @param aName Name of the item element.
+ * @param aCustomData .
+ * @param mNode .
+ * @since S60 ?S60_version
+ */
+ MulSliderVertical (
+ CAlfWidgetControl& aControl,
+ const char* aName,
+ AlfCustomInitDataBase* aCustomData=NULL);
+
+ /**
+ * Destructor
+ */
+ virtual ~MulSliderVertical();
+
+ /**
+ * bitmap provider.
+ * @since S60 ?S60_version
+ * @param aId bitmap ID.
+ * @param aBitmap bitmap.
+ * @param aMaskBitmap mask for the bitmap.
+ * @return
+ */
+ void ProvideBitmapL (TInt aId,
+ CFbsBitmap *& aBitmap,
+ CFbsBitmap *& aMaskBitmap);
+
+ /**
+ * From IAlfInterfaceBase.
+ * Getter for interfaces provided by the Button widget class.
+ * @since S60 ?S60_version
+ * @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);
+
+
+ /**
+ * Sets the text for the counter visual
+ *
+ * @param aNewString The counter visual text value
+ * @throw Invalid Argument incase there is no layout at zeroth position
+ */
+ void SetTextLabels(const char* aStr);
+
+
+ //--------------------------------------------------------------------------
+ //Overriden Apis from IAlfWidgetEventHandlers
+ //--------------------------------------------------------------------------
+ //
+
+ /**
+ * Used to identify event handlers that are capable of handling
+ * a specified key or custom event.
+ * Pointer event handlers cannot be identified directly,
+ * since they are dependent on the presentation.
+ * Therefore, pointer event handlers should be associated with
+ * a custom event ID that can be used to simulate the actual pointer event.
+ * @since S60 ?S60_version
+ * @param aEvent The event.
+ * @param aControl
+ * @return <code>ETrue</code> if the event can be processed.
+ * Otherwise <code>EFalse</code>.
+ */
+ bool accept(CAlfWidgetControl& aControl, const TAlfEvent& aEvent) const;
+
+
+
+ /**
+ * @see IAlfWidgetEventHandler
+ */
+ virtual AlfEventHandlerType eventHandlerType();
+
+ /**
+ * @see IAlfWidgetEventHandler
+ */
+ virtual AlfEventHandlerExecutionPhase eventExecutionPhase();
+ /**
+ * Called when an input event is being offered to this event handler.
+ * The return value is used to indicate if the event was processed.
+ * Processed events may not be offered to other event handlers.
+ * @since S60 ?S60_version
+ * @param aControl The parent control of this event handler.
+ * @param aEvent The event.
+ * @return <code>ETrue</code> if the event was processed.
+ * Otherwise <code>EFalse</code>.
+ */
+
+
+ virtual AlfEventStatus offerEvent(
+ CAlfWidgetControl& aControl,
+ const TAlfEvent& aEvent );
+
+ /**
+ * Defines the widget states, where the event handler is active.
+ * By default, if this method is not called, the event handler is expected
+ * to be active in all states.
+ * @param aStates A bitmask defining the widget states, where the event
+ * handler is active. The low 16 bits are reserved for the states
+ * defined by the framework in <TODO: add reference>. The high 16 bits are
+ * available for states defined by the client code.
+ */
+ void setActiveStates(unsigned int aStates);
+
+ /**
+ * Sets AlfWidgetEventHandlerInitData to event handler.
+ * @param aData A data structure which contains for example id of the event
+ * handler.
+ */
+ virtual void setEventHandlerData(
+ const AlfWidgetEventHandlerInitData& /*aData*/ )
+ {
+
+ }
+
+ /**
+ * Returns AlfWidgetEventHandlerInitData.
+ * @return A pointer to AlfWidgetEventHandlerInitData structure
+ * which contains for example id of the event handler.
+ */
+ virtual AlfWidgetEventHandlerInitData* eventHandlerData()
+ {
+ return NULL;
+ }
+
+ /**
+ * Friend class for timer functions.
+ *
+ */
+ friend class MulSliderLongTapTimer;
+
+
+ //--------------------------------------------------------------------------
+ //Overriden Apis from IMulSliderBaseElementInternal
+ //--------------------------------------------------------------------------
+ //
+
+ /**
+ * Notified when the base layout of scrollbar changes .
+ * Relayouts all the visuals with respect to the new size.
+ */
+ void baseLayoutSizeChanged();
+
+ /**
+ * createVisualization
+ * @param aTemplateId .aTemplateId takes 3 or 9 as parameter.
+ */
+ void createVisualization(sliderTemplate aTemplateId);
+
+ /**
+ * updateVisualization
+ * Notified when the base layout of scrollbar changes .
+ * Relayouts all the visuals with respect to the new size.
+ */
+ void updateVisualization();
+
+ /**
+ * Updates Text visualization.
+ *
+ */
+
+ void updateTextVisualization();
+ /**
+ * Sets transparency for the Widget
+ * @param aTransparent - opacity level
+ */
+ void MakeTransparent(bool aVal);
+ /**
+ *Stops all event handling
+ *
+ *
+ */
+ void stopEvents() ;
+ private:
+ /**
+ * Set skin images on scrollbar track
+ */
+ void setTrackImage();
+
+ /**
+ * Set skin images on scrollbar thumb
+ */
+ void setThumbImage();
+ /**
+ * Sets the position of the handle
+ *
+ *
+ */
+ void SetThumbPosition();
+
+ /**
+ * Handles the key events only.
+ *
+ * @param aEvent event to be handled
+ * @returns The return value is used to indicate if the event was processed.
+ */
+ AlfEventStatus HandleKeyEvents(const TAlfEvent& aEvent);
+
+ /**
+ * Handles the pointer events only.
+ *
+ *
+ * @param aEvent Event to be handled
+ * @returns The return value is used to indicate if the event was processed.
+ */
+ AlfEventStatus HandlePointerEvents( TAlfEvent* aEvent);
+
+ /**
+ * handles the pointerDown event
+ *
+ * @param aEvent Event to be handled
+ * @returns The return value is used to indicate if the event was processed.
+ */
+ AlfEventStatus handlePointerDownEvent(TAlfEvent * aPntrEvent);
+
+
+private:
+
+
+ /**
+ * IsSliderVisual
+ *
+ */
+ bool IsSliderVisual(CAlfVisual *aVisual);
+
+
+ /**
+ * layout the visuals
+ *
+ */
+ void layoutVisuals( sliderTemplate aTemplateId) ;
+
+
+
+ /**
+ *
+ * initializes Model and Widget Pointer
+ */
+ void initializeSliderData();
+
+ /**
+ * SetBackgroundBrush
+ *
+ */
+ void SetBackgroundBrush();
+
+ /**
+ * ConvertDataToPixels
+ *
+ */
+ void ConvertDataToPixels();
+
+ /**
+ * updateModelPrimaryValue
+ *
+ */
+ void updateModelPrimaryValue(int aNewPosValue);
+
+ /**
+ * Start drag
+ */
+ bool initializeThumbDragData(const TPoint& aPointerPos);
+
+
+ /**
+ * Stop drag
+ */
+ bool stopDrag();
+
+ /**
+ * handlePointerUpEvent
+ */
+ void handlePointerUpEvent();
+
+ /**
+ * snapPrimaryValueToTicks
+ */
+ void snapPrimaryValueToTicks();
+
+ /**
+ * trackVisualHit
+ */
+ AlfEventStatus trackVisualHit(CAlfVisual * aHitVisual);
+
+ /**
+ * Texture for Visuals of slider.
+ *
+ */
+ TAlfImage skinTexture(TSize aPrtImageSize, TSize aLscImageSize, TInt aPrtSkinId, TInt aLscSkinId );
+
+ /*
+ * Get the Feedback Intensity
+ */
+ TInt feedbackIntensity();
+
+
+private: // Class Data
+
+
+ struct MulVerticalSliderDataImpl* mData;
+
+ // Structure for storing current and previous values
+ auto_ptr<MulSliderPos> mPosData;
+
+
+ auto_ptr<MulSliderLongTapTimer> mLongTapTimer;
+ MulSliderModel * mSliderModel;
+ MulSliderWidget * mSliderWidget;
+
+ }; // end of class
+
+ } // end of namespace Alf
+
+#endif //MUL_SLIDERVERTICAL_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/mulsliderwidget.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,340 @@
+/*
+* Copyright (c) 2009 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: Widget interface with utilities for slider widget.
+*
+*/
+
+#ifndef ALF_SCROLLBARWIDGET_H
+#define ALF_SCROLLBARWIDGET_H
+
+// ToolKit Includes
+#include <alf/alfanchorlayout.h>
+
+// WidgetModel Includes
+#include <alf/ialfwidgeteventhandler.h>
+#include "alf/alfwidget.h"
+#include <alf/alfexceptions.h>
+
+// Widget Includes
+#include <mul/imulsliderwidget.h>
+#include <mul/imulslidermodel.h>
+
+
+// Forward Declarations
+// From Alfred Client
+class CAlfEnv;
+class CAlfDisplay;
+class CAlfControl;
+
+// From namespace Alf
+namespace Alf
+ {
+// Forward Declarations
+class IAlfVariantType;
+class IAlfElement;
+class IAlfWidgetEventHandler;
+class INode;
+class IAlfWidgetFactoryBase;
+class CAlfWidgetControl;
+class IAlfModel;
+class AlfElement;
+class AlfVisualTemplate;
+//class AlfScrollBarWidgetAttributeOwner;
+ }
+
+//From name space duiuimodel
+namespace duiuimodel
+ {
+class DuiNode;
+ }
+
+
+namespace Alf
+ {
+ class IMulSliderBaseElementInternal;
+
+ /**
+ * A basic slider widget implementation.
+ * Contains methods for creating the default
+ * building blocks for the slider widget.
+ */
+class MulSliderWidget : public IMulSliderWidget
+ {
+public:
+
+ /**
+ * Creator Method.
+ *
+ * @param aEnv The environment for the widget.
+ * @param aContainer The container widget where this widget is contained.
+ * @param aWidgetId The name of the widget. Not Owned.
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @param aCustomData Custom data. Not Owned.
+ * @param aNode Node. Not Owned.
+ * @return MulSliderWidget , or NULL if it does not create
+ */
+ static MulSliderWidget* create(CAlfEnv& aEnv,
+ IAlfContainerWidget& aContainer,
+ const char* aWidgetId,
+ AlfCustomInitDataBase* aCustomData=NULL);
+
+ /**
+ * Virtual Destructor.
+ */
+ virtual ~MulSliderWidget();
+
+ // From IAlfInterfaceBase
+ /**
+ * Getter for interfaces provided by the slider widget class.
+ *
+ * @since S60 ?S60_version
+ * @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.
+ */
+ IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+ // From IAlfWidget
+
+ /**
+ * Return the control
+ */
+ CAlfWidgetControl* control() const;
+
+ /**
+ * getter for the parent container. The ownership is not passed.
+ * @param none
+ * @return the parent container or NULL if the widget is the root-widget.
+ */
+ virtual IAlfContainerWidget* parent() const;
+
+ /**
+ * Setter for the control. The control is owned by the Alfred environment.
+ *
+ * @since S60 ?S60_version
+ * @param aControl The control for this widget.
+ * @param aDeletePreviousControl delete previous control.TRUE by default.
+ * @return void.
+ */
+ void setControl(CAlfWidgetControl* aControl,
+ bool aDeletePreviousControl = true);
+ /**
+ API returns the Slider Model of the widget.
+ */
+ IMulSliderModel& SliderModel() ;
+ /**
+ * Gets the model.
+ */
+ IAlfModel* model();
+
+ /**
+ * Sets the model.
+
+ * @return void.
+ */
+ void setModel(IAlfModel* aModel, bool /*param*/);
+
+ /**
+ * Return the widget name
+ */
+ const char* widgetName() const;
+
+ /**
+ * sets the focus to the child.
+
+ * @return void.
+ */
+ void setChildFocus(bool /*aFocus*/);
+
+
+
+ /**
+ * Sets the presentation for the widget using presentation XML file.
+
+ * Destroys any existing presentation.
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @exception AlfWidgetException if no visualization node available
+ * in Presentation XML or if no control
+ * is associated with the widget.
+ * @exception bad_alloc
+ * @since S60 ?S60_version
+ * @return void.
+ */
+ virtual void setPresentation(const char* aFilePath);
+
+ /**
+ * Set the transparency for the background of the slider widget.
+ *
+ * @param True, to set background as transparent
+ * @param False, to set background as opaque
+ */
+ void MakeTransparent( bool aTransparent ) ;
+
+ /**
+ * Enable/Disable key handling .
+ *
+ * @param aVal: True, to handle keyevents by Application
+ * False, to handle keyevents as defined in the control
+ */
+ void SetHandleKeyEvent( bool aVal ) ;
+ /**
+ * API to show the widget
+ * @param aShow - Shows the widget on value True.
+ * @param aTransitionTime - Transition time for widget to be shown.
+ */
+ void ShowWidget(bool aShow, int aTransitionTime =0);
+ /**
+ * API returns true if the widget is hidden
+ */
+ bool IsHidden();
+ /**
+ * API returns the container layout.
+ */
+ const CAlfLayout& ContainerLayout();
+ /**
+ * Update template .
+ *
+ * @param aTemplateId: template id
+ *
+ */
+ void changeTemplate(int aTemplateId);
+ /**
+ * Adds event Handling for the Widget.
+ *
+ * @param aObserver: Observer of widget.
+ *
+ */
+ void AddEventHandler( IAlfWidgetEventHandler& aObserver) ;
+ /**
+ * Remove an observer to widget
+ *
+ * @param aObserver Observer of widget.
+ */
+ void RemoveEventHandler( IAlfWidgetEventHandler& aObserver);
+ /**
+ * Returns opcaity of the widget.
+ *
+ */
+ bool GetOpacity();
+ /**
+ * Returns true if Key handling is enabled by widget.
+ *
+ */
+ bool IsKeyEnabled();
+
+ /**
+ * returns the Slider element
+ */
+ IMulSliderBaseElementInternal* GetSliderElement();
+
+
+protected:
+
+ /**
+ * C++ constructor.
+ *
+ * @param aEnv The environment for the widget.
+ * @param aContainer The container widget where this widget is contained.
+ * @param aWidgetId The name of the widget. Not Owned.
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @param aCustomData Custom data.
+ * @param aNode Node. Not Owned.
+ */
+ MulSliderWidget(CAlfEnv& aEnv,
+ IAlfContainerWidget& aContainer,
+ const char* aWidgetId,
+ AlfCustomInitDataBase* aCustomData=NULL);
+
+ /**
+ * Methods to create different default elements and control of scroll bar.
+ *
+ * @param aEnv The environment for the widget.
+ * @param aDisplay The display for the widget.
+ * @return void.
+ */
+ void constructDefault(CAlfEnv& aEnv,
+ AlfCustomInitDataBase* aCustomData=NULL);
+
+ /**
+ * Constructs widget from declaration.
+ *
+ * @param aEnv The environment for the widget.
+ * @param aNode declaration node.
+ * @return void.
+ */
+ void constructComponentsFromNode(CAlfEnv& aEnv,
+ DuiNode& aNode);
+
+ /**
+ * Constructs widget from declaration. Recursive.
+ *
+ * @param aNode declaration node.
+ */
+ void processTreeRecursively( DuiNode& aNode );
+
+ /**
+ * Creates the the widget using presentation XML file.
+ * Other widget parts are default.
+ * @param aEnv Alf Client Environment
+ * @param aFilePath Path to XML file describing the presentation
+ * of the widget. Not Owned.
+ * @exception AlfWidgetException if no visualization node available
+ * in Presentation XML
+ * @exception bad_alloc
+ * @since S60 ?S60_version
+ * @return void.
+ */
+ void constructFromPresentationXML(CAlfEnv& aEnv, const char *aFilePath);
+
+ /**
+ * Creates the default control.
+ *
+ * @param aEnv The environment for the widget.
+ * @return The Control.
+ */
+ CAlfWidgetControl *constructDefaultControl(CAlfEnv& aEnv);
+
+private :
+ /**
+ * Creates a Slider elment.
+ * @param - aElementId
+ */
+ void CreateSliderElement(const char* aElementId);
+
+private:
+
+ /**
+ * Base widget. Own.
+ */
+
+ auto_ptr<AlfWidget> mWidget;
+
+ /*
+ * IAlfAttributeOwner implementation. Own.
+ */
+ //auto_ptr<AlfScrollBarWidgetAttributeOwner> mAttributeOwner;
+
+ IMulSliderBaseElementInternal* mElement;
+ IMulSliderModel * mSliderModel;
+ CAlfWidgetControl * mSliderControl;
+ bool mOpacity;
+ bool mHandleKeyEvent;
+ }; // class MulSliderWidget
+
+ } // namespace Alf
+
+#endif // C_ALFSCROLLBARWIDGET_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/inc/mulsliderwidgetfactoryplugin.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2009 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: Factory plugin for slider widget.
+*
+*/
+
+#ifndef MUL_SLIDERWIDGETFACTORYPLUGIN_H
+#define MUL_SLIDERWIDGETFACTORYPLUGIN_H
+
+// Includes
+#include <ecom/implementationproxy.h>
+#include <alf/ialffactoryplugin.h>
+#include <osn/osndefines.h>
+#include "mulslidervertical.h"
+
+enum ESliderProductInfo
+ {
+ ESliderWidget,
+
+ ESliderModel,
+
+ ESliderHorizontalElement,
+
+ ESliderVerticalElement,
+
+ ESliderProgressbarElement
+ };
+namespace Alf
+ {
+
+class IfId;
+
+ /**
+ * Plugin factory to create widget factory
+ *
+ * @lib alfwidgetfactory.dll
+ * @since S60 5.0
+ */
+class MulSliderWidgetFactoryPlugin: public IAlfFactoryPlugin
+ {
+
+public:
+
+ /**
+ * Two-phased Symbian constructor.
+ */
+ static MulSliderWidgetFactoryPlugin* NewL();
+
+ /**
+ * Destructor
+ */
+ virtual ~MulSliderWidgetFactoryPlugin();
+
+ // from IAlfFactoryPlugin
+
+ /**
+ * Create factory product.
+ * @since Series 60 5.0
+ * @param aProduct Product to create.
+ * @param aInitData Initialization data for product
+ * @return Instance or NULL
+ */
+ IAlfInterfaceBase* createProduct ( const char* aProduct, void* aInitData );
+
+ /**
+ * Count available products
+ *
+ * @since S60 5.0
+ * @return Product count
+ */
+ int productCount() const;
+
+ /**
+ * Fetch product info by index
+ *
+ * @param aIndex List index
+ * @since S60 5.0
+ * @return Descriptor describing product
+ */
+ const char* productInfo ( int aIndex ) const;
+
+ /**
+ * From IAlfInterfaceBase.
+ * Creates interface based on the given type.
+ */
+ IAlfInterfaceBase* makeInterface ( const IfId& aType );
+ };
+
+ } // namespace Alf
+
+ /**
+ * Exported factory function required by ECOM-framework
+ */
+ OSN_IMPORT const TImplementationProxy* ImplementationGroupProxy(
+ TInt& aTableCount );
+
+#endif //MUL_SLIDERWIDGETFACTORYPLUGIN_H
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/rom/mulsliderwidget.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* 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: Slider Widget iby file.
+*
+*/
+
+#ifndef __MULSLIDERWIDGET_IBY__
+#define __MULSLIDERWIDGET_IBY__
+
+
+ECOM_PLUGIN( mulsliderwidget.dll, mulsliderwidget.rsc )
+
+SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,mulsliderwidget)
+
+#endif // __MULSLIDERWIDGET_IBY__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/src/2000FA7F.rss Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 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: Slider widget resource file
+*
+*/
+
+#include <ecom/registryinfo.rh>
+#include "alf/alfecompluginfactoryuid.rh"
+
+
+RESOURCE REGISTRY_INFO theInfo
+{
+dll_uid = 0x2000FA7F;
+interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KFactoryPluginUid;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x2000FA80;
+ version_no = 1;
+ display_name = "";
+ default_data = "mulsliderwidget||mulslidermodel";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/src/mulhorizontalslider.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1207 @@
+/*
+* Copyright (c) 2007 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: The implementation for presentation elements.
+*
+*/
+
+#include <avkon.hrh>
+#include <avkon.mbg>
+//Toolkit Includes
+// Alfred Client includes
+#include <alf/alfenv.h>
+#include <alf/alfroster.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfbitmapprovider.h>
+#include <alf/alftexture.h>
+#include <alf/alfbrusharray.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfevent.h>
+
+//Widget Model Includes
+#include <alf/alfwidgetevents.h>
+#include <alf/alfwidgetenvextension.h>
+#include <alf/ialfmodel.h>
+
+//Avkon Includes
+#include <AknUtils.h>
+#include <AknsConstants.h>
+#include <utf.h>
+#include <math.h>
+
+//slider widget includes
+#include <mul/mulevent.h>
+#include "mulsliderhorizontal.h"
+#include "mulsliderwidget.h"
+#include "mulslidercontrol.h"
+#include "mulslidermodel.h"
+#include "mulsliderdefinitions.h"
+
+#include "mulsliderutils.h"
+
+//Timer function includes
+#include "mulsliderlongtaptimer.h"
+
+
+namespace Alf
+ {
+
+// Structure to store data for the slider element class
+
+ struct MulHorizontalSliderDataImpl
+ {
+
+ bool mOperation;// Drag state
+ float mTickInPixels;// Tick size in Pixel
+ bool mIsLongTapObserverSet;// Is LongTap Event observer set
+ CAlfVisual * mVisual;// Stores thje current visual hit
+ TPoint mDragPoint;// Point at which drag started
+ TPoint mLongTapPos;// Point at which button down happened
+ bool mLongTapStarted;// Long tap timer started (true)
+ int mDragStartStep;// Tick positon of Drag Start
+ int mCurrTick;// Stores current tick
+ int mTrackStartPoint;// Slider Track Start Point in pixel
+ int mTick;// Stores Tick Size
+ bool mLayoutMirrored;//
+ int mdirection;// 0 - nomovement,1 left movement 2 right
+ int mImageTextureId; // to differtiate between textures
+ int mTrackTopTextureId;// to store the auto generated texture id's
+ int mTrackBottomTextureId;
+ int mTrackMiddleTextureId;
+ int mMarkerTextureId;
+ // Visualization Layouts
+ CAlfLayout* mMainLayout;
+ CAlfLayout* mBaseSliderLayout;
+ CAlfLayout* mSliderCentre;
+ CAlfImageVisual* mTrackLeftImage;
+ CAlfImageVisual* mTrackMiddleImage;
+ CAlfImageVisual* mTrackRightImage;
+ CAlfLayout* mSliderCentreGhost;
+ CAlfImageVisual* mSliderHandle;
+ CAlfLayout* mSliderHandleGhost;
+ CAlfImageVisual* mSliderProgressDownload;
+ CAlfImageVisual* mSliderProgressCentre;
+ CAlfTexture* mTexture;
+
+ MulHorizontalSliderDataImpl()
+ {
+ mOperation = 0;
+ mTickInPixels = 0;
+ mIsLongTapObserverSet = 0;
+ mDragPoint.SetXY(0,0) ;
+ mLongTapPos.SetXY(0,0);
+ mLongTapStarted = 0;
+ mDragStartStep = 0;
+ mCurrTick = 0;
+ mTrackStartPoint = 0;
+ mImageTextureId = 0;
+ mTrackTopTextureId = 0 ;
+ mTrackBottomTextureId = 0;
+ mTrackMiddleTextureId = 0;
+ mMarkerTextureId = 0;
+ mVisual = NULL;
+ mMainLayout = NULL;
+ mBaseSliderLayout = NULL;
+ mSliderCentre = NULL;
+ mSliderHandle = NULL;
+ mSliderProgressCentre = NULL;
+ mBaseSliderLayout = NULL;
+ mSliderCentreGhost = NULL;
+ mSliderHandleGhost = NULL;
+ mLayoutMirrored = false;
+ mdirection = 0;
+ }
+
+ };
+
+ // Bitmaps for slider
+_LIT(KAvkonBitmapFile,"\\resource\\apps\\avkon2.mbm");
+//_LIT(KImageViewerBitmapFile,"\\resource\\apps\\ImageViewer.mif");
+// Bitmap Texture ID
+const TInt KAlfTrackTopTextureId = 1;
+const TInt KAlfTrackBottomTextureId = 2;
+const TInt KAlfTrackMiddleTextureId = 3;
+const TInt KAlfMarkerTextureId = 4;
+//const TInt KAlfMarkerSelectedTextureId = 5;
+
+// ---------------------------------------------------------------------------
+// C++ default constructor.
+// ---------------------------------------------------------------------------
+//
+MulSliderHorizontal::MulSliderHorizontal(
+ CAlfWidgetControl& aControl,
+ const char* aName,
+ AlfCustomInitDataBase* /*aCustomData*/)
+ : mData(NULL)
+ {
+ // Base class (AlfElement) construct
+ construct(aControl, aName);
+ mData = new (EMM) MulHorizontalSliderDataImpl;
+ mPosData.reset(new(EMM)MulSliderPos);
+ // Timer for generating tap and hold repeat events
+ mLongTapTimer.reset(new (EMM) MulSliderLongTapTimer(this));
+ mDragVisual = NULL;
+ mSliderModel = NULL;
+ mSliderWidget = NULL;
+ // Store the widget and model pointer
+ initializeSliderData();
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+MulSliderHorizontal::~MulSliderHorizontal()
+ {
+ if(mData)
+ {
+
+ (&control().Env())->TextureManager().UnloadTexture(mData->mTrackTopTextureId);
+ (&control().Env())->TextureManager().UnloadTexture(mData->mTrackBottomTextureId);
+ (&control().Env())->TextureManager().UnloadTexture(mData->mTrackMiddleTextureId);
+ // (&control().Env())->TextureManager().UnloadTexture(KAlfMarkerSelectedTextureId);
+ (&control().Env())->TextureManager().UnloadTexture(mData->mMarkerTextureId);
+ // Visualization Data
+ delete mData;
+ }
+ else
+ {
+
+ }
+
+ }//End of Destructor
+
+// ---------------------------------------------------------------------------
+// From class MAlfInterfaceBase.
+// Getter for interfaces provided by the slider widget.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulSliderHorizontal::makeInterface(
+ const IfId& aType)
+ {
+ UString param (aType.mImplementationId);
+ if (param == IAlfWidgetEventHandler::type().mImplementationId)
+ {
+ return static_cast<IAlfWidgetEventHandler*>(this);
+ }
+
+ else if (param ==
+ IMulSliderBaseElementInternal::type().mImplementationId)
+ {
+ return static_cast<IMulSliderBaseElementInternal*>(this);
+ }
+ else
+ {
+ return AlfElement ::makeInterface(aType);
+ }
+
+ }
+
+
+//--------------------------------------------------------------------------
+// APIs from the IMulSliderBaseElement
+//--------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------
+// Gets called when the parent layout is relayouted.
+// resets all the anchor points and updates the visualization
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::baseLayoutSizeChanged()
+ {
+ mData->mMainLayout->ClearFlag(EAlfVisualFlagLayoutUpdateNotification);
+ if(mData->mMainLayout)
+ {
+ // This is a hack to resolve screen refresh issue
+ control().Env().RefreshCallBack(&(control().Env()));
+ // Layout the visualization with correct LCT values
+ layoutVisuals(mSliderModel->GetTemplate());
+ // Convert all the user defined data to pixels
+ ConvertDataToPixels();
+ // Set the thumb position to the current tick
+ SetThumbPosition();
+ if(!mSliderModel->IsLandscape())
+ {
+ if(mSliderWidget->GetOpacity())
+ {
+ TAlfTimedValue opacity(1,0);
+ mData->mMainLayout->SetOpacity(opacity);
+ }
+ }
+ else
+ {
+ TAlfTimedValue opacity(0,0);
+ mData->mMainLayout->SetOpacity(opacity);
+ }
+ }
+
+ mData->mMainLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// ---------------------------------------------------------------------------
+//
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::setActiveStates(
+ unsigned int /*aStates*/)
+ {
+ //do nothing
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// initializes Model and Widget Pointer
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderHorizontal::initializeSliderData()
+ {
+ // initialize the Slider Widget Pointer;
+ IAlfWidgetFactory& widgetFactory =
+ AlfWidgetEnvExtension::widgetFactory(control().Env());
+ mSliderWidget = static_cast<MulSliderWidget*>(widgetFactory.findWidget(
+ control().widget()->widgetName()));
+
+ // initialize the Slider Model Pointer;
+ mSliderModel = static_cast<MulSliderModel*>(mSliderWidget->model());
+ }
+
+// ---------------------------------------------------------------------------
+// layoutVisuals
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::layoutVisuals(sliderTemplate /*aTemplateId*/)
+ {
+ // TAknLayoutRect to store the Lct rect
+ TAknLayoutRect layoutRect;
+ CAlfControl* ctrl = (CAlfControl*)&control();
+
+ //get the lct rect for mBaseSliderLayout and set it
+ //aacf_slider_pane(0)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EHSliderPane,
+ mData->mMainLayout,
+ KVariety0);
+ mData->mBaseSliderLayout->SetRect(
+ TRect( TPoint( 0,0 ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+
+ mData->mSliderCentreGhost->SetRect(
+ TRect( TPoint( 0,0 ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+
+ //get the lct rect for mSliderCentre and set it
+ //aaslider_bg_pane(0)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EHSliderCenter,
+ mData->mBaseSliderLayout,
+ KVariety0);
+
+
+ mData->mSliderCentre->SetRect(
+ TRect( TPoint(layoutRect.Rect().iTl.iX,
+ layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight))) ;
+
+
+
+ //TAknLayoutRect handleGostRect = layoutRect;
+ //get the lct rect for mSliderHandle and set it
+ //aacf_slider_pane_g1(0)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EHSliderHandle,mData->mBaseSliderLayout,KVariety1);
+
+ // This is a correction since the handle LCT data is not correct
+ /* mData->mSliderHandle->SetRect(
+ TRect( TPoint(handleGostRect.Rect().iTl.iX +
+ (handleGostRect.Rect().Size().iWidth -
+ layoutRect.Rect().Size().iWidth)/2 ,
+ handleGostRect.Rect().iTl.iY +
+ (handleGostRect.Rect().Size().iHeight -
+ layoutRect.Rect().Size().iHeight)/2 ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ; */
+ mData->mSliderHandle->SetRect(
+ TRect( TPoint(layoutRect.Rect().iTl.iX,
+ layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+ mData->mSliderHandleGhost->SetRect(
+ TRect( TPoint(layoutRect.Rect().iTl.iX,
+ mData->mBaseSliderLayout->Pos().iX.ValueNow() ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ mData->mBaseSliderLayout->Size().iY.ValueNow() ))) ;
+ //get the lct rect for mTrackLeftImage and set it
+ //aaslider_bg_pane_g1(0)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EHSliderLeft,mData->mSliderCentre,0);
+
+ mData->mTrackLeftImage->SetRect(
+ TRect( TPoint(layoutRect.Rect().iTl.iX,
+ layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+
+ //get the lct rect for mTrackMiddleImage and set it
+ //aaslider_bg_pane_g2_copy1(0)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EHSliderCentre,mData->mSliderCentre,0);
+
+ mData->mTrackMiddleImage->SetRect(
+ TRect( TPoint(layoutRect.Rect().iTl.iX,
+ layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+
+ //get the lct rect for mTrackRightImage and set it
+ //aaslider_bg_pane_g2(0)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EHSliderRight,mData->mSliderCentre,0);
+
+ mData->mTrackRightImage->SetRect(
+ TRect( TPoint(layoutRect.Rect().iTl.iX,
+ layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+
+
+ if(mData->mTrackLeftImage &&
+ mData->mTrackMiddleImage &&
+ mData->mTrackRightImage)
+ {
+ setTrackImage();
+ }
+
+ if(mData->mSliderHandle)
+ {
+ mData->mImageTextureId = KAlfMarkerTextureId;
+ mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
+ KAlfAutoGeneratedTextureId/*KAlfMarkerTextureId*/,
+ (MAlfBitmapProvider *)this,
+ (TAlfTextureFlags)(EAlfTextureFlagRetainResolution|EAlfTextureFlagSkinContent)));
+
+ TAlfImage markerImage(*mData->mTexture );
+ mData->mSliderHandle->SetImage(markerImage);
+
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// Used for setting images for the track
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderHorizontal::setTrackImage()
+ {
+ TInt flags = EAlfTextureFlagSkinContent;
+ flags |= EAlfTextureFlagAutoSize;
+ CAlfControl* ctrl = (CAlfControl*)&control();
+ //create texture for leftimage
+ mData->mImageTextureId = KAlfTrackTopTextureId;
+ mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
+ KAlfAutoGeneratedTextureId/*KAlfTrackTopTextureId*/,
+ (MAlfBitmapProvider *)this,
+ (TAlfTextureFlags)(EAlfTextureFlagRetainResolution|
+ EAlfTextureFlagSkinContent)));
+
+ TAlfImage trackLeftImage(*mData->mTexture );
+
+ //create texture for middleimage
+ mData->mImageTextureId = KAlfTrackMiddleTextureId;
+ mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
+ KAlfAutoGeneratedTextureId/*KAlfTrackMiddleTextureId*/,
+ (MAlfBitmapProvider *)this,
+ (TAlfTextureFlags)(EAlfTextureFlagRetainResolution|
+ EAlfTextureFlagSkinContent)));
+ TAlfImage trackMiddleImage(*mData->mTexture );
+ //create texture for right image
+ mData->mImageTextureId = KAlfTrackBottomTextureId;
+ mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
+ KAlfAutoGeneratedTextureId/*KAlfTrackBottomTextureId*/,
+ (MAlfBitmapProvider *)this,
+ (TAlfTextureFlags)(EAlfTextureFlagRetainResolution|
+ EAlfTextureFlagSkinContent)));
+
+ TAlfImage trackRightImage(*mData->mTexture );
+ // Set Image on visuals
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ mData->mTrackLeftImage->SetImage(trackRightImage);
+ mData->mTrackRightImage->SetImage(trackLeftImage);
+ }
+ else
+ {
+ mData->mTrackLeftImage->SetImage(trackLeftImage);
+ mData->mTrackRightImage->SetImage(trackRightImage);
+ }
+
+ mData->mTrackMiddleImage->SetImage(trackMiddleImage);
+
+ }//End of setImage
+
+// ---------------------------------------------------------------------------
+// ProvideBitmapL()
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::ProvideBitmapL (TInt aId,
+ CFbsBitmap *& aBitmap,
+ CFbsBitmap *& aMaskBitmap)
+ {
+ TAknLayoutRect layoutRect;
+ TRect rect;
+ TSize size;
+ switch(mData->mImageTextureId)
+ {
+ case KAlfTrackTopTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap,
+ aMaskBitmap,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_nslider_end_left,
+ EMbmAvkonQgn_graf_nslider_end_left_mask );
+
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EHSliderLeft,mData->mSliderCentre,KVariety0);
+
+ AknIconUtils::SetSize( aBitmap,
+ TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight),
+ EAspectRatioNotPreserved);
+ mData->mImageTextureId = 0;
+ mData->mTrackTopTextureId = aId;
+ }
+ break;
+ case KAlfTrackBottomTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap,
+ aMaskBitmap,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_nslider_end_right,
+ EMbmAvkonQgn_graf_nslider_end_right_mask );
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EHSliderRight,
+ mData->mSliderCentre,
+ KVariety0);
+
+ AknIconUtils::SetSize( aBitmap,
+ TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight),
+ EAspectRatioNotPreserved);
+
+
+ mData->mImageTextureId = 0;
+ mData->mTrackBottomTextureId = aId;
+ }
+ break;
+ case KAlfTrackMiddleTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap,
+ aMaskBitmap,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_nslider_middle,
+ EMbmAvkonQgn_graf_nslider_middle_mask );
+
+ //AknIconUtils::SetSize( aBitmap,TSize(304,14),EAspectRatioNotPreserved);
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EPSliderCentre,
+ mData->mSliderCentre,
+ KVariety0);
+ AknIconUtils::SetSize( aBitmap,
+ TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight),
+ EAspectRatioNotPreserved);
+ mData->mImageTextureId = 0;
+ mData->mTrackMiddleTextureId = aId;
+ }
+ break;
+ case KAlfMarkerTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap,
+ aMaskBitmap,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_nslider_marker,
+ EMbmAvkonQgn_graf_nslider_marker_mask );
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EHSliderHandle,
+ mData->mBaseSliderLayout,
+ KVariety1);
+
+ AknIconUtils::SetSize( aBitmap,
+ TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight),
+ EAspectRatioNotPreserved);
+ mData->mImageTextureId = 0;
+ mData->mMarkerTextureId = aId;
+ }
+ default:
+ break;
+
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// ConvertDataToPixels
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::ConvertDataToPixels()
+ {
+ // Calculate the range in pixel values
+ int distance = (mData->mSliderCentre->Size().iX.ValueNow() -
+ mData->mSliderHandle->Size().iX.ValueNow());
+ if((mSliderModel->MaxRange() - mSliderModel->MinRange()) != 0)
+ {
+ // Calculate Tick Size in Pixels
+ mData->mTickInPixels =
+ (float)distance /(mSliderModel->MaxRange()
+ - mSliderModel->MinRange()) ;
+ }
+ // Get the track start pixel value
+ mData->mTrackStartPoint = mData->mSliderCentre->Pos().iX.ValueNow() ;
+ // Store current tick
+ mData->mCurrTick = mSliderModel->PrimaryValue() ;
+ mData->mTick = mSliderModel->Tick();
+ }
+
+
+// ---------------------------------------------------------------------------
+// createVisualization
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::createVisualization(sliderTemplate /*aTemplateId*/)
+ {
+ // Create the visualization
+ CAlfControl* ctrl = (CAlfControl*)&control();
+ // Visual Hierarchy creation
+ //creating mMainLayout
+ mData->mMainLayout = CAlfLayout::AddNewL(*ctrl,NULL);
+ // set the flag for Notifications and mirroring
+ mData->mMainLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);
+ mData->mMainLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ // create mBaseSliderLayout
+ mData->mBaseSliderLayout = CAlfLayout::AddNewL(*ctrl,mData->mMainLayout);
+ mData->mBaseSliderLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ //create dummy layout for slider track
+ mData->mSliderCentreGhost =
+ CAlfLayout::AddNewL(*ctrl,mData->mBaseSliderLayout);
+ //create dummy layout for slider Thumb
+ // create imagevisual for slider track
+ mData->mSliderCentre =
+ CAlfLayout::AddNewL(*ctrl,mData->mBaseSliderLayout);
+ mData->mTrackLeftImage = CAlfImageVisual::AddNewL(*ctrl,mData->mSliderCentre);
+ mData->mTrackMiddleImage = CAlfImageVisual::AddNewL(*ctrl,mData->mSliderCentre);
+ mData->mTrackRightImage = CAlfImageVisual::AddNewL(*ctrl,mData->mSliderCentre);
+
+ // create imagevisual for slider thumb
+ mData->mSliderHandle =
+ CAlfImageVisual::AddNewL(*ctrl,mData->mBaseSliderLayout);
+ // Attach brush and transfer its ownership to the visual.
+ mData->mSliderHandleGhost =
+ CAlfLayout::AddNewL(*ctrl,mData->mBaseSliderLayout);
+
+ // Get the widget opacity and apply on root visual
+ mSliderWidget->ShowWidget(mSliderWidget->GetOpacity(),0);
+ }
+
+
+// ---------------------------------------------------------------------------
+// eventHandlerType
+// ---------------------------------------------------------------------------
+//
+IAlfWidgetEventHandler::AlfEventHandlerType MulSliderHorizontal::eventHandlerType()
+ {
+ return IAlfWidgetEventHandler::EPresentationEventHandler;
+ }
+
+
+// ---------------------------------------------------------------------------
+// eventExecutionPhase
+// ---------------------------------------------------------------------------
+//
+IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase MulSliderHorizontal::eventExecutionPhase()
+ {
+ return IAlfWidgetEventHandler::ETunnellingPhaseEventHandler;
+ }
+
+// ---------------------------------------------------------------------------
+// offerEvent
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulSliderHorizontal::offerEvent( CAlfWidgetControl& /*aControl*/,
+ const TAlfEvent& aEvent )
+ {
+ AlfEventStatus ret = EEventNotHandled;
+ if(!mSliderWidget->IsHidden())
+ {
+ if(aEvent.IsCustomEvent())
+ {
+ if(aEvent.CustomParameter() == EEventMissedPointerUp)
+ {
+ mData->mLongTapStarted = false;
+ ret=EEventHandled;
+ handlePointerUpEvent();
+ }
+ }
+ // handle key events
+ else if(aEvent.IsKeyEvent() && mSliderWidget->IsKeyEnabled())
+ {
+ ret = HandleKeyEvents(aEvent);
+ }
+ // Pointer drag events and single tap events
+ else if(aEvent.IsPointerEvent())
+ {
+ ret = HandlePointerEvents((TAlfEvent *)&aEvent);
+ }
+ }
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// handleLongTap ( Long TapTimer calls inside its RUNL)
+// ---------------------------------------------------------------------------
+//
+ AlfEventStatus MulSliderHorizontal::handleLongTap()
+ {
+ mData->mMainLayout->ClearFlag(EAlfVisualFlagLayoutUpdateNotification);
+ //CAlfVisual * focusvisual = aEvent->Visual();
+ AlfEventStatus ret = EEventNotHandled;
+ if (mData->mVisual == mData->mSliderCentre || mData->mVisual == mData->mSliderCentreGhost)
+ {
+ mData->mLongTapStarted = true;
+ ret = trackVisualHit(mData->mVisual);
+ // Handle Long tap timer tactile feedback
+ MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
+ sldrcntrl.TactileEffectOnTouchandHold();
+ }
+
+ // ret = HandlePointerEvents(aEvent);
+ mData->mMainLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// HandleKeyEvents
+// ---------------------------------------------------------------------------
+//
+ AlfEventStatus MulSliderHorizontal::HandleKeyEvents(const TAlfEvent& aEvent)
+ {
+ AlfEventStatus ret = EEventNotHandled;
+ int newPos = 0;
+ int data = 0;
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ data= - mData->mTick;
+ }
+ else
+ {
+ data= mData->mTick;
+ }
+ if(aEvent.Code() == EEventKey )
+ {
+ if(aEvent.KeyEvent().iScanCode == EStdKeyRightArrow)
+ {
+ ret = EEventHandled;
+ newPos = mSliderModel->PrimaryValue() + data;
+ updateModelPrimaryValue(newPos);
+ }
+ else if(aEvent.KeyEvent().iScanCode == EStdKeyLeftArrow)
+ {
+ ret = EEventHandled;
+ newPos = mSliderModel->PrimaryValue() - data;
+ updateModelPrimaryValue(newPos);
+ }
+ }
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sends drag Up or Down event, according to the hit position
+// on track
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulSliderHorizontal::trackVisualHit(CAlfVisual * /*aHitVisual*/)
+ {
+
+ //Find the thumb Anchor Layout.
+ TAlfTimedPoint thumbVisPos = mData->mSliderHandle->Pos();
+ TAlfTimedPoint thumbVisSize = mData->mSliderHandle->Size();
+ //Check if click was above/to left or below/to right of
+ //thumb
+ if (mData->mLongTapPos.iX < thumbVisPos.iX.ValueNow())
+ {// Pointer down happened left side of Handle
+
+ int newPos = mSliderModel->PrimaryValue() - mData->mTick;
+ if(mData->mLongTapStarted)
+ {
+ if(mData->mdirection !=2)
+ {
+ // Move Handle
+ updateModelPrimaryValue(newPos);
+ mData->mdirection = 1;
+ }
+ }
+ }
+ else if (mData->mLongTapPos.iX > (thumbVisPos.iX.ValueNow() +
+ thumbVisSize.iX.ValueNow()) )
+ {
+ // Pointer down happened right side of Handle
+ int newPos = mSliderModel->PrimaryValue() + mData->mTick;
+ if(mData->mLongTapStarted)
+ {
+ if(mData->mdirection !=1)
+ {
+ // Move Handle
+ updateModelPrimaryValue(newPos);
+ mData->mdirection = 2;
+ }
+ }
+ }
+ else
+ {
+ if(mData->mIsLongTapObserverSet)
+ {
+ // Stop the long tap timer
+ mLongTapTimer->Stop();
+ mData->mLongTapStarted = false;
+ if(AknLayoutUtils::LayoutMirrored() )
+ {
+ mData->mLongTapPos.iX = mData->mMainLayout->Size().iX.ValueNow() -
+ mData->mLongTapPos.iX;
+ }
+ mData->mIsLongTapObserverSet = EFalse;
+ if(!mData->mOperation)
+ {
+ mData->mVisual = mData->mSliderHandle;
+ initializeThumbDragData(
+ mData->mLongTapPos);
+ }
+ }
+ else
+ {
+ //Do Nothing.
+ }
+ }
+ return EEventHandled;
+ }
+
+
+// ---------------------------------------------------------------------------
+// handles the pointerDown event
+//
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulSliderHorizontal::handlePointerDownEvent(TAlfEvent * aPntrEvent)
+ {
+ CAlfVisual * focusvisual = aPntrEvent->Visual();
+ AlfEventStatus result = EEventNotHandled;
+ if (focusvisual)
+ {
+ mData->mVisual = focusvisual;
+
+ if (IsSliderVisual(focusvisual))
+ {
+ control().processEvent(TAlfEvent(ECustomEventIconClick));
+ control().Display()->Roster().SetPointerEventObservers(
+ EAlfPointerEventReportDrag ,control());
+ if(!mData->mOperation)
+ {
+ mData->mIsLongTapObserverSet = ETrue;
+ //mData->mLongTapPos = aPntrEvent->PointerEvent().iParentPosition;
+ mirrorPointerPosition(aPntrEvent->PointerEvent().iParentPosition);
+ mData->mLongTapStarted = true;
+ mLongTapTimer->Start();
+ // Dont send custom event at pointer up
+
+ }
+ //Tick Movement
+ if (focusvisual == mData->mSliderCentre ||
+ focusvisual == mData->mSliderCentreGhost)
+ {
+ mData->mLongTapStarted = true;
+ return trackVisualHit(focusvisual);
+ }
+
+ // Drag
+ else if (focusvisual == mData->mSliderHandle ||
+ focusvisual == mData->mSliderHandleGhost )
+ {
+ // Initialize the drag variables
+ if(!mData->mOperation)
+ {
+ initializeThumbDragData(
+ aPntrEvent->PointerEvent().iParentPosition);
+ //Tactile Feedback for thumb touch
+ MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
+ sldrcntrl.TactileEffectOnTouchandHold();
+ }
+
+ result = EEventHandled;
+ }
+ }
+
+ }
+ return result;
+ }
+
+
+// ---------------------------------------------------------------------------
+// HandlePointerEvents
+// ---------------------------------------------------------------------------
+//
+ AlfEventStatus MulSliderHorizontal::HandlePointerEvents(TAlfEvent* aEvent)
+ {
+ AlfEventStatus ret = EEventHandled;
+ if (aEvent->PointerEvent().iType == TPointerEvent::EButton1Down)
+ {
+ mData->mdirection = 0;
+ ret = handlePointerDownEvent(aEvent);
+ }
+ // Drag Events
+ else if (aEvent->PointerEvent().iType == TPointerEvent::EDrag)
+ {
+
+ if(!mData->mOperation)
+ {// Drag during tap and hold on track .
+ if(mData->mIsLongTapObserverSet)
+ {// Store the new pointer position
+ //mData->mLongTapPos=aEvent->PointerEvent().iParentPosition;
+ mirrorPointerPosition(aEvent->PointerEvent().iParentPosition);
+ }
+ else
+ {
+ //Do Nothing.
+ }
+ }
+ else
+ {
+ // Drag on Handle
+ if(mData->mIsLongTapObserverSet &&
+ mData->mVisual &&
+ mData->mSliderHandle &&
+ mData->mSliderHandleGhost)
+ {
+ // Store the new pointer position
+ mirrorPointerPosition(aEvent->PointerEvent().iParentPosition);
+ }
+ else
+ {
+ // Do nothing
+ }
+ int dist;
+ // Calculate the distance moved from the drag start point
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ dist = mData->mDragPoint.iX -
+ aEvent->PointerEvent().iParentPosition.iX ;
+ }
+ else
+ {
+ dist = aEvent->PointerEvent().iParentPosition.iX -
+ mData->mDragPoint.iX ;
+ }
+ // Calculate the new tick position
+ int precision = KRoundupvalue;
+ if(dist<0)
+ {
+ precision = -KRoundupvalue;
+ }
+ int newPos= (int)(((float)dist / mData->mTickInPixels ) + precision) +
+ mData->mDragStartStep;
+ // send tactile sensitive event
+ // Update the model hence update visualization
+ updateModelPrimaryValue(newPos);
+ }
+ // Tactile Feedback for Drag
+ //Tactile Feedback for thumb drag
+ MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
+ sldrcntrl.TactileEffectOnDrag(*aEvent);
+ }
+ else if(aEvent->PointerUp() )
+ {
+ mData->mLongTapStarted = false;
+ handlePointerUpEvent();
+
+ }
+ else
+ {
+ //Do Nothing.
+ }
+
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// updateModelPrimaryValue
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::updateModelPrimaryValue( int aNewPosValue)
+ {
+ // Validate the new tick value
+ if(aNewPosValue< mSliderModel->MinRange())
+ {
+ aNewPosValue = mSliderModel->MinRange();
+ }
+ else if(aNewPosValue > mSliderModel->MaxRange())
+ {
+ aNewPosValue = mSliderModel->MaxRange();
+ }
+ if(mSliderModel->PrimaryValue() != aNewPosValue && mData->mTick != 0)
+ {
+ // Update visualization and model only if data is changed
+ mPosData.reset(new(EMM)MulSliderPos);
+ mPosData->mPreviousValue = mSliderModel->PrimaryValue() ;
+ mSliderModel->SetPrimaryValue(aNewPosValue);
+ mPosData->mCurrentValue =aNewPosValue;
+ mData->mCurrTick = aNewPosValue;
+
+ // Send event to the slider widget
+ TAlfEvent customevent(ETypePrimaryValueChange,
+ (uint)mPosData.get());
+ control().processEvent(customevent);
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// snapPrimaryValueToTicks
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::snapPrimaryValueToTicks()
+ {
+ // If the position is not a multiple of ticks then
+ //snap to the nearest tick multiple
+
+ int currHandlePos = mSliderModel->PrimaryValue() - mSliderModel->MinRange();
+ int tick = mSliderModel->Tick();
+ int newPos = currHandlePos + mSliderModel->MinRange();
+ if(mSliderModel->PrimaryValue() < mSliderModel->MaxRange())
+ {
+ int diff = 0;
+ if(tick > 0) //model
+ {
+ diff = currHandlePos - ((currHandlePos /tick) * tick);
+ }
+ if(diff !=0)
+ {
+ newPos = currHandlePos + tick - diff + mSliderModel->MinRange();
+ }
+ }
+
+ // Update model
+ updateModelPrimaryValue(newPos);
+ }
+
+
+// ---------------------------------------------------------------------------
+// handlePointerUpEvent
+//
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::handlePointerUpEvent()
+ {
+ // if thumb or track is clicked, change the graphics
+ // Send event if single click has hapened
+
+ snapPrimaryValueToTicks();
+
+ if(mData->mOperation)
+ {
+ //Somehow missed the Up event?
+ stopDrag();
+ //Tactile Feedback For Thumb Release
+ MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
+ sldrcntrl.TactileEffectOnRelease();
+ }
+ if(mData->mIsLongTapObserverSet)
+ {
+ // Stop the long tap timer
+ mLongTapTimer->Stop();
+ // Un-register with the roster for long tap events
+ control().Display()->Roster().SetPointerEventObservers(0,
+ control());
+ mData->mIsLongTapObserverSet = EFalse;
+ }
+ else
+ {
+ //Do Nothing.
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// UpdateVisualization
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::updateVisualization()
+ {
+ ConvertDataToPixels();
+ SetThumbPosition();
+ }
+
+// ---------------------------------------------------------------------------
+//Mirror pointer position
+// ---------------------------------------------------------------------------
+//
+void MulSliderHorizontal::mirrorPointerPosition(const TPoint& aPointerPos )
+ {
+ mData->mLongTapPos = aPointerPos;
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ mData->mLongTapPos.iX = mData->mMainLayout->Size().iX.ValueNow() -
+ mData->mLongTapPos.iX ;
+ }
+ }
+// ---------------------------------------------------------------------------
+// SetThumbPosition
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderHorizontal::SetThumbPosition()
+ {
+ // Current primary value in pixels
+ int newTickVal = (mSliderModel->PrimaryValue() - mSliderModel->MinRange()) *
+ mData->mTickInPixels;
+ // Handle
+ int handleY = mData->mSliderHandle->Pos().iY.ValueNow();
+ int ghostHandleY = mData->mSliderHandleGhost->Pos().iY.ValueNow();
+ // Handle new pos
+ int widthDiff = (mData->mSliderHandleGhost->Size().iX.ValueNow() -
+ mData->mSliderHandle->Size().iX.ValueNow())/2;
+ TAlfRealPoint pnt(mData->mTrackStartPoint + newTickVal,handleY);
+ // Ghost Handle ( Extended) new pos
+ TAlfRealPoint pnt1(mData->mTrackStartPoint -
+ widthDiff/2 + newTickVal,ghostHandleY);
+ // Set the position
+ mData->mSliderHandle->SetPos(pnt,0);
+ mData->mSliderHandleGhost->SetPos(pnt1,0);
+
+ // Update visualization variables
+ mData->mCurrTick = mSliderModel->PrimaryValue();
+ }
+
+
+// ---------------------------------------------------------------------------
+// accept
+// ---------------------------------------------------------------------------
+//
+bool MulSliderHorizontal::accept( CAlfWidgetControl& /*aControl*/,
+ const TAlfEvent& aEvent ) const
+ {
+ // Accept only key or pointer events.
+ if(aEvent.IsKeyEvent()||aEvent.IsPointerEvent())
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+//initializeThumbDragData
+// ---------------------------------------------------------------------------
+//
+bool MulSliderHorizontal::initializeThumbDragData( const TPoint& aPointerPos )
+ {
+ TRAPD(err,control().Display()->Roster().SetPointerDragThreshold(control(),
+ TAlfXYMetric(TAlfMetric(KXToleranceInPixel,EAlfUnitPixel),
+ TAlfMetric(KYToleranceInPixel,EAlfUnitPixel))) );
+
+ if(mData->mVisual && err == KErrNone)
+ {
+ mData->mOperation = EMoveItem;
+ mData->mDragPoint = aPointerPos;
+ mData->mDragStartStep = mSliderModel->PrimaryValue();
+
+ }
+ else
+ {
+ // Do Nothing
+ }
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// stopDrag
+//
+// ---------------------------------------------------------------------------
+//
+bool MulSliderHorizontal::stopDrag()
+ {
+ TRAPD(err,
+ control().Display()->Roster().SetPointerEventObservers(
+ 0,
+ control()));
+ if(err == KErrNone)
+ {
+ mData->mVisual = NULL;
+ mData->mOperation = ENop;
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+
+
+
+// ---------------------------------------------------------------------------
+// IsSliderVisual
+//
+// ---------------------------------------------------------------------------
+//
+bool MulSliderHorizontal::IsSliderVisual(CAlfVisual *aVisual)
+ {
+ if(aVisual == mData->mSliderCentre||
+ aVisual == mData->mTrackLeftImage ||
+ aVisual == mData->mTrackMiddleImage ||
+ aVisual == mData->mTrackRightImage ||
+ aVisual == mData->mSliderCentreGhost||
+ aVisual == mData->mSliderHandle||
+ aVisual == mData->mSliderHandleGhost)
+ {
+ return true;
+ }
+ return false;
+ }
+
+ void MulSliderHorizontal::updateTextVisualization()
+ {
+
+ }
+ }//namespace Alf
+
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/src/mulprogressbarslider.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,562 @@
+/*
+* Copyright (c) 2007 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 for presentation element- progressbar.
+*
+*/
+
+//Toolkit Includes
+#include <alf/alfimagevisual.h>
+#include <alf/alfevent.h>
+
+// Alfred Client includes
+#include <alf/alfenv.h>
+#include <alf/alftexture.h>
+#include <alf/alftextvisual.h>
+#include <alf/alflayout.h>
+#include <aknconsts.h>
+#include <avkon.mbg>
+
+//Widget Model Includes
+#include <alf/alfwidgetenvextension.h>
+
+//Avkon Includes
+#include <AknUtils.h>
+#include <AknsConstants.h>
+#include <utf.h>
+
+//OpenC Includes
+
+#include <math.h>
+
+//slider widget includes
+#include "mulprogressbarslider.h"
+#include "mulutility.h"
+#include "mulsliderutils.h"
+#include "mulsliderwidget.h"
+#include "mulslidermodel.h"
+#include "mulsliderdefinitions.h"
+
+// Textureid's used for comparison
+const TInt KAlfProgressBarTextureId = 1;
+const TInt KAlfFrameLeftTextureId = 2;
+const TInt KAlfFrameCentreTextureId = 3;
+const TInt KAlfFrameRightTextureId = 4;
+namespace Alf
+ {
+// Structure to store data for the progressbar element class
+struct MulSliderProgressBarImpl
+ {
+ int mMaxRange; //Store Max range for progressbar from model
+ int mMinRange; //Store Min range for progressbar from model
+ int mTempMin; //Temporary stores the min range
+ int mTempMax; //Temporary stores the max range
+ int mTick; // Store Tick value for progressbar from model
+ int mImageTextureId; // to differtiate between textures
+ bool mOrientationLandScape; // check for landscape
+ sliderTemplate mTemplateId; //slider template id
+ CAlfLayout* mMainLayout; //slider main layout
+ int mProgressBarTextureId;// to store the auto generated texture id's
+ int mFrameLeftTextureId ;
+ int mFrameCentreTextureId;
+ int mFrameRightTextureId ;
+ CAlfLayout* mBaseSliderLayout;
+ CAlfImageVisual* mSliderProgressCentre;
+ CAlfImageVisual* mSliderSecProgressCentre;
+ CAlfImageVisual* mFrameLeftImage;
+ CAlfImageVisual* mFrameRightImage;
+ CAlfImageVisual* mFrameCentreImage;
+ CAlfTexture* mTexture;
+ MulSliderProgressBarImpl()
+ {
+ mTick = 0;
+ mMaxRange = 0;
+ mMinRange = 0;
+ mTempMax = 0;
+ mTempMin = 0;
+ mImageTextureId = 0;
+ mTemplateId = ESliderTemplateNone;
+ mProgressBarTextureId = 0;
+ mFrameLeftTextureId = 0;
+ mFrameCentreTextureId = 0;
+ mFrameRightTextureId = 0;
+ mBaseSliderLayout = NULL;
+ mSliderProgressCentre = NULL;
+ mSliderSecProgressCentre = NULL;
+ mOrientationLandScape = false;
+ }
+ };
+// ---------------------------------------------------------------------------
+// MulSliderProgressive default constructor.
+// ---------------------------------------------------------------------------
+//
+MulSliderProgressive::MulSliderProgressive(
+ CAlfWidgetControl& aControl,
+ const char* aName ,
+ AlfCustomInitDataBase* /*aCustomData*/)
+ : mData(NULL)
+ {
+ // Base class (AlfElement) construct
+ construct(aControl, aName);
+ mData = new (EMM) MulSliderProgressBarImpl;
+ iBitmap = new (EMM) CFbsBitmap;
+ // initializes the mSlliderModel and mSliderWidget
+ initializeSliderData();
+
+ }
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+MulSliderProgressive::~MulSliderProgressive()
+ {
+ // Visualization Data
+ if(mData)
+ {
+ (&control().Env())->TextureManager().UnloadTexture(mData->mProgressBarTextureId);
+ (&control().Env())->TextureManager().UnloadTexture(mData->mFrameLeftTextureId);
+ (&control().Env())->TextureManager().UnloadTexture(mData->mFrameRightTextureId);
+ (&control().Env())->TextureManager().UnloadTexture(mData->mFrameCentreTextureId);
+
+ delete mData;
+ delete iBitmap;
+ }
+ else
+ {
+
+ }
+
+ }//End of Destructor
+
+// ---------------------------------------------------------------------------
+// From class MAlfInterfaceBase.
+// Getter for interfaces provided by the slider widget.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulSliderProgressive::makeInterface(
+ const IfId& aType)
+ {
+ UString param (aType.mImplementationId);
+ if (param == IAlfWidgetEventHandler::type().mImplementationId)
+ {
+ return static_cast<IAlfWidgetEventHandler*>(this);
+ }
+
+ else if (param ==
+ IMulSliderBaseElementInternal::type().mImplementationId)
+ {
+ return static_cast<IMulSliderBaseElementInternal*>(this);
+ }
+
+ IAlfInterfaceBase* interface = 0;
+ interface = AlfElement::makeInterface(aType);
+ return interface;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets called when the parent layout is relayouted.
+// resets all the anchor points and updates the visualization
+// ---------------------------------------------------------------------------
+//
+void MulSliderProgressive::baseLayoutSizeChanged()
+ {
+ mData->mMainLayout->ClearFlag(EAlfVisualFlagLayoutUpdateNotification);
+ control().Env().RefreshCallBack(&(control().Env()));
+ // Layout the visualization w.r.t. mainlayout
+ layoutVisuals(mSliderModel->GetTemplate());
+ if(mSliderModel->IsLandscape())
+ {
+ if(mSliderWidget->GetOpacity())
+ {
+ TAlfTimedValue opacity(1,0);
+ mData->mMainLayout->SetOpacity(opacity);
+ }
+ }
+ else
+ {
+ TAlfTimedValue opacity(0,0);
+ mData->mMainLayout->SetOpacity(opacity);
+ }
+ mData->mMainLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);
+ updateVisualization();
+ }
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// setActiveStates
+// ---------------------------------------------------------------------------
+void MulSliderProgressive::setActiveStates(
+ unsigned int /*aStates*/)
+ {
+ //do nothing
+ }
+
+// ---------------------------------------------------------------------------
+// initializes Model and Widget Pointer
+// ---------------------------------------------------------------------------
+//
+void MulSliderProgressive::initializeSliderData()
+ {
+ // initialize the Slider Widget Pointer;
+ IAlfWidgetFactory& widgetFactory =
+ AlfWidgetEnvExtension::widgetFactory(control().Env());
+ mSliderWidget = static_cast<MulSliderWidget*>(widgetFactory.findWidget(
+ control().widget()->widgetName()));
+
+ // initialize the Slider Model Pointer;
+ mSliderModel = static_cast<MulSliderModel*>(mSliderWidget->model());
+ }
+
+// ---------------------------------------------------------------------------
+// Bitmap provider
+// ---------------------------------------------------------------------------
+//
+void MulSliderProgressive::ProvideBitmapL (TInt aId,
+ CFbsBitmap *& aBitmap,
+ CFbsBitmap *& aMaskBitmap)
+ {
+ TAknLayoutRect layoutRect;
+
+ switch(mData->mImageTextureId)
+ {
+ case KAlfProgressBarTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap, aMaskBitmap, KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_bar_progress,
+ EMbmAvkonQgn_graf_bar_progress_mask );
+
+ TInt aHandle = aBitmap->Handle();
+
+ iBitmap->Duplicate(aHandle);
+
+ AknIconUtils::SetSize( aBitmap,TSize(50,14),EAspectRatioNotPreserved);
+ mData->mImageTextureId = 0;
+ mData->mProgressBarTextureId = aId;
+ }
+ break;
+ case KAlfFrameLeftTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap, aMaskBitmap, KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_bar_frame_side_l,
+ EMbmAvkonQgn_graf_bar_frame_side_l_mask );
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EPSliderLeft,
+ mData->mMainLayout,
+ KVariety0);
+
+ AknIconUtils::SetSize( aBitmap,TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iWidth),
+ EAspectRatioNotPreserved);
+
+ // AknIconUtils::SetSize( aBitmap,TSize(7,17),EAspectRatioNotPreserved);
+
+ mData->mImageTextureId = 0;
+ mData->mFrameLeftTextureId = aId;
+ }
+ break;
+ case KAlfFrameRightTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap, aMaskBitmap, KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_bar_frame_side_r,
+ EMbmAvkonQgn_graf_bar_frame_side_r_mask );
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EPSliderRight,
+ mData->mMainLayout,
+ KVariety0);
+
+ AknIconUtils::SetSize( aBitmap,TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iWidth),
+ EAspectRatioNotPreserved);
+
+ // AknIconUtils::SetSize( aBitmap,TSize(7,17),EAspectRatioNotPreserved);
+ mData->mImageTextureId = 0;
+ mData->mFrameRightTextureId = aId;
+ }
+ break;
+ case KAlfFrameCentreTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap, aMaskBitmap, KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_bar_frame_center,
+ EMbmAvkonQgn_graf_bar_frame_center_mask );
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EPSliderCentre,
+ mData->mMainLayout,
+ KVariety0);
+
+ AknIconUtils::SetSize( aBitmap,TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iWidth),
+ EAspectRatioNotPreserved);
+
+ // AknIconUtils::SetSize( aBitmap,TSize(308,17),EAspectRatioNotPreserved);
+ mData->mImageTextureId = 0;
+ mData->mFrameCentreTextureId = aId;
+ }
+ default:
+ break;
+
+ }
+
+ }
+//----------------------------------------------------------------------------
+// layoutVisuals
+//----------------------------------------------------------------------------
+void MulSliderProgressive::layoutVisuals(sliderTemplate aTemplateid)
+ {
+
+ TAknLayoutRect layoutRect;
+ mData->mTemplateId = aTemplateid;
+ //Get the mainlayout rect
+ int mainX = mData->mMainLayout->Pos().iX.ValueNow();
+ int mainY = mData->mMainLayout->Pos().iY.ValueNow();
+ int mainWidth = mData->mMainLayout->Size().iX.ValueNow();
+ int mainHeight = mData->mMainLayout->Size().iY.ValueNow();
+ if (mData->mTemplateId == ESliderTemplate7 )
+ {
+
+
+ mData->mBaseSliderLayout->SetRect(
+ TRect( TPoint(0,0 ),
+ TSize( mainWidth, mainHeight ))) ;
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EPSliderLeft,
+ mData->mMainLayout,
+ KVariety0);
+
+ mData->mSliderProgressCentre->SetRect(
+ TRect( TPoint(0,0),
+ TSize( 0, layoutRect.Rect().Size().iHeight ))) ;
+
+ mData->mFrameLeftImage->SetRect(
+ TRect( TPoint(layoutRect.Rect().iTl.iX,
+ layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EPSliderCentre,
+ mData->mMainLayout,
+ KVariety0);
+
+ mData->mFrameCentreImage->SetRect(
+ TRect( TPoint(layoutRect.Rect().iTl.iX,layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EPSliderRight,
+ mData->mMainLayout,
+ KVariety0);
+ mData->mFrameRightImage->SetRect(
+ TRect( TPoint(layoutRect.Rect().iTl.iX,layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+ }
+
+
+ }
+
+//----------------------------------------------------------------------------
+// createVisualization
+//----------------------------------------------------------------------------
+void MulSliderProgressive::createVisualization(sliderTemplate templateid)
+ {
+ mData->mTemplateId = templateid;
+ CAlfControl *ctrl = &control();
+
+ // Visual Hierarchy creation
+ mData->mMainLayout = CAlfLayout::AddNewL(*ctrl,NULL);
+ mData->mMainLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);
+ mData->mMainLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ mData->mBaseSliderLayout = CAlfLayout::AddNewL(*ctrl, mData->mMainLayout);
+ mData->mBaseSliderLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ mData->mSliderProgressCentre = CAlfImageVisual::AddNewL(
+ *ctrl,mData->mBaseSliderLayout);
+ mData->mFrameLeftImage = CAlfImageVisual::AddNewL(*ctrl,mData->mBaseSliderLayout);
+ mData->mFrameCentreImage = CAlfImageVisual::AddNewL(*ctrl,mData->mBaseSliderLayout);
+ mData->mFrameRightImage = CAlfImageVisual::AddNewL(*ctrl,mData->mBaseSliderLayout);
+
+ if(mData->mFrameLeftImage)
+ {
+ mData->mImageTextureId = KAlfFrameLeftTextureId;
+ // Create the texture from bitmap provider
+ mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
+ KAlfAutoGeneratedTextureId/*KAlfFrameLeftTextureId*/,
+ (MAlfBitmapProvider *)this,
+ (TAlfTextureFlags)(EAlfTextureFlagAutoSize|
+ EAlfTextureFlagSkinContent)));
+
+ int height = mData->mTexture->Size().iHeight;
+ int width = mData->mTexture->Size().iWidth;
+
+ TAlfImage aImageLeft(*mData->mTexture );
+ mData->mFrameLeftImage->SetImage(aImageLeft);
+ //mData->mFrameLeftImage->SetOpacity(0.5);
+ }
+ if(mData->mFrameCentreImage)
+ {
+ mData->mImageTextureId = KAlfFrameCentreTextureId;
+ // Create the texture from bitmap provider
+ mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
+ KAlfAutoGeneratedTextureId/*KAlfFrameCentreTextureId*/,
+ (MAlfBitmapProvider *)this,
+ (TAlfTextureFlags)(EAlfTextureFlagAutoSize|EAlfTextureFlagSkinContent)));
+
+ int height = mData->mTexture->Size().iHeight;
+ int width = mData->mTexture->Size().iWidth;
+ TAlfImage aImageCentre(*mData->mTexture );
+ mData->mFrameCentreImage->SetImage(aImageCentre);
+ }
+
+ if(mData->mFrameRightImage)
+ {
+ mData->mImageTextureId = KAlfFrameRightTextureId;
+ // Create the texture from bitmap provider
+ mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
+ KAlfAutoGeneratedTextureId/*KAlfFrameRightTextureId*/,
+ (MAlfBitmapProvider *)this,
+ (TAlfTextureFlags)(EAlfTextureFlagAutoSize|EAlfTextureFlagSkinContent)));
+
+ int height = mData->mTexture->Size().iHeight;
+ int width = mData->mTexture->Size().iWidth;
+
+
+ TAlfImage aImageRight(*mData->mTexture );
+
+ mData->mFrameRightImage->SetImage(aImageRight);
+ }
+
+ if(mData->mSliderProgressCentre)
+ {
+ mData->mImageTextureId = KAlfProgressBarTextureId;
+ // Create the texture from bitmap provider
+ mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
+ KAlfAutoGeneratedTextureId/*KAlfProgressBarTextureId*/,
+ (MAlfBitmapProvider *)this,
+ (TAlfTextureFlags)(EAlfTextureFlagAutoSize|EAlfTextureFlagSkinContent)));
+ int height = mData->mTexture->Size().iHeight;
+ int width = mData->mTexture->Size().iWidth;
+ TAlfImage aImage(*mData->mTexture );
+ mData->mSliderProgressCentre->SetImage(aImage);
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// OfferEvent
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulSliderProgressive::offerEvent(
+ CAlfWidgetControl&/* aControl*/,
+ const TAlfEvent& /*aEvent*/ )
+ {
+ // progress bar doesnt have any event handling
+ return EEventNotHandled;
+ }
+
+// ---------------------------------------------------------------------------
+// UpdateVisualization
+// ---------------------------------------------------------------------------
+void MulSliderProgressive::updateVisualization()
+ {
+ // Call to function to set relative
+ //values for ranges if min range is not zero
+ NormalizeRange();
+ int currTick = mSliderModel->PrimaryValue();
+ // Calculating the relative currtick if the MinRange is not zero.
+ if (currTick >0 )
+ {
+ currTick = currTick - mData->mTempMin;
+ }
+ // Set the new thumbimage position.
+ SetTickPosition(currTick);
+ }
+// ---------------------------------------------------------------------------
+// NormalizeRange
+// ---------------------------------------------------------------------------
+ void MulSliderProgressive::NormalizeRange()
+ {
+
+ mData->mMaxRange = mSliderModel->MaxRange();
+ mData->mMinRange = mSliderModel->MinRange();
+ mData->mTick = mSliderModel->Tick();
+ mData->mTempMax = mData->mMaxRange;
+ mData->mTempMin = mData->mMinRange;
+ mData->mMaxRange = mData->mMaxRange - mData->mMinRange;
+ mData->mMinRange = 0;
+ }
+
+// ---------------------------------------------------------------------------
+// accept
+// ---------------------------------------------------------------------------
+//
+bool MulSliderProgressive::accept(
+ CAlfWidgetControl& /*aControl*/,
+ const TAlfEvent& /*aEvent*/) const
+ {
+ return false;
+ }
+//---------------------------------------------------------------------------
+//MulSliderProgressive eventHandlerType
+//-------------------------------------------------------------------------
+IAlfWidgetEventHandler::AlfEventHandlerType MulSliderProgressive::
+ eventHandlerType()
+ {
+ return IAlfWidgetEventHandler::EPresentationEventHandler;
+ }
+
+//---------------------------------------------------------------------------
+//MulSliderProgressive eventExecutionPhase
+//-------------------------------------------------------------------------
+IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase MulSliderProgressive::
+ eventExecutionPhase()
+ {
+ return IAlfWidgetEventHandler::ETunnellingPhaseEventHandler;
+ }
+// ---------------------------------------------------------------------------
+// SetTickPosition
+// ---------------------------------------------------------------------------
+void MulSliderProgressive::SetTickPosition(int aCurrTick)
+ {
+ //Getting slider width
+ int sliderWidth = mData->mBaseSliderLayout->Size().Target().iX;
+ //Getting the slider progress height
+ int sliderProgressHeight = mData->mSliderProgressCentre->Size().Target().iY;
+ //calculating the current postion of slider progress width
+ int curpos =(sliderWidth * aCurrTick)/(mData->mMaxRange - mData->mMinRange);
+ //setting the slider progress width
+ mData->mSliderProgressCentre->SetSize(
+ TAlfRealPoint(curpos,sliderProgressHeight),0);
+ int sliderProgressWidth = mData->mSliderProgressCentre->Size().Target().iX;
+ AknIconUtils::SetSize(iBitmap,TSize(sliderProgressWidth,sliderProgressHeight),EAspectRatioNotPreserved);
+ }
+
+
+//---------------------------------------------------------------------------
+//updateTextVisualization
+//-------------------------------------------------------------------------
+ void MulSliderProgressive::updateTextVisualization()
+ {
+ // do nothing
+ }
+ }//namespace Alf
+
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/src/mulslidercontrol.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,282 @@
+/*
+* 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: Control Implementation with utilities for slider widget.
+*
+*/
+
+// Toolkit includes
+#include <alf/alfenv.h>
+#include <alf/alfroster.h>
+#include <alf/alfdisplay.h>
+
+// Widget model includes
+#include <alf/alfwidgeteventhandler.h>
+#include <alf/alfwidgetevents.h>
+#include "alf/alfattribute.h"
+#include <alf/alfutil.h>
+#include "alf/alfmodeloperation.h"
+#include <alf/alfcontrolgroup.h>
+
+// libc includes
+#include <libc/string.h>
+#include <libc/stdlib.h>
+#include <mul/mulevent.h>
+
+//Widget includes
+
+//Internal includes
+#include "mulslidercontrol.h"
+#include "mulsliderwidget.h"
+#include "mulslidermodel.h"
+#include "imulsliderbaseelementinternal.h"
+
+//namespaces
+using namespace osncore;
+using namespace mulsliderwidget;
+
+
+namespace Alf
+ {
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+MulSliderControl::MulSliderControl(CAlfEnv& aEnv) :
+ CAlfWidgetControl(aEnv)
+ {
+ mLayoutHeight = -1; //this means that the first draw is yet to happen.
+ mLayoutWidth = -1; //this means that the first draw is yet to happen.
+ mDragTactileFeedbackStarted = false;
+ mEnableTactile = false; // Next statement will make it true
+ mTactilefdbInstance = NULL;
+ EnableTactileFeedback(true);
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+MulSliderControl::~MulSliderControl()
+ {
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// Notifies the owner that the layout of a visual has been recalculated.
+// Called only when the EAlfVisualFlagLayoutUpdateNotification flag has
+// been set for the visual.
+// ---------------------------------------------------------------------------
+//
+void MulSliderControl::VisualLayoutUpdated(CAlfVisual& aVisual)
+ {
+
+ TPoint visualSize = aVisual.Size().IntValueNow();
+
+ if((mLayoutWidth == -1 && visualSize.iX) == 0 ||
+ (mLayoutHeight == -1 && visualSize.iY) == 0)
+ {
+ //return; /*No size assigned yet*/
+ }
+ else
+ {
+ //do nothing
+ }
+
+ if(mLayoutWidth == visualSize.iX &&
+ mLayoutHeight == visualSize.iY)
+ {
+ //return; /* No change in layout size */
+ }
+ else
+ {
+ //do nothing
+ }
+
+ mLayoutWidth = visualSize.iX;
+ mLayoutHeight = visualSize.iY;
+ IAlfElement* baseelement = findElement ("BaseElement");
+ IMulSliderBaseElementInternal* elementInternal =
+ static_cast<IMulSliderBaseElementInternal*> (
+ baseelement->makeInterface(IMulSliderBaseElementInternal::type()));
+ if(elementInternal)
+ {
+ elementInternal->baseLayoutSizeChanged();
+ }
+ else
+ {
+ //do nothing
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Returns top level layout.
+// ---------------------------------------------------------------------------
+//
+CAlfLayout* MulSliderControl::ContainerLayout(
+ const CAlfControl* /*aConnected*/) const
+ {
+ if(VisualCount())
+ {
+ //Return the root layout of the control
+ return(static_cast<CAlfLayout*> (&Visual(0)));
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// From base class CAlfWidgetControl
+// Handle Alfred events.
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulSliderControl::handleEvent( const TAlfEvent& aEvent )
+ {
+ AlfEventStatus ret = EEventNotHandled;
+ IAlfElement *base = findElement("BaseElement");
+ if(base)
+ {
+ IAlfWidgetEventHandler* element =
+ static_cast<IAlfWidgetEventHandler*> (
+ base->makeInterface(IAlfWidgetEventHandler::type()));
+
+ if(aEvent.IsCustomEvent())
+ {
+ if(aEvent.CustomParameter() == EEventMissedPointerUp)
+ {
+ ret = element->offerEvent(*this,aEvent);
+ }
+ }
+ else if(aEvent.IsKeyEvent() ||
+ aEvent.IsPointerEvent())
+ {
+ // if the type of base element is slider , then
+ // convert the event to custom event
+ IMulSliderBaseElementInternal* elementInternal =
+ static_cast<IMulSliderBaseElementInternal*> (
+ base->makeInterface(IMulSliderBaseElementInternal::type()));
+ ret = element->offerEvent(*this , aEvent);
+ }
+ else
+ {
+ }
+ }
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From base class CAlfWidgetControl.
+// Notification that data is about to change in the data model.
+// ---------------------------------------------------------------------------
+//
+void MulSliderControl::dataChanging(const AlfModelOperation& /*aOperation*/)
+ {}
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the list widget.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulSliderControl::makeInterface(const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+
+ return CAlfWidgetControl::makeInterface(aType);
+ }
+
+// ---------------------------------------------------------------------------
+//
+// removeAndDestroyElement
+//
+// ---------------------------------------------------------------------------
+//
+void MulSliderControl::removeAndDestroyElement(const IAlfElement& /*aElement*/)
+ {
+ // reset the variables
+ mLayoutWidth = -1;
+ mLayoutHeight = -1;
+
+ CAlfWidgetControl::removeAndDestroyElement(*findElement("BaseElement"));
+ }
+//----------------------------------------------------------------------
+//
+//enableTactileFeedback
+//----------------------------------------------------------------------
+void MulSliderControl::EnableTactileFeedback(bool aEnabled)
+ {
+ if (!mTactilefdbInstance)
+ {
+ mEnableTactile = aEnabled;
+ mTactilefdbInstance = MTouchFeedback::Instance();
+ }
+ }
+//----------------------------------------------------------------------
+//TactileEffectOnTouch
+//
+//----------------------------------------------------------------------
+void MulSliderControl::TactileEffectOnTouchandHold()
+ {
+ if (mTactilefdbInstance)
+ {
+ mTactilefdbInstance->InstantFeedback(ETouchFeedbackSlider);
+ }
+ }
+//----------------------------------------------------------------------
+//TactileEffectOnDrag
+//
+//----------------------------------------------------------------------
+void MulSliderControl::TactileEffectOnDrag(TAlfEvent& aEvent, int aIntensity)
+{
+ if (mTactilefdbInstance)
+ {
+ CCoeControl* ccoecntrl = static_cast<CCoeControl*>(Display()->ObjectProvider());
+ TInt intensity = aIntensity;
+ TTimeIntervalMicroSeconds32 timespan = 400000;
+ mTactilefdbInstance->StartFeedback(ccoecntrl,ETouchDynamicSlider,&aEvent.PointerEvent(),intensity,timespan);
+ mDragTactileFeedbackStarted = true;
+ }
+}
+//-------------------------------------------------------------------------------
+//
+// TactileEffectOnRelease
+//--------------------------------------------------------------------------------
+//
+void MulSliderControl::TactileEffectOnRelease()
+{
+ if (mTactilefdbInstance)
+ {
+ if ( mDragTactileFeedbackStarted )
+ {
+ // Touch Release on Thumb after drag
+ CCoeControl* ccoecntrl = static_cast<CCoeControl*>(Display()->ObjectProvider());
+ mTactilefdbInstance->StopFeedback(ccoecntrl);
+ mDragTactileFeedbackStarted = false;
+ }
+ else
+ {
+ // Touch Release on thumb
+ mTactilefdbInstance->InstantFeedback(ETouchFeedbackSlider);
+ }
+ }
+}
+}//End of namespace Alf
+//End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/src/mulsliderlongtaptimer.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,108 @@
+/*
+* 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: Slider long tap timer
+ *
+*/
+
+
+
+// Include Files
+
+// Class header
+#include "mulsliderlongtaptimer.h"
+#include "mulsliderdefinitions.h"
+
+const int KInitialtimeinterval = 200000;
+const int KTimeinterval = 100000;
+namespace Alf
+ {
+
+//---------------------------------------------------------------------------
+// Constructor
+//---------------------------------------------------------------------------
+//
+MulSliderLongTapTimer::MulSliderLongTapTimer(
+ IMulSliderBaseElementInternal* aBaseElement)
+ :CActive(EPriorityStandard)
+ {
+ iTimer.CreateLocal();
+ iBaseElement = aBaseElement;
+ CActiveScheduler::Add(this);
+ iState = EStopped;
+ }
+
+//---------------------------------------------------------------------------
+// Destructor
+//---------------------------------------------------------------------------
+//
+MulSliderLongTapTimer::~MulSliderLongTapTimer()
+ {
+ Stop();
+ iTimer.Close();
+ }
+//---------------------------------------------------------------------------
+// Activates the timer.
+//---------------------------------------------------------------------------
+//
+void MulSliderLongTapTimer::Start()
+ {
+ if (!IsActive())
+ {
+ iTimer.After(iStatus, TTimeIntervalMicroSeconds32(KInitialtimeinterval));
+ SetActive();
+ }
+ iState = ERunning;
+ }
+//---------------------------------------------------------------------------
+// stops the timer.
+//---------------------------------------------------------------------------
+//
+void MulSliderLongTapTimer::Stop()
+ {
+ Cancel();
+ iState = EStopped;
+ }
+//---------------------------------------------------------------------------
+// Handles an active object's request completion event.
+//---------------------------------------------------------------------------
+//
+void MulSliderLongTapTimer::RunL()
+ {
+ IMulSliderBaseElementInternal* elementInternal =
+ static_cast<IMulSliderBaseElementInternal*> (
+ iBaseElement->makeInterface(IMulSliderBaseElementInternal::type()));
+ if(elementInternal)
+ {
+ // call handleLongTap of element to handle the longtap
+ elementInternal->handleLongTap();
+ }
+ if (iState == ERunning)
+ {
+ iTimer.After(iStatus, TTimeIntervalMicroSeconds32(KTimeinterval));
+ SetActive();
+ }
+ }
+
+//---------------------------------------------------------------------------
+// Implements cancellation of an outstanding request.
+//---------------------------------------------------------------------------
+//
+void MulSliderLongTapTimer::DoCancel()
+ {
+ iTimer.Cancel();
+ }
+
+
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/src/mulslidermodel.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,683 @@
+/*
+* 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 slider model interface
+ *
+*/
+
+//Class headers
+#include "mulslidermodel.h"
+
+// Alf headers
+
+#include <alf/alfmodel.h>
+#include <alf/alfutil.h>
+#include <mul/mulvarianttype.h>
+
+// Osn Headers
+#include <osn/osnnew.h> //for new(EMM)
+#include <osn/ustring.h>
+#include <mul/mulvisualitem.h>
+#include <mul/imulsliderwidget.h>
+#include <string.h>
+
+// For Common strings
+
+#include "mulslidervertical.h"
+#include "mulsliderwidget.h"
+
+const int KMaxrange = 100;
+const int KTick = 1;
+const int KSize = 50;
+namespace Alf
+{
+
+struct SliderModelDataImpl
+ {
+ int mSldMaxRange;// Slider Maximum Value
+ int mSldMinRange;// Slider Maximum Value
+ int mSldTick;// Size of single click movement
+ int mSldPrimaryTick;// Current Handle Position
+ int mSldSecondaryTick;// Secondary progress position
+ char* mSldLeftText;// Left text
+ char* mSldRightText;// Right text
+ char* mSldPercentText;// Percentage text for zoom slider
+ MulSliderWidget* mSliderWidget;
+ IMulSliderBaseElementInternal * mSliderElement;// Element pointer
+ sliderTemplate mTemplateId; // template ID
+ std::auto_ptr<MulVisualItem> mItem;
+ SliderModelDataImpl()
+ {
+ mItem = ( new (EMM) MulVisualItem() );
+ mSldMaxRange = KMaxrange;
+ mSldMinRange = 0;
+ mSldTick = KTick;
+ mSldPrimaryTick = 0;
+ mSldSecondaryTick = 0;
+ mSldLeftText = NULL;
+ mSldRightText =NULL;
+ mSldPercentText = NULL;
+ mSliderWidget = NULL;
+ mSliderElement = NULL;
+ mTemplateId = ESliderTemplateNone;
+ }
+ };
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+MulSliderModel::MulSliderModel():
+mModel ( NULL )
+ {
+ mSldrModelData = new(EMM)SliderModelDataImpl();
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+MulSliderModel::~MulSliderModel()
+ {
+ if(mSldrModelData)
+ {
+ delete mSldrModelData;
+ }
+ else
+ {
+
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetData
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::SetData(const MulVisualItem& aSliderItem)
+ {
+
+ UString str;
+
+
+ if(aSliderItem.Attribute(mulvisualitem::KMulMaxRange))
+ {
+ SetMaxRange(
+ aSliderItem.AttributeAsInt(mulvisualitem::KMulMaxRange));
+ }
+ if(aSliderItem.Attribute(mulvisualitem::KMulMinRange))
+ {
+ SetMinRange(
+ aSliderItem.AttributeAsInt(mulvisualitem::KMulMinRange));
+ }
+ if(aSliderItem.Attribute(mulvisualitem::KMulTick))
+ {
+ SetTick(aSliderItem.
+ AttributeAsInt(mulvisualitem::KMulTick));
+ }
+ if(aSliderItem.Attribute(mulvisualitem::KMulPrimaryTick))
+ {
+ SetPrimaryValue(aSliderItem.
+ AttributeAsInt(mulvisualitem::KMulPrimaryTick));
+ }
+ if(aSliderItem.Attribute(mulvisualitem::KMulSecondaryTick))
+ {
+ SetSecondaryValue(aSliderItem.
+ AttributeAsInt(mulvisualitem::KMulSecondaryTick));
+ }
+
+ if(aSliderItem.Attribute(mulvisualitem::KMulPercent1))
+ {
+
+ int percentValue = aSliderItem.
+ AttributeAsInt(mulvisualitem::KMulPercent1);
+
+ _LIT8(KPercent,"");
+ TBuf8<KSize> PercentText(KPercent);
+ PercentText.AppendNum (percentValue);
+ PercentText.Append(_L("%"));
+ mSldrModelData->mSldPercentText = (char*)PercentText.PtrZ();
+
+ }
+
+ UpdateElement();
+ }
+
+
+// ---------------------------------------------------------------------------
+// Return MulVisual Item
+// ---------------------------------------------------------------------------
+//
+const MulVisualItem& MulSliderModel::Data() const
+ {
+ mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulMaxRange,
+ (int)mSldrModelData->mSldMaxRange);
+ mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulMinRange,
+ (int)mSldrModelData->mSldMinRange);
+ mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulTick,
+ (int)mSldrModelData->mSldTick);
+ mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulPrimaryTick,
+ (int)mSldrModelData->mSldPrimaryTick);
+ mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulSecondaryTick,
+ (int)mSldrModelData->mSldSecondaryTick);
+ mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulCounter1,
+ (int)mSldrModelData->mSldLeftText );
+ mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulCounter2,
+ (int)mSldrModelData->mSldRightText );
+ mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulPercent1,
+ (int)mSldrModelData->mSldPercentText );
+ return *(mSldrModelData->mItem);
+ }
+
+// ---------------------------------------------------------------------------
+// SetValue
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::SetPrimaryValue(int aValue)
+ {
+ int maxRange = mSldrModelData->mSldMaxRange;
+ int minRange = mSldrModelData->mSldMinRange;
+ // Validate aValue
+ if(aValue != mSldrModelData->mSldPrimaryTick)
+ {
+ if( (aValue >= minRange) && (aValue <= maxRange))
+ {
+ mSldrModelData->mSldPrimaryTick = aValue;
+ }
+ else if(aValue <= minRange)
+ {
+ mSldrModelData->mSldPrimaryTick = minRange;
+ }
+ else if(aValue >= maxRange)
+ {
+ mSldrModelData->mSldPrimaryTick = maxRange;
+ }
+ // Update the visualization
+ if(GetElement())
+ {
+ GetElement()->updateVisualization();
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the Slider Element
+// ---------------------------------------------------------------------------
+//
+IMulSliderBaseElementInternal* MulSliderModel::GetElement()
+ {
+ if(mSldrModelData->mSliderWidget)
+ {
+ return mSldrModelData->mSliderWidget->GetSliderElement();
+ }
+ else
+ {
+
+ }
+ return NULL;
+ }
+
+
+ // ---------------------------------------------------------------------------
+// update element visualization
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::UpdateElement()
+ {
+ if(mSldrModelData->mSliderWidget)
+ {
+ if(mSldrModelData->mSliderWidget->GetSliderElement())
+ {
+ mSldrModelData->mSliderWidget->GetSliderElement()->updateVisualization();
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Value
+// ---------------------------------------------------------------------------
+//
+int MulSliderModel::PrimaryValue() const
+ {
+ return mSldrModelData->mSldPrimaryTick;
+ }
+
+// ---------------------------------------------------------------------------
+// SetValue
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::SetSecondaryValue(int aValue)
+ {
+ int maxRange = mSldrModelData->mSldMaxRange;
+ int minRange = mSldrModelData->mSldMinRange;
+ if(mSldrModelData->mSldSecondaryTick != aValue)
+ {
+ // Validate aValue
+ if( (aValue >= minRange) && (aValue <= maxRange))
+ {
+ mSldrModelData->mSldSecondaryTick = aValue;
+ }
+
+ UpdateElement();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Value
+// ---------------------------------------------------------------------------
+//
+int MulSliderModel::SecondaryValue() const
+ {
+ return mSldrModelData->mSldSecondaryTick;
+ }
+
+
+// ---------------------------------------------------------------------------
+// TotalTicks
+// ---------------------------------------------------------------------------
+//
+int MulSliderModel::TotalTicks() const
+ {
+ //MUL_LOG_INFO("CMulSliderModel::TotalTicks");
+
+ int maxRange = mSldrModelData->mSldMaxRange;
+ int minRange = mSldrModelData->mSldMinRange;
+ int tick = mSldrModelData->mSldTick;
+ if(tick == 0)
+ {
+ tick = 1;
+ }
+ return ((maxRange-minRange)/tick);
+ }
+
+// ---------------------------------------------------------------------------
+// SetTemplate
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::SetTemplate( sliderTemplate aTemplateId)
+ {
+ if(mSldrModelData->mTemplateId != aTemplateId)
+ {
+ mSldrModelData->mTemplateId = aTemplateId;
+ if(mSldrModelData->mSliderWidget)
+ {
+ // Change the tempate
+ mSldrModelData->mSliderWidget->changeTemplate(aTemplateId);
+ }
+ else
+ {
+ //do nothing
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// makeInterface
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulSliderModel::makeInterface( const IfId& aType)
+ {
+ //MUL_LOG_INFO("CMulSliderModel::makeInterface");
+ IAlfInterfaceBase* ret(0);
+ UString param(aType.mImplementationId);
+ if ( param == IMulSliderModel::type().mImplementationId )
+ {
+ ret = static_cast<IMulSliderModel*>(this);
+ }
+ else if(param == IAlfModel::type().mImplementationId)
+ {
+ ret = static_cast<IAlfModel*>(this);
+ }
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// SetMinRange
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderModel::SetMinRange(int aMinRange)
+ {
+ // Validate aMinRange
+ if(aMinRange != mSldrModelData->mSldMinRange)
+ {
+ mSldrModelData->mSldMinRange = aMinRange;
+
+ if(aMinRange > mSldrModelData->mSldMaxRange)
+ {
+ mSldrModelData->mSldMaxRange = aMinRange;
+ mSldrModelData->mSldTick = 0;
+ }
+ else
+ {
+ if(mSldrModelData->mSldTick > mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange || mSldrModelData->mSldTick == 0)
+ {
+ mSldrModelData->mSldTick = mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange;
+ }
+ }
+
+ mSldrModelData->mSldPrimaryTick = aMinRange;
+ UpdateElement();
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// SetMaxRange
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderModel::SetMaxRange(int aMaxRange)
+ {
+ if(aMaxRange != mSldrModelData->mSldMaxRange)
+ {
+ mSldrModelData->mSldMaxRange = aMaxRange;
+
+ if(aMaxRange < mSldrModelData->mSldMinRange)
+ {
+ mSldrModelData->mSldMinRange = aMaxRange;
+ mSldrModelData->mSldTick = 0;
+ }
+ else
+ {
+ if(mSldrModelData->mSldTick > mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange || mSldrModelData->mSldTick == 0 )
+ {
+ mSldrModelData->mSldTick = mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange;
+ }
+ }
+
+ mSldrModelData->mSldPrimaryTick = mSldrModelData->mSldMinRange;
+ UpdateElement();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// MinRange
+// ---------------------------------------------------------------------------
+//
+
+int MulSliderModel::MinRange() const
+ {
+ //MUL_LOG_INFO("CMulSliderModel::makeInterface");
+ return mSldrModelData->mSldMinRange;
+ }
+
+// ---------------------------------------------------------------------------
+// MaxRange
+// ---------------------------------------------------------------------------
+//
+
+int MulSliderModel::MaxRange() const
+ {
+ //MUL_LOG_INFO("CMulSliderModel::makeInterface");
+ return mSldrModelData->mSldMaxRange;
+ }
+// ---------------------------------------------------------------------------
+// SetTick
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderModel::SetTick(int aTick)
+ {
+ //MUL_LOG_INFO("CMulSliderModel::makeInterface");
+ if(aTick != mSldrModelData->mSldTick && aTick > 0)
+ {
+ if(aTick > mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange)
+ {
+ mSldrModelData->mSldTick = mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange;
+ }
+ else
+ {
+ mSldrModelData->mSldTick = aTick;
+ }
+ mSldrModelData->mSldPrimaryTick = mSldrModelData->mSldMinRange;
+ if(GetElement())
+ {
+ GetElement()->updateVisualization();
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Tick
+// ---------------------------------------------------------------------------
+//
+
+int MulSliderModel::Tick() const
+ {
+ //MUL_LOG_INFO("CMulSliderModel::makeInterface");
+ return mSldrModelData->mSldTick;
+ }
+
+
+// ---------------------------------------------------------------------------
+// SetRightText
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderModel::SetRightText(char* aRightText)
+ {
+ if(aRightText)
+ {
+ mSldrModelData->mSldRightText = aRightText;
+ UpdateElement();
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// SetLeftText
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderModel::SetLeftText(char* aLeftText)
+ {
+ if(aLeftText)
+ {
+ mSldrModelData->mSldLeftText = aLeftText;
+ UpdateElement();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SetPercentText
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderModel::SetPercentText(char* aPercText)
+ {
+ if(aPercText)
+ {
+ mSldrModelData->mSldPercentText = aPercText;
+ if(GetElement())
+ {
+ GetElement()->updateTextVisualization();
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// GetRightText
+// ---------------------------------------------------------------------------
+//
+
+const char* MulSliderModel::GetRightText()
+ {
+ //MUL_LOG_INFO("CMulSliderModel::makeInterface");
+ return mSldrModelData->mSldRightText;
+ }
+
+// ---------------------------------------------------------------------------
+// GetLeftText
+// ---------------------------------------------------------------------------
+//
+
+const char* MulSliderModel::GetLeftText()
+ {
+ //MUL_LOG_INFO("CMulSliderModel::makeInterface");
+ return mSldrModelData->mSldLeftText;
+ }
+
+// ---------------------------------------------------------------------------
+// GetPercentText
+// ---------------------------------------------------------------------------
+//
+
+const char* MulSliderModel::GetPercentText()
+ {
+ //MUL_LOG_INFO("CMulSliderModel::makeInterface");
+ return mSldrModelData->mSldPercentText;
+ }
+
+
+// ---------------------------------------------------------------------------
+// addModelChangeObserver
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::addModelChangeObserver( IAlfModelChangeObserver& /*aObserver*/ )
+ {
+ //MUL_LOG_INFO("CMulSliderModel::addModelChangeObserver");
+ }
+
+// ---------------------------------------------------------------------------
+// removeModelChangeObserver
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::removeModelChangeObserver( IAlfModelChangeObserver& /*aObserver*/ )
+ {
+ //MUL_LOG_INFO("CMulSliderModel::removeModelChangeObserver");
+ }
+
+// ---------------------------------------------------------------------------
+// setData
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::setData( IAlfVariantType* /*aData*/ )
+ {
+ //MUL_LOG_INFO("CMulSliderModel::setData");
+ }
+
+// ---------------------------------------------------------------------------
+// updateData
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::updateData(int /*aNumContainerIndices*/,int* /*aContainerIndices*/,
+ IAlfVariantType* /*aData*/ )
+ {
+ //MUL_LOG_INFO("CMulSliderModel::updateData");
+ }
+
+// ---------------------------------------------------------------------------
+// addData
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::addData(int /*aNumContainerIndices*/,int* /*aContainerIndices*/,
+ IAlfVariantType* /*aData*/ )
+ {
+ //MUL_LOG_INFO("CMulSliderModel::addData");
+ }
+
+// ---------------------------------------------------------------------------
+// removeData
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::removeData(int /*aNumContainerIndices*/,int* /*aContainerIndices*/ )
+ {
+ //MUL_LOG_INFO("CMulSliderModel::removeData");
+ }
+
+// ---------------------------------------------------------------------------
+// executeOperations
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::executeOperations(AlfPtrVector<AlfModelOperation>& /*aOperationsArray*/)
+ {
+ //MUL_LOG_INFO("CMulSliderModel::executeOperations");
+
+
+ }
+
+// ---------------------------------------------------------------------------
+// executeOperation
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::executeOperation(AlfModelOperation* /*aOperation*/)
+ {
+ //MUL_LOG_INFO("CMulSliderModel::executeOperation");
+ }
+
+// ---------------------------------------------------------------------------
+// clearModel
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::clearModel()
+ {
+ //MUL_LOG_INFO("CMulSliderModel::clearModel");
+ }
+
+// ---------------------------------------------------------------------------
+// data
+// ---------------------------------------------------------------------------
+//
+IAlfVariantType* MulSliderModel::data() const
+ {
+ //MUL_LOG_INFO("CMulSliderModel::data");
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// StoreWidget
+// ---------------------------------------------------------------------------
+//
+void MulSliderModel::storeWidget(MulSliderWidget* aWidget)
+ {
+ mSldrModelData->mSliderWidget = aWidget;
+ }
+// ---------------------------------------------------------------------------
+// GetTemplate
+// ---------------------------------------------------------------------------
+//
+sliderTemplate MulSliderModel::GetTemplate()
+ {
+ return mSldrModelData->mTemplateId ;
+ }
+
+// ---------------------------------------------------------------------------
+// IsLandscape
+//
+// ---------------------------------------------------------------------------
+//
+ bool MulSliderModel::IsLandscape()
+ {
+
+ bool landscape = false;
+ if(mSldrModelData->mSliderWidget)
+ {
+ TSize size = AlfUtil::ScreenSize();
+ if(size.iHeight < size.iWidth)
+ {
+ landscape = true;
+ }
+ else if(size.iWidth < size.iHeight)
+ {
+ landscape = false;
+ }
+ }
+ return landscape;
+ }
+
+ } // Namespace Alf
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/src/mulsliderutils.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2009 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: Utilities for slider widget.
+*
+*/
+
+
+
+
+
+#include <aknlayoutscalable_uiaccel.cdl.h>
+#include "mulsliderdefinitions.h"
+#include "mulsliderutils.h"
+#include <alf/alfimageloaderutil.h>
+#include <alf/alftexture.h>
+#include <alf/alfimage.h>
+#include <alf/alfenv.h>
+#include <utf.h>
+#include "mulutility.h"
+
+
+namespace Alf
+ {
+
+ //------------------------------------------------------------------------
+ // GetComponentRect
+ //------------------------------------------------------------------------
+ TAknLayoutRect MulSliderUtils::GetComponentRect(
+ SliderLCTIDs aId,CAlfLayout *aLayout,int aVariety)
+ {
+ TAknLayoutRect layoutRect;
+ TPoint layoutRectSize = aLayout->Size().IntValueNow();
+
+ TRect rect2(0,
+ 0,
+ layoutRectSize.iX,
+ layoutRectSize.iY);
+ switch(aId)
+ {
+ case EVSliderPane:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::aaslider_pane(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,LayoutHandle);
+ }
+ break;
+
+ case EVSliderBackground:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_pane_g1(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,LayoutHandle);
+ }
+ break;
+
+ case EVSliderBgPane:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_bg_pane_cp001(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2,LayoutHandle);
+ }
+ break;
+
+ case EVSliderTop:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_bg_pane_cp001_g1(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2,LayoutHandle);
+ }
+ break;
+
+ case EVSliderMiddle:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_bg_pane_cp001_g3(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2,LayoutHandle);
+ }
+ break;
+
+ case EVSliderEnd:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_bg_pane_cp001_g2(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2,LayoutHandle);
+ }
+ break;
+
+ case EVSliderPlus:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::aaslider_pane_g4(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,LayoutHandle);
+ }
+ break;
+
+ case EVSliderMinus:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_pane_g5(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,LayoutHandle);
+ }
+ break;
+
+ case EVSliderMarker:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_pane_g2(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,LayoutHandle);
+ }
+ break;
+
+ case EVSliderInnerRect:
+ {
+ TAknWindowLineLayout LayoutHandleInner =
+ AknLayoutScalable_UiAccel::
+ aid_aaslider_pane_rect_inner(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,LayoutHandleInner);
+ }
+ break;
+ /*case EVSliderAudioImage:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_pane_g3(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2,LayoutHandle);
+ }
+ break;*/
+
+ case EHSliderPane:
+ {
+ TAknWindowLineLayout TrackLayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aacf_slider_pane(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,TrackLayoutHandle);
+ }
+ break;
+
+ case EHSliderBase:
+ {
+ TAknWindowLineLayout TrackLayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aacf_slider_pane(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,TrackLayoutHandle);
+ }
+ break;
+
+ case EHSliderCenter:
+ {
+ TAknWindowLineLayout TrackLayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_bg_pane(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2, TrackLayoutHandle);
+ }
+ break;
+
+ case EHSliderLeft:
+ {
+ TAknWindowLineLayout TrackLayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_bg_pane_g1(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,TrackLayoutHandle);
+ }
+ break;
+
+ case EHSliderCentre:
+ {
+ TAknWindowLineLayout TrackLayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_bg_pane_g2_copy1(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,TrackLayoutHandle);
+ }
+ break;
+
+ case EHSliderRight:
+ {
+ TAknWindowLineLayout TrackLayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_bg_pane_g2(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,TrackLayoutHandle);
+ }
+ break;
+
+ /*case EHSliderHandle:
+ {
+ TAknWindowLineLayout TrackLayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aaslider_pane_g2(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2, TrackLayoutHandle);
+ }
+ break;*/
+ case EHSliderHandle:
+ {
+ TAknWindowLineLayout TrackLayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aacf_slider_pane_g1(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2, TrackLayoutHandle);
+ }
+ break;
+ case EVSliderMarkerExtended:
+ {
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aid_touch_size_slider_marker(aVariety).LayoutLine();
+ layoutRect.LayoutRect( rect2,LayoutHandle);
+ }
+ break;
+ case EPSliderLeft:
+ {
+ TAknWindowLineLayout ProgressPaneLeft =
+ AknLayoutScalable_UiAccel::
+ aalist_progress_pane_g1(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2, ProgressPaneLeft);
+ }
+ break;
+
+ case EPSliderCentre:
+ {
+ TAknWindowLineLayout ProgressPaneCentre =
+ AknLayoutScalable_UiAccel::
+ aalist_progress_pane_g2(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2, ProgressPaneCentre);
+ }
+ break;
+
+ case EPSliderRight:
+ {
+ TAknWindowLineLayout ProgressPaneRight =
+ AknLayoutScalable_UiAccel::
+ aalist_progress_pane_g3(aVariety).LayoutLine();
+ layoutRect.LayoutRect(rect2, ProgressPaneRight);
+ }
+ break;
+ default: ;
+
+ }// end of switch
+
+ return layoutRect;
+
+ }
+
+ //-------------------------------------------------------------------------
+ // GetTextComponentRect
+ //-------------------------------------------------------------------------
+ TAknLayoutText MulSliderUtils::GetTextComponentRect(
+ SliderLCTIDs aId, CAlfLayout *aLayout, int aVariety)
+ {
+ TAknLayoutText textRect;
+
+ TRect rect2(0,
+ 0,
+ aLayout->Size().iX.ValueNow(),
+ aLayout->Size().iY.ValueNow());
+ switch(aId)
+ {
+ case EVSliderZoomText:
+ {
+ TAknTextLineLayout textLayout =
+ AknLayoutScalable_UiAccel::aaslider_pane_t3(aVariety).LayoutLine();
+ textRect.LayoutText(rect2, textLayout );
+ }
+ break;
+
+ default: ;
+
+ }
+
+ return textRect;
+ }
+
+
+ } // End of namespace Alf
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/src/mulsliderwidget.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,441 @@
+/*
+* 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 for slider widget.
+ *
+*/
+
+
+// Alfred Client includes
+#include <alf/alfenv.h>
+
+// Widget Model includes
+#include "alf/alfelement.h"
+
+// Widget Includes
+#include "imulsliderbaseelementinternal.h"
+#include <mul/mulsliderproductids.h>
+// Internal includes
+#include "mulslidervertical.h"
+#include "mulsliderwidget.h"
+#include "mulslidermodel.h"
+#include "mulslidercontrol.h"
+#include <alf/alfwidgetenvextension.h>
+using namespace mulsliderwidget;
+
+using Alf::CommonWidgetEvent;
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// Creator Method.
+// ---------------------------------------------------------------------------
+//
+MulSliderWidget* MulSliderWidget :: create(
+ CAlfEnv& aEnv,
+ IAlfContainerWidget& aContainer,
+ const char* aWidgetId,
+ AlfCustomInitDataBase* aCustomData)
+ {
+
+ return (new( EMM ) MulSliderWidget(aEnv,
+ aContainer, aWidgetId,aCustomData));
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+MulSliderWidget::~MulSliderWidget()
+ {
+ if(mSliderModel)
+ {
+ delete mSliderModel;
+ }
+ else
+ {
+
+ }
+ }
+
+/**
+ * Get the model for widget.
+ *
+ * @return model of the slider widget
+ */
+IMulSliderModel& MulSliderWidget::SliderModel()
+ {
+ return *mSliderModel;
+ }
+/**
+ * Set the transparency for the background of the slider widget.
+ *
+ * @param True, to set background as transparent
+ * @param False, to set background as opaque
+ */
+ void MulSliderWidget::MakeTransparent( bool aTransparent)
+ {
+ mElement->MakeTransparent(aTransparent);
+ }
+
+/**
+ * Enable/Disable key handling .
+ *
+ * @param aVal: True, to handle keyevents by Application
+ * False, to handle keyevents as defined in the control
+ */
+void MulSliderWidget::SetHandleKeyEvent( bool aVal )
+ {
+ mHandleKeyEvent = aVal;
+ }
+/**
+ *
+ * Returns KeyEvent enable status
+ *
+ */
+bool MulSliderWidget::IsKeyEnabled()
+ {
+ return mHandleKeyEvent;
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidget.
+// Getter for the parent container. The ownership not passed.
+// ---------------------------------------------------------------------------
+//
+IAlfContainerWidget* MulSliderWidget::parent() const
+ {
+ return mWidget->parent();
+ }
+
+
+// From class MAlfInterfaceBase.
+
+// ---------------------------------------------------------------------------
+// Getter for interfaces provided by the slider widget.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulSliderWidget :: makeInterface(const IfId& aType)
+ {
+ UString param ( aType.mImplementationId );
+
+ if (param == IMulSliderWidget::type().mImplementationId)
+ {
+ return static_cast<IMulSliderWidget*>(this);
+ }
+ else if (param == IAlfWidget::type().mImplementationId)
+ {
+ return static_cast<IAlfWidget*>(this);
+ }
+
+ else
+ {
+ //do nothing
+ }
+
+ // @todo other interfaces
+ return mWidget->makeInterface(aType);
+ }
+
+
+// From class IAlfWidget.
+
+// ---------------------------------------------------------------------------
+// Getter for the control. The ownership is not passed.
+// ---------------------------------------------------------------------------
+//
+CAlfWidgetControl* MulSliderWidget :: control() const
+ {
+ //return mSliderControl;
+ return mWidget->control();
+ }
+
+
+// ---------------------------------------------------------------------------
+// Setter for the control. The control is owned by the Alfred environment.
+// ---------------------------------------------------------------------------
+//
+void MulSliderWidget :: setControl(
+ CAlfWidgetControl* aControl, bool /*aDeletePreviousControl*/ )
+ {
+ mSliderControl = aControl;
+ mWidget->setControl(aControl);
+ }
+
+
+// ---------------------------------------------------------------------------
+// Getter for the model. The ownership is not passed.
+// ---------------------------------------------------------------------------
+//
+IAlfModel* MulSliderWidget :: model()
+ {
+ return mSliderModel;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Setter for the model. Ownership is passed and the old model is released.
+// ---------------------------------------------------------------------------
+//
+void MulSliderWidget :: setModel( IAlfModel* aModel, bool /*aTakeOwnerShip*/)
+ {
+
+ if(aModel==NULL)
+ {
+ // Destroy the visualization if Model is NULL.
+ if(mElement)
+ {
+ // Destroy the visual tree
+ mSliderControl->Visual(0).RemoveAndDestroyAllD();
+ // Removes the element from control and destroys it
+ mSliderControl->removeAndDestroyElement(*((IAlfElement *)mElement));
+ mElement = NULL;
+ }
+ delete mSliderModel;
+ mSliderModel = NULL;
+ }
+ else
+ {
+ if(mSliderModel)
+ {
+ delete mSliderModel;
+ mSliderModel = NULL;
+ }
+ mSliderModel = static_cast<IMulSliderModel*>( aModel->makeInterface(
+ IMulSliderModel::type()));
+ MulSliderModel* sliderModel = (MulSliderModel*)mSliderModel;
+ // Store the widget pointer in model
+ sliderModel->storeWidget(this);
+ if(mElement)
+ {
+ // Destroy the visual tree
+ mSliderControl->Visual(0).RemoveAndDestroyAllD();
+ // Removes the element from control and destroys it
+ mSliderControl->removeAndDestroyElement(*((IAlfElement *)mElement));
+ mElement = NULL;
+ }
+ if(mSliderModel)
+ {
+ sliderTemplate tmplateID = sliderModel->GetTemplate();
+ if(tmplateID != ESliderTemplateNone)
+ {
+ switch(tmplateID)
+ {
+ case ESliderTemplate3:// zoom slider
+ CreateSliderElement(KSliderVerticalElement);
+ break;
+ case ESliderTemplate7:// progressbar
+ CreateSliderElement(KSliderProgressbarElement);
+ break;
+ default:// rest all tempaltes are horizonatal
+ CreateSliderElement(KSliderHorizontalElement);
+ }
+ if(mElement)
+ {
+ mElement->createVisualization(tmplateID);
+ ShowWidget(!IsHidden());
+ }
+
+ }
+ }
+ }
+ }// End of setModel
+
+// ---------------------------------------------------------------------------
+// Get the name of the widget instance.
+// ---------------------------------------------------------------------------
+//
+const char* MulSliderWidget :: widgetName() const
+ {
+ return mWidget->widgetName();
+ }
+
+// ---------------------------------------------------------------------------
+// Sets/Releases the Focus from child widget of container.
+// ---------------------------------------------------------------------------
+//
+void MulSliderWidget::setChildFocus(bool /*aFocus*/)
+ {
+ }
+
+//---------------------------------------------------------------------------
+// Creates the presentation for the widget from XML. Destroys any existing
+// presentation.
+//---------------------------------------------------------------------------
+//
+void MulSliderWidget::setPresentation(const char* /*aFilePath*/)
+ {
+ }
+
+
+//---------------------------------------------------------------------------
+// Gets the Widget Opacity
+//
+//---------------------------------------------------------------------------
+//
+bool MulSliderWidget::GetOpacity()
+ {
+ return mOpacity;
+ }
+
+//---------------------------------------------------------------------------
+// Gets the Widget Opacity
+//
+//---------------------------------------------------------------------------
+//
+bool MulSliderWidget::IsHidden()
+ {
+ return !mOpacity;
+ }
+
+// ---------------------------------------------------------------------------
+// Default constructor.
+// ---------------------------------------------------------------------------
+//
+MulSliderWidget::MulSliderWidget(
+ CAlfEnv& aEnv, IAlfContainerWidget& aContainer,
+ const char* aWidgetId,
+ AlfCustomInitDataBase* /*aCustomData*/)
+ {
+ // Default widget is shown
+ mOpacity = true;
+ mSliderModel = NULL;
+ mElement = NULL;
+ mHandleKeyEvent = true;
+ mWidget.reset(new(EMM) AlfWidget(aWidgetId,aContainer,aEnv));
+ // Default Imperative Construction
+ // Create Control
+ CAlfWidgetControl* ctrl = constructDefaultControl(aEnv);
+ setControl(ctrl);
+ }
+
+void MulSliderWidget::CreateSliderElement(const char* aElementId)
+ {
+ IAlfWidgetFactory& widgetFactory = AlfWidgetEnvExtension::widgetFactory(
+ control()->Env());
+
+ IAlfElement * baseelement = widgetFactory.createElement<IAlfElement>
+ ( aElementId,
+ baseElementName(),
+ *control(),
+ NULL,
+ NULL );
+
+ // Store the element pointer
+ mElement = static_cast<IMulSliderBaseElementInternal*>(
+ baseelement->makeInterface(
+ IMulSliderBaseElementInternal::type()));
+ }
+
+// ---------------------------------------------------------------------------
+// Construct and returns Slider Control.
+// ---------------------------------------------------------------------------
+//
+CAlfWidgetControl *MulSliderWidget::constructDefaultControl(CAlfEnv& aEnv)
+ {
+ return(new(EMM) MulSliderControl(aEnv) );
+ }
+
+void MulSliderWidget::changeTemplate(int /*aTemplateId*/)
+ {
+ if( mSliderModel )
+ {
+ if(mElement)
+ {
+ mSliderControl->Visual(0).RemoveAndDestroyAllD();
+ mSliderControl->removeAndDestroyElement(*((IAlfElement*)mElement));
+ // delete baseelement;
+ mElement = NULL;
+ }
+
+ MulSliderModel* sliderModel = (MulSliderModel*)mSliderModel;
+ sliderTemplate i = sliderModel->GetTemplate();
+ switch(i)
+ {
+ case ESliderTemplateNone :// no template id is set
+ return;
+ case ESliderTemplate3:// zoom slider
+ CreateSliderElement(KSliderVerticalElement);
+ break;
+ case ESliderTemplate7:// progressbar
+ CreateSliderElement(KSliderProgressbarElement);
+ break;
+ default:// rest aal tempaltes are horizonatal
+ CreateSliderElement(KSliderHorizontalElement);
+ }
+ mElement->createVisualization(i);
+ ShowWidget(!IsHidden());
+ }
+ }
+
+void MulSliderWidget::ShowWidget(bool opacity,int aTransitionTime)
+ {
+ mOpacity = opacity;
+ if(mElement && mSliderModel)
+ {
+ MulSliderModel* sliderModel = static_cast<MulSliderModel*>(mSliderModel);
+
+ if( sliderModel->GetTemplate() == ESliderTemplate3 && !mOpacity)
+ {
+ mElement->stopEvents();
+ }
+ CAlfLayout *layout = mSliderControl->ContainerLayout(NULL);
+ TAlfTimedValue t1(0,aTransitionTime);
+ if(opacity)
+ {
+ t1.SetTarget(1,aTransitionTime);
+ }
+
+ layout->SetOpacity(t1);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Get the root layout of slider
+// ---------------------------------------------------------------------------
+//
+const CAlfLayout& MulSliderWidget ::ContainerLayout()
+ {
+ CAlfLayout* layout = mSliderControl->ContainerLayout(NULL);
+ return *layout;
+ }
+
+// ---------------------------------------------------------------------------
+// AddEventHandler
+// ---------------------------------------------------------------------------
+//
+void MulSliderWidget::AddEventHandler( IAlfWidgetEventHandler& aObserver)
+ {
+ control()->addEventHandler(&aObserver);
+ }
+
+// ---------------------------------------------------------------------------
+// RemoveEventHandler
+// ---------------------------------------------------------------------------
+//
+void MulSliderWidget::RemoveEventHandler( IAlfWidgetEventHandler& aObserver)
+ {
+ control()->removeEventHandler(aObserver);
+ }
+// ---------------------------------------------------------------------------
+// RemoveEventHandler
+// ---------------------------------------------------------------------------
+//
+IMulSliderBaseElementInternal* MulSliderWidget::GetSliderElement()
+ {
+ return mElement;
+ }
+
+ }//End of Alf
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/src/mulsliderwidgetfactoryplugin.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2009 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: Plugin factory implementation for slider widget.
+*
+*/
+
+// OSN Includes
+#include <osn/ustring.h>
+
+// WidgetModel Includes
+#include "alf/alfwidget.h"
+#include <alf/ialfwidget.h>
+#include <alf/ialfelement.h>
+
+// Symbian Includes
+#include <ecom/ecom.h>
+
+// OpenC Includes
+#include <libc/string.h>
+
+// Widget Includes
+#include <mul/imulsliderwidget.h>
+#include <mul/mulsliderproductids.h>
+#include "imulsliderbaseelementinternal.h"
+//Internal includes
+#include "mulsliderwidgetfactoryplugin.h"
+#include "mulsliderwidget.h"
+#include "mulslidermodel.h"
+#include "mulslidervertical.h"
+#include "mulprogressbarslider.h"
+#include "mulsliderhorizontal.h"
+//#include "alfscrollbardefaultlctbaseelement.h"
+
+using namespace osncore;
+
+namespace Alf
+ {
+const TInt KScrollBarWidgetFactoryPluginUid = {0x2000FA80};
+const int KProductCount = 5;
+
+
+// ---------------------------------------------------------------------------
+// Two-phased Symbian constructor.
+// ---------------------------------------------------------------------------
+//
+MulSliderWidgetFactoryPlugin* MulSliderWidgetFactoryPlugin::NewL()
+ {
+ return new (EMM) MulSliderWidgetFactoryPlugin;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+MulSliderWidgetFactoryPlugin::~MulSliderWidgetFactoryPlugin()
+ {
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// Creates either a scrollbar widget or a scrollbar model.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulSliderWidgetFactoryPlugin::createProduct(
+ const char* aProduct,
+ void* aInitData)
+ {
+ IAlfInterfaceBase* ret (0);
+
+ if (!strcmp(aProduct, KSliderWidget))
+ {
+ AlfWidgetInitData* initData = (AlfWidgetInitData*)aInitData;
+ auto_ptr<MulSliderWidget> widget(MulSliderWidget::create(
+ *initData->mEnv,
+ *initData->mContainerWidget,
+ initData->mWidgetId,
+ initData->mCustomData));
+ ret = widget->makeInterface (IMulSliderWidget::type());
+ widget.release();
+ }
+ else if (!strcmp(aProduct, KSliderModel))
+ {
+ auto_ptr<MulSliderModel> model(new(EMM) MulSliderModel());
+ ret = model->makeInterface (IMulSliderModel::type());
+ model.release();
+ }
+ // Vertical element support template 3, 9
+ else if (!strcmp(aProduct, KSliderVerticalElement))
+ {
+ AlfElementInitData* initData = (AlfElementInitData*) aInitData;
+ auto_ptr<MulSliderVertical> element(
+ new(EMM) MulSliderVertical(
+ (CAlfWidgetControl&)(*initData->mControl),
+ initData->mElementId,
+ initData->mCustomData));
+
+ ret = element->makeInterface(IMulSliderBaseElementInternal::type());
+ element.release();
+ }
+ // Progressbar element support template 7,8
+ else if(!strcmp(aProduct, KSliderProgressbarElement))
+ {
+ AlfElementInitData* initData = (AlfElementInitData*) aInitData;
+ auto_ptr<MulSliderProgressive> element(
+ new(EMM) MulSliderProgressive(
+ (CAlfWidgetControl&)(*initData->mControl),
+ initData->mElementId,
+ initData->mCustomData));
+ ret = element->makeInterface(IMulSliderBaseElementInternal::type());
+ element.release();
+ }
+ // Horizontal element support template 1,2,4,6
+ else if(!strcmp(aProduct, KSliderHorizontalElement))
+ {
+ AlfElementInitData* initData = (AlfElementInitData*) aInitData;
+ auto_ptr<MulSliderHorizontal> element(
+ new(EMM) MulSliderHorizontal(
+ (CAlfWidgetControl&)(*initData->mControl),
+ initData->mElementId,
+ initData->mCustomData));
+ ret = element->makeInterface(IMulSliderBaseElementInternal::type());
+ element.release();
+ }
+
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From IAlfInterfaceBase.
+// Creates interface based on the given type.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulSliderWidgetFactoryPlugin::makeInterface(
+ const IfId& aType)
+ {
+ UString param (aType.mImplementationId);
+ if (param == UString (IAlfFactoryPlugin::type().mImplementationId))
+ {
+ return static_cast<IAlfFactoryPlugin*> (this);
+ }
+ else
+ {
+ // Do Nothing
+ }
+ return NULL;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Returns the amount of products this factory can produce.
+// ---------------------------------------------------------------------------
+//
+int MulSliderWidgetFactoryPlugin::productCount() const
+ {
+ return KProductCount;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Returns product information.
+// ---------------------------------------------------------------------------
+//
+const char* MulSliderWidgetFactoryPlugin::productInfo (int aIndex) const
+ {
+ switch (aIndex)
+ {
+ case ESliderWidget:
+ {
+ return KSliderWidget;
+ }
+
+ case ESliderModel:
+ {
+ return KSliderModel;
+ }
+
+ case ESliderHorizontalElement:
+ {
+ return KSliderHorizontalElement;
+ }
+
+ case ESliderVerticalElement:
+ {
+ return KSliderVerticalElement;
+ }
+
+ case ESliderProgressbarElement:
+ {
+ return KSliderProgressbarElement;
+ }
+
+ default:
+ break;
+
+ }
+
+ return 0;
+ }
+
+ }// NameSpace
+
+
+// ---------------------------------------------------------------------------
+// OTHER EXPORTED FUNCTIONS.
+// ---------------------------------------------------------------------------
+//
+
+using namespace Alf;
+const TImplementationProxy ImplementationTable[] =
+ {
+#ifdef __EABI__
+ IMPLEMENTATION_PROXY_ENTRY (
+ KScrollBarWidgetFactoryPluginUid,
+ MulSliderWidgetFactoryPlugin::NewL)
+#else
+ {
+ {KScrollBarWidgetFactoryPluginUid},
+ MulSliderWidgetFactoryPlugin::NewL}
+#endif
+ };
+
+OSN_EXPORT const TImplementationProxy* ImplementationGroupProxy(
+ TInt& aTableCount)
+ {
+ aTableCount = sizeof (ImplementationTable) / sizeof (TImplementationProxy);
+
+ return ImplementationTable;
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulsliderwidget/src/mulverticalslider.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1431 @@
+/*
+* Copyright (c) 2007 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 for presentation element - vertical.
+*
+*/
+
+//Toolkit Includes
+#include <avkon.mbg>
+#include <mulsliderwidget.mbg>
+
+// Alfred Client includes
+#include <alf/alfenv.h>
+#include <alf/alfroster.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfbrusharray.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfevent.h>
+#include <alf/alftexture.h>
+#include <alf/alfframebrush.h>
+
+//Widget Model Includes
+#include <alf/alfwidgetevents.h>
+#include <alf/alfwidgetenvextension.h>
+#include <alf/ialfmodel.h>
+
+//Avkon Includes
+#include <AknUtils.h>
+#include <AknsConstants.h>
+#include <utf.h>
+#include <aknlayoutscalable_uiaccel.cdl.h>
+#include <avkon.hrh>
+//#include <math.h>
+
+//slider widget includes
+#include "mulslidervertical.h"
+#include <mul/mulevent.h>
+#include "mulsliderwidget.h"
+#include "mulslidercontrol.h"
+#include "mulslidermodel.h"
+#include "mulsliderdefinitions.h"
+#include "mulsliderutils.h"
+
+//Timer function includes
+#include "mulsliderlongtaptimer.h"
+#include <alf/alfgradientbrush.h>
+namespace Alf
+ {
+// Structure to store data for the slider element class
+struct MulVerticalSliderDataImpl
+ {
+ bool mOperation;// Drag state
+ bool mSliderHit;// button down has happened on slider visual
+ float mTickInPixels;// Tick size in Pixel
+ int mRangeInPixels;// Range in Pixel
+ int mCurrTickInPixels;// Current Tick posion in pixels
+ CAlfVisual * mVisual;// Stores the current visual hit
+ TPoint mDragPoint;// Point at which drag started
+ TPoint mLongTapPos;// Point at which button down happened
+ TSize mTrackTopImageSizePrt;
+ TSize mTrackTopImageSizeLsc;
+ TSize mTrackMiddleImageSizePrt;
+ TSize mTrackMiddleImageSizeLsc;
+ TSize mTrackBottomImageSizePrt;
+ TSize mTrackBottomImageSizeLsc;
+ TSize mSliderHandleSizePrt;
+ TSize mSliderHandleSizeLsc;
+ TSize mImagePlusSizePrt;
+ TSize mImagePlusSizeLsc;
+ TSize mImageMinusSizePrt;
+ TSize mImageMinusSizeLsc;
+ int mDragStartStep;// Tick positon of Drag Start
+ int mCurrTick;// Stores current tick
+ int mTick;// Stores Tick Size
+ int mTrackStartPoint;// Slider Track Start Point in pixel
+ int mHandleGhostHieghtDelta;
+ bool mOrientationLandScape;
+ bool mHasBackground; // for background only created once
+ int mdirection;// 0 - nomovement,1 up movement 2 down
+ bool mLayoutMirrored;// RTL if True else LTR
+ int mImageTextureId; // to differtiate between textures
+ int mTrackTopTexturePrtId ;// to store the auto generated texture id's
+ int mTrackTopTextureLscId;
+ int mTrackBottomTexturePrtId;
+ int mTrackBottomTextureLscId;
+ int mTrackMiddleTextureLscId;
+ int mTrackMiddleTexturePrtId;
+ int mMarkerTextureLscId;
+ int mMarkerTexturePrtId;
+ int mZoomInTexturePrtId;
+ int mZoomInTextureLscId;
+ int mZoomOutTexturePrtId;
+ int mZoomOutTextureLscId;
+ bool misSetModel;
+
+
+ CAlfLayout* mMainLayout;
+ CAlfLayout* mBaseSliderLayout;// Slider Background
+ CAlfTexture* mTexture;
+ CAlfLayout* mSliderCentre;// Track layout
+ CAlfLayout* mSliderCentreGhost;// Extended touch are for track
+ CAlfImageVisual* mTrackTopImage;
+ CAlfImageVisual* mTrackMiddleImage;
+ CAlfImageVisual* mTrackEndImage;
+ CAlfImageVisual* mSliderHandle;// Slider Handle
+ CAlfLayout* mSliderHandleGhost;//Extended touch are for handle
+ CAlfVisual* mSliderPercentAudio;//Visula showing percentage
+ CAlfImageVisual* mImagePlus;// Zoom in
+ CAlfImageVisual* mImageMinus;// Zoom out
+
+
+ MulVerticalSliderDataImpl()
+ {
+ mOperation = false;
+ mSliderHit = false;
+ misSetModel = false;
+ mTickInPixels = 0;
+ mRangeInPixels = 0;
+ mCurrTickInPixels = 0;
+ mVisual = NULL;
+ mDragPoint.SetXY(0,0);
+ mLongTapPos.SetXY(0,0);
+ mDragStartStep = 0;
+ mCurrTick = 0;
+ mTick = 0;
+ mTrackStartPoint = 0;
+ mImageTextureId = 0;
+ mTrackTopTexturePrtId = 0;
+ mTrackTopTextureLscId = 0;
+ mTrackBottomTexturePrtId = 0;
+ mTrackBottomTextureLscId = 0;
+ mTrackMiddleTexturePrtId = 0;
+ mTrackMiddleTextureLscId = 0;
+ mMarkerTexturePrtId = 0;
+ mMarkerTextureLscId = 0;
+ mZoomInTexturePrtId = 0;
+ mZoomInTextureLscId = 0;
+ mZoomOutTexturePrtId = 0;
+ mZoomOutTextureLscId = 0;
+ mMainLayout = NULL;
+ mBaseSliderLayout = NULL;
+ mSliderCentre = NULL;
+ mTrackTopImage = NULL;
+ mTrackMiddleImage = NULL;
+ mTrackEndImage = NULL;
+ mSliderCentreGhost = NULL;
+ mSliderHandleGhost = NULL;
+ mSliderHandle = NULL;
+ mSliderPercentAudio = NULL;
+ mImagePlus = NULL;
+ mImageMinus = NULL;
+ mHandleGhostHieghtDelta = 0;
+ mOrientationLandScape = false;
+ mdirection = 0;
+ mLayoutMirrored = false;
+ mHasBackground = false;
+ mTrackTopImageSizePrt.SetSize(0,0);
+ mTrackTopImageSizeLsc.SetSize(0,0);
+ mTrackBottomImageSizePrt.SetSize(0,0);
+ mTrackBottomImageSizeLsc.SetSize(0,0);
+ mTrackMiddleImageSizePrt.SetSize(0,0);
+ mTrackMiddleImageSizeLsc.SetSize(0,0);
+ mSliderHandleSizePrt.SetSize(0,0);
+ mSliderHandleSizeLsc.SetSize(0,0);
+ mImagePlusSizePrt.SetSize(0,0);
+ mImagePlusSizeLsc.SetSize(0,0);
+ mImageMinusSizePrt.SetSize(0,0);
+ mImageMinusSizeLsc.SetSize(0,0);
+ }
+
+ };
+
+// bitmap file path
+_LIT(KAvkonBitmapFile,"\\resource\\apps\\avkon2.mbm");
+_LIT(KSliderBitmapFile,"\\resource\\apps\\mulsliderwidget.mif");
+
+const TInt KAlfTrackTopTextureId = 1;
+const TInt KAlfTrackBottomTextureId = 2;
+const TInt KAlfTrackMiddleTextureId = 3;
+const TInt KAlfMarkerTextureId = 4;
+const TInt KAlfZoomInTextureId = 5;
+const TInt KAlfZoomOutTextureId = 6;
+
+// ---------------------------------------------------------------------------
+// C++ default constructor.
+// ---------------------------------------------------------------------------
+//
+MulSliderVertical::MulSliderVertical(
+ CAlfWidgetControl& aControl,
+ const char* aName,
+ AlfCustomInitDataBase* /*aCustomData*/)
+ : mData(NULL)
+ {
+ // Base class (AlfElement) construct
+ construct(aControl, aName);
+ mSliderModel = NULL;
+ mSliderWidget = NULL;
+ mData = new (EMM) MulVerticalSliderDataImpl;
+ mPosData.reset(new(EMM)MulSliderPos);
+
+ // Timer for generating tap and hold repeat events
+ mLongTapTimer.reset(new (EMM) MulSliderLongTapTimer(this));
+ initializeSliderData();
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+MulSliderVertical::~MulSliderVertical()
+ {
+ // Visualization Data
+ if(mData)
+ {
+ CAlfTextureManager& txtmanager = control().Env().TextureManager();
+ txtmanager.UnloadTexture(mData->mTrackTopTextureLscId);
+ txtmanager.UnloadTexture(mData->mTrackTopTexturePrtId);
+ txtmanager.UnloadTexture(mData->mTrackMiddleTextureLscId);
+ txtmanager.UnloadTexture(mData->mTrackMiddleTexturePrtId);
+ txtmanager.UnloadTexture(mData->mTrackBottomTextureLscId);
+ txtmanager.UnloadTexture(mData->mTrackBottomTexturePrtId);
+ txtmanager.UnloadTexture(mData->mMarkerTexturePrtId);
+ txtmanager.UnloadTexture(mData->mMarkerTextureLscId);
+ txtmanager.UnloadTexture(mData->mZoomInTexturePrtId);
+ txtmanager.UnloadTexture(mData->mZoomInTextureLscId);
+ txtmanager.UnloadTexture(mData->mZoomOutTexturePrtId);
+ txtmanager.UnloadTexture(mData->mZoomOutTextureLscId);
+ delete mData;
+ }
+ else
+ {
+
+ }
+
+ }//End of Destructor
+
+// ---------------------------------------------------------------------------
+// From class MAlfInterfaceBase.
+// Getter for interfaces provided by the slider widget.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* MulSliderVertical::makeInterface(
+ const IfId& aType)
+ {
+ IAlfInterfaceBase* interface = 0;
+ UString param (aType.mImplementationId);
+ if (param == IAlfWidgetEventHandler::type().mImplementationId)
+ {
+ return static_cast<IAlfWidgetEventHandler*>(this);
+ }
+ else if (param ==
+ IMulSliderBaseElementInternal::type().mImplementationId)
+ {
+ return static_cast<IMulSliderBaseElementInternal*>(this);
+ }
+ else
+ {
+ interface = AlfElement::makeInterface(aType);
+ }
+ return interface;
+ }
+
+//--------------------------------------------------------------------------
+// APIs from the IMulSliderBaseElement
+//--------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------
+// Gets called when the parent layout is relayouted.
+// resets all the anchor points and updates the visualization
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::baseLayoutSizeChanged()
+ {
+ mData->mMainLayout->ClearFlag(EAlfVisualFlagLayoutUpdateNotification);
+ if(mData->mMainLayout)
+ {
+ //mData->mOrientationLandScape = mSliderModel->IsLandscape();
+ // This is a hack to resolve screen refresh issue
+ control().Env().RefreshCallBack(&(control().Env()));
+ // Layout the visualization with correct LCT values
+ layoutVisuals(mSliderModel->GetTemplate());
+ // Convert all the user defined data to pixels
+ ConvertDataToPixels();
+ // Set the thumb position to the current tick
+ SetThumbPosition();
+ mData->mMainLayout->SetOpacity(mSliderWidget->GetOpacity());
+ }
+ mData->mMainLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::setActiveStates(
+ unsigned int /*aStates*/)
+ {
+ //do nothing
+ }
+
+// ---------------------------------------------------------------------------
+// initializes Model and Widget Pointer
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::initializeSliderData()
+ {
+ // initialize the Slider Widget Pointer;
+ IAlfWidgetFactory& widgetFactory =
+ AlfWidgetEnvExtension::widgetFactory(control().Env());
+ mSliderWidget = static_cast<MulSliderWidget *>(widgetFactory.findWidget(
+ control().widget()->widgetName()));
+
+ // initialize the Slider Model Pointer;
+ mSliderModel =static_cast<MulSliderModel*>(mSliderWidget->model());
+ }
+
+// ---------------------------------------------------------------------------
+// set the positions and images for the visual hierarchy
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::layoutVisuals( sliderTemplate /*aTemplateId*/)
+ {
+
+ bool relayout = mData->misSetModel;
+
+ if(mData->mLayoutMirrored != AknLayoutUtils::LayoutMirrored())
+ {
+ mData->mOrientationLandScape = !mSliderModel->IsLandscape();
+ mData->mLayoutMirrored = AknLayoutUtils::LayoutMirrored();
+ }
+
+ if( mSliderModel->IsLandscape() != mData->mOrientationLandScape )
+ {
+ relayout = true;
+ mData->mOrientationLandScape = mSliderModel->IsLandscape();
+ }
+ if(relayout)
+ {
+ mData->misSetModel = false;
+ CAlfControl* ctrl = (CAlfControl*)&control();
+ TAknLayoutRect layoutRect;
+ //get the lct rect for mBaseSliderLayout and set it
+ // aaslider_pane(3)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderPane,mData->mMainLayout,KVariety3);
+ mData->mBaseSliderLayout->SetRect(
+ TRect( TPoint(layoutRect.Rect().iTl.iX,layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+
+ if(!mData->mHasBackground)
+ SetBackgroundBrush();
+ // Set Position and Size for Extended touch layout for track
+ mData->mSliderCentreGhost->SetRect(
+ TRect( TPoint(0,0 ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight )));
+
+
+ //get the lct rect for mSliderCentre and set it
+ //aaslider_bg_pane_cp001(6)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderBgPane,
+ mData->mBaseSliderLayout,
+ KVariety6);
+
+ mData->mSliderCentre->SetRect(
+ TRect( TPoint( layoutRect.Rect().iTl.iX ,
+ layoutRect.Rect().iTl.iY),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight )));
+
+ //get the lct rect for mTrackTopImage and set it
+ //aaslider_bg_pane_cp001_g1(0)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderTop,
+ mData->mSliderCentre,
+ KVariety0);
+
+ mData->mTrackTopImage->SetRect(
+ TRect( TPoint(0,layoutRect.Rect().iTl.iY),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight )));
+
+ mSliderModel->IsLandscape() ? mData->mTrackTopImageSizeLsc = layoutRect.Rect().Size():
+ mData->mTrackTopImageSizePrt = layoutRect.Rect().Size();
+
+ //get the lct rect for mTrackMiddleImage and set it
+ //aaslider_bg_pane_cp001_g3(0)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderMiddle,
+ mData->mSliderCentre,
+ KVariety0);
+ mData->mTrackMiddleImage->SetRect(
+ TRect( TPoint( 0,layoutRect.Rect().iTl.iY),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight )));
+
+ mSliderModel->IsLandscape() ? mData->mTrackMiddleImageSizeLsc = layoutRect.Rect().Size():
+ mData->mTrackMiddleImageSizePrt = layoutRect.Rect().Size();
+ //get the lct rect for mTrackEndImage and set it
+ //aaslider_bg_pane_cp001_g2(0)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderEnd,
+ mData->mSliderCentre,
+ KVariety0);
+ mData->mTrackEndImage->SetRect(
+ TRect( TPoint(0,layoutRect.Rect().iTl.iY),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight )));
+ mSliderModel->IsLandscape() ? mData->mTrackBottomImageSizeLsc = layoutRect.Rect().Size():
+ mData->mTrackBottomImageSizePrt = layoutRect.Rect().Size();
+
+ if(mData->mTrackTopImage && mData->mTrackMiddleImage && mData->mTrackEndImage)
+ {
+ setTrackImage();
+ }
+
+
+ //get the lct rect for mSliderHandle and set it
+ //aid_touch_size_slider_marker(5)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderMarker,
+ mData->mBaseSliderLayout,
+ KVariety5);
+ mData->mSliderHandle->SetRect(
+ TRect( TPoint( layoutRect.Rect().iTl.iX,layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+ mSliderModel->IsLandscape() ? mData->mSliderHandleSizeLsc = layoutRect.Rect().Size():
+ mData->mSliderHandleSizePrt = layoutRect.Rect().Size();
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderMarkerExtended,
+ mData->mBaseSliderLayout,
+ KVariety5);
+ mData->mHandleGhostHieghtDelta =
+ (layoutRect.Rect().Size().iHeight - mData->mSliderHandle->Size().iY.ValueNow() );
+
+ // Set Position and Size for Extended touch layout for handle
+ mData->mSliderHandleGhost->SetRect(
+ TRect( TPoint( mData->mBaseSliderLayout->Pos().iX.ValueNow(),
+ mData->mSliderHandle->Pos().iY.ValueNow()-
+ mData->mHandleGhostHieghtDelta/2),
+ TSize( mData->mBaseSliderLayout->Size().iX.ValueNow(),
+ layoutRect.Rect().Size().iHeight)));
+
+ if(mData->mSliderHandle)
+ {
+ mData->mImageTextureId = KAlfMarkerTextureId;
+ // Create the texture from bitmap provider
+ mData->mSliderHandle->SetImage( skinTexture(mData->mSliderHandleSizePrt ,mData->mSliderHandleSizeLsc , mData->mMarkerTexturePrtId, mData->mMarkerTextureLscId ) );
+ }
+
+ //get the lct rect for mImagePlus and set it
+ // aid_touch_size_slider_max(1)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderPlus,
+ mData->mBaseSliderLayout,
+ KVariety1);
+ mData->mImagePlus->SetRect(
+ TRect( TPoint( layoutRect.Rect().iTl.iX,layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+
+ mSliderModel->IsLandscape() ? mData->mImagePlusSizeLsc = layoutRect.Rect().Size():
+ mData->mImagePlusSizePrt = layoutRect.Rect().Size();
+ if(mData->mImagePlus)
+ {
+ mData->mImageTextureId = KAlfZoomInTextureId;
+ // Create the texture from bitmap provider
+ mData->mImagePlus->SetImage(skinTexture(mData->mImagePlusSizePrt ,mData->mImagePlusSizeLsc , mData->mZoomInTexturePrtId, mData->mZoomInTextureLscId ));
+ }
+
+ //get the lct rect for mImageMinus and set it
+ // aid_touch_size_slider_min(2)
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderMinus,mData->mBaseSliderLayout,KVariety2);
+
+ mData->mImageMinus->SetRect(
+ TRect( TPoint( layoutRect.Rect().iTl.iX,layoutRect.Rect().iTl.iY ),
+ TSize( layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight ))) ;
+
+ mSliderModel->IsLandscape() ? mData->mImageMinusSizeLsc = layoutRect.Rect().Size():
+ mData->mImageMinusSizePrt = layoutRect.Rect().Size();
+ if(mData->mImageMinus)
+ {
+ mData->mImageTextureId = KAlfZoomOutTextureId;
+ // Create the texture from bitmap provider
+ mData->mImageMinus->SetImage(skinTexture(mData->mImageMinusSizePrt ,mData->mImageMinusSizeLsc , mData->mZoomOutTexturePrtId, mData->mZoomOutTextureLscId ));
+
+ }
+ }
+ }
+// ---------------------------------------------------------------------------
+// Used for setting images for the track
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderVertical::setTrackImage()
+ {
+
+ CAlfControl* ctrl = (CAlfControl*)&control();
+ //creating texture for topimage
+ mData->mImageTextureId = KAlfTrackTopTextureId;
+ mData->mTrackTopImage->SetImage( skinTexture(mData->mTrackTopImageSizePrt ,mData->mTrackTopImageSizeLsc , mData->mTrackTopTexturePrtId, mData->mTrackTopTextureLscId ) ) ;
+
+ //creating texture for middleimage
+ mData->mImageTextureId = KAlfTrackMiddleTextureId;
+ mData->mTrackMiddleImage->SetImage(skinTexture(mData->mTrackMiddleImageSizePrt ,mData->mTrackMiddleImageSizeLsc , mData->mTrackMiddleTexturePrtId, mData->mTrackMiddleTextureLscId ));
+
+ //creating texture for bottom image
+ mData->mImageTextureId = KAlfTrackBottomTextureId;
+ mData->mTrackEndImage->SetImage( skinTexture(mData->mTrackBottomImageSizePrt ,mData->mTrackBottomImageSizeLsc , mData->mTrackBottomTexturePrtId, mData->mTrackBottomTextureLscId ) );
+
+ }//End of setImage
+
+// ---------------------------------------------------------------------------
+// ProvideBitmapL()
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::ProvideBitmapL (TInt aId, CFbsBitmap *& aBitmap, CFbsBitmap *& aMaskBitmap)
+ {
+ TAknLayoutRect layoutRect;
+ switch(mData->mImageTextureId)
+ {
+ case KAlfTrackTopTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap,
+ aMaskBitmap,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_nslider_vertical_top,
+ EMbmAvkonQgn_graf_nslider_vertical_top_mask );
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderTop,
+ mData->mSliderCentre,
+ KVariety0);
+
+ AknIconUtils::SetSize( aBitmap,
+ TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight),
+ EAspectRatioNotPreserved);
+ mData->mImageTextureId = 0;
+ mSliderModel->IsLandscape() ? mData->mTrackTopTextureLscId = aId :
+ mData->mTrackTopTexturePrtId = aId ;
+ }
+ break;
+ case KAlfTrackBottomTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap,
+ aMaskBitmap,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_nslider_vertical_bottom,
+ EMbmAvkonQgn_graf_nslider_vertical_bottom_mask );
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderEnd,
+ mData->mSliderCentre,
+ KVariety0);
+ AknIconUtils::SetSize( aBitmap,
+ TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight),
+ EAspectRatioNotPreserved);
+ mData->mImageTextureId = 0;
+ mSliderModel->IsLandscape() ? mData->mTrackBottomTextureLscId = aId :
+ mData->mTrackBottomTexturePrtId = aId ;
+ }
+ break;
+ case KAlfTrackMiddleTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap,
+ aMaskBitmap,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_nslider_vertical_middle,
+ EMbmAvkonQgn_graf_nslider_vertical_middle_mask );
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderMiddle,
+ mData->mSliderCentre,
+ KVariety0);
+
+ AknIconUtils::SetSize( aBitmap,
+ TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight),
+ EAspectRatioNotPreserved);
+
+ mData->mImageTextureId = 0;
+ mSliderModel->IsLandscape() ? mData->mTrackMiddleTextureLscId = aId :
+ mData->mTrackMiddleTexturePrtId = aId ;
+ }
+ break;
+
+ case KAlfMarkerTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap,
+ aMaskBitmap,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_graf_nslider_vertical_marker,
+ EMbmAvkonQgn_graf_nslider_vertical_marker_mask );
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderMarker,
+ mData->mBaseSliderLayout,
+ KVariety5);
+
+ AknIconUtils::SetSize( aBitmap,
+ TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight),
+ EAspectRatioNotPreserved);
+
+ mData->mImageTextureId = 0;
+ mSliderModel->IsLandscape() ? mData->mMarkerTextureLscId = aId :
+ mData->mMarkerTexturePrtId = aId ;
+ }
+ break;
+ case KAlfZoomInTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap,
+ aMaskBitmap,
+ KSliderBitmapFile,
+ EMbmMulsliderwidgetQgn_indi_nslider_zoom_in,
+ EMbmMulsliderwidgetQgn_indi_nslider_zoom_in_mask );
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderPlus,mData->mBaseSliderLayout,KVariety1);
+
+ AknIconUtils::SetSize( aBitmap,
+ TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight),
+ EAspectRatioNotPreserved);
+ mData->mImageTextureId = 0;
+ mSliderModel->IsLandscape() ? mData->mZoomInTextureLscId = aId :
+ mData->mZoomInTexturePrtId = aId;
+ }
+ break;
+ case KAlfZoomOutTextureId:
+ {
+ AknIconUtils::CreateIconL(
+ aBitmap,
+ aMaskBitmap,
+ KSliderBitmapFile,
+ EMbmMulsliderwidgetQgn_indi_nslider_zoom_out,
+ EMbmMulsliderwidgetQgn_indi_nslider_zoom_out_mask );
+
+ layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderMinus,mData->mBaseSliderLayout,KVariety2);
+
+ AknIconUtils::SetSize( aBitmap,
+ TSize(layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight),
+ EAspectRatioNotPreserved);
+
+ mData->mImageTextureId = 0;
+ mSliderModel->IsLandscape() ? mData->mZoomOutTextureLscId = aId :
+ mData->mZoomOutTexturePrtId = aId ;
+
+ }
+ break;
+ default:
+ break;
+
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// setBackgroundBrush()
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::SetBackgroundBrush()
+ {
+
+ CAlfControl* ctrl = (CAlfControl*)&control();
+ // Get Slider Pane Rect (aaslider_pane(2)) and apply on mBaseSliderLayout
+ TAknLayoutRect layoutRect = MulSliderUtils::GetComponentRect(
+ EVSliderPane,mData->mMainLayout,2);
+
+
+ TAknWindowLineLayout LayoutHandle =
+ AknLayoutScalable_UiAccel::
+ aid_touch_size_slider_max(0).LayoutLine();
+
+
+ int x = LayoutHandle.il;
+ TAknsItemID itemid;
+
+ itemid.Set(EAknsMajorSkin, EAknsMinorQgnGrafPopupTrans);
+ CAlfFrameBrush* brush = CAlfFrameBrush::NewLC((*ctrl).Env(),itemid, 0, 0);
+
+ if(brush!=NULL)
+ {
+ TRect dispRect(layoutRect.Rect().iTl.iX,
+ layoutRect.Rect().iTl.iY,
+ layoutRect.Rect().Size().iWidth,
+ layoutRect.Rect().Size().iHeight );
+ TRect innerRect(layoutRect.Rect().iTl.iX + x,
+ layoutRect.Rect().iTl.iY + x,
+ layoutRect.Rect().Size().iWidth - x ,
+ layoutRect.Rect().Size().iHeight - x);
+
+ brush->SetFrameRectsL(innerRect,dispRect);
+ brush->SetOpacity(KMinopacity);
+ mData->mBaseSliderLayout->EnableBrushesL();
+ mData->mBaseSliderLayout->Brushes()->AppendL(brush, EAlfHasOwnership);
+ CleanupStack::Pop(brush);
+ }
+ mData->mHasBackground = true;
+ }
+
+// ----------------------------------------------------------------------------
+// skinTexture()
+// ----------------------------------------------------------------------------
+//
+TAlfImage MulSliderVertical::skinTexture(TSize aPrtImageSize, TSize aLscImageSize, TInt aPrtSkinId, TInt aLscSkinId )
+ {
+ const CAlfControl* ctrl = (CAlfControl*)(&control());
+
+ if ( aPrtImageSize != aLscImageSize )
+ {
+ if ( aPrtSkinId == 0 || aLscSkinId == 0 )
+ {
+ mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
+ KAlfAutoGeneratedTextureId,
+ (MAlfBitmapProvider *)this,
+ (TAlfTextureFlags)(EAlfTextureFlagRetainResolution|EAlfTextureFlagSkinContent)));
+ TAlfImage dummyImage(*mData->mTexture);
+ return dummyImage;
+ }
+ }
+ else if ( aPrtSkinId == 0 || aLscSkinId == 0 )
+ {
+ TInt id = aPrtSkinId > aLscSkinId ? aPrtSkinId : aLscSkinId;
+ mData->mTexture = ((ctrl->Env()).TextureManager().TextureL(id));
+ TAlfImage dummyImage(*mData->mTexture);
+ return dummyImage;
+ }
+
+ TInt textureId = mSliderModel->IsLandscape() ? aLscSkinId : aPrtSkinId;
+ mData->mTexture = ((ctrl->Env()).TextureManager().TextureL( textureId ));
+ TAlfImage dummyImage(*mData->mTexture);
+ return dummyImage;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MakeTransparent()
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::MakeTransparent(bool aVal)
+ {
+ CAlfBrushArray * brushArray = mData->mBaseSliderLayout->Brushes();
+ if(aVal)
+ {
+ TAlfTimedValue opacity(KMinopacity);
+ brushArray->At(0).SetOpacity(opacity);
+ }
+ else
+ {
+ TAlfTimedValue opacity(KMaxopacity);
+ brushArray->At(0).SetOpacity(opacity);
+ }
+ }
+// ---------------------------------------------------------------------------
+// ConvertDataToPixels
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::ConvertDataToPixels()
+ {
+ float sliderCentreSize = mData->mSliderCentre->Size().iY.ValueNow();
+ float sliderHandleSize = mData->mSliderHandle->Size().iY.ValueNow();
+ float sliderCentrePos = mData->mSliderCentre->Pos().iY.ValueNow();
+
+ // Calculate the range in pixel values
+ mData->mRangeInPixels = sliderCentreSize - sliderHandleSize;
+
+ if(mSliderModel->MaxRange() - mSliderModel->MinRange() != 0)
+ {
+ // Calculate Tick Size in Pixels
+ mData->mTickInPixels =
+ (sliderCentreSize - sliderHandleSize) /
+ (mSliderModel->MaxRange() - mSliderModel->MinRange()) ;
+ }
+ // Get the track start pixel value
+ mData->mTrackStartPoint = sliderCentrePos + sliderCentreSize - sliderHandleSize ;
+ // Store current tick
+ mData->mCurrTick = mSliderModel->PrimaryValue() ;
+ if(mSliderModel->MaxRange()== mSliderModel->MinRange())
+ {
+ mData->mTrackStartPoint= sliderCentrePos;
+ }
+ mData->mTick = mSliderModel->Tick();
+ }
+
+//----------------------------------------------------------------------------
+// FeedbackIntensity
+//----------------------------------------------------------------------------
+//
+TInt MulSliderVertical::feedbackIntensity()
+ {
+ /* We need to find the position of the thumb w.r.t the slider track.
+ * mData->mTickInPixels will give the no. of pixels each tick will
+ *
+ */
+
+ int deltaY = (mSliderModel->PrimaryValue() - mSliderModel->MinRange()) *
+ mData->mTickInPixels;
+ TInt intensity = ( deltaY * 100 )/ mData->mRangeInPixels ;
+ return intensity ;
+ }
+
+// ---------------------------------------------------------------------------
+// createVisualization
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::createVisualization(sliderTemplate /*aTemplateId*/)
+ {
+ mData->mHasBackground = false;
+ if(AknLayoutUtils::LayoutMirrored())
+ mData->mLayoutMirrored = true;
+ else
+ mData->mLayoutMirrored = false;
+ // Create the visualization
+ CAlfControl* ctrl = (CAlfControl*)&control();
+ mData->mOrientationLandScape = mSliderModel->IsLandscape();
+ mData->misSetModel = true;
+
+ // Visual Hierarchy creation
+ // create the mMainLayout
+ mData->mMainLayout = CAlfLayout::AddNewL(*ctrl,NULL);
+ // set the flag for Notifications
+ mData->mMainLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);
+ //create the mBaseSliderLayout
+ mData->mBaseSliderLayout =
+ CAlfLayout::AddNewL(*ctrl,mData->mMainLayout);
+ // create the dummy layout for slider track
+ mData->mSliderCentreGhost =
+ CAlfLayout::AddNewL(*ctrl,mData->mBaseSliderLayout);
+ // create the dummy layout for slider handle
+ mData->mSliderHandleGhost =
+ CAlfLayout::AddNewL(*ctrl,mData->mBaseSliderLayout);
+
+ // create the imagevisual for slider track
+ mData->mSliderCentre =
+ CAlfLayout::AddNewL(*ctrl,mData->mBaseSliderLayout);
+ // create the imagevisual for slider handle
+ mData->mSliderHandle =
+ CAlfImageVisual::AddNewL(*ctrl,mData->mBaseSliderLayout);
+ // create the imagevisual for plus icon
+ mData->mImagePlus=
+ CAlfImageVisual::AddNewL(*ctrl,mData->mBaseSliderLayout);
+ // create the imagevisual for minus icon
+ mData->mImageMinus =
+ CAlfImageVisual::AddNewL(*ctrl,mData->mBaseSliderLayout);
+ if(mData->mSliderCentre)
+ {
+ mData->mTrackTopImage = CAlfImageVisual::AddNewL(*ctrl,mData->mSliderCentre);
+ mData->mTrackMiddleImage = CAlfImageVisual::AddNewL(*ctrl,mData->mSliderCentre);
+ mData->mTrackEndImage = CAlfImageVisual::AddNewL(*ctrl,mData->mSliderCentre);
+ }
+
+ // Get the widget opacity and apply on root visual
+ mSliderWidget->ShowWidget(mSliderWidget->GetOpacity(),0);
+ }
+
+
+// ---------------------------------------------------------------------------
+// eventHandlerType
+// ---------------------------------------------------------------------------
+//
+IAlfWidgetEventHandler::AlfEventHandlerType MulSliderVertical::eventHandlerType()
+ {
+ return IAlfWidgetEventHandler::EPresentationEventHandler;
+ }
+
+
+// ---------------------------------------------------------------------------
+// eventExecutionPhase
+// ---------------------------------------------------------------------------
+//
+IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase MulSliderVertical::
+ eventExecutionPhase()
+ {
+ return IAlfWidgetEventHandler::ETunnellingPhaseEventHandler;
+ }
+
+
+// ---------------------------------------------------------------------------
+// offerEvent
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulSliderVertical::offerEvent( CAlfWidgetControl& /*aControl*/,
+ const TAlfEvent& aEvent )
+ {
+ AlfEventStatus ret=EEventNotHandled;
+ if(!mSliderWidget->IsHidden())
+ {
+ if(aEvent.IsCustomEvent())
+ {
+ if(aEvent.CustomParameter() == EEventMissedPointerUp)
+ {
+ ret=EEventHandled;
+ mData->mSliderHit = false;
+ handlePointerUpEvent();
+ }
+ }
+
+ // handle key events
+ else if(aEvent.IsKeyEvent() && mSliderWidget->IsKeyEnabled() )
+ {
+ ret = HandleKeyEvents(aEvent);
+ }
+
+ // Pointer drag events and single tap events
+ else if(aEvent.IsPointerEvent())
+ {
+ if(mSliderWidget->GetOpacity())
+ {
+ ret = HandlePointerEvents((TAlfEvent *)&aEvent);
+ }
+ }
+
+ }
+
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// HandleKeyEvents
+// ---------------------------------------------------------------------------
+//
+ AlfEventStatus MulSliderVertical::HandleKeyEvents(const TAlfEvent& aEvent)
+ {
+ AlfEventStatus ret = EEventNotHandled;
+
+
+ if(aEvent.KeyEvent().iScanCode == EStdKeyUpArrow)
+ {
+ if(aEvent.Code() == EEventKey)
+ {
+ ret = EEventHandled;
+ int newPos = mSliderModel->PrimaryValue() + mData->mTick;
+ updateModelPrimaryValue(newPos);
+ }
+ }
+ else if(aEvent.KeyEvent().iScanCode == EStdKeyDownArrow)
+ {
+ if(aEvent.Code() == EEventKey)
+ {
+ ret = EEventHandled;
+ int newPos = mSliderModel->PrimaryValue() - mData->mTick;
+ updateModelPrimaryValue(newPos);
+ }
+ }
+ return ret;
+ }
+// ---------------------------------------------------------------------------
+// Sends drag Up or Down event, according to the hit position
+// on track
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulSliderVertical::trackVisualHit(CAlfVisual * /*aHitVisual*/)
+ {
+ //Find the thumb Anchor Layout.
+ // Zoom Plus icon rectangle
+ TAlfRealRect zoomPlus = mData->mBaseSliderLayout->DisplayRect();
+ // Slider Handle position
+ TAlfTimedPoint thumbVisPos = mData->mSliderHandle->Pos();
+ TAlfTimedPoint thumbVisSize = mData->mSliderHandle->Size();
+ // Slider track display rect
+ TAlfRealRect rct = mData->mSliderCentre->DisplayRect() ;
+ int diff = rct.iTl.iY - zoomPlus.iTl.iY;
+ //Check if click was above/to left or below/to right of thumb
+ if (mData->mLongTapPos.iY - rct.iTl.iY < thumbVisPos.iY.ValueNow() + (thumbVisSize.iY.ValueNow()/2) - diff)
+ {
+ // Pointer down happened above Handle
+ int newPos = mSliderModel->PrimaryValue() + (((thumbVisPos.iY.ValueNow() +(thumbVisSize.iY.ValueNow()/2) - diff) -(mData->mLongTapPos.iY - rct.iTl.iY))/mData->mTickInPixels);
+
+ if( rct.iTl.iY > mData->mLongTapPos.iY )
+ {
+ mData->mLongTapPos.iY = rct.iTl.iY + (thumbVisSize.iY.ValueNow()/2);
+ }
+ // Move Handle
+ if(mData->mdirection !=2)
+ {
+ // checks if the thumb was moving up
+ updateModelPrimaryValue(newPos);
+ mData->mdirection = 1;
+ }
+
+ if(!mData->mOperation)
+ {
+ mData->mVisual = mData->mSliderHandle;
+ initializeThumbDragData(
+ mData->mLongTapPos);
+
+ }
+ }
+ else if (mData->mLongTapPos.iY - rct.iTl.iY > (thumbVisPos.iY.ValueNow() +
+ (thumbVisSize.iY.ValueNow()/2)- diff) )
+ {
+ if( (rct.iTl.iY + rct.Size().iHeight < mData->mLongTapPos.iY))
+ {
+ mData->mLongTapPos.iY = rct.iTl.iY+ rct.Size().iHeight - (thumbVisSize.iY.ValueNow()/2);
+ }
+ // Pointer down happened below Handle
+ int newPos = mSliderModel->PrimaryValue() - (((mData->mLongTapPos.iY - rct.iTl.iY) -(thumbVisPos.iY.ValueNow() + (thumbVisSize.iY.ValueNow()/2)-diff))/mData->mTickInPixels);
+ // Move Handle
+ if(mData->mdirection !=1)
+ {
+ // checks if the thumb was moving down
+ updateModelPrimaryValue(newPos);
+ mData->mdirection = 2;
+ }
+
+ //mData->mLongTapStarted = false;
+ if(!mData->mOperation)
+ {
+ mData->mVisual = mData->mSliderHandle;
+ initializeThumbDragData( mData->mLongTapPos);
+
+ }
+ }
+ else
+ {
+
+ }
+ return EEventHandled;
+ }
+
+// ---------------------------------------------------------------------------
+// handles the pointerDown event
+//
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus MulSliderVertical::handlePointerDownEvent(TAlfEvent * aPntrEvent)
+ {
+
+ CAlfVisual * focusvisual = aPntrEvent->Visual();
+ AlfEventStatus result = EEventNotHandled;
+ if (focusvisual)
+ {
+ mData->mVisual = focusvisual;
+ if (IsSliderVisual(focusvisual))
+ {
+ control().processEvent(TAlfEvent(ECustomEventIconClick));
+ mData->mSliderHit = true;
+ MakeTransparent(false);
+
+ // Register with the Roster to receive Long Tap Event
+ control().Display()->Roster().SetPointerEventObservers(
+ EAlfPointerEventReportDrag,control());
+
+ if(!mData->mOperation)
+ {
+ mData->mLongTapPos = aPntrEvent->PointerEvent().iParentPosition;
+ //mData->mLongTapStarted = true;
+ }
+
+ //Page Movement
+ if (focusvisual == mData->mSliderCentre ||
+ focusvisual == mData->mSliderCentreGhost)
+ {
+ result = trackVisualHit(focusvisual);
+ }
+
+ // Drag
+ else if (focusvisual == mData->mSliderHandle
+ || focusvisual == mData->mSliderHandleGhost )
+ {
+ if(focusvisual)
+ {
+ // Initialize the drag variables
+ initializeThumbDragData(aPntrEvent->PointerEvent().iParentPosition);
+ //Tactile Feedback For Thumb touch
+ MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
+ sldrcntrl.TactileEffectOnTouchandHold();
+ }
+ result = EEventHandled;
+ }
+ // Zoom Icon Plus Clicked
+ else if (focusvisual == mData->mImagePlus || focusvisual == mData->mImageMinus )
+ {
+ // Update the newTick
+ int newPos =0;
+ if( mData->mVisual == mData->mImagePlus)
+ {
+ newPos = mSliderModel->MaxRange();
+ }
+ else
+ {
+ newPos = mSliderModel->MinRange();
+ //newPos = mSliderModel->PrimaryValue() - mData->mTick;
+ }
+ updateModelPrimaryValue(newPos);
+ //return ETrue;
+ result = EEventHandled;
+ }
+
+ }//END OF if (isSliderVisual())
+ }
+ return result;
+ }// End Of handlePointerDownEvent
+
+
+// ---------------------------------------------------------------------------
+// HandlePointerEvents
+// ---------------------------------------------------------------------------
+//
+ AlfEventStatus MulSliderVertical::HandlePointerEvents(TAlfEvent* aEvent)
+ {
+ AlfEventStatus ret = EEventNotHandled;
+ if (aEvent->PointerEvent().iType == TPointerEvent::EButton1Down)
+ {
+ mData->mdirection = 0;
+ return handlePointerDownEvent(aEvent);
+ }
+ // Drag Events
+ else if (aEvent->PointerEvent().iType == TPointerEvent::EDrag)
+ {
+ // Drag on Handle
+ TAlfRealRect rct = mData->mSliderCentre->DisplayRect() ;
+ TAlfTimedPoint thumbVisSize = mData->mSliderHandle->Size();
+ // Drag on Handle
+ if(mData->mVisual &&
+ mData->mSliderHandle && mData->mSliderHandleGhost)
+ {
+ // Store the new pointer position
+ mData->mLongTapPos= aEvent->PointerEvent().iParentPosition ;
+ }
+
+ // Calculate the distance moved from the drag start point
+ int dist = mData->mDragPoint.iY - aEvent->PointerEvent().iParentPosition.iY;
+ int precision = KRoundupvalue;
+ if(dist<0)
+ {
+ precision = -KRoundupvalue;
+ }
+ // Calculate the new tick position
+ int newPos = (int)(((float)dist / mData->mTickInPixels ) + precision) +
+ mData->mDragStartStep;
+ // Update the model hence update visualization
+ updateModelPrimaryValue(newPos);
+ //Tactile Feedback For Thumb Drag
+ MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
+ int fdbintensity = feedbackIntensity();
+ sldrcntrl.TactileEffectOnDrag(*aEvent , fdbintensity );
+ ret = EEventHandled;
+ }
+
+ else if(aEvent->PointerUp() )
+ {
+
+ // Long tap Timer not running
+ //mData->mLongTapStarted = false;
+ // Handle events for pointer up
+ if(mData->mSliderHit)
+ {
+ // checing if any of slider visual got a button down event
+ // Otherwise its a stray pointerup event , so dont handle it
+ mData->mSliderHit = false;
+ ret = EEventHandled;
+ handlePointerUpEvent();
+ }
+
+ }
+
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// updateModelPrimaryValue
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::updateModelPrimaryValue(int aNewPosValue)
+ {
+ // Validate the new tick value
+ if(aNewPosValue < mSliderModel->MinRange())
+ {
+ aNewPosValue = mSliderModel->MinRange();
+ }
+ else if(aNewPosValue > mSliderModel->MaxRange())
+ {
+ aNewPosValue = mSliderModel->MaxRange();
+ }
+ if(mSliderModel->PrimaryValue() != aNewPosValue && mData->mTick != 0)
+ {
+ // Update visualization and model only if data is changed
+ mSliderModel->SetPrimaryValue(aNewPosValue);
+ mPosData.reset(new(EMM)MulSliderPos);
+ mPosData->mPreviousValue = mData->mCurrTick ;
+ mPosData->mCurrentValue= aNewPosValue;
+ mData->mCurrTick = aNewPosValue;
+ // Send event to the scrollable widget
+ TAlfEvent customevent(ETypePrimaryValueChange,
+ (uint)mPosData.get());
+ control().processEvent(customevent);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// snapPrimaryValueToTicks
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::snapPrimaryValueToTicks()
+ {
+ // If the position is not a multiple of ticks then
+ //snap to the nearest tick multiple
+ int currHandlePos = mSliderModel->PrimaryValue() - mSliderModel->MinRange();
+ int tick = mSliderModel->Tick();
+ int newPos = currHandlePos + mSliderModel->MinRange();
+ if(mSliderModel->PrimaryValue() < mSliderModel->MaxRange())
+ {
+
+ int diff = 0;
+ if(tick > 0) //model
+ {
+ diff = currHandlePos - ((currHandlePos /tick) * tick);
+ }
+ if(diff !=0)
+ {
+ newPos = currHandlePos + tick - diff + mSliderModel->MinRange();
+ }
+ }
+
+
+ // Update model
+ updateModelPrimaryValue(newPos);
+ }
+
+
+// ---------------------------------------------------------------------------
+// handles the pointerUp event
+//
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::handlePointerUpEvent()
+ {
+ // if thumb or track is clicked, change the graphics
+ // Send event if single click has hapened
+
+ snapPrimaryValueToTicks();
+ MakeTransparent(true);
+ if(mData->mOperation)
+ {
+ //Somehow missed the Up event?
+ stopDrag();
+ //Tactile Feedback For Thumb Release
+ MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
+ sldrcntrl.TactileEffectOnRelease();
+ }
+
+
+ // Un-register with the roster for long tap events
+ control().Display()->Roster().SetPointerEventObservers(0,
+ control());
+
+ // send the event for release/poiter up
+ control().processEvent(TAlfEvent(ECustomEventIconRelease));
+ }
+
+// ---------------------------------------------------------------------------
+// Stops event handling
+//
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::stopEvents()
+{
+ if(mData->mSliderHit)
+ {
+ // checking if any of slider visual got a button down event
+ mData->mSliderHit = false;
+ handlePointerUpEvent();
+ }
+}
+
+// ---------------------------------------------------------------------------
+
+// UpdateVisualization
+// ---------------------------------------------------------------------------
+//
+
+void MulSliderVertical::updateVisualization()
+ {
+ ConvertDataToPixels();
+ SetThumbPosition();
+ }
+// ---------------------------------------------------------------------------
+// SetThumbPosition
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::SetThumbPosition()
+ {
+ // Current primary value in pixels
+ int deltaY = (mSliderModel->PrimaryValue() - mSliderModel->MinRange()) *
+ mData->mTickInPixels;
+ // Handle
+ int handleX = mData->mSliderHandle->Pos().iX.ValueNow();
+ int ghostHandleX = mData->mSliderHandleGhost->Pos().iX.ValueNow();
+ // Handle new pos
+ TAlfRealPoint pnt(handleX,mData->mTrackStartPoint - deltaY);
+ // Ghost Handle ( Extended) new pos
+ TAlfRealPoint pnt1(ghostHandleX,mData->mTrackStartPoint - deltaY -
+ mData->mHandleGhostHieghtDelta/2);
+ // Set the position
+ mData->mSliderHandle->SetPos(pnt,0);
+ mData->mSliderHandleGhost->SetPos(pnt1,0);
+ // Update visualization variables
+ mData->mCurrTick = mSliderModel->PrimaryValue();
+ //mData->mMainLayout->UpdateChildrenLayout(0);
+
+ }
+// ---------------------------------------------------------------------------
+// SetTextLabels
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::SetTextLabels(const char* /*aStr*/)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// accept
+// ---------------------------------------------------------------------------
+//
+bool MulSliderVertical::accept( CAlfWidgetControl& /*aControl*/, const TAlfEvent& aEvent ) const
+ {
+ // Accept only key or pointer events.
+ if(aEvent.IsKeyEvent()||aEvent.IsPointerEvent())
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// initializeThumbDragData
+// ---------------------------------------------------------------------------
+//
+bool MulSliderVertical::initializeThumbDragData(const TPoint& aPointerPos)
+ {
+ TRAPD(err,control().Display()->Roster().SetPointerDragThreshold(control(),
+ TAlfXYMetric(TAlfMetric(KXToleranceInPixel,EAlfUnitPixel),
+ TAlfMetric(KYToleranceInPixel,EAlfUnitPixel))) );
+ if(mData->mVisual && err == KErrNone)
+ {
+ mData->mOperation = EMoveItem;
+ mData->mDragPoint = aPointerPos;
+ mData->mDragStartStep = mSliderModel->PrimaryValue();
+ }
+ else
+ {
+
+ }
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// stopDrag
+// Stop Dragging
+// ---------------------------------------------------------------------------
+//
+bool MulSliderVertical::stopDrag()
+ {
+
+ TRAPD(err,
+ control().Display()->Roster().SetPointerEventObservers(
+ 0,
+ control()));
+ if(err == KErrNone)
+ {
+ mData->mVisual = NULL;
+ mData->mOperation = ENop;
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// IsSliderVisual
+// ---------------------------------------------------------------------------
+//
+bool MulSliderVertical::IsSliderVisual(CAlfVisual *aVisual)
+ {
+ if(aVisual == mData->mSliderCentre||
+ aVisual == mData->mSliderCentreGhost||
+ aVisual == mData->mSliderHandle||
+ aVisual == mData->mSliderHandleGhost||
+ aVisual == mData->mImagePlus||
+ aVisual == mData->mImageMinus)
+ {
+ return true;
+ }
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// updateTextVisualization
+// ---------------------------------------------------------------------------
+//
+void MulSliderVertical::updateTextVisualization()
+ {/*
+ MulSliderModel* sliderModel = mSliderModel;
+ const char* perctext = sliderModel->GetPercentText();
+ SetTextLabels(perctext);*/
+ }
+ }//namespace Alf
+
+//End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/ListTest.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,35 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"ListTest"},(0x0F426B8B),1,0,0
+
+;Supports Series 60 v 3.0
+(0x101F7961), 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+"\epoc32\release\armv5\urel\ListTest.exe"-"!:\sys\bin\ListTest.exe"
+"\epoc32\data\z\private\10003a3f\apps\ListTest_reg.rsc"-"!:\private\10003a3f\import\apps\ListTest_reg.rsc"
+"\epoc32\data\z\resource\apps\ListTest_loc.Rsc"-"!:\resource\apps\ListTest_loc.Rsc"
+"\epoc32\data\z\resource\apps\ListTest.Rsc"-"!:\resource\apps\ListTest.Rsc"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/RDTest_02.key Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC/TDP7KKIaf5+uW4OD2iVZuUMC2a+SeQTjf6srlKcOm+CpPNXn
+uLNm/8fdEnyOIuRXPRKmqhs1n0JkxEGHynELWMTuKXbQx9SRAGUXzyneGn+IJNnO
+vOKHWgKCouX2hfI8rtkdqJpqmO460gGsMgw+lsbeyWyW9lnfLxq+ZC7sqQIDAQAB
+AoGBALmUWZE8GBaQ3P4u9WUCSd3DJkkrmXIFSULSZeH/chlwCwDjbbhArHothVzo
+REE3hEFFlERvHbplZ+mNouzy7boduvgUzbksGrbGMLJ2qO1GzWWVwV+GzOWKd3ss
+/98Gwoy5R8pjnkqUE2wP1iJFw0FjvUTKcYv/z6t3LLJ0CsoBAkEA+c7ixvsviQ3J
+s0INytCKU2bf8fqFQJi1VI82ukxNsujGTQ9upVSjuvqPvWyDvvTdrUBHqO+3qPut
+sEh01Q8aiQJBAMQKDJPVRu4ud3mwUfEavzL5EjqwG1k9VCNGYsT4FwtrHcxu1oP/
+pk6M3rIZukqomoEEnHWPMwhrK3fhBqi0OSECQQDr40VXege4FnH5OI2Hj4afHMyp
+VdQQXGMWFyopnzXblFz0lXb43cTCIiorR9XcMqNFHybLypkWE5o+lRzlt55pAkBQ
+P/zeF5Sts//cpL0mgdh7OVKpC6ZmZaCnwAx2rUhhuDu+kDDoYCLoTOps5fNI1LRK
+1GRoC3LMo3Jr5IYhUYWBAkBpCpN6k4JU/mszq98EojHerQNxk8sPqvQKUzTutohT
+1gLX9yepGayB/TtT2EEJDkWOlnTy/dvN6W3vzbJYz97x
+-----END RSA PRIVATE KEY-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/aakash.bat Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,19 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: batch file for aakash sisx.
+rem
+
+call makesis aakash.pkg
+call signsis -s aakash.sis aakash.sisx RDTest_02.der RDTest_02.key
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/aakash.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,83 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"Aakash"},(0x0E52736A),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+;=============================
+;MulCoverFlowWidget dll's
+;=============================
+"\epoc32\release\armv5\urel\mulcoverflowwidget.dll"-"!:\sys\bin\mulcoverflowwidget.dll"
+"\epoc32\data\z\resource\plugins\mulcoverflowwidget.rsc"-"!:\resource\plugins\mulcoverflowwidget.rsc"
+
+
+;MulSliderWidget dll's
+;=============================
+"\epoc32\release\armv5\urel\mulsliderwidget.dll"-"!:\sys\bin\mulsliderwidget.dll"
+"\epoc32\data\z\resource\plugins\mulsliderwidget.rsc"-"!:\resource\plugins\mulsliderwidget.rsc"
+
+;MulSliderWidget Images
+;=============================
+"\epoc32\data\z\resource\slider\mui_cover_handle.svg" -"c:\resource\slider\mui_cover_handle.svg"
+"\epoc32\data\z\resource\slider\mui_dl_progress_lsc.svg" -"c:\resource\slider\mui_dl_progress_lsc.svg"
+"\epoc32\data\z\resource\slider\mui_handle.png" -"c:\resource\slider\mui_handle.png"
+"\epoc32\data\z\resource\slider\mui_slider_lsc.svg" -"c:\resource\slider\mui_slider_lsc.svg"
+"\epoc32\data\z\resource\slider\mui_slider_progress.svg" -"c:\resource\slider\mui_slider_progress.svg"
+"\epoc32\data\z\resource\slider\mui_slider_prt.svg" -"c:\resource\slider\mui_slider_prt.svg"
+"\epoc32\data\z\resource\slider\qgn_indi_slider_zoom_in.svg" -"c:\resource\slider\qgn_indi_slider_zoom_in.svg"
+"\epoc32\data\z\resource\slider\qgn_indi_slider_zoom_out.svg" -"c:\resource\slider\qgn_indi_slider_zoom_out.svg"
+"\epoc32\data\z\resource\slider\qgn_indi_volumeslider_audio_off.svg" -"c:\resource\slider\qgn_indi_volumeslider_audio_off.svg"
+"\epoc32\data\z\resource\slider\qgn_indi_volumeslider_audio_on.svg" -"c:\resource\slider\qgn_indi_volumeslider_audio_on.svg"
+"\epoc32\data\z\resource\slider\qgn_indi_volumeslider_minus.svg" -"c:\resource\slider\qgn_indi_volumeslider_minus.svg"
+"\epoc32\data\z\resource\slider\qgn_indi_volumeslider_plus.svg" -"c:\resource\slider\qgn_indi_volumeslider_plus.svg"
+
+
+;=============================
+;DataModel dll's
+;=============================
+"\epoc32\release\armv5\urel\muldatamodelplugin.dll"-"!:\sys\bin\muldatamodelplugin.dll"
+"\epoc32\data\z\resource\plugins\muldatamodelplugin.rsc"-"!:\resource\plugins\muldatamodelplugin.rsc"
+"\epoc32\release\armv5\urel\muldatamodel.dll"-"!:\sys\bin\muldatamodel.dll"
+
+
+;=============================
+;Utility dlls
+;=============================
+"\epoc32\release\armv5\urel\mulmodelutility.dll"-"!:\sys\bin\mulmodelutility.dll"
+"\epoc32\release\armv5\urel\mulutility.dll"-"!:\sys\bin\mulutility.dll"
+
+;=============================
+;Gesturehelper
+;=============================
+
+"\epoc32\release\armv5\urel\gesturehelper.dll"-"!:\sys\bin\gesturehelper.dll"
+;=============================
+;Mullogging
+;=============================
+
+"\epoc32\release\armv5\urel\mullogging.dll"-"!:\sys\bin\mullogging.dll"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/aakash_udeb.bat Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,18 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: batch file including logging utility.
+rem
+
+call makesis aakash_udeb.pkg
+call signsis -s aakash_udeb.sis aakash_udeb.sisx RDTest_02.der RDTest_02.key
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/aakash_udeb.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,132 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"Aakash"},(0x0E52736A),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+;=============================
+;MulCoverFlowWidget dll's
+;=============================
+"\epoc32\release\armv5\udeb\mulcoverflowwidget.dll"-"!:\sys\bin\mulcoverflowwidget.dll"
+"\epoc32\data\z\resource\plugins\mulcoverflowwidget.rsc"-"!:\resource\plugins\mulcoverflowwidget.rsc"
+;=============================
+;MulCoverFlowWidget XMLs
+;=============================
+"\epoc32\data\z\resource\coverflow\logical_template_1.xml" -"c:\resource\coverflow\logical_template_1.xml"
+"\epoc32\data\z\resource\coverflow\logical_template_2.xml" -"c:\resource\coverflow\logical_template_2.xml"
+"\epoc32\data\z\resource\coverflow\logical_template_3.xml" -"c:\resource\coverflow\logical_template_3.xml"
+"\epoc32\data\z\resource\coverflow\logical_template_4.xml" -"c:\resource\coverflow\logical_template_4.xml"
+
+;=============================
+;MullistWidget dll's
+;=============================
+"\epoc32\release\armv5\udeb\mullistwidget.dll"-"!:\sys\bin\mullistwidget.dll"
+"\epoc32\data\z\resource\plugins\mullistwidget.rsc"-"!:\resource\plugins\mullistwidget.rsc"
+
+;=============================
+;MullistWidget XMLs
+;=============================
+"\epoc32\data\z\resource\list\logical_template_1.xml" -"c:\resource\list\logical_template_1.xml"
+"\epoc32\data\z\resource\list\logical_template_2.xml" -"c:\resource\list\logical_template_2.xml"
+"\epoc32\data\z\resource\list\logical_template_3.xml" -"c:\resource\list\logical_template_3.xml"
+"\epoc32\data\z\resource\list\logical_template_4.xml" -"c:\resource\list\logical_template_4.xml"
+"\epoc32\data\z\resource\list\logical_template_5.xml" -"c:\resource\list\logical_template_5.xml"
+"\epoc32\data\z\resource\list\logical_template_6.xml" -"c:\resource\list\logical_template_6.xml"
+"\epoc32\data\z\resource\list\logical_template_7.xml" -"c:\resource\list\logical_template_7.xml"
+"\epoc32\data\z\resource\list\logical_template_8.xml" -"c:\resource\list\logical_template_8.xml"
+"\epoc32\data\z\resource\list\logical_template_10.xml" -"c:\resource\list\logical_template_10.xml"
+"\epoc32\data\z\resource\list\logical_template_11.xml" -"c:\resource\list\logical_template_11.xml"
+"\epoc32\data\z\resource\list\logical_template_12.xml" -"c:\resource\list\logical_template_12.xml"
+"\epoc32\data\z\resource\list\logical_template_13.xml" -"c:\resource\list\logical_template_13.xml"
+
+;=============================
+;MulGridWidget dll's
+;=============================
+"\epoc32\release\armv5\udeb\mulgridwidget.dll"-"!:\sys\bin\mulgridwidget.dll"
+"\epoc32\data\z\resource\plugins\mulgridwidget.rsc"-"!:\resource\plugins\mulgridwidget.rsc"
+;=============================
+;MulGridWidget XMLs
+;=============================
+"\epoc32\data\z\resource\grid\logical_template_1.xml" -"c:\resource\grid\logical_template_1.xml"
+"\epoc32\data\z\resource\grid\logical_template_2.xml" -"c:\resource\grid\logical_template_2.xml"
+"\epoc32\data\z\resource\grid\logical_template_3.xml" -"c:\resource\grid\logical_template_3.xml"
+"\epoc32\data\z\resource\grid\logical_template_4.xml" -"c:\resource\grid\logical_template_4.xml"
+
+;=============================
+;MulSliderWidget dll's
+;=============================
+"\epoc32\release\armv5\udeb\mulsliderwidget.dll"-"!:\sys\bin\mulsliderwidget.dll"
+"\epoc32\data\z\resource\plugins\mulsliderwidget.rsc"-"!:\resource\plugins\mulsliderwidget.rsc"
+;=============================
+;MulSliderWidget XMLs
+;=============================
+"\epoc32\data\z\resource\slider\logical_template_1.xml" -"c:\resource\slider\logical_template_1.xml"
+"\epoc32\data\z\resource\slider\logical_template_2.xml" -"c:\resource\slider\logical_template_2.xml"
+"\epoc32\data\z\resource\slider\logical_template_3.xml" -"c:\resource\slider\logical_template_3.xml"
+"\epoc32\data\z\resource\slider\logical_template_4.xml" -"c:\resource\slider\logical_template_4.xml"
+"\epoc32\data\z\resource\slider\logical_template_5.xml" -"c:\resource\slider\logical_template_5.xml"
+"\epoc32\data\z\resource\slider\logical_template_6.xml" -"c:\resource\slider\logical_template_6.xml"
+"\epoc32\data\z\resource\slider\logical_template_7.xml" -"c:\resource\slider\logical_template_7.xml"
+"\epoc32\data\z\resource\slider\logical_template_8.xml" -"c:\resource\slider\logical_template_8.xml"
+
+;=============================
+;MulSliderWidget Images
+;=============================
+"\epoc32\data\z\resource\slider\mui_cover_handle.svg" -"c:\resource\slider\mui_cover_handle.svg"
+"\epoc32\data\z\resource\slider\mui_handle.png" -"c:\resource\slider\mui_handle.png"
+"\epoc32\data\z\resource\slider\mui_slider_progress.svg" -"c:\resource\slider\mui_slider_progress.svg"
+"\epoc32\data\z\resource\slider\mui_slider_lsc.svg" -"c:\resource\slider\mui_slider_lsc.svg"
+"\epoc32\data\z\resource\slider\mui_dl_progress_lsc.svg" -"c:\resource\slider\mui_dl_progress_lsc.svg"
+"\epoc32\data\z\resource\slider\mui_slider_prt.svg" -"c:\resource\slider\mui_slider_prt.svg"
+
+;=============================
+;DataModel dll's
+;=============================
+"\epoc32\release\armv5\udeb\muldatamodelplugin.dll"-"!:\sys\bin\muldatamodelplugin.dll"
+"\epoc32\data\z\resource\plugins\muldatamodelplugin.rsc"-"!:\resource\plugins\muldatamodelplugin.rsc"
+"\epoc32\release\armv5\udeb\muldatamodel.dll"-"!:\sys\bin\muldatamodel.dll"
+
+
+;=============================
+;Utility dlls
+;=============================
+"\epoc32\release\armv5\udeb\mulmodelutility.dll"-"!:\sys\bin\mulmodelutility.dll"
+"\epoc32\release\armv5\udeb\mulsingleitemmodel.dll"-"!:\sys\bin\mulsingleitemmodel.dll"
+"\epoc32\release\armv5\udeb\mulutility.dll"-"!:\sys\bin\mulutility.dll"
+
+;=============================
+;Gesturehelper
+;=============================
+
+"\epoc32\release\armv5\udeb\gesturehelper.dll"-"!:\sys\bin\gesturehelper.dll"
+
+;=============================
+;Mullogging
+;=============================
+
+"\epoc32\release\armv5\udeb\mullogging.dll"-"!:\sys\bin\mullogging.dll"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/coverflow_test.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,112 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"CoverFlowTest"},(0x0AE3C7F),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+
+"\epoc32\release\armv5\urel\testcoverflowwidget.exe"-"!:\sys\bin\testcoverflowwidget.exe"
+"\epoc32\data\z\private\10003a3f\import\apps\TESTCOVERFLOWWIDGET_reg.rsc"-"!:\private\10003a3f\import\apps\TESTCOVERFLOWWIDGET_reg.rsc"
+"\epoc32\data\z\resource\apps\TESTCOVERFLOWWIDGET_loc.RSc"-"!:\resource\apps\TESTCOVERFLOWWIDGET_loc.RSc"
+"\epoc32\data\z\resource\apps\testcoverflowwidget.RSc"-"!:\resource\apps\testcoverflowwidget.RSc"
+
+
+"\epoc32\winscw\c\dataimage\coverflow\i01.png" -"c:\dataimage\coverflow\i01.png"
+"\epoc32\winscw\c\dataimage\coverflow\i02.png" -"c:\dataimage\coverflow\i02.png"
+"\epoc32\winscw\c\dataimage\coverflow\i03.png" -"c:\dataimage\coverflow\i03.png"
+"\epoc32\winscw\c\dataimage\coverflow\i04.png" -"c:\dataimage\coverflow\i04.png"
+"\epoc32\winscw\c\dataimage\coverflow\i05.png" -"c:\dataimage\coverflow\i05.png"
+"\epoc32\winscw\c\dataimage\coverflow\i06.png" -"c:\dataimage\coverflow\i06.png"
+"\epoc32\winscw\c\dataimage\coverflow\i07.png" -"c:\dataimage\coverflow\i07.png"
+"\epoc32\winscw\c\dataimage\coverflow\i08.png" -"c:\dataimage\coverflow\i08.png"
+"\epoc32\winscw\c\dataimage\coverflow\i09.png" -"c:\dataimage\coverflow\i09.png"
+"\epoc32\winscw\c\dataimage\coverflow\i10.png" -"c:\dataimage\coverflow\i10.png"
+"\epoc32\winscw\c\dataimage\coverflow\i11.png" -"c:\dataimage\coverflow\i11.png"
+"\epoc32\winscw\c\dataimage\coverflow\i12.png" -"c:\dataimage\coverflow\i12.png"
+
+
+"\epoc32\winscw\c\dataimage\coverflow\bmp.bmp" -"c:\dataimage\coverflow\bmp.bmp"
+"\epoc32\winscw\c\dataimage\coverflow\gif.gif" -"c:\dataimage\coverflow\gif.gif"
+"\epoc32\winscw\c\dataimage\coverflow\ci01.jpg" -"c:\dataimage\coverflow\ci01.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\jpeg.jpg" -"c:\dataimage\coverflow\jpeg.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\svg.svg" -"c:\dataimage\coverflow\svg.svg"
+"\epoc32\winscw\c\dataimage\coverflow\schedule.png" -"c:\dataimage\coverflow\schedule.png"
+"\epoc32\winscw\c\dataimage\coverflow\icon.png" -"c:\dataimage\coverflow\icon.png"
+"\epoc32\winscw\c\dataimage\coverflow\default.png" -"c:\dataimage\coverflow\default.png"
+
+"\epoc32\winscw\c\dataimage\coverflow\1.jpg" -"c:\dataimage\coverflow\1.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\2.jpg" -"c:\dataimage\coverflow\2.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\3.jpg" -"c:\dataimage\coverflow\3.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\4.jpg" -"c:\dataimage\coverflow\4.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\5.jpg" -"c:\dataimage\coverflow\5.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\6.jpg" -"c:\dataimage\coverflow\6.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\7.jpg" -"c:\dataimage\coverflow\7.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\8.jpg" -"c:\dataimage\coverflow\8.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\9.jpg" -"c:\dataimage\coverflow\9.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\10.jpg" -"c:\dataimage\coverflow\10.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\11.jpg" -"c:\dataimage\coverflow\11.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\12.jpg" -"c:\dataimage\coverflow\12.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\13.jpg" -"c:\dataimage\coverflow\13.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\14.jpg" -"c:\dataimage\coverflow\14.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\15.jpg" -"c:\dataimage\coverflow\15.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\16.jpg" -"c:\dataimage\coverflow\16.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\17.jpg" -"c:\dataimage\coverflow\17.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\18.jpg" -"c:\dataimage\coverflow\18.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\19.jpg" -"c:\dataimage\coverflow\19.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\20.jpg" -"c:\dataimage\coverflow\20.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\21.jpg" -"c:\dataimage\coverflow\21.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\22.jpg" -"c:\dataimage\coverflow\22.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\23.jpg" -"c:\dataimage\coverflow\23.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\24.jpg" -"c:\dataimage\coverflow\24.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\25.jpg" -"c:\dataimage\coverflow\25.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\26.jpg" -"c:\dataimage\coverflow\26.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\27.jpg" -"c:\dataimage\coverflow\27.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\28.jpg" -"c:\dataimage\coverflow\28.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\29.jpg" -"c:\dataimage\coverflow\29.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\30.jpg" -"c:\dataimage\coverflow\30.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\31.jpg" -"c:\dataimage\coverflow\31.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\32.jpg" -"c:\dataimage\coverflow\32.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\33.jpg" -"c:\dataimage\coverflow\33.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\34.jpg" -"c:\dataimage\coverflow\34.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\35.jpg" -"c:\dataimage\coverflow\35.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\36.jpg" -"c:\dataimage\coverflow\36.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\37.jpg" -"c:\dataimage\coverflow\37.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\38.jpg" -"c:\dataimage\coverflow\38.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\39.jpg" -"c:\dataimage\coverflow\39.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\40.jpg" -"c:\dataimage\coverflow\40.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\41.jpg" -"c:\dataimage\coverflow\41.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\42.jpg" -"c:\dataimage\coverflow\42.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\43.jpg" -"c:\dataimage\coverflow\43.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\44.jpg" -"c:\dataimage\coverflow\44.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\45.jpg" -"c:\dataimage\coverflow\45.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\46.jpg" -"c:\dataimage\coverflow\46.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\47.jpg" -"c:\dataimage\coverflow\47.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\48.jpg" -"c:\dataimage\coverflow\48.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\49.jpg" -"c:\dataimage\coverflow\49.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\50.jpg" -"c:\dataimage\coverflow\50.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\video_play_icon.svg" -"c:\dataimage\coverflow\video_play_icon.svg"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/coverflow_test_udeb.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,109 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"CoverFlowTest"},(0x0AE3C7F),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+
+"\epoc32\release\armv5\udeb\testcoverflowwidget.exe"-"!:\sys\bin\testcoverflowwidget.exe"
+"\epoc32\data\z\private\10003a3f\import\apps\TESTCOVERFLOWWIDGET_reg.rsc"-"!:\private\10003a3f\import\apps\TESTCOVERFLOWWIDGET_reg.rsc"
+"\epoc32\data\z\resource\apps\TESTCOVERFLOWWIDGET_loc.RSc"-"!:\resource\apps\TESTCOVERFLOWWIDGET_loc.RSc"
+"\epoc32\data\z\resource\apps\testcoverflowwidget.RSc"-"!:\resource\apps\testcoverflowwidget.RSc"
+
+
+"\epoc32\winscw\c\dataimage\coverflow\i01.png" -"c:\dataimage\coverflow\i01.png"
+"\epoc32\winscw\c\dataimage\coverflow\i02.png" -"c:\dataimage\coverflow\i02.png"
+"\epoc32\winscw\c\dataimage\coverflow\i03.png" -"c:\dataimage\coverflow\i03.png"
+"\epoc32\winscw\c\dataimage\coverflow\i04.png" -"c:\dataimage\coverflow\i04.png"
+"\epoc32\winscw\c\dataimage\coverflow\i05.png" -"c:\dataimage\coverflow\i05.png"
+"\epoc32\winscw\c\dataimage\coverflow\i06.png" -"c:\dataimage\coverflow\i06.png"
+"\epoc32\winscw\c\dataimage\coverflow\i07.png" -"c:\dataimage\coverflow\i07.png"
+"\epoc32\winscw\c\dataimage\coverflow\i08.png" -"c:\dataimage\coverflow\i08.png"
+"\epoc32\winscw\c\dataimage\coverflow\i09.png" -"c:\dataimage\coverflow\i09.png"
+"\epoc32\winscw\c\dataimage\coverflow\i10.png" -"c:\dataimage\coverflow\i10.png"
+"\epoc32\winscw\c\dataimage\coverflow\i11.png" -"c:\dataimage\coverflow\i11.png"
+"\epoc32\winscw\c\dataimage\coverflow\i12.png" -"c:\dataimage\coverflow\i12.png"
+
+
+"\epoc32\winscw\c\dataimage\coverflow\bmp.bmp" -"c:\dataimage\coverflow\bmp.bmp"
+"\epoc32\winscw\c\dataimage\coverflow\gif.gif" -"c:\dataimage\coverflow\gif.gif"
+"\epoc32\winscw\c\dataimage\coverflow\ci01.jpg" -"c:\dataimage\coverflow\ci01.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\jpeg.jpg" -"c:\dataimage\coverflow\jpeg.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\svg.svg" -"c:\dataimage\coverflow\svg.svg"
+"\epoc32\winscw\c\dataimage\coverflow\schedule.png" -"c:\dataimage\coverflow\schedule.png"
+"\epoc32\winscw\c\dataimage\coverflow\icon.png" -"c:\dataimage\coverflow\icon.png"
+"\epoc32\winscw\c\dataimage\coverflow\1.jpg" -"c:\dataimage\coverflow\1.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\2.jpg" -"c:\dataimage\coverflow\2.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\3.jpg" -"c:\dataimage\coverflow\3.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\4.jpg" -"c:\dataimage\coverflow\4.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\5.jpg" -"c:\dataimage\coverflow\5.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\6.jpg" -"c:\dataimage\coverflow\6.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\7.jpg" -"c:\dataimage\coverflow\7.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\8.jpg" -"c:\dataimage\coverflow\8.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\9.jpg" -"c:\dataimage\coverflow\9.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\10.jpg" -"c:\dataimage\coverflow\10.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\11.jpg" -"c:\dataimage\coverflow\11.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\12.jpg" -"c:\dataimage\coverflow\12.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\13.jpg" -"c:\dataimage\coverflow\13.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\14.jpg" -"c:\dataimage\coverflow\14.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\15.jpg" -"c:\dataimage\coverflow\15.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\16.jpg" -"c:\dataimage\coverflow\16.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\17.jpg" -"c:\dataimage\coverflow\17.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\18.jpg" -"c:\dataimage\coverflow\18.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\19.jpg" -"c:\dataimage\coverflow\19.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\20.jpg" -"c:\dataimage\coverflow\20.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\21.jpg" -"c:\dataimage\coverflow\21.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\22.jpg" -"c:\dataimage\coverflow\22.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\23.jpg" -"c:\dataimage\coverflow\23.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\24.jpg" -"c:\dataimage\coverflow\24.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\25.jpg" -"c:\dataimage\coverflow\25.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\26.jpg" -"c:\dataimage\coverflow\26.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\27.jpg" -"c:\dataimage\coverflow\27.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\28.jpg" -"c:\dataimage\coverflow\28.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\29.jpg" -"c:\dataimage\coverflow\29.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\30.jpg" -"c:\dataimage\coverflow\30.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\31.jpg" -"c:\dataimage\coverflow\31.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\32.jpg" -"c:\dataimage\coverflow\32.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\33.jpg" -"c:\dataimage\coverflow\33.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\34.jpg" -"c:\dataimage\coverflow\34.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\35.jpg" -"c:\dataimage\coverflow\35.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\36.jpg" -"c:\dataimage\coverflow\36.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\37.jpg" -"c:\dataimage\coverflow\37.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\38.jpg" -"c:\dataimage\coverflow\38.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\39.jpg" -"c:\dataimage\coverflow\39.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\40.jpg" -"c:\dataimage\coverflow\40.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\41.jpg" -"c:\dataimage\coverflow\41.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\42.jpg" -"c:\dataimage\coverflow\42.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\43.jpg" -"c:\dataimage\coverflow\43.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\44.jpg" -"c:\dataimage\coverflow\44.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\45.jpg" -"c:\dataimage\coverflow\45.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\46.jpg" -"c:\dataimage\coverflow\46.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\47.jpg" -"c:\dataimage\coverflow\47.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\48.jpg" -"c:\dataimage\coverflow\48.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\49.jpg" -"c:\dataimage\coverflow\49.jpg"
+"\epoc32\winscw\c\dataimage\coverflow\50.jpg" -"c:\dataimage\coverflow\50.jpg"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/coverflow_testapp .bat Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,30 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Coverflow sisx bat file
+rem
+
+@echo off
+echo DoTo: update the location for certificate and private key files
+
+set certificate_file=..\internal\certificates\rd.cer
+set private_key_file=..\internal\certificates\rd-key.pem
+
+makesis coverflow_test.pkg
+signsis coverflow_test.sis coverflow_test.sisx %certificate_file% %private_key_file%
+
+makesis grid_test.pkg
+signsis grid_test.sis grid_test.sisx %certificate_file% %private_key_file%
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/gesturetest.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"GestureTest"},(0x2000FA8C),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+"\epoc32\release\armv5\urel\gesturetest_0xefbdc5b3.exe"-"!:\sys\bin\gesturetest_0xefbdc5b3.exe"
+"\epoc32\data\z\resource\apps\gesturetest_0xefbdc5b3.rsc"-"!:\resource\apps\gesturetest_0xefbdc5b3.rsc"
+"\epoc32\data\z\private\10003a3f\apps\gesturetest_0xefbdc5b3_reg.rsc"-"!:\private\10003a3f\import\apps\gesturetest_0xefbdc5b3_reg.rsc"
+"\epoc32\winscw\c\data\images\gesture_sample_pic.jpg" -"c:\Data\Images\gesture_sample_pic.jpg"
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/grid_test.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,84 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"GridTest"},(0x048C0995),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+;=============================
+;TestMulGridWidget
+;=============================
+"\epoc32\release\armv5\urel\testgridwidget.exe"-"!:\sys\bin\testgridwidget.exe"
+"\epoc32\data\z\private\10003a3f\import\apps\TestGridWidget_reg.rsc"-"!:\private\10003a3f\import\apps\TestGridWidget_reg.rsc"
+"\epoc32\data\z\resource\apps\TestGridWidget_loc.RSc"-"!:\resource\apps\TestGridWidget_loc.RSc"
+"\epoc32\data\z\resource\apps\testgridwidget.RSc"-"!:\resource\apps\testgridwidget.RSc"
+
+
+;=============================
+;Images for grid widget
+;=============================
+
+"\epoc32\WINSCW\C\dataimage\grid\i01.png" -"c:\dataimage\grid\i01.png"
+"\epoc32\WINSCW\C\dataimage\grid\i02.png" -"c:\dataimage\grid\i02.png"
+"\epoc32\WINSCW\C\dataimage\grid\i03.png" -"c:\dataimage\grid\i03.png"
+"\epoc32\WINSCW\C\dataimage\grid\i04.png" -"c:\dataimage\grid\i04.png"
+"\epoc32\WINSCW\C\dataimage\grid\i05.png" -"c:\dataimage\grid\i05.png"
+"\epoc32\WINSCW\C\dataimage\grid\i06.png" -"c:\dataimage\grid\i06.png"
+"\epoc32\WINSCW\C\dataimage\grid\i07.png" -"c:\dataimage\grid\i07.png"
+"\epoc32\WINSCW\C\dataimage\grid\i08.png" -"c:\dataimage\grid\i08.png"
+"\epoc32\WINSCW\C\dataimage\grid\i09.png" -"c:\dataimage\grid\i09.png"
+"\epoc32\WINSCW\C\dataimage\grid\i10.png" -"c:\dataimage\grid\i10.png"
+"\epoc32\WINSCW\C\dataimage\grid\i11.png" -"c:\dataimage\grid\i11.png"
+"\epoc32\WINSCW\C\dataimage\grid\i12.png" -"c:\dataimage\grid\i12.png"
+"\epoc32\WINSCW\C\dataimage\grid\i13.png" -"c:\dataimage\grid\i13.png"
+"\epoc32\WINSCW\C\dataimage\grid\i14.png" -"c:\dataimage\grid\i14.png"
+"\epoc32\WINSCW\C\dataimage\grid\i15.png" -"c:\dataimage\grid\i15.png"
+"\epoc32\WINSCW\C\dataimage\grid\i16.png" -"c:\dataimage\grid\i16.png"
+"\epoc32\WINSCW\C\dataimage\grid\i17.png" -"c:\dataimage\grid\i17.png"
+"\epoc32\WINSCW\C\dataimage\grid\i18.png" -"c:\dataimage\grid\i18.png"
+"\epoc32\WINSCW\C\dataimage\grid\i19.png" -"c:\dataimage\grid\i19.png"
+"\epoc32\WINSCW\C\dataimage\grid\i20.png" -"c:\dataimage\grid\i20.png"
+"\epoc32\WINSCW\C\dataimage\grid\i21.png" -"c:\dataimage\grid\i21.png"
+"\epoc32\WINSCW\C\dataimage\grid\i22.png" -"c:\dataimage\grid\i22.png"
+"\epoc32\WINSCW\C\dataimage\grid\i23.png" -"c:\dataimage\grid\i23.png"
+"\epoc32\WINSCW\C\dataimage\grid\i24.png" -"c:\dataimage\grid\i24.png"
+"\epoc32\WINSCW\C\dataimage\grid\i25.png" -"c:\dataimage\grid\i25.png"
+"\epoc32\WINSCW\C\dataimage\grid\i26.png" -"c:\dataimage\grid\i26.png"
+"\epoc32\WINSCW\C\dataimage\grid\i27.png" -"c:\dataimage\grid\i27.png"
+"\epoc32\WINSCW\C\dataimage\grid\i28.png" -"c:\dataimage\grid\i28.png"
+"\epoc32\WINSCW\C\dataimage\grid\i29.png" -"c:\dataimage\grid\i29.png"
+"\epoc32\WINSCW\C\dataimage\grid\i30.png" -"c:\dataimage\grid\i30.png"
+
+"\epoc32\WINSCW\C\dataimage\grid\bmp.bmp" -"c:\dataimage\grid\bmp.bmp"
+"\epoc32\WINSCW\C\dataimage\grid\gif.gif" -"c:\dataimage\grid\gif.gif"
+"\epoc32\WINSCW\C\dataimage\grid\ci01.jpg" -"c:\dataimage\grid\ci01.jpg"
+"\epoc32\WINSCW\C\dataimage\grid\jpeg.jpg" -"c:\dataimage\grid\jpeg.jpg"
+"\epoc32\WINSCW\C\dataimage\grid\svg.svg" -"c:\dataimage\grid\svg.svg"
+"\epoc32\WINSCW\C\dataimage\grid\play.png" -"c:\dataimage\grid\play.png"
+"\epoc32\WINSCW\C\dataimage\grid\stop.png" -"c:\dataimage\grid\stop.png"
+"\epoc32\WINSCW\C\dataimage\grid\empty.png" -"c:\dataimage\grid\empty.png"
+"\epoc32\WINSCW\C\dataimage\grid\matrix_stripes.png" -"c:\dataimage\grid\matrix_stripes.png"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/metapane_test.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,55 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"MetapaneTest"},(0x0954A52),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+;=============================
+;TestMulMetapaneWidget
+;=============================
+"\epoc32\release\armv5\urel\testmetapanewidget.exe"-"!:\sys\bin\testmetapanewidget.exe"
+"\epoc32\data\z\private\10003a3f\import\apps\testmetapanewidget_reg.rsc"-"!:\private\10003a3f\import\apps\testmetapanewidget_reg.rsc"
+"\epoc32\data\z\resource\apps\testmetapanewidget_loc.rsc"-"!:\resource\apps\testmetapanewidget_loc.rsc"
+"\epoc32\data\z\resource\apps\testmetapanewidget.rsc"-"!:\resource\apps\testmetapanewidget.rsc"
+
+;=============================
+;Images for metapane widget
+;=============================
+"\epoc32\WINSCW\C\dataimage\metapane\i01.png" -"c:\dataimage\metapane\i01.png"
+"\epoc32\WINSCW\C\dataimage\metapane\i02.png" -"c:\dataimage\metapane\i02.png"
+"\epoc32\WINSCW\C\dataimage\metapane\i03.png" -"c:\dataimage\metapane\i03.png"
+"\epoc32\WINSCW\C\dataimage\metapane\i04.png" -"c:\dataimage\metapane\i04.png"
+"\epoc32\WINSCW\C\dataimage\metapane\i05.png" -"c:\dataimage\metapane\i05.png"
+"\epoc32\WINSCW\C\dataimage\metapane\i06.png" -"c:\dataimage\metapane\i06.png"
+"\epoc32\WINSCW\C\dataimage\metapane\i07.png" -"c:\dataimage\metapane\i07.png"
+"\epoc32\WINSCW\C\dataimage\metapane\i08.png" -"c:\dataimage\metapane\i08.png"
+"\epoc32\WINSCW\C\dataimage\metapane\i09.png" -"c:\dataimage\metapane\i09.png"
+"\epoc32\WINSCW\C\dataimage\metapane\i10.png" -"c:\dataimage\metapane\i10.png"
+"\epoc32\WINSCW\C\dataimage\metapane\i11.png" -"c:\dataimage\metapane\i11.png"
+"\epoc32\WINSCW\C\dataimage\metapane\play.png" -"c:\dataimage\metapane\play.png"
+"\epoc32\WINSCW\C\dataimage\metapane\stop.png" -"c:\dataimage\metapane\stop.png"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/mullistapp_test.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,122 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"ListTestApp"},(0x0558728E),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+"\epoc32\release\armv5\urel\testlistwidget.exe"-"!:\sys\bin\testlistwidget.exe"
+"\epoc32\data\z\resource\apps\testlistwidget.rsc"-"!:\resource\apps\testlistwidget.rsc"
+"\epoc32\data\z\private\10003a3f\import\apps\testlistwidget_reg.rsc"-"!:\private\10003a3f\import\apps\testlistwidget_reg.rsc"
+"\epoc32\data\z\resource\apps\testlistwidget_loc.rsc"-"!:\resource\apps\testlistwidget_loc.rsc"
+
+"\epoc32\winscw\c\dataimage\list\i01.png" -"c:\dataimage\list\i01.png"
+"\epoc32\winscw\c\dataimage\list\i02.png" -"c:\dataimage\list\i02.png"
+"\epoc32\winscw\c\dataimage\list\i03.png" -"c:\dataimage\list\i03.png"
+"\epoc32\winscw\c\dataimage\list\i04.png" -"c:\dataimage\list\i04.png"
+"\epoc32\winscw\c\dataimage\list\i05.png" -"c:\dataimage\list\i05.png"
+"\epoc32\winscw\c\dataimage\list\i06.png" -"c:\dataimage\list\i06.png"
+"\epoc32\winscw\c\dataimage\list\i07.png" -"c:\dataimage\list\i07.png"
+"\epoc32\winscw\c\dataimage\list\i08.png" -"c:\dataimage\list\i08.png"
+"\epoc32\winscw\c\dataimage\list\i09.png" -"c:\dataimage\list\i09.png"
+"\epoc32\winscw\c\dataimage\list\i010.png" -"c:\dataimage\list\i010.png"
+"\epoc32\winscw\c\dataimage\list\i011.png" -"c:\dataimage\list\i011.png"
+"\epoc32\winscw\c\dataimage\list\i012.png" -"c:\dataimage\list\i012.png"
+"\epoc32\winscw\c\dataimage\list\i013.png" -"c:\dataimage\list\i013.png"
+"\epoc32\winscw\c\dataimage\list\i014.png" -"c:\dataimage\list\i014.png"
+"\epoc32\winscw\c\dataimage\list\i015.png" -"c:\dataimage\list\i015.png"
+"\epoc32\winscw\c\dataimage\list\i016.png" -"c:\dataimage\list\i016.png"
+"\epoc32\winscw\c\dataimage\list\i017.png" -"c:\dataimage\list\i017.png"
+"\epoc32\winscw\c\dataimage\list\i018.png" -"c:\dataimage\list\i018.png"
+"\epoc32\winscw\c\dataimage\list\i019.png" -"c:\dataimage\list\i019.png"
+"\epoc32\winscw\c\dataimage\list\i010.png" -"c:\dataimage\list\i020.png"
+"\epoc32\winscw\c\dataimage\list\i021.png" -"c:\dataimage\list\i021.png"
+"\epoc32\winscw\c\dataimage\list\i022.png" -"c:\dataimage\list\i022.png"
+"\epoc32\winscw\c\dataimage\list\i023.png" -"c:\dataimage\list\i023.png"
+"\epoc32\winscw\c\dataimage\list\i024.png" -"c:\dataimage\list\i024.png"
+"\epoc32\winscw\c\dataimage\list\i025.png" -"c:\dataimage\list\i025.png"
+"\epoc32\winscw\c\dataimage\list\i026.png" -"c:\dataimage\list\i026.png"
+"\epoc32\winscw\c\dataimage\list\i027.png" -"c:\dataimage\list\i027.png"
+"\epoc32\winscw\c\dataimage\list\i028.png" -"c:\dataimage\list\i028.png"
+"\epoc32\winscw\c\dataimage\list\i029.png" -"c:\dataimage\list\i029.png"
+"\epoc32\winscw\c\dataimage\list\i030.png" -"c:\dataimage\list\i030.png"
+"\epoc32\winscw\c\dataimage\list\i031.png" -"c:\dataimage\list\i031.png"
+"\epoc32\winscw\c\dataimage\list\i032.png" -"c:\dataimage\list\i032.png"
+"\epoc32\winscw\c\dataimage\list\i033.png" -"c:\dataimage\list\i033.png"
+"\epoc32\winscw\c\dataimage\list\i034.png" -"c:\dataimage\list\i034.png"
+"\epoc32\winscw\c\dataimage\list\i035.png" -"c:\dataimage\list\i035.png"
+"\epoc32\winscw\c\dataimage\list\i036.png" -"c:\dataimage\list\i036.png"
+"\epoc32\winscw\c\dataimage\list\i036.png" -"c:\dataimage\list\matrix_stripes.png"
+
+"\epoc32\WINSCW\C\dataimage\list\focus.png" -"c:\dataimage\list\focus.png"
+"\epoc32\WINSCW\C\dataimage\list\bmp.bmp" -"c:\dataimage\list\bmp.bmp"
+"\epoc32\WINSCW\C\dataimage\list\gif.gif" -"c:\dataimage\list\gif.gif"
+"\epoc32\WINSCW\C\dataimage\list\ci01.jpg" -"c:\dataimage\list\ci01.jpg"
+"\epoc32\WINSCW\C\dataimage\list\jpeg.jpg" -"c:\dataimage\list\jpeg.jpg"
+"\epoc32\WINSCW\C\dataimage\list\play.png" -"c:\dataimage\list\play.png"
+"\epoc32\WINSCW\C\dataimage\list\stop.png" -"c:\dataimage\list\stop.png"
+"\epoc32\WINSCW\C\dataimage\list\svg.svg" -"c:\dataimage\list\svg.svg"
+
+
+"\epoc32\WINSCW\C\dataimage\list\i01.svg" -"c:\dataimage\list\i01.svg"
+"\epoc32\WINSCW\C\dataimage\list\i02.svg" -"c:\dataimage\list\i02.svg"
+"\epoc32\WINSCW\C\dataimage\list\i03.svg" -"c:\dataimage\list\i03.svg"
+"\epoc32\WINSCW\C\dataimage\list\i04.svg" -"c:\dataimage\list\i04.svg"
+"\epoc32\WINSCW\C\dataimage\list\i05.svg" -"c:\dataimage\list\i05.svg"
+"\epoc32\winscw\c\dataimage\list\i06.svg" -"c:\dataimage\list\i06.svg"
+"\epoc32\winscw\c\dataimage\list\i07.svg" -"c:\dataimage\list\i07.svg"
+"\epoc32\winscw\c\dataimage\list\i08.svg" -"c:\dataimage\list\i08.svg"
+"\epoc32\winscw\c\dataimage\list\i09.svg" -"c:\dataimage\list\i09.svg"
+"\epoc32\winscw\c\dataimage\list\i010.svg" -"c:\dataimage\list\i010.svg"
+"\epoc32\winscw\c\dataimage\list\i011.svg" -"c:\dataimage\list\i011.svg"
+"\epoc32\winscw\c\dataimage\list\i012.svg" -"c:\dataimage\list\i012.svg"
+"\epoc32\winscw\c\dataimage\list\i013.svg" -"c:\dataimage\list\i013.svg"
+"\epoc32\winscw\c\dataimage\list\i014.svg" -"c:\dataimage\list\i014.svg"
+"\epoc32\winscw\c\dataimage\list\i015.svg" -"c:\dataimage\list\i015.svg"
+"\epoc32\winscw\c\dataimage\list\i016.svg" -"c:\dataimage\list\i016.svg"
+"\epoc32\winscw\c\dataimage\list\i017.svg" -"c:\dataimage\list\i017.svg"
+"\epoc32\winscw\c\dataimage\list\i018.svg" -"c:\dataimage\list\i018.svg"
+"\epoc32\winscw\c\dataimage\list\i019.svg" -"c:\dataimage\list\i019.svg"
+"\epoc32\winscw\c\dataimage\list\i010.svg" -"c:\dataimage\list\i020.svg"
+"\epoc32\winscw\c\dataimage\list\i021.svg" -"c:\dataimage\list\i021.svg"
+"\epoc32\winscw\c\dataimage\list\i022.svg" -"c:\dataimage\list\i022.svg"
+"\epoc32\winscw\c\dataimage\list\i023.svg" -"c:\dataimage\list\i023.svg"
+"\epoc32\winscw\c\dataimage\list\i024.svg" -"c:\dataimage\list\i024.svg"
+"\epoc32\winscw\c\dataimage\list\i025.svg" -"c:\dataimage\list\i025.svg"
+"\epoc32\winscw\c\dataimage\list\i026.svg" -"c:\dataimage\list\i026.svg"
+"\epoc32\winscw\c\dataimage\list\i027.svg" -"c:\dataimage\list\i027.svg"
+"\epoc32\winscw\c\dataimage\list\i028.svg" -"c:\dataimage\list\i028.svg"
+"\epoc32\winscw\c\dataimage\list\i029.svg" -"c:\dataimage\list\i029.svg"
+"\epoc32\winscw\c\dataimage\list\i030.svg" -"c:\dataimage\list\i030.svg"
+"\epoc32\winscw\c\dataimage\list\i031.svg" -"c:\dataimage\list\i031.svg"
+"\epoc32\winscw\c\dataimage\list\i032.svg" -"c:\dataimage\list\i032.svg"
+"\epoc32\winscw\c\dataimage\list\i033.svg" -"c:\dataimage\list\i033.svg"
+"\epoc32\winscw\c\dataimage\list\i034.svg" -"c:\dataimage\list\i034.svg"
+"\epoc32\winscw\c\dataimage\list\i035.svg" -"c:\dataimage\list\i035.svg"
+"\epoc32\winscw\c\dataimage\list\i036.svg" -"c:\dataimage\list\i036.svg"
+"\epoc32\WINSCW\C\dataimage\list\play.svg" -"c:\dataimage\list\play.svg"
+"\epoc32\WINSCW\C\dataimage\list\stop.svg" -"c:\dataimage\list\stop.svg"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/slider_test.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,39 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"SliderTest"},(0x0559728E),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+"\epoc32\winscw\c\dataimage\slider\volume.jpg" -"c:\dataimage\slider\volume.jpg"
+"\epoc32\winscw\c\dataimage\slider\mute.jpg" -"c:\dataimage\slider\mute.jpg"
+
+"\epoc32\release\armv5\urel\testsliderwidget.exe"-"!:\sys\bin\testsliderwidget.exe"
+"\epoc32\data\z\private\10003a3f\import\apps\testsliderwidget_reg.rsc"-"!:\private\10003a3f\import\apps\testsliderwidget_reg.rsc"
+;"\epoc32\data\z\resource\apps\testsliderwidget_loc.rsc"-"!:\resource\apps\testsliderwidget_loc.rsc"
+"\epoc32\data\z\resource\apps\testsliderwidget.rsc"-"!:\resource\apps\testsliderwidget.rsc"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/softkeytest.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"SoftKeyTest"},(0x077F3FA3),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+"\epoc32\release\armv5\urel\testsoftkeywidget.exe"-"!:\sys\bin\testsoftkeywidget.exe"
+"\epoc32\data\z\resource\apps\testsoftkeywidget.rsc"-"!:\resource\apps\testsoftkeywidget.rsc"
+"\epoc32\data\z\private\10003a3f\import\apps\TestSoftkeyWidget_reg.rsc"-"!:\private\10003a3f\import\apps\TestSoftkeyWidget_reg.rsc"
+"\epoc32\data\z\resource\apps\TestSoftkeyWidget_loc.rsc"-"!:\resource\apps\TestSoftkeyWidget_loc.rsc"
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/test .bat Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,34 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: bat file to create all Widget's test app.
+rem
+
+
+call makesis coverflow_test.pkg
+call signsis -s coverflow_test.sis coverflow_test.sisx RDTest_02.der RDTest_02.key
+
+call makesis gesturetest.pkg
+call signsis -s gesturetest.sis gesturetest.sisx RDTest_02.der RDTest_02.key
+
+call makesis grid_test.pkg
+call signsis -s grid_test.sis grid_test.sisx RDTest_02.der RDTest_02.key
+
+call makesis mullistapp_test.pkg
+call signsis -s mullistapp_test.sis mullistapp_test.sisx RDTest_02.der RDTest_02.key
+
+call makesis ListTest.pkg
+call signsis -s ListTest.sis ListTest.sisx RDTest_02.der RDTest_02.key
+call makesis slider_test.pkg
+call signsis -s slider_test.sis slider_test.sisx RDTest_02.der RDTest_02.key
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/test_udeb.bat Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,40 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: bat file to create all Widget's test app with logging utility.
+rem
+
+
+call makesis coverflow_test_udeb.pkg
+call signsis -s coverflow_test_udeb.sis coverflow_test_udeb.sisx RDTest_02.der RDTest_02.key
+
+call makesis gesturetest.pkg
+call signsis -s gesturetest.sis gesturetest.sisx RDTest_02.der RDTest_02.key
+
+call makesis grid_test.pkg
+call signsis -s grid_test.sis grid_test.sisx RDTest_02.der RDTest_02.key
+
+call makesis mullistapp_test.pkg
+call signsis -s mullistapp_test.sis mullistapp_test.sisx RDTest_02.der RDTest_02.key
+
+call makesis slider_test.pkg
+call signsis -s slider_test.sis slider_test.sisx RDTest_02.der RDTest_02.key
+
+call makesis softkeytest.pkg
+call signsis -s softkeytest.sis softkeytest.sisx RDTest_02.der RDTest_02.key
+
+call makesis toolbar_test.pkg
+call signsis -s toolbar_test.sis toolbar_test.sisx RDTest_02.der RDTest_02.key
+
+call makesis metapane_test.pkg
+call signsis -s metapane_test.sis metapane_test.sisx RDTest_02.der RDTest_02.key
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/sis/toolbar_test.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,50 @@
+;
+; Copyright (c) 2009 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: ;Language - standard language definitions
+;
+&EN
+
+; standard SIS file header
+#{"ToolbarTest"},(0x0E1B3BEA),1,0,0
+
+;Supports Series 60 v 3.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+; Files to copy
+
+
+"\epoc32\release\armv5\urel\TestToolBarWidget.exe" -"!:\sys\bin\TestToolBarWidget.exe"
+"\epoc32\data\z\private\10003a3f\import\apps\TestToolBarWidget_reg.rsc" -"!:\private\10003a3f\import\apps\TestToolBarWidget_reg.rsc"
+"\epoc32\data\z\resource\apps\TestToolBarWidget_loc.rsc" -"!:\resource\apps\TestToolBarWidget_loc.rsc"
+"\epoc32\data\z\resource\apps\TestToolBarWidget.rsc" -"!:\resource\apps\TestToolBarWidget.rsc"
+
+
+
+
+"\epoc32\winscw\c\dataimage\toolbar\i01.png" -"c:\dataimage\toolbar\i01.png"
+"\epoc32\winscw\c\dataimage\toolbar\i02.png" -"c:\dataimage\toolbar\i02.png"
+"\epoc32\winscw\c\dataimage\toolbar\i03.png" -"c:\dataimage\toolbar\i03.png"
+"\epoc32\winscw\c\dataimage\toolbar\i04.png" -"c:\dataimage\toolbar\i04.png"
+"\epoc32\WINSCW\C\dataimage\toolbar\bmp.bmp" -"c:\dataimage\toolbar\bmp.bmp"
+"\epoc32\WINSCW\C\dataimage\toolbar\gif.gif" -"c:\dataimage\toolbar\gif.gif"
+"\epoc32\WINSCW\C\dataimage\toolbar\ci01.jpg" -"c:\dataimage\toolbar\ci01.jpg"
+"\epoc32\WINSCW\C\dataimage\toolbar\jpeg.jpg" -"c:\dataimage\toolbar\jpeg.jpg"
+"\epoc32\WINSCW\C\dataimage\toolbar\svg.svg" -"c:\dataimage\toolbar\svg.svg"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/group/Doxyfile.txt Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1307 @@
+# Doxyfile 1.5.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file that
+# follow. The default is UTF-8 which is also the encoding used for all text before
+# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
+# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
+# possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "UI Accelerator DeclarativeUi osncore"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = ../doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
+# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
+# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
+# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES = panic=@exception \
+ leave=@exception \
+ "internalTechnology=@par Internal technology" \
+ "internalComponent=@par Internal component" \
+ "internalAll=@par Internal all" \
+ "publishedPartner=@par Published-partner" \
+ "publishedAll=@par Published-all" \
+ "prototype=@par Prototype" \
+ "interim=@par Interim" \
+ "released=@par Released" \
+ "removed=@par Removed" \
+ "test=@par Test" \
+ "realtime=@par Realtime" \
+ "status=@par Status:\n"\
+ "attributes=@par Attributes: \n"\
+ "interfaces=@par Interfaces: \n"\
+ "lib=@par Library: \n"\
+ "events=@par Events: \n"\
+ "beginAPI=@name Exported API\n @{" \
+ endAPI=@}
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
+# include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = YES
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+
+INPUT = ../osncore/osncore/inc \
+INPUT = ../../inc/osn_string_api/inc/osn \
+INPUT = ../../inc/osn_global_api/inc/osn \
+INPUT = ../../inc/osn_container_api/inc/osn
+
+
+
+# This tag can be used to specify the character encoding of the source files that
+# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
+# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
+# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cpp \
+ *.h \
+ *.inl \
+ *.hh \
+ *.hrh \
+ *.dox
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the output.
+# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
+# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code. Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 3
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX = TAlf \
+ SAlf \
+ CAlf \
+ RAlf \
+ MAlf \
+ IAlf \
+ Alf
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = doxygen
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED = "NONSHARABLE_CLASS(name)=class name" \
+ "OSN_NONSHARABLE_CLASS(name)=class name" \
+ "_LIT(name,string)=const static TLitC<sizeof(L##string)/2> name={sizeof(L##string)/2-1,L##string}"
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
+# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
+# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
+# be found in the default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = NO
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a caller dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen will always
+# show the root nodes and its direct children regardless of this setting.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, which results in a white background.
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2007 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: Master bld.inf
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+WINSCW ARMV5
+
+#include "../osncore/group/bld.inf"
+
+PRJ_EXPORTS
+../../rom/osncore.iby CORE_MW_LAYER_IBY_EXPORT_PATH(osncore.iby)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/bwins/osncoreu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,49 @@
+EXPORTS
+ ??4UString@osncore@@QAEAAV01@ABV01@@Z @ 1 NONAME ; class osncore::UString & osncore::UString::operator=(class osncore::UString const &)
+ ??8UString@osncore@@QBE_NABV01@@Z @ 2 NONAME ; bool osncore::UString::operator==(class osncore::UString const &) const
+ ??0AlfPtrVectorImpl@osncore@@QAE@IAAVIDeleter@1@@Z @ 3 NONAME ; osncore::AlfPtrVectorImpl::AlfPtrVectorImpl(unsigned int, class osncore::IDeleter &)
+ ?remove@AlfPtrVectorImpl@osncore@@QAE_NI_N@Z @ 4 NONAME ; bool osncore::AlfPtrVectorImpl::remove(unsigned int, bool)
+ ?append@UString@osncore@@QAEXPBD@Z @ 5 NONAME ; void osncore::UString::append(char const *)
+ ??AUString@osncore@@QAEKJ@Z @ 6 NONAME ; unsigned long osncore::UString::operator[](long)
+ ?getByteLength@UString@osncore@@QBEJXZ @ 7 NONAME ; long osncore::UString::getByteLength(void) const
+ ??0UString@osncore@@QAE@PBDH@Z @ 8 NONAME ; osncore::UString::UString(char const *, int)
+ ?toInt@osncore@@YAHABVUString@1@@Z @ 9 NONAME ; int osncore::toInt(class osncore::UString const &)
+ ??_V@YAXPAXW4newarg@@@Z @ 10 NONAME ; void operator delete[](void *, enum newarg)
+ ?insert@UString@osncore@@QAEXJPBDJ@Z @ 11 NONAME ; void osncore::UString::insert(long, char const *, long)
+ ??0UString@osncore@@QAE@PBD@Z @ 12 NONAME ; osncore::UString::UString(char const *)
+ ?normalizeNFD@osncore@@YA?AV?$auto_ptr@VUString@osncore@@@std@@ABVUString@1@@Z @ 13 NONAME ; class std::auto_ptr<class osncore::UString> osncore::normalizeNFD(class osncore::UString const &)
+ ?erase@UString@osncore@@QAEXJJ@Z @ 14 NONAME ; void osncore::UString::erase(long, long)
+ ??8UString@osncore@@QBE_NPBD@Z @ 15 NONAME ; bool osncore::UString::operator==(char const *) const
+ ?what@InvalidUtf8@UString@osncore@@UBEPBDXZ @ 16 NONAME ; char const * osncore::UString::InvalidUtf8::what(void) const
+ ??0UString@osncore@@QAE@K@Z @ 17 NONAME ; osncore::UString::UString(unsigned long)
+ ??_U@YAPAXIW4newarg@@@Z @ 18 NONAME ; void * operator new[](unsigned int, enum newarg)
+ ?replace@UString@osncore@@QAEXJPBDJ@Z @ 19 NONAME ; void osncore::UString::replace(long, char const *, long)
+ ?compare@UString@osncore@@QBEHABV12@@Z @ 20 NONAME ; int osncore::UString::compare(class osncore::UString const &) const
+ ??1?$UtfProxy@G@osncore@@QAE@XZ @ 21 NONAME ; osncore::UtfProxy<unsigned short>::~UtfProxy<unsigned short>(void)
+ ?clear@AlfPtrVectorImpl@osncore@@QAEX_N@Z @ 22 NONAME ; void osncore::AlfPtrVectorImpl::clear(bool)
+ ?normalizeNFKD@osncore@@YA?AV?$auto_ptr@VUString@osncore@@@std@@ABVUString@1@@Z @ 23 NONAME ; class std::auto_ptr<class osncore::UString> osncore::normalizeNFKD(class osncore::UString const &)
+ ??0UString@osncore@@QAE@ABV01@@Z @ 24 NONAME ; osncore::UString::UString(class osncore::UString const &)
+ ??4UString@osncore@@QAEAAV01@PBD@Z @ 25 NONAME ; class osncore::UString & osncore::UString::operator=(char const *)
+ ?append@UString@osncore@@QAEXABV12@@Z @ 26 NONAME ; void osncore::UString::append(class osncore::UString const &)
+ ?getUtf8@UString@osncore@@QBEPBDXZ @ 27 NONAME ; char const * osncore::UString::getUtf8(void) const
+ ??3@YAXPAXW4newarg@@@Z @ 28 NONAME ; void operator delete(void *, enum newarg)
+ ?resize@AlfPtrVectorImpl@osncore@@QAE_NI_N@Z @ 29 NONAME ; bool osncore::AlfPtrVectorImpl::resize(unsigned int, bool)
+ ?replace@UString@osncore@@QAEXJPBD@Z @ 30 NONAME ; void osncore::UString::replace(long, char const *)
+ ?findRef@AlfPtrVectorImpl@osncore@@QAEHPAX@Z @ 31 NONAME ; int osncore::AlfPtrVectorImpl::findRef(void *)
+ ?insert@UString@osncore@@QAEXJPBD@Z @ 32 NONAME ; void osncore::UString::insert(long, char const *)
+ ??1UString@osncore@@UAE@XZ @ 33 NONAME ; osncore::UString::~UString(void)
+ ?toUtf16@osncore@@YA?AV?$auto_ptr@V?$UtfProxy@G@osncore@@@std@@ABVUString@1@@Z @ 34 NONAME ; class std::auto_ptr<class osncore::UtfProxy<unsigned short> > osncore::toUtf16(class osncore::UString const &)
+ ??2@YAPAXIW4newarg@@@Z @ 35 NONAME ; void * operator new(unsigned int, enum newarg)
+ ?getCharLength@UString@osncore@@QBEJXZ @ 36 NONAME ; long osncore::UString::getCharLength(void) const
+ ?insert@AlfPtrVectorImpl@osncore@@QAE_NIPAX_N@Z @ 37 NONAME ; bool osncore::AlfPtrVectorImpl::insert(unsigned int, void *, bool)
+ ?isEmpty@UString@osncore@@QBE_NXZ @ 38 NONAME ; bool osncore::UString::isEmpty(void) const
+ ?normalizeNFC@osncore@@YA?AV?$auto_ptr@VUString@osncore@@@std@@ABVUString@1@@Z @ 39 NONAME ; class std::auto_ptr<class osncore::UString> osncore::normalizeNFC(class osncore::UString const &)
+ ?isNull@UString@osncore@@QBE_NXZ @ 40 NONAME ; bool osncore::UString::isNull(void) const
+ ??0UString@osncore@@QAE@XZ @ 41 NONAME ; osncore::UString::UString(void)
+ ?compareC@UString@osncore@@QBEHPBD@Z @ 42 NONAME ; int osncore::UString::compareC(char const *) const
+ ?normalizeNFKC@osncore@@YA?AV?$auto_ptr@VUString@osncore@@@std@@ABVUString@1@@Z @ 43 NONAME ; class std::auto_ptr<class osncore::UString> osncore::normalizeNFKC(class osncore::UString const &)
+ ??1AlfPtrVectorImpl@osncore@@QAE@XZ @ 44 NONAME ; osncore::AlfPtrVectorImpl::~AlfPtrVectorImpl(void)
+ ??0AlfPtrVectorImpl@osncore@@QAE@AAVIDeleter@1@@Z @ 45 NONAME ; osncore::AlfPtrVectorImpl::AlfPtrVectorImpl(class osncore::IDeleter &)
+ ?compareC@UString@osncore@@QBEHABV12@@Z @ 46 NONAME ; int osncore::UString::compareC(class osncore::UString const &) const
+ ?compare@UString@osncore@@QBEHPBD@Z @ 47 NONAME ; int osncore::UString::compare(char const *) const
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/eabi/osncoreu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,64 @@
+EXPORTS
+ _ZN7osncore12normalizeNFCERKNS_7UStringE @ 1 NONAME
+ _ZN7osncore12normalizeNFDERKNS_7UStringE @ 2 NONAME
+ _ZN7osncore13normalizeNFKCERKNS_7UStringE @ 3 NONAME
+ _ZN7osncore13normalizeNFKDERKNS_7UStringE @ 4 NONAME
+ _ZN7osncore16AlfPtrVectorImpl5clearEb @ 5 NONAME
+ _ZN7osncore16AlfPtrVectorImpl6insertEjPvb @ 6 NONAME
+ _ZN7osncore16AlfPtrVectorImpl6removeEjb @ 7 NONAME
+ _ZN7osncore16AlfPtrVectorImpl6resizeEjb @ 8 NONAME
+ _ZN7osncore16AlfPtrVectorImpl7findRefEPv @ 9 NONAME
+ _ZN7osncore16AlfPtrVectorImplC1ERNS_8IDeleterE @ 10 NONAME
+ _ZN7osncore16AlfPtrVectorImplC1EjRNS_8IDeleterE @ 11 NONAME
+ _ZN7osncore16AlfPtrVectorImplC2ERNS_8IDeleterE @ 12 NONAME
+ _ZN7osncore16AlfPtrVectorImplC2EjRNS_8IDeleterE @ 13 NONAME
+ _ZN7osncore16AlfPtrVectorImplD1Ev @ 14 NONAME
+ _ZN7osncore16AlfPtrVectorImplD2Ev @ 15 NONAME
+ _ZN7osncore5toIntERKNS_7UStringE @ 16 NONAME
+ _ZN7osncore7UString5eraseEll @ 17 NONAME
+ _ZN7osncore7UString6appendEPKc @ 18 NONAME
+ _ZN7osncore7UString6appendERKS0_ @ 19 NONAME
+ _ZN7osncore7UString6insertElPKc @ 20 NONAME
+ _ZN7osncore7UString6insertElPKcl @ 21 NONAME
+ _ZN7osncore7UString7replaceElPKc @ 22 NONAME
+ _ZN7osncore7UString7replaceElPKcl @ 23 NONAME
+ _ZN7osncore7UStringC1EPKc @ 24 NONAME
+ _ZN7osncore7UStringC1EPKci @ 25 NONAME
+ _ZN7osncore7UStringC1ERKS0_ @ 26 NONAME
+ _ZN7osncore7UStringC1Em @ 27 NONAME
+ _ZN7osncore7UStringC1Ev @ 28 NONAME
+ _ZN7osncore7UStringC2EPKc @ 29 NONAME
+ _ZN7osncore7UStringC2EPKci @ 30 NONAME
+ _ZN7osncore7UStringC2ERKS0_ @ 31 NONAME
+ _ZN7osncore7UStringC2Em @ 32 NONAME
+ _ZN7osncore7UStringC2Ev @ 33 NONAME
+ _ZN7osncore7UStringD0Ev @ 34 NONAME
+ _ZN7osncore7UStringD1Ev @ 35 NONAME
+ _ZN7osncore7UStringD2Ev @ 36 NONAME
+ _ZN7osncore7UStringaSEPKc @ 37 NONAME
+ _ZN7osncore7UStringaSERKS0_ @ 38 NONAME
+ _ZN7osncore7UStringixEl @ 39 NONAME
+ _ZN7osncore7toUtf16ERKNS_7UStringE @ 40 NONAME
+ _ZN7osncore8UtfProxyItED1Ev @ 41 NONAME
+ _ZN7osncore8UtfProxyItED2Ev @ 42 NONAME
+ _ZNK7osncore7UString11InvalidUtf84whatEv @ 43 NONAME
+ _ZNK7osncore7UString13getByteLengthEv @ 44 NONAME
+ _ZNK7osncore7UString13getCharLengthEv @ 45 NONAME
+ _ZNK7osncore7UString6isNullEv @ 46 NONAME
+ _ZNK7osncore7UString7compareEPKc @ 47 NONAME
+ _ZNK7osncore7UString7compareERKS0_ @ 48 NONAME
+ _ZNK7osncore7UString7getUtf8Ev @ 49 NONAME
+ _ZNK7osncore7UString7isEmptyEv @ 50 NONAME
+ _ZNK7osncore7UString8compareCEPKc @ 51 NONAME
+ _ZNK7osncore7UString8compareCERKS0_ @ 52 NONAME
+ _ZNK7osncore7UStringeqEPKc @ 53 NONAME
+ _ZNK7osncore7UStringeqERKS0_ @ 54 NONAME
+ _ZTIN7osncore7UString11InvalidUtf8E @ 55 NONAME ; #<TI>#
+ _ZTIN7osncore7UStringE @ 56 NONAME ; #<TI>#
+ _ZTVN7osncore7UString11InvalidUtf8E @ 57 NONAME ; #<VT>#
+ _ZTVN7osncore7UStringE @ 58 NONAME ; #<VT>#
+ _ZdaPv6newarg @ 59 NONAME
+ _ZdlPv6newarg @ 60 NONAME
+ _Znaj6newarg @ 61 NONAME
+ _Znwj6newarg @ 62 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2007 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: Master bld.inf
+*
+*/
+
+#include <bldvariant.hrh>
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+
+WINSCW ARMV5
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+osncore.mmp
+
+PRJ_TESTMMPFILES
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/group/osncore.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2007 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: Project definition file
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+TARGET osncore.dll
+TARGETTYPE dll
+
+VENDORID VID_DEFAULT
+
+
+
+CAPABILITY CAP_GENERAL_DLL
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+
+SOURCEPATH ../src
+SOURCE ustring.cpp
+SOURCE ustringimpl.cpp
+SOURCE ustringutil.cpp
+SOURCE osnnew.cpp
+SOURCE alfptrvectorimpl.cpp
+
+MW_LAYER_SYSTEMINCLUDE
+
+
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_GLIB_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+
+USERINCLUDE ../inc
+
+LIBRARY libstdcpp.lib
+LIBRARY libc.lib
+LIBRARY libglib.lib
+LIBRARY euser.lib
+#define ALF_LINK_STDCPP_DLL
+//following include must be after definition
+
+LIBRARY libpthread.lib
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/inc/alfstringdata.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2009 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: OSN string data header.
+*
+*/
+
+#ifndef ALFSTRINGDATA_H
+#define ALFSTRINGDATA_H
+
+#include <osn/osntypes.h>
+
+#include "stringmacros.h"
+
+
+namespace osncore
+ {
+
+class AlfChar;
+
+class CAlfString;
+
+struct SAlfStringData
+ {
+ // Uses shared null data.
+ SAlfStringData();
+
+ // No copy.
+ // SAlfStringData(AlfChar *u, uint l, uint m);
+ // void initialize(AlfChar *u, uint l, uint m);
+
+ // Copy bytes.
+ // SAlfStringData(const AlfChar *u, uint l);
+ // void initialize(const AlfChar *u, uint l);
+
+
+ void initialize(const char *u, int l);
+
+
+ ~SAlfStringData();
+/*
+#ifdef QSTRING_DEBUG_ALLOCATIONS
+ void* operator new(size_t s);
+ void operator delete(void*p);
+#endif
+*/
+ inline void ref() { refCount++; }
+ inline void deref() { /*if (--refCount == 0 && _isHeapAllocated) delete this;*/ refCount--; }
+
+ char* ascii();
+
+ char *makeAscii();
+
+
+
+ bool increaseAsciiSize(uint size);
+
+ // AlfChar *unicode();
+ // AlfChar *makeUnicode();
+
+
+ // bool isUnicodeInternal() const { return (char *)_unicode == _internalBuffer; }
+ bool isAsciiInternal() const { return _ascii == _internalBuffer; }
+
+ int refCount;
+ int _length;
+ // mutable AlfChar *_unicode;
+ mutable char *_ascii;
+ int _maxUnicode:30;
+ int _isUnicodeValid:1;
+ int _isHeapAllocated:1; // Fragile, but the only way we can be sure the instance was created with 'new'.
+ int _maxAscii:31;
+ int _isAsciiValid:1;
+
+ char _internalBuffer[QS_INTERNAL_BUFFER_SIZE]; // Pad out to a (((size + 1) & ~15) + 14) size
+
+private:
+ SAlfStringData(const SAlfStringData &);
+ SAlfStringData &operator=(const SAlfStringData &);
+
+ };
+
+ }// osncore
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/inc/stringmacros.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 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: string Macro include.
+*
+*/
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+
+#define QS_INTERNAL_BUFFER_SIZE 20
+#define QS_INTERNAL_BUFFER_CHARS QS_INTERNAL_BUFFER_SIZE-1
+
+
+#define malloc_good_size(size) size
+
+//#define ALLOC_QCHAR_GOOD_SIZE(X) (malloc_good_size(X*sizeof(AlfChar))/sizeof(AlfChar))
+#define ALLOC_CHAR_GOOD_SIZE(X) (malloc_good_size(X))
+
+//#ifndef __OOM__
+#define ALLOC_CHAR( N ) (char*) malloc(N)
+#define REALLOC_CHAR( P, N ) (char *) realloc(P,N)
+//#define ALLOC_QCHAR( N ) (AlfChar*) malloc(sizeof(AlfChar)*( N ))
+//#define REALLOC_QCHAR( P, N ) (AlfChar *) realloc(P,sizeof(AlfChar)*( N ))
+#define DELETE_CHAR( P ) free(P)
+#define DELETE_QCHAR( P ) free( P )
+
+
+#define QS_INTERNAL_BUFFER_UCHARS QS_INTERNAL_BUFFER_SIZE/2
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/inc/ustringimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2007 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: String class implementation
+*
+*/
+
+#ifndef USTRING_IMPL_H
+#define USTRING_IMPL_H
+
+#include <gstring.h>
+#include <osn/ustring.h>
+
+#define MAX_STR_LEN 24
+
+namespace osncore
+{
+
+class SString;
+
+/**
+ * Glib string wrapper.
+ * @see ustring.h for description of ustring
+ * @lib osncore.lib
+ * @since S60 5.0
+ */
+class UStringImpl
+ {
+public:
+ /**
+ * Default constructor.
+ */
+ UStringImpl();
+ /**
+ * Construct a string as a copy of given null terminated string.
+ *
+ * @since S60 5.0
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @param aStr Utf-8 encoded string
+ */
+ explicit UStringImpl(const Utf8* aStr);
+ /**
+ * Construct a string as a copy of given string
+ * with byte length of the source buffer.
+ * Because a length is provided, source doesn't need to be null terminated.
+ *
+ * @since S60 5.0
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @param aStr Utf-8 encoded string
+ * @param aByteCount Byte count of Utf-8 encoded string
+ */
+ explicit UStringImpl(const Utf8* aStr, int aLen);
+ /**
+ * Construct a string from unicode code point. If Unicode is invalid,
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @since S60 5.0
+ * @param aCodePoint Unicode code point
+ */
+ explicit UStringImpl(Unicode aCodePoint);
+
+ /**
+ * UStringImpl copy constructor
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @since S60 5.0
+ * @param aUString Copy source
+ */
+ UStringImpl(const UStringImpl& aUStringImpl);
+
+ // Destructor
+ ~UStringImpl();
+
+ // Utilities
+ /**
+ * Checks whether string is empty.
+ *
+ * @since S60 5.0
+ * @return True if string doesn't have content.
+ */
+ bool empty()const;
+ /**
+ * Checks whether string is null.
+ *
+ * @since S60 5.0
+ * @return True if string is null.
+ */
+ bool null()const;
+ /**
+ * Returns the length of the string in characters.
+ *
+ * @since S60 5.0
+ * @return Length
+ */
+ long length()const;
+ /**
+ * Returns the length of the string in bytes
+ *
+ * @since S60 5.0
+ * @return Bytes
+ */
+ long bytes()const;
+
+ /**
+ * Returns utf8 type string
+ *
+ * @since S60 5.0
+ * @return utf8 type string
+ */
+ const Utf8* utf8()const;
+
+ /**
+ * Compares two strings using strcmp(). Note that this is not linguistic comparison nor case insensitive.
+ *
+ * @since S60 5.0
+ * @param aUStringImpl UStringImpl object to compare
+ * @return < 0 if this compares before aRhs, 0 if they compare equal, > 0 if this compares after aRhs.
+ */
+ int compare(const UStringImpl& aUStringImpl)const;
+ /**
+ * Compares two strings using strcmp(). Note that this is not linguistic comparison nor case insensitive.
+ *
+ * @since S60 5.0
+ * @param aStr String to compare
+ * @return < 0 if this compares before aRhs, 0 if they compare equal, > 0 if this compares after aRhs.
+ */
+ int compare(const Utf8* aStr)const;
+ /**
+ * Compares two strings for ordering using the linguistically correct rules for the current locale.
+ * When sorting a large number of strings, it will be significantly faster
+ * to obtain collation keys with g_utf8_collate_key()from libglib and compare the keys
+ * with strcmp() when sorting instead of sorting the original strings.
+ *
+ * @since S60 5.0
+ * @param aUStringImpl UStringImpl object to compare
+ * @return < 0 if this compares before aRhs, 0 if they compare equal, > 0 if this compares after aRhs.
+ */
+ int compareC(const UStringImpl& aUStringImpl)const;
+ /**
+ * Compares two strings for ordering using the linguistically correct rules for the current locale.
+ * When sorting a large number of strings, it will be significantly faster
+ * to obtain collation keys with g_utf8_collate_key() from libglib and compare the keys
+ * with strcmp() when sorting instead of sorting the original strings.
+ * If aStr is invalid utf8, UString::InvalidUtf8 exception is thrown.
+ *
+ *
+ * @since S60 5.0
+ * @param aStr String to compare
+ * @return < 0 if this compares before aRhs, 0 if they compare equal, > 0 if this compares after aRhs.
+ */
+ int compareC(const Utf8* aStr)const;
+
+ /**
+ * Adds a string onto the end of string, expanding it if necessary.
+ *
+ * @since S60 5.0
+ * @param aUStringImpl String object to append
+ */
+ void append(const UStringImpl& aUStringImpl);
+ /**
+ * Adds a string onto the end of string, expanding it if necessary.
+ *
+ * @since S60 5.0
+ * @param aStr String to append
+ */
+ void append(const Utf8* aStr);
+
+ /**
+ * Inserts aStr into string, expanding it if necessary.
+ * If aPos is -1, bytes are inserted at the end of the string.
+ *
+ * @since S60 5.0
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @param aPos The character position to insert the copy of the string
+ * @param aStr The string to insert
+ */
+ void insert(long aPos, const Utf8* aStr);
+ /**
+ * Inserts aStr into string, expanding it if necessary. Because length is
+ * provided, aStr may contain embedded nulls and need not be null terminated.
+ * If aPos is -1, bytes are inserted at the end of the string.
+ *
+ * @since S60 5.0
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @param aPos The character position to insert the copy of the string
+ * @param aStr The string to insert
+ * @param aCharCount Character count.
+ */
+ void insert(long aPos, const Utf8* aStr, long aLength);
+ /**
+ * Replace a substring with a given string, expanding it if necessary
+ *
+ * @since S60 5.0
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @param aPos The charater position to replace the string
+ * @param aStr The string to insert
+ */
+ void replace(long aPos, const Utf8* aStr);
+ /**
+ * Replace a substring with a given string, expanding it if necessary. Because length is
+ * provided, aStr may contain embedded nulls and need not be null terminated.
+ * If aLength is < 0, length is assumed to be aStr's length.
+ *
+ * @since S60 5.0
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @param aPos The character position to replace the string
+ * @param aStr The string to insert
+ * @param aCharCount Character count.
+ */
+ void replace(long aPos, const Utf8* aStr, long aLength);
+ /**
+ * Erase a substring
+ *
+ * @since S60 5.0
+ * @exception std:out_of_range is thrown if given position is invalid
+ * @param aPos The character position to start erasing from
+ * @param aCharCount number of characters to erase.
+ */
+ void erase(long aPosOffset, long aLength);
+
+ /**
+ * Returns unicode at given position in string
+ *
+ * @since S60 5.0
+ * @exception std:out_of_range is thrown if requested index is invalid
+ * @param aPos The requested position
+ */
+ Unicode operator[](long aIndex);
+
+private:
+ /**
+ * Initialises internal string
+ * @since S60 5.0
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @param aStr The string used for initialising
+ */
+ void initialize(const Utf8* aStr);
+ /**
+ * Allocates memory from heap if needed for internal string, throws if allocation fail
+ * @since S60 5.0
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @param aLength length of bytes to allocate
+ */
+ void checkBuffer(unsigned int aLength);
+ /**
+ * Implements the insertion functionality
+ * @since S60 5.0
+ * @exception std:bad_alloc is thrown if string cannot be allocated from heap
+ * @param aIndex The character position to insert the copy of the string
+ * @param aInsertChars The string to insert
+ * @param aInsertLength The amount of characters to insert
+ */
+ void insertImpl(unsigned int aIndex, const char* aInsertChars, unsigned int aInsertLength);
+ /**
+ * Implements the append functionality
+ * @since S60 5.0
+ * @param aStr The string to append
+ * @param aLength The amount of characters to append
+ */
+ void appendImpl(const char* aStr, unsigned int aLength);
+ /**
+ * Implements the erase functionality
+ * @since S60 5.0
+ * @exception std:out_of_range is thrown if given index is invalid
+ * @param aIndex The character position to start erasing from
+ * @param aLength The amount of characters to erase
+ */
+ void eraseImpl(unsigned int aIndex, unsigned int aLength);
+private:
+ /**
+ * Internal buffer, allocated from heap.
+ * Long strings are allocated from heap
+ */
+ gchar* str;
+ /**
+ * Internal buffer, allocated from stack.
+ * Short strings are allocated from stack for performance reason,
+ */
+ gchar internalStr[MAX_STR_LEN];
+ /**
+ * length of string
+ */
+ gsize len;
+ /**
+ * length of allocated bytes
+ */
+ gsize allocated_len;
+ /**
+ * Identifies if string is allocated from heap or not
+ */
+ bool isInHeap;
+ };
+}
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/src/alfptrvectorimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,227 @@
+/*
+* Copyright (c) 2009 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: osn vector pointer implementation.
+*
+*/
+
+#if defined(__GNUC__)
+#include <stdlib.h>
+#include <string.h>
+#else
+#include <libc/string.h>
+#endif
+
+#include <osn/alfptrvectorimpl.h>
+#include <stdexcept>
+
+namespace osncore
+ {
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT AlfPtrVectorImpl::AlfPtrVectorImpl(IDeleter& aDeleter)
+ : mdata(0), msize(0), mcount(0), mDeleter(aDeleter)
+ {
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT AlfPtrVectorImpl::AlfPtrVectorImpl(uint aSize, IDeleter& aDeleter):
+ mdata(0),
+ msize(aSize),
+ mcount(0), mDeleter(aDeleter)
+ {
+ mdata = (void **)malloc(aSize * sizeof(void *));
+ if(!mdata)
+ {
+ throw std::bad_alloc();
+ }
+ memset(mdata, 0, aSize * sizeof(void *));
+ }
+
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT AlfPtrVectorImpl::~AlfPtrVectorImpl()
+{
+ free(mdata);
+}
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfPtrVectorImpl::clear(bool aDelItems)
+ {
+ mcount = 0;
+
+ if (aDelItems)
+ {
+ for (uint i = 0; i < msize; ++i)
+ {
+ void *item = mdata[i];
+ if (item)
+ {
+ mDeleter.deleteItem(item);
+ }
+ }
+ }
+ free(mdata);
+ mdata = 0;
+ msize = 0;
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfPtrVectorImpl::remove(uint aCount, bool aDelItems)
+{
+ if (aCount >= msize) {
+ return false;
+ }
+
+ void *item = mdata[aCount];
+
+ --mcount;
+
+ //Move all the items below the deleted items up by 1 index
+ for(uint i =aCount; i< msize && msize > aCount;++i)
+ {
+ mdata[i]= mdata[i+1];
+ }
+
+ //Reset the items to null - from index = count to the size after the shuffling.
+ for(uint i=mcount;i<msize;++i)
+ {
+ mdata[i] = 0;
+ }
+
+ // Array is now in good shape. Can call out of the class via destructors
+ if (item) {
+ if (aDelItems) {
+ mDeleter.deleteItem(item);
+ }
+ }
+ return true;
+}
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfPtrVectorImpl::resize(uint aSize, bool aDelItems)
+{
+ uint oldSize = msize;
+
+ for (uint i = aSize; i < oldSize; ++i) {
+ void *item = mdata[i];
+ if (item) {
+ --mcount;
+ }
+ }
+
+ for (uint i = aSize; i < oldSize; ++i) {
+ void *item = mdata[i];
+ if (item) {
+ if (aDelItems) {
+ mDeleter.deleteItem(item);
+ }
+ }
+ }
+
+ void** data = (void **)realloc(mdata, aSize * sizeof(void *));
+ if(!data)
+ {
+ throw std::bad_alloc();
+ }
+ mdata = data;
+ msize = aSize;
+
+ if (aSize > oldSize)
+ {
+ memset(&mdata[oldSize], 0, (aSize - oldSize) * sizeof(void *));
+ }
+ return true;
+}
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfPtrVectorImpl::insert(uint aCount, void *aItem, bool /*aDelItems*/)
+{
+ uint iNum=0;
+ //If there are no items and the position to add > 0 or <0 then return false. Do not do anything
+ //if the Index is greater than the current count then Do not do anything
+ //if aCount== count There will be scope to add at the most one item
+ if((aCount > mcount) || (mcount==0 && aCount >iNum)||(mcount==0 && aCount < iNum))
+ {
+ return false;
+ }
+
+
+ if(mcount>=msize)
+ {
+ // 1. Let's increase the count
+ int oldSize = msize;
+ msize++;
+
+ // 2. Re-allocate memeory area
+ void** tmp = (void **)realloc(mdata, msize * sizeof(void *));
+ if(!tmp)
+ {
+ msize--;
+ throw std::bad_alloc();
+ }
+ mdata = tmp;
+ memset(&mdata[oldSize], 0, (msize- oldSize) * sizeof(void *));
+ }
+
+ //Now move elements from nth element to the last element by 1 position
+ //Move all
+ if(aCount < mcount)
+ {
+ for(int i =mcount;i > aCount; --i)
+ {
+ mdata[i]= mdata[i-1];
+ }
+ }
+ //Now assign the new element at this position and increment the count
+
+ mdata[aCount] = aItem;
+ if (aItem)
+ {
+ ++mcount;
+ }
+
+ return true;
+}
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfPtrVectorImpl::findRef(void *aItem)
+{
+ for (unsigned i = 0; i < mcount; i++) {
+ if (mdata[i] == aItem) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+
+
+} //osncore
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/src/alfstring.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,299 @@
+/*
+* Copyright (c) 2009 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: Osn String Implementation.
+*
+*/
+
+#if defined(__GNUC__)
+#include <string.h>
+#include <assert.h>
+#else
+#include <e32base.h>
+#include <libc/string.h>
+#include <libc/assert.h>
+#endif
+
+#include <stdio.h>
+#include <stdarg.h>
+#include "osn/alfstring.h"
+#include "stringmacros.h"
+//#include "char.h"
+#include "alfstringdata.h"
+//#include "CHARCONV.H"
+#include <osn/osnnew.h>
+#include <osn/osnbadalloc.h>
+#define CHECK_FOR_HANDLE_LEAKS 0
+
+using namespace std;
+namespace osncore
+ {
+
+
+
+
+#define IS_ASCII_QCHAR(c) ((c).unicode() > 0 && (c).unicode() <= 0xff)
+
+
+
+
+EXPORT_C CAlfString::CAlfString()
+ :internalData(new(S60)SAlfStringData())
+ {
+ }
+
+
+
+EXPORT_C CAlfString::~CAlfString()
+ {
+
+ if(internalData.get())
+ {
+ internalData->deref();
+ if(internalData->refCount != 0)
+ {
+ internalData.release(); // don't kill it, we have ref
+ }
+ }
+ }
+
+
+
+
+EXPORT_C CAlfString::CAlfString(const char *chs)
+ :internalData(new(S60)SAlfStringData())
+ {
+ internalData->initialize(chs, strlen(chs));
+
+ }
+
+
+
+EXPORT_C CAlfString::CAlfString(const CAlfString &qs)
+ :internalData(qs.internalData.get())
+ {
+ internalData->ref();
+ }
+
+EXPORT_C CAlfString &CAlfString::operator=(const CAlfString &qs)
+ {
+ if (this == &qs)
+ return *this;
+ qs.internalData->ref(); // increase source ref count
+ internalData->deref();
+ if(internalData->refCount != 0)
+ {
+ internalData.release();
+ }
+
+ internalData.reset(qs.internalData.get());
+ return *this;
+ }
+
+EXPORT_C const char* CAlfString::latin1() const
+{
+ return internalData->ascii();
+}
+
+
+
+EXPORT_C CAlfString::CAlfString(const char *chs, int len)
+ : internalData(new(S60)SAlfStringData())
+ {
+
+ internalData->initialize(chs, len);
+
+ }
+
+EXPORT_C int CAlfString::compare(const CAlfString& s) const
+{
+ //if (internalData->_isAsciiValid && s.internalData->_isAsciiValid)
+ return strcmp(latin1(), s.latin1());
+ //return ucstrcmp(*this,s);
+ // return -1;
+}
+
+
+EXPORT_C CAlfString& CAlfString::append(const CAlfString &s)
+ {
+ return insert(internalData->_length, s);
+ }
+
+
+EXPORT_C CAlfString &CAlfString::insert(uint index, const char *insertChars, uint insertLength)
+{
+ if (insertLength == 0)
+ return *this;
+
+ //detach();
+
+ // if (internalData->_isAsciiValid){
+ uint originalLength = internalData->_length;
+ char *targetChars;
+
+ // Ensure that we have enough space.
+ if( !setLength (originalLength + insertLength) )
+ {
+ throw std::bad_alloc();
+ //return *this;
+ }
+
+ targetChars = (char *)internalData->ascii();
+
+ // Move tail to make space for inserted characters.
+ memmove (targetChars+index+insertLength, targetChars+index, originalLength-index);
+
+ // Insert characters.
+ memcpy (targetChars+index, insertChars, insertLength);
+
+ internalData->_isUnicodeValid = 0;
+ //}
+ /*
+ else if (dataHandle[0]->_isUnicodeValid){
+ uint originalLength = dataHandle[0]->_length;
+ QChar *targetChars;
+
+ // Ensure that we have enough space.
+ if( !setLength (originalLength + insertLength) ) return *this;
+ targetChars = (QChar *)unicode();
+
+ // Move tail to make space for inserted characters.
+ memmove (targetChars+(index+insertLength), targetChars+index, (originalLength-index)*sizeof(QChar));
+
+ // Insert characters.
+ uint i = insertLength;
+ QChar *target = targetChars+index;
+
+ while (i--)
+ *target++ = *insertChars++;
+ }
+ else
+ FATAL("invalid character cache",0);
+ */
+
+ return *this;
+}
+
+
+
+EXPORT_C CAlfString& CAlfString::insert(uint index, const CAlfString &s)
+{
+ if (s.internalData->_length == 0)
+ return *this;
+
+#ifdef QSTRING_DEBUG_UNICODE
+ //forceUnicode();
+#endif
+
+ // if (internalData->_isAsciiValid) //&& s.isAllLatin1()
+ // {
+ insert(index, s.latin1(), s.internalData->_length);
+ // }
+ /*
+ else
+ {
+ uint insertLength = qs.dataHandle[0]->_length;
+ uint originalLength = dataHandle[0]->_length;
+ AlfChar *targetChars;
+
+ // Ensure that we have enough space.
+ if( !setLength (originalLength + insertLength) ) return *this;
+ targetChars = forceUnicode();
+
+ // Move tail to make space for inserted characters.
+ memmove (targetChars+(index+insertLength), targetChars+index, (originalLength-index)*sizeof(QChar));
+
+ // Insert characters.
+ if (qs.dataHandle[0]->_isAsciiValid){
+ uint i = insertLength;
+ AlfChar *target = targetChars+index;
+ char *a = (char *)qs.ascii();
+
+ while (i--)
+ *target++ = *a++;
+ }
+ else {
+ AlfChar *insertChars = (AlfChar *)qs.unicode();
+ memcpy (targetChars+index, insertChars, insertLength*sizeof(QChar));
+ }
+
+ internalData->_isAsciiValid = 0;
+ }
+ */
+
+ return *this;
+}
+
+
+// Increase buffer size if necessary. Newly allocated
+// bytes will contain garbage.
+bool CAlfString::setLength(uint newLen)
+{
+
+ if (newLen == 0) {
+ //setUnicode(0, 0);
+ return true;
+ }
+
+ // Missing optimization: Could avoid copying characters we are going to remove
+ // by making a special version of detach().
+// detach();
+
+// ASSERT(dataHandle != shared_null_handle);
+
+/*
+#ifdef QSTRING_DEBUG_UNICODE
+ forceUnicode();
+#endif
+*/
+
+ // if (internalData->_isAsciiValid){
+ if (newLen+1 > internalData->_maxAscii) {
+ if( internalData->increaseAsciiSize(newLen+1) == false ) return false;
+ }
+ // Ensure null termination, although newly allocated
+ // bytes contain garbage.
+ internalData->_ascii[newLen] = 0;
+ // }
+ /*else if (internalData->_isUnicodeValid){
+ if (newLen > internalData->_maxUnicode) {
+ if( internalData->increaseUnicodeSize(newLen) == false ) return false;
+ }
+ }*/
+/*
+ else
+ FATAL("invalid character cache",0);
+*/
+
+ internalData->_length = newLen;
+ return true;
+}
+
+
+
+EXPORT_C bool CAlfString::operator==(const CAlfString &s1)const
+ {
+ // if (internalData->_isAsciiValid && s1.internalData->_isAsciiValid)
+ // {
+ return strcmp(latin1(), s1.latin1()) == 0;
+ // }
+ // return false;
+ /*
+ return s1.dataHandle[0]->_length == s2.dataHandle[0]->_length
+ && memcmp(s1.unicode(), s2.unicode(), s1.dataHandle[0]->_length * sizeof(QChar)) == 0;
+ */
+ }
+
+
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/src/alfstringdata.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2009 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: OSN string data implementation.
+*
+*/
+
+
+#include <stdio.h>
+#include <stdarg.h>
+
+#if defined(__GNUC__)
+#include <string.h>
+#else
+#include <libc/string.h>
+#endif
+
+#include <osn/osntypes.h>
+
+#include "alfstringdata.h"
+//#include "osn/char.h"
+#include <osn/osnbadalloc.h>
+
+using namespace std;
+
+namespace osncore
+ {
+
+
+
+// -------------------------------------------------------------------------
+// stringData
+// -------------------------------------------------------------------------
+SAlfStringData::SAlfStringData() : refCount(1), /*_unicode(0),*/ _ascii(0), _maxAscii(QS_INTERNAL_BUFFER_CHARS), _isAsciiValid(1)
+{
+//#ifdef QSTRING_DEBUG_ALLOCATIONS
+ // stringDataInstances++;
+//#endif
+ refCount = 1;
+ _length=0;
+// _unicode = 0;
+ _isUnicodeValid=0;
+ _isAsciiValid = 1;
+ _isHeapAllocated=0;
+ _ascii = _internalBuffer;
+ _internalBuffer[0] = 0;
+}
+
+SAlfStringData::~SAlfStringData()
+{
+ // ASSERT(refCount == 0);
+ /* if (_unicode && !isUnicodeInternal())
+ {
+ DELETE_QCHAR(_unicode);
+ }
+ */
+ if (_ascii && !isAsciiInternal())
+ {
+ DELETE_CHAR(_ascii);
+ }
+
+}
+
+
+// Copy data
+void SAlfStringData::initialize(const char *a, int l)
+{
+ refCount = 1;
+ _length = l;
+ // _unicode = 0;
+ _isUnicodeValid = 0;
+ _maxUnicode = 0;
+ _isAsciiValid = 1;
+ _isHeapAllocated = 0;
+
+ if (l > QS_INTERNAL_BUFFER_CHARS)
+ {
+ _maxAscii = ALLOC_CHAR_GOOD_SIZE(l+1);
+ _ascii = ALLOC_CHAR(_maxAscii);
+ //Make sure we have memory before doing data copy.
+ if(_ascii)
+ {
+ if (a)
+ {
+ memcpy(_ascii, a, l);
+ }
+ _ascii[l] = 0;
+ }
+ else{
+ _length = 0;
+ refCount = 0;
+ _length = 0;
+ // _unicode = 0;
+ _isUnicodeValid = 0;
+ _maxUnicode = 0;
+ _isAsciiValid = 1;
+ _isHeapAllocated = 0;
+ throw bad_alloc();
+ }
+ }
+ else {
+ _maxAscii = QS_INTERNAL_BUFFER_CHARS;
+ _ascii = _internalBuffer;
+ if (a)
+ memcpy(_internalBuffer, a, l);
+ _internalBuffer[l] = 0;
+ }
+
+
+}
+
+
+bool SAlfStringData::increaseAsciiSize(uint size)
+{
+ //ASSERT(this != QString::shared_null);
+
+ uint newSize = (uint)ALLOC_CHAR_GOOD_SIZE((size * 3 + 1) / 2);
+
+ /*
+ if (!_isAsciiValid)
+ return false;
+ */
+ // ASSERT(_isAsciiValid);
+
+ if (isAsciiInternal()) {
+ char *newAscii = ALLOC_CHAR(newSize);
+ if( !newAscii ) return false;
+
+ if (_length)
+ memcpy(newAscii, _ascii, _length);
+ _ascii = newAscii;
+ } else {
+ char* ap = _ascii;
+ _ascii = REALLOC_CHAR( _ascii, newSize );
+
+ if( !_ascii )
+ {
+ // memory manager won't delete the original pointer if realloc failed
+ _ascii = ap;
+ return false;
+ }
+ }
+
+ _maxAscii = newSize;
+ _isAsciiValid = 1;
+ _isUnicodeValid = 0;
+ return true;
+}
+
+
+
+
+
+char* SAlfStringData::ascii()
+{
+// return _isAsciiValid ? _ascii :0;
+return _ascii;
+}
+
+
+/*
+AlfChar *SAlfStringData::makeUnicode()
+{
+ //ASSERT(this != QString::shared_null);
+
+ if (_isAsciiValid){
+ char copyBuf[QS_INTERNAL_BUFFER_CHARS];
+ // char *str;
+
+ if (_unicode && !isUnicodeInternal())
+ DELETE_QCHAR(_unicode);
+
+ if (_length <= QS_INTERNAL_BUFFER_UCHARS){
+ if (isAsciiInternal()) {
+ uint i = _length;
+ char *tp = ©Buf[0], *fp = _ascii;
+ while (i--)
+ *tp++ = *fp++;
+ // str = ©Buf[0];
+ _isAsciiValid = 0;
+ }
+ else
+ {
+ // str = _ascii;
+
+ }
+ _unicode = (AlfChar *)_internalBuffer;
+ _maxUnicode = QS_INTERNAL_BUFFER_UCHARS;
+ }
+ else {
+ uint newSize = ALLOC_QCHAR_GOOD_SIZE(_length);
+ _unicode = ALLOC_QCHAR(newSize);
+ if( !_unicode )
+ {
+ _maxUnicode = 0;
+ return 0;
+ }
+ _maxUnicode = newSize;
+ // str = _ascii;
+ }
+ // uint i = _length;
+ // AlfChar *cp = _unicode;
+ // while ( i-- )
+ // *cp++ = *str++;
+
+ _isUnicodeValid = 1;
+ }
+ // else if (!_isUnicodeValid)
+ // FATAL("invalid character cache",0);
+
+ return _unicode;
+}
+
+*/
+} // osncore
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/src/alfstringpool.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2007 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 the common string pool for widget and the factory model class.
+*
+*/
+
+#include <stdlib.h>
+
+
+#include "osn/alfstringpool.h"
+#include "osn/alfstring.h"
+
+
+const int KPoolAllocSize = 32;
+
+namespace osncore
+ {
+class CAlfStringPoolImpl
+ {
+public:
+ CAlfStringPoolImpl():iPool(0),iItemCount(0),iAllocCount(0)
+ {
+
+ }
+ ~CAlfStringPoolImpl()
+ {
+ delete [] iPool;
+ }
+ CAlfString* iPool;
+ int iItemCount;
+ int iAllocCount;
+ };
+
+
+//-----------------------------------------------------------------------
+// Only Method to access Strings from the String pool
+//-----------------------------------------------------------------------
+static CAlfString AppendToPool(
+ const CAlfString& aString,
+ CAlfStringPoolImpl*& aImpl)
+ {
+ bool found(false);
+ CAlfString ret(aString);
+
+ //Look if this string is present then just return the corresponding RAlfString else create new one and add it to the list
+ for(int i=0;i<aImpl->iItemCount && !found;i++)
+ {
+ if( aImpl->iPool[i] == aString) //element found
+ {
+ found = true;
+ ret = aImpl->iPool[i];
+ }
+ }
+ if(!found)
+ {
+ if(aImpl->iItemCount < aImpl->iAllocCount )
+ {
+ aImpl->iPool[aImpl->iItemCount++] = aString;
+ }
+ else // // reserve more space for an array
+ {
+ CAlfString* tmp = (CAlfString*) realloc(aImpl->iPool, (sizeof (CAlfString) * KPoolAllocSize) );
+ if(tmp)
+ {
+ aImpl->iAllocCount += KPoolAllocSize;
+ aImpl->iPool = tmp;
+
+ aImpl->iPool[aImpl->iItemCount++] = aString;
+ }
+ else
+ {
+ User::LeaveIfNull(tmp);
+ }
+ }
+ }
+ return ret;
+ }
+
+
+
+EXPORT_C CAlfString CAlfStringPool::CreateStringL( const char* aString)
+ {
+ if(aString)
+ {
+ CAlfString tmp(aString);
+ return AppendToPool(tmp,iImpl);
+ }
+ return CAlfString();
+ }
+
+EXPORT_C CAlfString CAlfStringPool::CreateStringL( const CAlfString& aString)
+ {
+ return AppendToPool(aString,iImpl);
+ }
+
+EXPORT_C CAlfStringPool::CAlfStringPool():iImpl(0)
+ {
+ iImpl = new(ELeave) CAlfStringPoolImpl;
+ iImpl->iPool = new(ELeave)CAlfString[KPoolAllocSize];
+ iImpl->iAllocCount = KPoolAllocSize;
+
+ }
+
+//-----------------------------------------------------------------------
+// Default Destructor
+//-----------------------------------------------------------------------
+EXPORT_C CAlfStringPool::~CAlfStringPool()
+ {
+
+ delete iImpl;
+ iImpl = NULL;
+ }
+
+
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/src/osnnew.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2007 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: core functionality
+*
+*/
+
+#include <stdlib.h>
+#include <stdexcept>
+#include <osn/osnnew.h>
+
+// ---------------------------------------------------------------------------
+// Overloaded operator new.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void* operator new(size_t s,newarg) throw (std::bad_alloc)
+ {
+ void* any = malloc(s);
+ if(!any)
+ {
+ throw std::bad_alloc();
+ }
+
+ return any;
+ }
+
+// ---------------------------------------------------------------------------
+// Overloaded operator delete.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void operator delete(void* ptr,newarg) throw()
+ {
+ free(ptr);
+ }
+
+// ---------------------------------------------------------------------------
+// Overloaded operator new[].
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void* operator new[] (size_t s,newarg)throw (std::bad_alloc)
+ {
+ void* any = malloc(s);
+ if(!any)
+ {
+ throw std::bad_alloc();
+ }
+
+ return any;
+ }
+
+// ---------------------------------------------------------------------------
+// Overloaded operator delete[].
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void operator delete[](void* ptr,newarg) throw()
+ {
+ free(ptr);
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/src/ustring.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,278 @@
+/*
+* 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: utf8 encoded byte container
+*
+*/
+
+
+#include <osn/ustring.h>
+#include <osn/osnnew.h>
+#include "ustringimpl.h"
+
+
+namespace osncore
+{
+static const char* const KInvalidUtf8 = "InvalidUtf8";
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT const char* UString::InvalidUtf8::what()const throw()
+ {
+ return KInvalidUtf8;
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT UString::UString():mImpl(new(EMM)UStringImpl())
+ {
+
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT UString::UString(const Utf8* aStr)
+ :mImpl(new(EMM)UStringImpl(aStr))
+ {
+
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT UString::UString(const Utf8* aStr, int aLen)
+ :mImpl(new(EMM)UStringImpl(aStr, aLen))
+ {
+
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT UString::UString(const UString& aUString)
+ :mImpl(new(EMM)UStringImpl(*aUString.mImpl.get()))
+ {
+
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT UString::UString(Unicode aCodePoint)
+ :mImpl(new(EMM)UStringImpl(aCodePoint))
+ {
+
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT UString& UString::operator=(const UString& aRhs)
+ {
+ if (this != &aRhs)
+ {
+ UStringImpl* tmp = new (EMM)UStringImpl(*aRhs.mImpl.get());
+ mImpl.reset(tmp);
+ }
+
+ return *this;
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT UString& UString::operator=(const Utf8* aRhs)
+ {
+ if (aRhs)
+ {
+ UStringImpl* tmp = new (EMM)UStringImpl(aRhs);
+ mImpl.reset(tmp);
+ }
+
+ return *this;
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT UString::~UString()
+ {
+
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT bool UString::isEmpty()const
+ {
+ return mImpl->empty();
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT long UString::getCharLength()const
+ {
+ return mImpl->length();
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT long UString::getByteLength()const
+ {
+ return mImpl->bytes();
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT const Utf8* UString::getUtf8()const
+ {
+ return mImpl->utf8();
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT int UString::compareC(const UString& aUString)const
+ {
+ return mImpl->compareC(*aUString.mImpl.get());
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT int UString::compareC(const Utf8* aStr)const
+ {
+ return mImpl->compareC(aStr);
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT int UString::compare(const UString& aUString)const
+ {
+ return mImpl->compare(*aUString.mImpl.get());
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT int UString::compare(const Utf8* aStr)const
+ {
+ return mImpl->compare(aStr);
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT bool UString::operator==(const UString& aRhs)const
+ {
+ return !mImpl->compare(*aRhs.mImpl.get());
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT bool UString::operator==(const Utf8* aRhs)const
+ {
+ return !mImpl->compare(aRhs);
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT void UString::append(const UString& aUString)
+ {
+ mImpl->append(*aUString.mImpl.get());
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT void UString::append(const Utf8* aStr)
+ {
+ mImpl->append(aStr);
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT void UString::insert(
+ long aPos,
+ const Utf8* aStr)
+ {
+ mImpl->insert(aPos, aStr);
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT void UString::insert(
+ long aPos,
+ const Utf8* aStr,
+ long aLength)
+ {
+ mImpl->insert(aPos, aStr,aLength);
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT void UString::replace(
+ long aPos,
+ const Utf8* aStr)
+ {
+ mImpl->replace(aPos, aStr);
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT void UString::replace(
+ long aPos,
+ const Utf8* aStr,
+ long aLength)
+ {
+ mImpl->replace(aPos, aStr, aLength);
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT void UString::erase(
+ long aPos,
+ long aLength)
+ {
+ mImpl->erase(aPos, aLength);
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT Unicode UString::operator[](long aIndex)
+ {
+ return mImpl->operator[](aIndex);
+ }
+
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+//
+OSN_EXPORT bool UString::isNull()const
+ {
+ return mImpl->null();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/src/ustringimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,673 @@
+/*
+* 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: String class implementation
+*
+*/
+
+
+#include "ustringimpl.h"
+
+#include <gstring.h>
+#include <stdexcept>
+#if defined(__GNUC__)
+#include <string.h>
+#else
+#include <string.h>
+#endif
+#include <osn/osnnew.h>
+using namespace std;
+
+
+namespace osncore
+{
+
+const int KMaxUtf8Length = 6;
+
+
+// -------------------------------------------------------------------------
+// Returns the byte count for aStr with aCharCount length
+// -------------------------------------------------------------------------
+//
+static long bytesFromCharacters(const Utf8* aStr, long aCharCount)
+ {
+ int byteCount = 0;
+
+ if (aStr)
+ {
+ const char* srcEndOffset = g_utf8_offset_to_pointer(aStr,aCharCount);
+ byteCount = srcEndOffset - aStr;
+ }
+
+ return byteCount;
+ }
+
+// -------------------------------------------------------------------------
+// Initializes the string from stack or heap depending on its length
+// -------------------------------------------------------------------------
+//
+void UStringImpl::initialize(const Utf8* aStr)
+ {
+ if (len < MAX_STR_LEN)
+ {
+ str = internalStr;
+ memcpy(internalStr, aStr, len);
+ }
+ else
+ {
+ str = (gchar*)calloc(len+1, sizeof (gchar));
+ if(!str)
+ {
+ throw bad_alloc();
+ }
+ memcpy(str,aStr,len);
+ isInHeap = true;
+ }
+
+ str[len] = 0;
+ allocated_len = len+1;
+ }
+
+// -------------------------------------------------------------------------
+// Allocates memory from heap if needed, throws if allocation fails
+// -------------------------------------------------------------------------
+//
+void UStringImpl::checkBuffer(unsigned int aLength)
+ {
+ if (aLength < allocated_len)
+ {
+ return;
+ }
+ if (aLength >= MAX_STR_LEN)
+ {
+ if (!isInHeap) //str is in stack, move it to heap
+ {
+ gchar* temp = (gchar*)calloc(aLength + 1, sizeof(gchar));
+ if (!temp)
+ {
+ throw bad_alloc();
+ }
+ if(str)
+ {
+ memcpy(temp, str, len);
+ }
+ str = temp;
+ isInHeap = true;
+ }
+ else
+ {
+ gchar* tmp(0);
+ tmp = (gchar*)realloc(str,aLength+1);
+ if(!tmp)
+ {
+ throw bad_alloc();
+ }
+ str = tmp;
+ }
+ }
+ else
+ {
+ // if ustring is constructed with null or "" set internal buffer to
+ // point to str
+ if (!str)
+ str = internalStr;
+ }
+ allocated_len = aLength+1;
+
+
+ // reset allocated space
+ memset(str+len, 0, allocated_len-len);
+ }
+// -------------------------------------------------------------------------
+// Implements the actual insertion functionality
+// -------------------------------------------------------------------------
+//
+void UStringImpl::insertImpl(unsigned int aIndex, const char* aInsertChars, unsigned int aInsertLength)
+ {
+ // Ensure that we have enough space.
+ checkBuffer(len + aInsertLength);
+ // Move tail to make space for inserted characters.
+ memmove(str+aIndex+aInsertLength, str+aIndex, len-aIndex);
+ // Insert characters.
+ memcpy(str+aIndex, aInsertChars, aInsertLength);
+ // Update len
+ len += aInsertLength;
+ }
+// -------------------------------------------------------------------------
+// Implements the actual append functionality
+// -------------------------------------------------------------------------
+//
+void UStringImpl::appendImpl(const char* aStr, unsigned int aLength)
+ {
+ insertImpl(len, aStr, aLength);
+ }
+// -------------------------------------------------------------------------
+// Implements the actual erase functionality
+// -------------------------------------------------------------------------
+//
+void UStringImpl::eraseImpl(unsigned int aIndex, unsigned int aLength)
+ {
+ if(aIndex > len)
+ {
+ throw out_of_range("out_of_range");
+ }
+
+ if(aIndex+aLength >= len)
+ {
+ // erase from given index to end of the string
+ if(aIndex<len)
+ {
+ len = aIndex;
+ }
+ memset(str+aIndex,0,len-aIndex);
+ }
+ else
+ {
+ // Move tail (remove begin or between) to given index.
+ memmove(str+aIndex, str+aIndex+aLength, len-(aIndex+aLength));
+ len -= aLength;
+ memset(str+len,0,allocated_len-len);
+ }
+ }
+
+// -------------------------------------------------------------------------
+// Constructor
+// -------------------------------------------------------------------------
+//
+UStringImpl::UStringImpl():str(0),len(0),allocated_len(0), isInHeap(0)
+ {
+#ifdef _DEBUG
+ g_setenv("G_SLICE","always-malloc",1);
+#endif
+ }
+// -------------------------------------------------------------------------
+// Constructs the string from aStr
+// -------------------------------------------------------------------------
+//
+UStringImpl::UStringImpl(const Utf8* aStr)
+ :str(0),len(0),allocated_len(0), isInHeap(0)
+ {
+#ifdef _DEBUG
+ g_setenv("G_SLICE","always-malloc",1);
+#endif
+ //NULL byte not accepted
+ if (aStr)
+ {
+ len = strlen(aStr);
+ initialize(aStr);
+ }
+ }
+
+// -------------------------------------------------------------------------
+// Constructs the string from aStr with aByteCount length
+// -------------------------------------------------------------------------
+//
+UStringImpl::UStringImpl(const Utf8* aStr, int aByteCount)
+ :str(0),len(0),allocated_len(0), isInHeap(0)
+ {
+#ifdef _DEBUG
+ g_setenv("G_SLICE","always-malloc",1);
+#endif
+ //NULL byte not accepted
+ if (aStr)
+ {
+ len = aByteCount;
+ initialize(aStr);
+ }
+ }
+
+// -------------------------------------------------------------------------
+// Constructs the string from aCodePoint
+// -------------------------------------------------------------------------
+//
+UStringImpl::UStringImpl(Unicode aCodePoint)
+ :str(0),len(0),allocated_len(0), isInHeap(0)
+ {
+#ifdef _DEBUG
+ g_setenv("G_SLICE","always-malloc",1);
+#endif
+
+ char string[KMaxUtf8Length];
+ long usedBytes = g_unichar_to_utf8((unsigned int)aCodePoint,&string[0]);
+ if(usedBytes > 0)
+ {
+ len = usedBytes;
+ initialize(&string[0]);
+ }
+ }
+
+// -------------------------------------------------------------------------
+// Copy constructor
+// -------------------------------------------------------------------------
+//
+UStringImpl::UStringImpl(const UStringImpl& aUStringImpl)
+ :str(0),len(aUStringImpl.len),allocated_len(0), isInHeap(0)
+ {
+#ifdef _DEBUG
+ g_setenv("G_SLICE","always-malloc",1);
+#endif
+ if(aUStringImpl.str)
+ {
+ initialize(aUStringImpl.str);
+ }
+ }
+
+
+// -------------------------------------------------------------------------
+// Destructor
+// -------------------------------------------------------------------------
+//
+UStringImpl::~UStringImpl()
+ {
+ if (str && isInHeap)
+ {
+ delete str;
+ }
+ }
+// -------------------------------------------------------------------------
+// Returns true if the string is empty
+// -------------------------------------------------------------------------
+//
+bool UStringImpl::empty()const
+ {
+ return (len > 0) ? false : true;
+ }
+
+// -------------------------------------------------------------------------
+// Returns true if the string is a null string
+// -------------------------------------------------------------------------
+//
+bool UStringImpl::null()const
+ {
+ return (str) ? false : true;
+ }
+
+// -------------------------------------------------------------------------
+// Returns the length of the string in characters
+// -------------------------------------------------------------------------
+//
+long UStringImpl::length()const
+ {
+ long ret(0);
+ if(str && (len > 0))
+ {
+ ret = g_utf8_strlen(str, len);
+ }
+ return ret;
+ }
+
+// -------------------------------------------------------------------------
+// Returns the length of the string in bytes
+// -------------------------------------------------------------------------
+//
+long UStringImpl::bytes()const
+ {
+ return (long)len;
+ }
+
+
+// -------------------------------------------------------------------------
+// Returns the utf8 type string
+// -------------------------------------------------------------------------
+//
+const Utf8* UStringImpl::utf8()const
+ {
+ return str;
+ }
+
+// -------------------------------------------------------------------------
+// Compares the string to another UString with strcmp
+// -------------------------------------------------------------------------
+//
+int UStringImpl::compare(const UStringImpl& aUStringImpl)const
+ {
+ int ret(1);
+ if(!str && !aUStringImpl.str)
+ {
+ ret = 0;
+ }
+ else if(str && aUStringImpl.str)
+ {
+ ret = strcmp(str, aUStringImpl.str);
+ }
+ else if(!str)
+ {
+ ret = -1;
+ }
+
+ return ret;
+ }
+// -------------------------------------------------------------------------
+// Compares the string to Utf8 string with strcmp
+// -------------------------------------------------------------------------
+//
+int UStringImpl::compare(const Utf8* aStr)const
+ {
+ int ret(1);
+ if(str && aStr)
+ {
+ ret = strcmp(str, aStr);
+ }
+ else if(!str && !strlen(aStr))
+ {
+ ret = 0;
+ }
+ else if(!str)
+ {
+ ret = -1;
+ }
+
+ return ret;
+ }
+
+// -------------------------------------------------------------------------
+// Compares the string to another UString using the linguistically
+// correct rules for the current locale
+// -------------------------------------------------------------------------
+//
+int UStringImpl::compareC(const UStringImpl& aUStringImpl)const
+ {
+ int ret(1);
+ if(!str && !aUStringImpl.str)
+ {
+ ret = 0;
+ }
+ else if(str && aUStringImpl.str)
+ {
+ ret = g_utf8_collate(str, aUStringImpl.str);
+ }
+ else if(!str)
+ {
+ ret = -1;
+ }
+
+ return ret;
+ }
+// -------------------------------------------------------------------------
+// Compares the string to Utf8 string using the linguistically
+// correct rules for the current locale
+// -------------------------------------------------------------------------
+//
+int UStringImpl::compareC(const Utf8* aStr)const
+ {
+ int ret(1);
+ if(str && aStr)
+ {
+ ret = g_utf8_collate(str, aStr);
+ }
+ else if(!str && !strlen(aStr))
+ {
+ ret = 0;
+ }
+ else if(!str)
+ {
+ ret = -1;
+ }
+
+ return ret;
+ }
+
+// -------------------------------------------------------------------------
+// Appends another UString to this string
+// -------------------------------------------------------------------------
+//
+void UStringImpl::append(const UStringImpl& aUStringImpl)
+ {
+ if(str && aUStringImpl.str)
+ {
+ appendImpl(aUStringImpl.str, aUStringImpl.len);
+ }
+ }
+// -------------------------------------------------------------------------
+// Appends a Utf8 string to this string
+// -------------------------------------------------------------------------
+//
+void UStringImpl::append(const Utf8* aStr)
+ {
+ if(aStr && (strlen(aStr) !=0))
+ {
+ appendImpl(aStr, strlen(aStr));
+ }
+ }
+
+// -------------------------------------------------------------------------
+// Inserts Utf8 string to this string
+// -------------------------------------------------------------------------
+//
+void UStringImpl::insert(
+ long aPos,
+ const Utf8* aStr)
+ {
+
+ if(aStr)
+ {
+ if (!str)
+ checkBuffer(0);
+ long dstCharCount = g_utf8_strlen(str, -1);
+ if(aPos < -1 || aPos > dstCharCount)
+ {
+ throw out_of_range("out_of_range");
+ }
+ // find out byte position for given character position
+ long startBytePos(-1);
+ if(aPos >= 0)
+ {
+ if(str)
+ {
+ const char* startOffset = g_utf8_offset_to_pointer(str, aPos);
+ startBytePos = startOffset - str;
+ }
+ }
+ if(aPos == -1)
+ {
+ appendImpl(aStr, strlen(aStr));
+ }
+ else
+ {
+ insertImpl(startBytePos, aStr, strlen(aStr));
+ }
+ }
+ }
+
+// -------------------------------------------------------------------------
+// Inserts Utf8 string to this string with length of the Utf8 specified
+// -------------------------------------------------------------------------
+//
+void UStringImpl::insert(
+ long aPos,
+ const Utf8* aStr,
+ long aCharCount)
+ {
+ if (aCharCount < 1)
+ {
+ throw out_of_range("out_of_range");
+ }
+
+ if (aStr)
+ {
+ long srcByteLen = bytesFromCharacters(aStr, aCharCount);
+ if(!str)
+ checkBuffer(0);
+
+ // calculate how many bytes are needed for given characters
+ long srcCharCount = g_utf8_strlen(aStr, srcByteLen);
+ long dstCharCount = g_utf8_strlen(str, -1);
+ long startBytePos(-1); // appends end of the string
+
+ if(aPos < -1 || aPos > dstCharCount-1 || aCharCount > srcCharCount)
+ {
+ throw out_of_range("out_of_range");
+ }
+
+ if(aPos != -1)
+ {
+ const char* startOffset = g_utf8_offset_to_pointer(str, aPos);
+ startBytePos = startOffset - str;
+ }
+ const char* endOffset = g_utf8_offset_to_pointer(aStr, aCharCount);
+ long insertByteLength = endOffset - aStr;
+
+ if(aPos == -1)
+ {
+ appendImpl(aStr, insertByteLength);
+ }
+ else
+ {
+ insertImpl(startBytePos, aStr, srcByteLen);
+ }
+ }
+ }
+
+// -------------------------------------------------------------------------
+// Replaces Utf8 string to this string
+// -------------------------------------------------------------------------
+//
+void UStringImpl::replace(
+ long aPos,
+ const Utf8* aStr)
+ {
+ if (aStr)
+ {
+ if (!str)
+ checkBuffer(0);
+
+ long srcByteLen = strlen(aStr);
+ long srcCharCount = g_utf8_strlen(aStr,-1);
+ long dstCharCount = g_utf8_strlen(str, -1);
+ if(aPos > dstCharCount || aPos < 0)
+ {
+ throw out_of_range("out_of_range");
+ }
+
+ // calculate start byte position
+ if(str)
+ {
+ const char* startOffset = g_utf8_offset_to_pointer(str, aPos);
+ long startBytePos = startOffset - str;
+
+ // calculate erasable character count in bytes
+ if(startOffset)
+ {
+ const char* endOffset = g_utf8_offset_to_pointer(startOffset, srcCharCount);
+ long eraseByteLength = endOffset - startOffset;
+ // erase existing characters
+ eraseImpl(startBytePos, eraseByteLength);
+ }
+ insertImpl(startBytePos, aStr, srcByteLen);
+ }
+ }
+ }
+
+
+// -------------------------------------------------------------------------
+// Replaces a Utf8 string to this string with length of the Utf8 specified
+// -------------------------------------------------------------------------
+//
+void UStringImpl::replace(
+ long aPosOffset,
+ const Utf8* aStr,
+ long aCharCount)
+ {
+ if (aCharCount < 1)
+ {
+ throw out_of_range("out_of_range");
+ }
+
+ if (aStr)
+ {
+ long srcByteLen = bytesFromCharacters(aStr, aCharCount);
+ if(!str)
+ checkBuffer(0);
+
+ long srcCharCount = g_utf8_strlen(aStr, srcByteLen);
+ long dstCharCount = g_utf8_strlen(str, -1);
+ if(aPosOffset > dstCharCount || aPosOffset < 0 || aCharCount > srcCharCount)
+ {
+ throw out_of_range("out_of_range");
+ }
+ // calculate start byte position
+ if(str)
+ {
+ const char* startOffset = g_utf8_offset_to_pointer(str, aPosOffset);
+ long startBytePos = startOffset - str;
+
+ // calculate erasable character count in bytes
+ if(startOffset)
+ {
+ const char* endOffset = g_utf8_offset_to_pointer(startOffset, srcCharCount);
+ long eraseByteLength = endOffset - startOffset;
+ // erase existing characters
+ eraseImpl(startBytePos, eraseByteLength);
+ }
+ insertImpl(startBytePos, aStr, srcByteLen);
+ }
+ }
+ }
+
+// -------------------------------------------------------------------------
+// Erases aCharCount characters from the string at position specified by
+// aPosOffset
+// -------------------------------------------------------------------------
+//
+void UStringImpl::erase(
+ long aPosOffset,
+ long aCharCount)
+ {
+
+ if(str)
+ {
+ long srcCharCount = g_utf8_strlen(str, -1);
+
+ if (aPosOffset < 0 || aCharCount < 1 || aCharCount > srcCharCount)
+ {
+ throw out_of_range("out_of_range");
+ }
+
+ // calc startpos
+ const char* startOffset = g_utf8_offset_to_pointer(str, aPosOffset);
+ long startBytePos = startOffset - str;
+
+ // calc bytes to erase
+ const char* endOffset = g_utf8_offset_to_pointer(startOffset, aCharCount);
+ long eraseByteLength = endOffset - startOffset;
+
+ eraseImpl(startBytePos, eraseByteLength);
+ }
+ }
+
+// -------------------------------------------------------------------------
+// Returns unicode at aIndex position in the string
+// -------------------------------------------------------------------------
+//
+Unicode UStringImpl::operator[](long aIndex)
+ {
+ Unicode ret(0xF8FF);
+
+ if(str)
+ {
+ long charCount = g_utf8_strlen(str, -1);
+ if(aIndex < 0 || aIndex > charCount-1)
+ {
+ throw out_of_range("out_of_range");
+ }
+ // calc startpos
+ const char* uniChar = g_utf8_offset_to_pointer(str, aIndex);
+
+ ret = g_utf8_get_char(uniChar);
+ }
+ return ret;
+ }
+
+}
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/osncore/src/ustringutil.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2007 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: utility for ustring
+*
+*/
+
+
+#include <osn/ustring.h>
+#include <glib/gstring.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <stdexcept>
+#include <osn/osnnew.h>
+
+namespace osncore
+{
+
+const int KBase = 10;
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+template <typename T>
+OSN_EXPORT UtfProxy<T>::~UtfProxy()
+ {
+ if(iUtf)
+ {
+ free(iUtf);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Conversion to Utf16 from Utf8 using g_utf8_to_utf16
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT auto_ptr<Utf16Proxy> toUtf16(const UString& aSourceUtf8)
+ {
+ Utf16* ret = g_utf8_to_utf16(aSourceUtf8.getUtf8(),-1,0,0,0);
+
+ auto_ptr<Utf16Proxy> tmp;
+ try
+ {
+ tmp.reset(new (EMM)Utf16Proxy(ret));
+ }
+ catch(std::bad_alloc& e)
+ {
+ free(ret);
+ }
+ return tmp;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int toInt(const UString& aSource)
+ {
+ int ret(0);
+ const Utf8* string = aSource.getUtf8();
+ if (!string)
+ {
+ throw UString::InvalidUtf8();
+ }
+
+ ret = strtol(string, (char **)NULL, KBase);
+ if( errno == EINVAL || errno == ERANGE)
+ {
+ errno = 0;
+ throw UString::InvalidUtf8();
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+static auto_ptr<UString> normalize(const UString& aSource, GNormalizeMode aMode)
+ {
+ const Utf8* string = aSource.getUtf8();
+ if (!string)
+ {
+ throw UString::InvalidUtf8();
+ }
+
+ Utf8* ret = g_utf8_normalize(string, -1, aMode);
+
+ if(!ret)
+ {
+ throw UString::InvalidUtf8();
+ }
+ auto_ptr<UString> tmp;
+ try
+ {
+ tmp.reset(new (EMM)UString(ret));
+ // g_free(ret);
+ free(ret);
+ }
+ catch(std::bad_alloc& e)
+ {
+ // g_free(ret);
+ free(ret);
+ }
+ return tmp;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT auto_ptr<UString> normalizeNFD(const UString& aSource)
+ {
+ return normalize(aSource,G_NORMALIZE_DEFAULT);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT auto_ptr<UString> normalizeNFC(const UString& aSource)
+ {
+ return normalize(aSource,G_NORMALIZE_DEFAULT_COMPOSE);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT auto_ptr<UString> normalizeNFKD(const UString& aSource)
+ {
+ return normalize(aSource,G_NORMALIZE_ALL);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT auto_ptr<UString> normalizeNFKC(const UString& aSource)
+ {
+ return normalize(aSource,G_NORMALIZE_ALL_COMPOSE);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/sis/createsisx.bat Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,25 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: osncore iby file.
+rem
+
+
+@echo off
+echo DoTo: update the location for certificate and private key files
+
+set certificate_file=..\internal\certificates\rd.cer
+set private_key_file=..\internal\certificates\rd-key.pem
+
+makesis osncore.pkg
+signsis osncore.sis osncore.sisx %certificate_file% %private_key_file%
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/osncore/sis/osncore.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,44 @@
+;
+; Copyright (c) 2009 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: pkg file for osncore.
+;
+
+; ============================================================================
+; Name : osncore.pkg
+; Part of : Decalrative UI
+; Description : Package file
+; Version : %version: 2 % << Don't touch! Updated by Synergy at check-out.
+;
+; Copyright © 2007 Nokia. All rights reserved.
+; This material, including documentation and any related computer
+; programs, is protected by copyright controlled by Nokia. All
+; rights are reserved. Copying, including reproducing, storing,
+; adapting or translating, any or all of this material requires the
+; prior written consent of Nokia. This material also contains
+; confidential information which may not be disclosed to others
+; without the prior written consent of Nokia.
+; ============================================================================
+; Template version: 4.1
+
+; standard SIS file header
+#{"Os neutral library"},(0x1020725D),1,0,0
+
+;Localized Vendor Name
+%{"Nokia-EN"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Files to copy
+"\epoc32\release\armv5\urel\osncore.dll"-"!:\sys\bin\osncore.dll"
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcepool/bwins/alfresourcepoolu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,13 @@
+EXPORTS
+ ?createFileImageResource@ResourcePool@Alf@@QAEXPBDABVUString@osncore@@W4TAlfTextureFlags@@@Z @ 1 NONAME ; void Alf::ResourcePool::createFileImageResource(char const *, class osncore::UString const &, enum TAlfTextureFlags)
+ ??1ResourcePool@Alf@@QAE@XZ @ 2 NONAME ; Alf::ResourcePool::~ResourcePool(void)
+ ?getImageResource@ResourcePool@Alf@@QAE?AVTAlfImage@@PBDABUTAlfXYMetric@@@Z @ 3 NONAME ; class TAlfImage Alf::ResourcePool::getImageResource(char const *, struct TAlfXYMetric const &)
+ ?getImageResource@ResourcePool@Alf@@QAE?AVTAlfImage@@PBD@Z @ 4 NONAME ; class TAlfImage Alf::ResourcePool::getImageResource(char const *)
+ ?setInitialSize@ResourcePool@Alf@@QAEXPBDABUTAlfXYMetric@@@Z @ 5 NONAME ; void Alf::ResourcePool::setInitialSize(char const *, struct TAlfXYMetric const &)
+ ?setAspectRatio@ResourcePool@Alf@@QAEXPBDW4AspectRatio@12@@Z @ 6 NONAME ; void Alf::ResourcePool::setAspectRatio(char const *, enum Alf::ResourcePool::AspectRatio)
+ ?createThemeImageResource@ResourcePool@Alf@@QAEXPBDABVUString@osncore@@@Z @ 7 NONAME ; void Alf::ResourcePool::createThemeImageResource(char const *, class osncore::UString const &)
+ ??0ResourcePool@Alf@@QAE@AAVCAlfTextureManager@@PAV01@@Z @ 8 NONAME ; Alf::ResourcePool::ResourcePool(class CAlfTextureManager &, class Alf::ResourcePool *)
+ ?deleteImageResource@ResourcePool@Alf@@QAEXPBD@Z @ 9 NONAME ; void Alf::ResourcePool::deleteImageResource(char const *)
+ ?hasImageResource@ResourcePool@Alf@@QBE_NPBD@Z @ 10 NONAME ; bool Alf::ResourcePool::hasImageResource(char const *) const
+ ?createLogicalImageResource@ResourcePool@Alf@@QAEXPBD@Z @ 11 NONAME ; void Alf::ResourcePool::createLogicalImageResource(char const *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcepool/eabi/alfresourcepoolu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,17 @@
+EXPORTS
+ _ZN3Alf12ResourcePool14setAspectRatioEPKcNS0_11AspectRatioE @ 1 NONAME
+ _ZN3Alf12ResourcePool14setInitialSizeEPKcRK12TAlfXYMetric @ 2 NONAME
+ _ZN3Alf12ResourcePool16getImageResourceEPKc @ 3 NONAME
+ _ZN3Alf12ResourcePool16getImageResourceEPKcRK12TAlfXYMetric @ 4 NONAME
+ _ZN3Alf12ResourcePool19deleteImageResourceEPKc @ 5 NONAME
+ _ZN3Alf12ResourcePool23createFileImageResourceEPKcRKN7osncore7UStringE16TAlfTextureFlags @ 6 NONAME
+ _ZN3Alf12ResourcePool24createThemeImageResourceEPKcRKN7osncore7UStringE @ 7 NONAME
+ _ZN3Alf12ResourcePool26createLogicalImageResourceEPKc @ 8 NONAME
+ _ZN3Alf12ResourcePoolC1ER18CAlfTextureManagerPS0_ @ 9 NONAME
+ _ZN3Alf12ResourcePoolC2ER18CAlfTextureManagerPS0_ @ 10 NONAME
+ _ZN3Alf12ResourcePoolD1Ev @ 11 NONAME
+ _ZN3Alf12ResourcePoolD2Ev @ 12 NONAME
+ _ZNK3Alf12ResourcePool16hasImageResourceEPKc @ 13 NONAME
+ _ZTIN3Alf16ResourcePoolImpl13ImageResourceE @ 14 NONAME ; #<TI>#
+ _ZTVN3Alf16ResourcePoolImpl13ImageResourceE @ 15 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcepool/group/alfresourcepool.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 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: Project definition file for project alfresourcepool
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+TARGET alfresourcepool.dll
+TARGETTYPE dll
+UID 0x1000008d 0x200110F7
+
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+
+SOURCEPATH ../src
+SOURCE alfresourcepool.cpp
+SOURCE alfresourcepoolimpl.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../../inc
+
+#include <platform_paths.hrh>
+MW_LAYER_SYSTEMINCLUDE
+
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+LIBRARY libstdcpp.lib
+LIBRARY euser.lib
+LIBRARY alfclient.lib
+LIBRARY osncore.lib
+LIBRARY charconv.lib
+
+LIBRARY libc.lib
+#define ALF_LINK_STDCPP_DLL
+// following include must be after definition
+
+LIBRARY libpthread.lib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcepool/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 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: Build information file for project resource pool dll
+*
+*/
+
+
+#ifdef __S60_50__
+// To get the MW_LAYER_SYSTEMINCLUDE-definition
+#include <platform_paths.hrh>
+#endif
+
+
+PRJ_PLATFORMS
+WINSCW ARMV5
+
+PRJ_EXPORTS
+#ifdef __S60_50__
+../../rom/alfresourcepool.iby CORE_MW_LAYER_IBY_EXPORT_PATH(alfresourcepool.iby)
+#endif
+
+PRJ_MMPFILES
+alfresourcepool.mmp
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcepool/inc/alfresourcepoolimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 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 the resource pool
+*
+*/
+
+
+#ifndef ALF_RESOURCEPOOL_IMPL_H
+#define ALF_RESOURCEPOOL_IMPL_H
+
+#include <alf/alfimage.h>
+#include <alf/alfmetric.h>
+#include <alf/alfimageloaderutil.h>
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+#include <vector>
+
+#include "alf/alfresourcepool.h"
+
+class CAlfTextureManager;
+
+
+
+namespace Alf
+{
+//Forward declaration
+
+
+using namespace osncore;
+
+/**
+ * ?one_line_short_description
+ * ?more_complete_description
+ *
+ * @code
+ * ?good_class_usage_example(s)
+ * @endcode
+ *
+ * @lib ?library
+ * @since S60 ?S60_version *** for example, S60 v3.0
+ */
+class ResourcePoolImpl
+ {
+private:
+
+ enum ImageResourceType
+ {
+ imageResourceTypeSkin,
+ imageResourceTypeFileSVG,
+ imageResourceTypeFileOther
+ };
+
+ struct ResourceInstanceData
+ {
+ ResourceInstanceData(): mTextureId(0), mImageLoaderUtil(0), mAutoSizeTexture(false) {}
+ ~ResourceInstanceData() { delete mImageLoaderUtil; }
+
+ int mTextureId;
+ CAlfAutoSizeImageLoaderUtil* mImageLoaderUtil;
+ bool mAutoSizeTexture;
+ };
+
+ struct ImageResource
+ {
+ ImageResource();
+ virtual ~ImageResource();
+
+ Utf8* mTag;
+ ImageResourceType mType;
+ AlfPtrVector<ResourceInstanceData> mLoadedTextures;
+ TAlfXYMetric mInitialSizeHint;
+ ResourcePool::AspectRatio mAspectRatio;
+ int mReferenceCount;
+ TAlfTextureFlags mFlag;
+ };
+
+ struct SkinImageResource : public ImageResource
+ {
+ int mSkinIdMajor;
+ int mSkinIdMinor;
+ UString mFallBackFileName;
+ int mFallBackIndex;
+ int mFallBackMaskIndex;
+ };
+
+ struct FileImageResource : public ImageResource
+ {
+ UString mFileName;
+ };
+public:
+
+ ResourcePoolImpl(
+ CAlfTextureManager& aTextureManager ,
+ ResourcePool* aParentPool );
+ ~ResourcePoolImpl();
+
+ void createLogicalImageResource( const Utf8* aTag );
+
+ void createThemeImageResource(
+ const Utf8* aTag,
+ const UString& aThemeDefinition );
+
+ void createFileImageResource(
+ const Utf8* aTag,
+ const UString& aFileName ,TAlfTextureFlags aFlag);
+
+ void deleteImageResource( const Utf8* aTag );
+
+ bool hasImageResource( const Utf8* aTag ) const;
+
+ void setInitialSize(
+ const Utf8* aTag,
+ const TAlfXYMetric& aInitialSizeHint );
+
+ void setAspectRatio(
+ const Utf8* aTag,
+ ResourcePool::AspectRatio aAspectRatio );
+
+ TAlfImage getImageResource( const Utf8* aTag );
+
+ TAlfImage getImageResource(
+ const Utf8* aTag,
+ const TAlfXYMetric& aSizeHint );
+
+private:
+ ImageResource* findResource( const Utf8* aTag ) const;
+ int findResourceIndex( const Utf8* aTag ) const;
+ void DetermineSkinInstanceL( const Utf8* aTag, TAknsItemID& aSkinItemID ) const;
+ TSize determineSizeInPixels( const TAlfXYMetric& aSize );
+ void determineSkinId( const UString& aNumberString, int& aSkinItem );
+ TAlfImage CreateSkinImageResourceL(SkinImageResource& aSkinImageResource, const TAlfXYMetric& aSizeHint);
+ TAlfImage CreateFileImageResourceL(FileImageResource& aFileImageResource, const TAlfXYMetric& aSizeHint ,TAlfTextureFlags aFlag);
+ TAlfImage CreateSVGImageResourceL(FileImageResource& aSVGImageResource, const TAlfXYMetric& aSizeHint);
+
+ static bool areSizesCloseEnough( const TSize& aSize1, const TSize& aSize2 );
+private:
+
+ CAlfTextureManager& mTextureManager;
+ ResourcePool* mParentPool;
+
+ AlfPtrVector<ImageResource> mResources; // use hash table instead?
+ };
+
+} // namespace Alf
+
+#endif // ALF_RESOURCEPOOL_IMPL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcepool/sis/alfresourcepool.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,29 @@
+;
+; Copyright (c) 2009 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: alfresourcepool iby file.
+;
+
+#{"Alf resource pool"},(0x200110F7),1,0,0
+
+;Supports Series 60 v 3.0
+(0x101F7961), 0, 0, 0, {"Series60ProductID"}
+
+;Localized Vendor Name
+%{"Nokia-EN"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Files to copy
+"\epoc32\release\armv5\urel\alfresourcepool.dll"-"!:\sys\bin\alfresourcepool.dll"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcepool/sis/createsisx.bat Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,25 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: resource pool sisx bat.
+rem
+
+
+@echo off
+echo DoTo: update the location for certificate and private key files
+
+set certificate_file=..\..\hitchcock\internal\certificates\rd.cer
+set private_key_file=..\..\hitchcock\internal\certificates\rd-key.pem
+
+makesis alfresourcepool.pkg
+signsis alfresourcepool.sis alfresourcepool.sisx %certificate_file% %private_key_file%
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcepool/src/alfresourcepool.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 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: API for handling alf graphic resources
+*
+*/
+
+
+#include "alf/alfresourcepool.h"
+#include "alfresourcepoolimpl.h"
+
+#include <osn/osnnew.h>
+
+namespace Alf
+{
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT ResourcePool::ResourcePool(
+ CAlfTextureManager& aTextureManager,
+ ResourcePool* aParentPool )
+ : mResourcePoolImpl(
+ new (EMM) ResourcePoolImpl( aTextureManager, aParentPool ) )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT ResourcePool::~ResourcePool()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void ResourcePool::createLogicalImageResource( const Utf8* aTag )
+ {
+ mResourcePoolImpl->createLogicalImageResource( aTag );
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void ResourcePool::createThemeImageResource(
+ const Utf8* aTag,
+ const UString& aThemeDefinition )
+ {
+ mResourcePoolImpl->createThemeImageResource(
+ aTag,
+ aThemeDefinition );
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void ResourcePool::createFileImageResource(
+ const Utf8* aTag,
+ const UString& aFileName ,
+ TAlfTextureFlags aFlag)
+ {
+ mResourcePoolImpl->createFileImageResource( aTag, aFileName, aFlag);
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void ResourcePool::deleteImageResource( const Utf8* aTag )
+ {
+ mResourcePoolImpl->deleteImageResource( aTag );
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool ResourcePool::hasImageResource( const Utf8* aTag ) const
+ {
+ return mResourcePoolImpl->hasImageResource( aTag );
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void ResourcePool::setInitialSize(
+ const Utf8* aTag,
+ const TAlfXYMetric& aInitialSizeHint )
+ {
+ mResourcePoolImpl->setInitialSize( aTag, aInitialSizeHint);
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void ResourcePool::setAspectRatio(
+ const Utf8* aTag,
+ AspectRatio aAspectRatio )
+ {
+ mResourcePoolImpl->setAspectRatio( aTag, aAspectRatio);
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfImage ResourcePool::getImageResource(
+ const Utf8* aTag )
+ {
+ return mResourcePoolImpl->getImageResource( aTag );
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfImage ResourcePool::getImageResource(
+ const Utf8* aTag,
+ const TAlfXYMetric& aSizeHint )
+ {
+ return mResourcePoolImpl->getImageResource( aTag, aSizeHint );
+ }
+
+
+} // namespace Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcepool/src/alfresourcepoolimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,788 @@
+/*
+* Copyright (c) 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 the resource pool
+*
+*/
+
+
+// From this component
+#include "alfresourcepoolimpl.h"
+
+// From the same subsystem
+#include <osn/osnnew.h>
+#include <alf/alfimageloaderutil.h>
+#include <alf/alfutil.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfwidgetenvextension.h>
+
+// Outside the same subsystem
+#include <AknsItemID.h>
+#include <utf.h>
+
+// standard C++/STL
+#include <algorithm>
+#include <cstdlib>
+#include <stdexcept>
+
+namespace Alf
+{
+
+#define KResourcePoolHexadecimalPrefix "0x"
+
+const unsigned int INITIAL_IMAGE_WIDTH = 0; // no magic
+const unsigned int INITIAL_IMAGE_HEIGHT = 0; // no magic
+
+const TAlfTextureFlags IMAGE_RESOURCE_DEFAULT_TEXTURE_FLAGS = TAlfTextureFlags(EAlfTextureFlagAutoSize);
+const TAlfTextureFlags IMAGE_RESOURCE_SKINNED_TEXTURE_FLAGS = TAlfTextureFlags(EAlfTextureFlagAutoSize | EAlfTextureFlagSkinContent);
+
+// Function is Not used.
+/**********************************
+Utf8* alloc8BitBuffer( const Utf8* aSource )
+ {
+ int length( 0 );
+ while ( aSource && aSource[length] != '\0' )
+ {
+ length++;
+ }
+ length++; // for the NULL characher
+
+ Utf8* result = new (EMM) Utf8[ length ];
+
+ for ( int c = 0; c < ( length - 1 ); c++ )
+ {
+ result[c] = aSource[c];
+ }
+
+ result[length - 1] = '\0'; // add the NULL character at the end
+ return result;
+ }
+********************************************/
+
+Utf8* allocLowerCase( const Utf8* aTag )
+ {
+ const unsigned int length = aTag ? strlen(aTag) : 0;
+ Utf8* result = new (EMM) Utf8[ length+1 ];
+ for ( int s = 0 ; s < length ; s++ )
+ {
+ result[s] = tolower( aTag[s]);
+ }
+ result[length] = '\0'; // add the NULL character at the end
+ return result;
+ }
+
+TInt RoundFloatToInt(TReal32 aVal)
+ {
+ return (aVal < 0 ? (TInt)(aVal - 0.5f) : (TInt)(aVal + 0.5f));
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+ResourcePoolImpl::ImageResource::ImageResource()
+: mTag(0), mAspectRatio( ResourcePool::aspectRatioPreserved ), mReferenceCount(1)
+ {
+ mInitialSizeHint.iX.iMagnitude = INITIAL_IMAGE_WIDTH;
+ mInitialSizeHint.iX.iUnit = EAlfUnitPixel;
+ mInitialSizeHint.iY.iMagnitude = INITIAL_IMAGE_HEIGHT;
+ mInitialSizeHint.iY.iUnit = EAlfUnitPixel;
+ }
+
+ResourcePoolImpl::ImageResource::~ImageResource()
+ {
+ delete mTag;
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+ResourcePoolImpl::ResourcePoolImpl(
+ CAlfTextureManager& aTextureManager,
+ ResourcePool* aParentPool )
+ : mTextureManager( aTextureManager ),
+ mParentPool( aParentPool )
+ {
+ //This may throw an exception leading to object creation failure.
+
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+ResourcePoolImpl::~ResourcePoolImpl()
+ {
+
+
+ // delete the texture instances
+ for ( int resourceIndex = 0 ; resourceIndex < mResources.count() ; resourceIndex++ )
+ {
+ ImageResource* resource = mResources[resourceIndex];
+ for ( int textureIndex = 0 ; textureIndex < resource->mLoadedTextures.count() ; textureIndex++ )
+ {
+ const CAlfTexture* texture = mTextureManager.Texture( resource->mLoadedTextures[textureIndex]->mTextureId);
+ if ( texture->Id() == resource->mLoadedTextures[textureIndex]->mTextureId )
+ {
+ // make sure we do not delete blank texure
+ delete texture;
+
+ if (resource->mLoadedTextures[textureIndex]->mAutoSizeTexture)
+ {
+ mTextureManager.RemoveAutoSizeObserver(resource->mLoadedTextures[textureIndex]->mImageLoaderUtil);
+ }
+ }
+ }
+ }
+ // items in mResources will be automatically deleted in the destructor of
+ // the AlfPtrVector
+ }
+
+
+void ResourcePoolImpl::createLogicalImageResource( const Utf8* aTag )
+ {
+ }
+
+void ResourcePoolImpl::createThemeImageResource(
+ const Utf8* aTag,
+ const UString& aThemeDefinition )
+ {
+
+
+ }
+
+void ResourcePoolImpl::createFileImageResource(
+ const Utf8* aTag,
+ const UString& aFileName , TAlfTextureFlags aFlag)
+ {
+ if ( !aTag )
+ {
+ throw invalid_argument("NULL ptr");
+ }
+ auto_ptr<Utf8> lowerCaseTag( allocLowerCase( aTag ) );
+
+ ImageResource* existingResource = findResource( lowerCaseTag.get() );
+ if ( existingResource )
+ {
+ existingResource->mReferenceCount++;
+ return;
+ }
+
+ // : check that the file exists.
+
+ auto_ptr<FileImageResource> newFileResource( new (EMM) FileImageResource );
+ newFileResource->mTag = lowerCaseTag.get();
+ lowerCaseTag.release();
+ newFileResource->mType = imageResourceTypeFileOther;
+ newFileResource->mFileName = aFileName;
+ newFileResource->mFlag = aFlag;
+ // check the .svg prefix
+ const long length = aFileName.getCharLength();
+ if ( length > 4 )
+ {
+ auto_ptr<Utf8> lowerCaseTag( allocLowerCase( aFileName.getUtf8() ) );
+ if ( lowerCaseTag.get()[length-4] == '.' &&
+ lowerCaseTag.get()[length-3] == 's' &&
+ lowerCaseTag.get()[length-2] == 'v' &&
+ lowerCaseTag.get()[length-1] == 'g' )
+ {
+ newFileResource->mType = imageResourceTypeFileSVG;
+ }
+ }
+
+ mResources.resize(mResources.count()+1);
+ mResources.insert(mResources.count(),newFileResource.get());
+ newFileResource.release();
+ }
+
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void ResourcePoolImpl::deleteImageResource( const Utf8* aTag )
+ {
+ auto_ptr<Utf8> lowerCaseTag( allocLowerCase( aTag ) );
+
+ ImageResource* existingResource = findResource( lowerCaseTag.get() );
+ if ( !existingResource )
+ {
+ return;
+ }
+
+ existingResource->mReferenceCount--;
+ if ( existingResource->mReferenceCount > 0 )
+ {
+ // not time to delete yet.
+ return;
+ }
+
+ const int resouceIndex = findResourceIndex( lowerCaseTag.get() );
+
+ // delete CAlfTexture instances created by this resource
+ if ( resouceIndex != -1 )
+ {
+ ImageResource* resource = mResources[resouceIndex];
+ for ( int textureIndex = 0 ; textureIndex < resource->mLoadedTextures.count() ; textureIndex++ )
+ {
+ const CAlfTexture* texture = mTextureManager.Texture( resource->mLoadedTextures[textureIndex]->mTextureId);
+ if ( texture->Id() == resource->mLoadedTextures[textureIndex]->mTextureId )
+ {
+ // make sure we do not delete blank texure
+ delete texture;
+
+ if (resource->mLoadedTextures[textureIndex]->mAutoSizeTexture)
+ {
+ mTextureManager.RemoveAutoSizeObserver(resource->mLoadedTextures[textureIndex]->mImageLoaderUtil);
+ }
+ }
+ }
+
+ mResources.remove( resouceIndex );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+bool ResourcePoolImpl::hasImageResource( const Utf8* aTag ) const
+ {
+ auto_ptr<Utf8> lowerCaseTag( allocLowerCase( aTag ) );
+ int resouceIndex = findResourceIndex( lowerCaseTag.get() );
+ if ( resouceIndex != -1 )
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void ResourcePoolImpl::setInitialSize(
+ const Utf8* aTag,
+ const TAlfXYMetric& aInitialSizeHint )
+ {
+ auto_ptr<Utf8> lowerCaseTag( allocLowerCase( aTag ) );
+ ImageResource* imageResource = findResource( lowerCaseTag.get() );
+ if ( imageResource )
+ {
+ imageResource->mInitialSizeHint = aInitialSizeHint;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void ResourcePoolImpl::setAspectRatio(
+ const Utf8* aTag,
+ ResourcePool::AspectRatio aAspectRatio )
+ {
+ auto_ptr<Utf8> lowerCaseTag( allocLowerCase( aTag ) );
+ ImageResource* imageResource = findResource( lowerCaseTag.get() );
+ if ( imageResource )
+ {
+ imageResource->mAspectRatio = aAspectRatio;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+TAlfImage ResourcePoolImpl::getImageResource( const Utf8* aTag )
+ {
+ auto_ptr<Utf8> lowerCaseTag( allocLowerCase( aTag ) );
+ ImageResource* imageResource = findResource( lowerCaseTag.get() );
+ if ( imageResource )
+ {
+ return getImageResource(
+ lowerCaseTag.get() ,
+ imageResource->mInitialSizeHint );
+ }
+ return TAlfImage(); // return empty
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+TAlfImage ResourcePoolImpl::getImageResource(
+ const Utf8* aTag,
+ const TAlfXYMetric& aSizeHint )
+ {
+ auto_ptr<Utf8> lowerCaseTag( allocLowerCase( aTag ) );
+
+ ImageResource* imageResource = findResource( lowerCaseTag.get() );
+ if ( imageResource )
+ {
+ // check if the texture ID with the given size hint is already generated
+ if ( imageResource->mLoadedTextures.count() )
+ {
+ const TSize requestedSize( determineSizeInPixels(aSizeHint) );
+ const CAlfTexture* texture = NULL;
+ for ( TInt idIndex = 0 ; idIndex < imageResource->mLoadedTextures.count() ; idIndex++ )
+ {
+ texture = mTextureManager.Texture(imageResource->mLoadedTextures[idIndex]->mTextureId);
+ if ( texture->Id() != imageResource->mLoadedTextures[idIndex]->mTextureId )
+ {
+ // if the texture manager returns blank, return empty.
+ return TAlfImage(); // return empty
+ }
+ TSize textureSize( const_cast<CAlfTexture*>(texture)->MaxTextureSize() );
+ if ( textureSize.iWidth == 0 || textureSize.iHeight == 0 )
+ {
+ // texture loaded directly with the size, use that.
+ textureSize = texture->Size();
+ }
+
+ const bool autosize = imageResource->mLoadedTextures[idIndex]->mAutoSizeTexture;
+ if ( requestedSize == TSize(0,0) && autosize )
+ {
+ // if zero size is requested, we think autosizing image is requested
+ // and if we find one autosizing texture we return it.
+ return TAlfImage( *texture );
+ }
+ else if ( areSizesCloseEnough( requestedSize, textureSize ) && !autosize )
+ {
+ // we found existing texure -> use that
+ return TAlfImage( *texture );
+ }
+ }
+ }
+
+ // If we have not found a suitable resource, create one.
+ TAlfImage result;
+ TRAPD( sError ,
+ {
+
+ // Create new one.
+ switch( imageResource->mType )
+ {
+ case imageResourceTypeSkin:
+ result = CreateSkinImageResourceL(
+ static_cast<SkinImageResource&>( *imageResource ), aSizeHint );
+ break;
+
+ case imageResourceTypeFileOther:
+ result = CreateFileImageResourceL(
+ static_cast<FileImageResource&>( *imageResource ), aSizeHint , imageResource->mFlag );
+ break;
+
+ case imageResourceTypeFileSVG:
+ result = CreateSVGImageResourceL(
+ static_cast<FileImageResource&>( *imageResource ), aSizeHint );
+ break;
+
+ default:
+ break;
+ }
+ }); // TRAP
+
+ if ( sError != KErrNone )
+ {
+ throw invalid_argument("cannot create image resource");
+ }
+ return result;
+ }
+ else
+ {
+ // this pool does not contain the resource, check the parent pool
+ if ( mParentPool )
+ {
+ return mParentPool->getImageResource( lowerCaseTag.get(), aSizeHint );
+ }
+ }
+
+ return TAlfImage(); // return empty
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+ResourcePoolImpl::ImageResource* ResourcePoolImpl::findResource( const Utf8* aTag ) const
+ {
+ const int index = findResourceIndex( aTag );
+ if ( index != -1 )
+ {
+ return mResources.at(index);
+ }
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+int ResourcePoolImpl::findResourceIndex( const Utf8* aTag ) const
+ {
+ for ( int i = 0 ; i < mResources.count() ; i++ )
+ {
+ // : find a better way to compare
+ int c = 0;
+ while ( mResources.at(i)->mTag[c] != '\0' )
+ {
+ if ( mResources.at(i)->mTag[c] != aTag[c] )
+ {
+ break;
+ }
+ c++;
+ }
+
+ if ( mResources.at(i)->mTag[c] == '\0' && aTag[c] == '\0' )
+ {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void ResourcePoolImpl::DetermineSkinInstanceL(
+ const Utf8* aTag, TAknsItemID& aSkinItemID ) const
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+TSize ResourcePoolImpl::determineSizeInPixels( const TAlfXYMetric& aSize )
+ {
+ TSize result(0,0);
+ TRect displayRect(0,0,0,0);
+
+ // check X
+ if ( aSize.iX.iUnit == EAlfUnitPixel )
+ {
+ result.iWidth = aSize.iX.iMagnitude;
+ }
+ else if ( aSize.iX.iUnit == EAlfUnitDisplaySize )
+ {
+ // check the primary display
+ if ( mTextureManager.Env().DisplayCount() )
+ {
+ const CAlfDisplay& display = mTextureManager.Env().PrimaryDisplay();
+ displayRect = display.VisibleArea();
+ result.iWidth = RoundFloatToInt( TReal32(displayRect.Width())*aSize.iX.iUnit );
+ }
+ }
+
+ // check Y
+ if ( aSize.iY.iUnit == EAlfUnitPixel )
+ {
+ result.iHeight = aSize.iY.iMagnitude;
+ }
+ else if ( aSize.iY.iUnit == EAlfUnitDisplaySize )
+ {
+ // check the primary display (if not checked already
+ if ( !displayRect.Height() && mTextureManager.Env().DisplayCount() )
+ {
+ const CAlfDisplay& display = mTextureManager.Env().PrimaryDisplay();
+ displayRect = display.VisibleArea();
+ }
+ result.iHeight = RoundFloatToInt( TReal32(displayRect.Height())*aSize.iY.iUnit );
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void ResourcePoolImpl::determineSkinId( const UString& aNumberString, int& aSkinItem )
+ {
+ aSkinItem = -1;
+
+ const unsigned int charLength = aNumberString.getCharLength();
+ if ( charLength )
+ {
+ // there is something
+ // check if we are dealing with hexadecimal entry
+ const string strNumber = aNumberString.getUtf8();
+ if ( charLength > 3 && strNumber.substr(0,2).compare( KResourcePoolHexadecimalPrefix ) == 0 )
+ {
+ // hexa it is
+ aSkinItem = strtol( aNumberString.getUtf8(), NULL, 16 );
+ }
+ else
+ {
+ // try normal decimal number
+ aSkinItem = atoi( aNumberString.getUtf8() );
+ // if the 'atoi' returns 0, make sure it is that
+ if ( aSkinItem == 0 )
+ {
+ if ( aNumberString.getUtf8()[0] != '0' )
+ {
+ aSkinItem = -1;
+ }
+ }
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+TAlfImage ResourcePoolImpl::CreateSkinImageResourceL(
+ SkinImageResource& aSkinImageResource,
+ const TAlfXYMetric& aSizeHint)
+ {
+ CAlfAutoSizeImageLoaderUtil* imageLoaderUtil = new (ELeave) CAlfAutoSizeImageLoaderUtil;
+ CleanupStack::PushL( imageLoaderUtil );
+ CAlfTexture* texture = NULL;
+ MAlfBitmapProvider* bitmapProvider = NULL;
+
+ TAknsItemID skinId;
+ skinId.Set( aSkinImageResource.mSkinIdMajor, aSkinImageResource.mSkinIdMinor );
+
+ TSize size( determineSizeInPixels(aSizeHint) );
+ imageLoaderUtil->SetSize( size, static_cast<TScaleMode>(aSkinImageResource.mAspectRatio));
+
+ TInt textureFlags = IMAGE_RESOURCE_SKINNED_TEXTURE_FLAGS;
+ if (size != TSize(0,0))
+ {
+ // If sizehint was provided, turn autosize off at least for now.
+ textureFlags &= ~EAlfTextureFlagAutoSize;
+ }
+
+ if ( aSkinImageResource.mFallBackFileName.getCharLength() )
+ {
+ HBufC* sUnicodeBuffer =
+ CnvUtfConverter::ConvertToUnicodeFromUtf8L(
+ TPtrC8((TUint8*)aSkinImageResource.mFallBackFileName.getUtf8()));
+ CleanupStack::PushL( sUnicodeBuffer );
+ bitmapProvider =
+ imageLoaderUtil->CreateImageLoaderL(
+ skinId,
+ *sUnicodeBuffer,
+ aSkinImageResource.mFallBackIndex,
+ aSkinImageResource.mFallBackMaskIndex );
+ CleanupStack::PopAndDestroy( sUnicodeBuffer );
+ }
+ else
+ {
+ bitmapProvider =
+ imageLoaderUtil->CreateImageLoaderL(
+ skinId,
+ KNullDesC(),
+ -1,
+ -1 );
+ }
+
+ texture = &mTextureManager.CreateTextureL( KAlfAutoGeneratedTextureId, bitmapProvider, TAlfTextureFlags(textureFlags));
+ CleanupStack::PushL( texture );
+
+ // Enable ref counting
+ texture->EnableRefCounting();
+
+ // store texture ID and create image
+ ResourceInstanceData* newResourceInstance = new (ELeave) ResourceInstanceData;
+ newResourceInstance->mTextureId = texture->Id();
+ newResourceInstance->mImageLoaderUtil = imageLoaderUtil;
+ newResourceInstance->mAutoSizeTexture = (textureFlags & EAlfTextureFlagAutoSize);
+
+ try
+ {
+ aSkinImageResource.mLoadedTextures.resize(aSkinImageResource.mLoadedTextures.count()+1);
+ aSkinImageResource.mLoadedTextures.insert(aSkinImageResource.mLoadedTextures.count(),newResourceInstance);
+ }
+ catch ( ... )
+ {
+ delete newResourceInstance;
+ User::Leave( KErrNoMemory );
+ }
+ CleanupStack::Pop( texture );
+ CleanupStack::Pop( imageLoaderUtil ); // mLoadedTextures has taken the ownership
+
+ if (textureFlags & EAlfTextureFlagAutoSize)
+ {
+ mTextureManager.AddAutoSizeObserverL(imageLoaderUtil);
+ }
+
+ return TAlfImage( *texture );
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+TAlfImage ResourcePoolImpl::CreateFileImageResourceL(
+ FileImageResource& aFileImageResource,
+ const TAlfXYMetric& aSizeHint , TAlfTextureFlags aFlag)
+ {
+ CAlfTexture* texture = NULL;
+
+ HBufC* sUnicodeBuffer =
+ CnvUtfConverter::ConvertToUnicodeFromUtf8L(
+ TPtrC8((TUint8*)aFileImageResource.mFileName.getUtf8()));
+ CleanupStack::PushL( sUnicodeBuffer );
+ TSize size(determineSizeInPixels( aSizeHint ) );
+
+ TInt textureFlags = IMAGE_RESOURCE_DEFAULT_TEXTURE_FLAGS;
+ textureFlags |= aFlag;
+ if (size != TSize(0,0))
+ {
+ // If sizehint was provided, turn autosize off at least for now.
+ textureFlags &= ~EAlfTextureFlagAutoSize;
+ }
+
+ if ( size.iWidth && size.iHeight )
+ {
+ texture = &mTextureManager.LoadTextureL(
+ *sUnicodeBuffer,
+ size,
+ TAlfTextureFlags(textureFlags),
+ KAlfAutoGeneratedTextureId );
+ }
+ else
+ {
+ texture = &mTextureManager.LoadTextureL(
+ *sUnicodeBuffer,
+ TAlfTextureFlags(textureFlags),
+ KAlfAutoGeneratedTextureId );
+ }
+ CleanupStack::PopAndDestroy( sUnicodeBuffer );
+ CleanupStack::PushL( texture );
+
+ // Enable ref counting
+ texture->EnableRefCounting();
+
+ // store texture ID and create image
+ ResourceInstanceData* newResourceInstance = new (ELeave) ResourceInstanceData;
+ newResourceInstance->mTextureId = texture->Id();
+ newResourceInstance->mAutoSizeTexture = (textureFlags & EAlfTextureFlagAutoSize);
+
+ try
+ {
+ aFileImageResource.mLoadedTextures.resize(aFileImageResource.mLoadedTextures.count()+1);
+ aFileImageResource.mLoadedTextures.insert(aFileImageResource.mLoadedTextures.count(),newResourceInstance);
+ }
+ catch ( ... )
+ {
+ delete newResourceInstance;
+ User::Leave( KErrNoMemory );
+ }
+
+ CleanupStack::Pop( texture );
+ return TAlfImage( *texture );
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+TAlfImage ResourcePoolImpl::CreateSVGImageResourceL(
+ FileImageResource& aSVGImageResource,
+ const TAlfXYMetric& aSizeHint)
+ {
+ CAlfAutoSizeImageLoaderUtil* imageLoaderUtil = new (ELeave) CAlfAutoSizeImageLoaderUtil;
+ CleanupStack::PushL( imageLoaderUtil );
+ MAlfBitmapProvider* bitmapProvider = NULL;
+ CAlfTexture* texture = NULL;
+
+ TSize size( determineSizeInPixels(aSizeHint) );
+ imageLoaderUtil->SetSize( size, static_cast<TScaleMode>(aSVGImageResource.mAspectRatio) );
+
+ TInt textureFlags = IMAGE_RESOURCE_SKINNED_TEXTURE_FLAGS;
+ if (size != TSize(0,0))
+ {
+ // If sizehint was provided, turn autosize off at least for now.
+ textureFlags &= ~EAlfTextureFlagAutoSize;
+ }
+
+ HBufC* sUnicodeBuffer =
+ CnvUtfConverter::ConvertToUnicodeFromUtf8L(
+ TPtrC8((TUint8*)aSVGImageResource.mFileName.getUtf8()));
+ CleanupStack::PushL( sUnicodeBuffer );
+ bitmapProvider = imageLoaderUtil->CreateSVGImageLoaderL( *sUnicodeBuffer );
+ CleanupStack::PopAndDestroy( sUnicodeBuffer );
+
+ texture = &mTextureManager.CreateTextureL( KAlfAutoGeneratedTextureId, bitmapProvider, TAlfTextureFlags(textureFlags));
+ CleanupStack::PushL( texture );
+
+ // Enable ref counting
+ texture->EnableRefCounting();
+
+ // store texture ID and create image
+ ResourceInstanceData* newResourceInstance = new (ELeave) ResourceInstanceData;
+ newResourceInstance->mTextureId = texture->Id();
+ newResourceInstance->mImageLoaderUtil = imageLoaderUtil;
+ newResourceInstance->mAutoSizeTexture = (textureFlags & EAlfTextureFlagAutoSize);
+
+ try
+ {
+ aSVGImageResource.mLoadedTextures.resize(aSVGImageResource.mLoadedTextures.count()+1);
+ aSVGImageResource.mLoadedTextures.insert(aSVGImageResource.mLoadedTextures.count(),newResourceInstance);
+ }
+ catch ( ... )
+ {
+ delete newResourceInstance;
+ User::Leave( KErrNoMemory );
+ }
+ CleanupStack::Pop( texture );
+ CleanupStack::Pop( imageLoaderUtil ); // mLoadedTextures has taken the ownership
+
+ if (textureFlags & EAlfTextureFlagAutoSize)
+ {
+ mTextureManager.AddAutoSizeObserverL(imageLoaderUtil);
+ }
+
+ return TAlfImage( *texture );
+ }
+
+bool ResourcePoolImpl::areSizesCloseEnough( const TSize& aSize1, const TSize& aSize2 )
+ {
+ // this is the inteligent part:)
+ // the function tries to determine do we need to rasterize a new texture or use the existing one.
+
+ // check if the other one is zero size
+ if ( !aSize1.iWidth || !aSize1.iHeight || !aSize2.iWidth || !aSize2.iHeight )
+ {
+ return false;
+ }
+
+ // check if both are smaller than 10px
+ if ( aSize1.iWidth < 10 && aSize1.iHeight < 10 && aSize2.iWidth < 10 && aSize2.iHeight < 10 )
+ {
+ return true;
+ }
+
+ // check if both dimensions fit in 10% range.
+ bool result = false;
+ // check width
+ if ( aSize1.iWidth <= aSize2.iWidth*1.1f && aSize1.iWidth >= aSize2.iWidth*0.9f )
+ {
+ // width in the range, chech height
+ if ( aSize1.iHeight <= aSize2.iHeight*1.1f && aSize1.iHeight >= aSize2.iHeight*0.9f )
+ {
+ // height in the range
+ result = true;
+ }
+ }
+
+ return result;
+ }
+
+} // namespace Alf
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/aakash.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* 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: Multimedia UI Library iby file.
+*
+*/
+
+
+#ifndef __AAKASH_IBY__
+#define __AAKASH_IBY__
+
+#include "gesturehelper.iby"
+#include "muldatamodel.iby"
+// #include "mulsingleitemmodel.iby"
+#include "mulutility.iby"
+//#include "mulgridwidget.iby"
+//#include "mullistwidget.iby"
+#include "mulcoverflowwidget.iby"
+//#include "mulsoftkeywidget.iby"
+#include "mulsliderwidget.iby"
+//#include "multoolbarwidget.iby"
+//#include "mulmetapanewidget.iby"
+
+
+#endif // __AAKASH_IBY__
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/alfcollect.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 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: Grouped IBY file.
+*
+*/
+#ifndef __ALFCOLLECT_IBY__
+#define __ALFCOLLECT_IBY__
+
+#include <bldvariant.hrh>
+
+
+//#include <alfeditors.iby>
+
+#include "alfresourcepool.iby"
+//#include <alfwidgets.iby>
+// #include <declarativeui.iby>
+#include "osncore.iby"
+// #include <thememanagement.iby>
+// #include <uimodel.iby>
+#include "widgetmodel.iby"
+// #include <lctmanager.iby>
+// Effects are not included into rom by default
+//#include <alftranseffectplugin.iby>
+
+#endif // __ALFCOLLECT_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/alfeditors.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 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: AlfEditors iby file
+*
+*/
+#ifndef __ALFEDITORS_IBY__
+#define __ALFEDITORS_IBY__
+
+#include <bldvariant.hrh>
+
+#ifdef FF_ROM_INCLUDE_ALF
+#ifndef __SERIES60_30__
+file=ABI_DIR\BUILD_DIR\alfwidgeteditors.dll SHARED_LIB_DIR\alfwidgeteditors.dll
+file=ABI_DIR\BUILD_DIR\alfwidgeteditortools.dll SHARED_LIB_DIR\alfwidgeteditortools.dll
+#endif // #ifndef __SERIES60_30__
+
+#endif // #ifdef FF_ROM_INCLUDE_ALF
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/alfred.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2009 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: Alf iby file.
+*
+*/
+#ifndef __ALFRED_IBY__
+#define __ALFRED_IBY__
+
+#include <bldvariant.hrh>
+
+REM ALFRED
+
+// TEMP
+// New IBY file exporting improvements in 5.0 says that no need to include other IBY files
+#ifndef __S60_50__
+#include <aknfepuiinterface.iby>
+#endif
+
+#ifdef FF_ROM_INCLUDE_ALF
+
+// HUIToolkit
+file=ABI_DIR\BUILD_DIR\hitchcock.dll SHARED_LIB_DIR\hitchcock.dll
+
+#ifndef __SERIES60_30__
+// client
+file=ABI_DIR\BUILD_DIR\alfclient.dll SHARED_LIB_DIR\alfclient.dll
+
+// App Server exe
+file=ABI_DIR\BUILD_DIR\alfredserver.exe PROGRAMS_DIR\alfredserver.exe
+data=DATAZ_\APP_RESOURCE_DIR\alfredserver.RSC APP_RESOURCE_DIR\alfredserver.rsc
+data=ZSYSTEM\..\PRIVATE\10003A3F\APPS\alfredserver_REG.RSC Private\10003a3f\apps\alfredserver_reg.rsc
+
+// Server core
+file=ABI_DIR\BUILD_DIR\alfappservercore.dll SHARED_LIB_DIR\alfappservercore.dll
+
+// File token server
+file=ABI_DIR\BUILD_DIR\ftokenclient.dll SHARED_LIB_DIR\ftokenclient.dll
+file=ABI_DIR\BUILD_DIR\!ftokenserver.exe PROGRAMS_DIR\!ftokenserver.exe
+
+
+// Stub sis file
+data=ABI_DIR\BUILD_DIR\uiaccelerator_stub.sis system\install\uiaccelerator_stub.sis
+
+#endif // #ifndef __SERIES60_30__
+
+#endif // #ifdef FF_ROM_INCLUDE_ALF
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/alfresourcepool.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 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: Alf Resourse Pool iby file.
+*
+*/
+#ifndef __ALFRESOURCEPOOL_IBY__
+#define __ALFRESOURCEPOOL_IBY__
+
+#include <bldvariant.hrh>
+
+file=ABI_DIR\BUILD_DIR\alfresourcepool.dll SHARED_LIB_DIR\alfresourcepool.dll
+
+#endif // __ALFRESOURCEPOOL_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/alftranseffectplugin.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: Transeffectplugin iby file.
+*
+*/
+
+#ifndef ALFTRANSEFFECTPLUGIN_IBY
+#define ALFTRANSEFFECTPLUGIN_IBY
+
+ECOM_PLUGIN(AlfTransEffectPlugin.dll, AlfTransEffectPlugin.rsc)
+
+#endif // ALFTRANSEFFECTPLUGIN_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/alfwidgets.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 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: alfwidgets iby file.
+*
+*/
+#ifndef __ALFWIDGETS_IBY__
+#define __ALFWIDGETS_IBY__
+
+#include <bldvariant.hrh>
+
+
+ECOM_PLUGIN( alfcontainerwidget.dll , alfcontainerwidget.rsc )
+ECOM_PLUGIN( alfscrollbarwidget.dll , alfscrollbarwidget.rsc )
+ECOM_PLUGIN( alfviewwidget.dll , alfviewwidget.rsc )
+
+#endif // __ALFWIDGETS_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/declarativeui.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 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: DUI iby file.
+*
+*/
+#ifndef __DECLARATIVEUI_IBY__
+#define __DECLARATIVEUI_IBY__
+
+#include <bldvariant.hrh>
+
+file=ABI_DIR\BUILD_DIR\duiengine.dll SHARED_LIB_DIR\duiengine.dll
+file=ABI_DIR\BUILD_DIR\duiinterpreter.dll SHARED_LIB_DIR\duiinterpreter.dll
+
+#endif // __DECLARATIVEUI_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/lctmanager.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 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: LCT Manager iby file.
+*
+*/
+#ifndef __LCTMANAGER_IBY__
+#define __LCTMANAGER_IBY__
+
+#include <bldvariant.hrh>
+
+file=ABI_DIR\BUILD_DIR\lctmanager.dll SHARED_LIB_DIR\lctmanager.dll
+
+#endif // __LCTMANAGER_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/osncore.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 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: OSN core iby file.
+*
+*/
+#ifndef __OSNCORE_IBY__
+#define __OSNCORE_IBY__
+
+#include <bldvariant.hrh>
+
+file=ABI_DIR\BUILD_DIR\osncore.dll SHARED_LIB_DIR\osncore.dll
+
+#endif // __OSNCORE_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/thememanagement.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 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: Thememanagement iby file.
+*
+*/
+#ifndef __THEMEMANAGEMENT_IBY__
+#define __THEMEMANAGEMENT_IBY__
+
+#include <bldvariant.hrh>
+
+
+file=ABI_DIR\BUILD_DIR\ThemeManager.dll SHARED_LIB_DIR\ThemeManager.dll
+file=ABI_DIR\BUILD_DIR\skindata.dll SHARED_LIB_DIR\skindata.dll
+
+
+#endif // __THEMEMANAGEMENT_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/uimodel.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 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: uimodel iby file.
+*
+*/
+#ifndef __UIMODEL_IBY__
+#define __UIMODEL_IBY__
+
+#include <bldvariant.hrh>
+
+file=ABI_DIR\BUILD_DIR\duinode.dll SHARED_LIB_DIR\duinode.dll
+file=ABI_DIR\BUILD_DIR\duinodeiterator.dll SHARED_LIB_DIR\duinodeiterator.dll
+
+#endif // __UIMODEL_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/widgetmodel.iby Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 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: widgetmodel iby file.
+*
+*/
+#ifndef __WIDGETMODEL_IBY__
+#define __WIDGETMODEL_IBY__
+
+#include <bldvariant.hrh>
+
+file=ABI_DIR\BUILD_DIR\alfwidgetmodel.dll SHARED_LIB_DIR\alfwidgetmodel.dll
+file=ABI_DIR\BUILD_DIR\alfwidgetutils.dll SHARED_LIB_DIR\alfwidgetutils.dll
+
+// ECOM_PLUGIN( alflctlayoutmanagers.dll , alflctlayoutmanagers.rsc )
+ECOM_PLUGIN( alfwidgetfactory.dll , alfwidgetfactory.rsc )
+
+#endif // __WIDGETMODEL_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_4_0.dtd Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,86 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+ name CDATA #REQUIRED
+ schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+ name CDATA #REQUIRED
+ levels CDATA #IMPLIED
+ span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+ name CDATA #REQUIRED
+ level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+ unitID ID #REQUIRED
+ name CDATA #REQUIRED
+ mrp CDATA #REQUIRED
+ filter CDATA #IMPLIED
+ bldFile CDATA #REQUIRED
+ priority CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+ name CDATA #REQUIRED
+ mrp CDATA #REQUIRED
+ filter CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+ name CDATA #REQUIRED
+ version CDATA #REQUIRED
+ late (Y|N) #IMPLIED
+ filter CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+ name ID #REQUIRED
+ description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+ target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+ name ID #REQUIRED
+ abldTarget CDATA #REQUIRED
+ description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+ name ID #REQUIRED
+ abldOption CDATA #REQUIRED
+ description CDATA #REQUIRED
+ enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+ filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+ command CDATA #REQUIRED
+ targetList IDREFS #IMPLIED
+ unitParallel (Y | N | y | n) #REQUIRED
+ targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+ name CDATA #REQUIRED
+ cwd CDATA #REQUIRED
+ command CDATA #REQUIRED>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/systemDefinition.xml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "systemDefinition.dtd"[
+<!DOCTYPE SystemDefinition SYSTEM "\epoc32\tools\systemdefinition\systemdefinition.dtd"[
+
+
+ <!ENTITY layer_real_source_path "sf\mw\mmuifw">
+ <!ENTITY layer_name "mmuifw">
+
+ <!ENTITY layer_file SYSTEM "systemDefinitionLayer.xml">
+ <!ENTITY targetDefinition_file SYSTEM "/epoc32/tools/systemDefinition/targetDefinition.xml">
+ <!ENTITY defaultbuild_file SYSTEM "/epoc32/tools/systemDefinition/default_build.xml">
+ <!ENTITY defaultclean_file SYSTEM "/epoc32/tools/systemDefinition/default_clean.xml">
+]>
+
+<SystemDefinition name="SystemDefinition" schema="1.4.0">
+ <systemModel>
+ &layer_file;
+ </systemModel>
+ <build>
+ &targetDefinition_file;
+
+ <configuration name="build_mmuifw" description="build layer" filter="">
+ <layerRef layerName="&layer_name;"/>
+ &defaultbuild_file;
+ </configuration>
+
+ <configuration name="clean" description="clean layer" filter="">
+ <layerRef layerName="&layer_name;"/>
+ &defaultclean_file;
+ </configuration>
+
+ </build>
+</SystemDefinition>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/systemDefinitionLayer.xml Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,589 @@
+<layer name="mmuifw">
+ <module name="group_mmuifw">
+ <component name="group_mmuifw">
+ <unit unitID="mmuifw" mrp="" bldFile="&layer_real_source_path;\group" name="mmuifw" />
+ </component>
+ </module>
+
+ <module name = "alfwidgetutils">
+ <component name = "alfwidgetutils">
+ <unit unitID = "mmuifw_alfwidgetutils" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\alfwidgetutils\group" name= "alfwidgetutils"/>
+ </component>
+</module>
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_alfwidgetutils_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\alfwidgetutils\internal\test\group" name= "test"/>
+ </component>
+</module>
+
+
+
+
+<module name = "declarativeui">
+ <component name = "declarativeui">
+ <unit unitID = "mmuifw_declarativeui" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\declarativeui\group" name= "declarativeui"/>
+ </component>
+</module>
+<module name = "declarativeuiengine">
+ <component name = "declarativeuiengine">
+ <unit unitID = "mmuifw_declarativeui_declarativeuiengine" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\declarativeui\declarativeuiengine\group" name= "declarativeuiengine"/>
+ </component>
+</module>
+
+
+
+<module name = "ut_duiengine">
+ <component name = "ut_duiengine">
+ <unit unitID = "mmuifw_declarativeui_declarativeuiengine_internal_ut_duiengine" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\declarativeui\declarativeuiengine\internal\ut_duiengine\group" name= "ut_duiengine"/>
+ </component>
+</module>
+
+
+
+
+<module name = "interpreter">
+z <component name = "interpreter">
+ <unit unitID = "mmuifw_declarativeui_interpreter" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\declarativeui\interpreter\group" name= "interpreter"/>
+ </component>
+</module>
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_declarativeui_interpreter_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\declarativeui\interpreter\internal\test\group" name= "test"/>
+ </component>
+</module>
+<module name = "internal">
+ <component name = "internal">
+ <unit unitID = "mmuifw_internal" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\internal\group" name= "internal"/>
+ </component>
+</module>
+<module name = "configchanges">
+ <component name = "configchanges">
+ <unit unitID = "mmuifw_internal_configchanges" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\internal\configchanges\group" name= "configchanges"/>
+ </component>
+</module>
+
+<module name = "lctmanagement">
+ <component name = "lctmanagement">
+ <unit unitID = "mmuifw_lctmanagement" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\lctmanagement\group" name= "lctmanagement"/>
+ </component>
+</module>
+
+<module name = "lctmanager">
+ <component name = "lctmanager">
+ <unit unitID = "mmuifw_lctmanagement_lctmanager" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\lctmanagement\lctmanager\group" name= "lctmanager"/>
+ </component>
+</module>
+
+
+<module name = "Test">
+ <component name = "Test">
+ <unit unitID = "mmuifw_lctmanagement_lctmanager_internal_Test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\lctmanagement\lctmanager\internal\Test\group" name= "Test"/>
+ </component>
+</module>
+
+
+<module name = "osncore">
+ <component name = "osncore">
+ <unit unitID = "mmuifw_osncore" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\osncore\group" name= "osncore"/>
+ </component>
+</module>
+<module name = "osncore">
+ <component name = "osncore">
+ <unit unitID = "mmuifw_osncore_osncore" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\osncore\osncore\group" name= "osncore"/>
+ </component>
+</module>
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_osncore_osncore_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\osncore\osncore\internal\test\group" name= "test"/>
+ </component>
+</module>
+
+
+
+<module name = "resourcepool">
+ <component name = "resourcepool">
+ <unit unitID = "mmuifw_resourcepool" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\resourcepool\group" name= "resourcepool"/>
+ </component>
+</module>
+
+<module name = "EUnit_tests">
+ <component name = "EUnit_tests">
+ <unit unitID = "mmuifw_resourcepool_internal_EUnit_tests" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\resourcepool\internal\EUnit_tests\group" name= "EUnit_tests"/>
+ </component>
+</module>
+
+<module name = "t_alfresourcepool">
+ <component name = "t_alfresourcepool">
+ <unit unitID = "mmuifw_resourcepool_internal_t_alfresourcepool" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\resourcepool\internal\t_alfresourcepool\group" name= "t_alfresourcepool"/>
+ </component>
+</module>
+<module name = "thememanagement">
+ <component name = "thememanagement">
+ <unit unitID = "mmuifw_thememanagement" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\thememanagement\group" name= "thememanagement"/>
+ </component>
+</module>
+
+<module name = "ThemeManager">
+ <component name = "ThemeManager">
+ <unit unitID = "mmuifw_thememanagement_ThemeManager" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\thememanagement\ThemeManager\group" name= "ThemeManager"/>
+ </component>
+</module>
+
+
+
+<module name = "FunctionalTest">
+ <component name = "FunctionalTest">
+ <unit unitID = "mmuifw_thememanagement_ThemeManager_internal_FunctionalTest" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\thememanagement\ThemeManager\internal\FunctionalTest\group" name= "FunctionalTest"/>
+ </component>
+</module>
+<module name = "TestAnimation">
+ <component name = "TestAnimation">
+ <unit unitID = "mmuifw_thememanagement_ThemeManager_internal_FunctionalTest_TestAnimation" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\thememanagement\ThemeManager\internal\FunctionalTest\TestAnimation\group" name= "TestAnimation"/>
+ </component>
+</module>
+<module name = "TestFrameImage">
+ <component name = "TestFrameImage">
+ <unit unitID = "mmuifw_thememanagement_ThemeManager_internal_FunctionalTest_TestFrameImage" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\thememanagement\ThemeManager\internal\FunctionalTest\TestFrameImage\group" name= "TestFrameImage"/>
+ </component>
+</module>
+<module name = "TestLocalization">
+ <component name = "TestLocalization">
+ <unit unitID = "mmuifw_thememanagement_ThemeManager_internal_FunctionalTest_TestLocalization" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\thememanagement\ThemeManager\internal\FunctionalTest\TestLocalization\group" name= "TestLocalization"/>
+ </component>
+</module>
+<module name = "TestSkinImage">
+ <component name = "TestSkinImage">
+ <unit unitID = "mmuifw_thememanagement_ThemeManager_internal_FunctionalTest_TestSkinImage" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\thememanagement\ThemeManager\internal\FunctionalTest\TestSkinImage\group" name= "TestSkinImage"/>
+ </component>
+</module>
+<module name = "testing">
+ <component name = "testing">
+ <unit unitID = "mmuifw_thememanagement_ThemeManager_internal_testing" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\thememanagement\ThemeManager\internal\testing\group" name= "testing"/>
+ </component>
+</module>
+
+
+
+
+
+
+<module name = "TestThemeManager">
+ <component name = "TestThemeManager">
+ <unit unitID = "mmuifw_thememanagement_ThemeManager_internal_TestThemeManager" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\thememanagement\ThemeManager\internal\TestThemeManager\group" name= "TestThemeManager"/>
+ </component>
+</module>
+<module name = "uimodel">
+ <component name = "uimodel">
+ <unit unitID = "mmuifw_uimodel" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\uimodel\group" name= "uimodel"/>
+ </component>
+</module>
+
+<module name = "node">
+ <component name = "node">
+ <unit unitID = "mmuifw_uimodel_node" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\uimodel\node\group" name= "node"/>
+ </component>
+</module>
+
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_uimodel_node_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\uimodel\node\internal\test\group" name= "test"/>
+ </component>
+</module>
+
+<module name = "nodeiterator">
+ <component name = "nodeiterator">
+ <unit unitID = "mmuifw_uimodel_nodeiterator" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\uimodel\nodeiterator\group" name= "nodeiterator"/>
+ </component>
+</module>
+
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_uimodel_nodeiterator_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\uimodel\nodeiterator\internal\test\group" name= "test"/>
+ </component>
+</module>
+
+<module name = "widgeteditors">
+ <component name = "widgeteditors">
+ <unit unitID = "mmuifw_widgeteditors" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgeteditors\group" name= "widgeteditors"/>
+ </component>
+</module>
+<module name = "alfeditors">
+ <component name = "alfeditors">
+ <unit unitID = "mmuifw_widgeteditors_alfeditors" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgeteditors\alfeditors\group" name= "alfeditors"/>
+ </component>
+</module>
+<module name = "alfeditortools">
+ <component name = "alfeditortools">
+ <unit unitID = "mmuifw_widgeteditors_alfeditortools" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgeteditors\alfeditortools\group" name= "alfeditortools"/>
+ </component>
+</module>
+
+<module name = "unittests">
+ <component name = "unittests">
+ <unit unitID = "mmuifw_widgeteditors_internal_unittests" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgeteditors\internal\unittests\group" name= "unittests"/>
+ </component>
+</module>
+
+
+
+
+
+
+<module name = "widgetmodel">
+ <component name = "widgetmodel">
+ <unit unitID = "mmuifw_widgetmodel" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgetmodel\group" name= "widgetmodel"/>
+ </component>
+</module>
+<module name = "alfcustomlayoutmanagers">
+ <component name = "alfcustomlayoutmanagers">
+ <unit unitID = "mmuifw_widgetmodel_alfcustomlayoutmanagers" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgetmodel\alfcustomlayoutmanagers\group" name= "alfcustomlayoutmanagers"/>
+ </component>
+</module>
+<module name = "alflctlayoutmanagers">
+ <component name = "alflctlayoutmanagers">
+ <unit unitID = "mmuifw_widgetmodel_alfcustomlayoutmanagers_alflctlayoutmanagers" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgetmodel\alfcustomlayoutmanagers\alflctlayoutmanagers\group" name= "alflctlayoutmanagers"/>
+ </component>
+</module>
+<module name = "alfwidgetfactory">
+ <component name = "alfwidgetfactory">
+ <unit unitID = "mmuifw_widgetmodel_alfwidgetfactory" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgetmodel\alfwidgetfactory\group" name= "alfwidgetfactory"/>
+ </component>
+</module>
+
+
+<module name = "Test">
+ <component name = "Test">
+ <unit unitID = "mmuifw_widgetmodel_alfwidgetfactory_internal_Test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgetmodel\alfwidgetfactory\internal\Test\group" name= "Test"/>
+ </component>
+</module>
+
+
+
+<module name = "alfwidgetmodel">
+ <component name = "alfwidgetmodel">
+ <unit unitID = "mmuifw_widgetmodel_alfwidgetmodel" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgetmodel\alfwidgetmodel\group" name= "alfwidgetmodel"/>
+ </component>
+</module>
+
+
+
+
+
+
+<module name = "Aakash">
+ <component name = "Aakash">
+ <unit unitID = "mmuifw_widgets_Aakash" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\group" name= "Aakash"/>
+ </component>
+</module>
+
+<module name = "common">
+ <component name = "common">
+ <unit unitID = "mmuifw_widgets_Aakash_common" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\common\group" name= "common"/>
+ </component>
+</module>
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_widgets_Aakash_common_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\common\internal\test\group" name= "test"/>
+ </component>
+</module>
+
+<module name = "mulsingleitemmodel">
+ <component name = "mulsingleitemmodel">
+ <unit unitID = "mmuifw_widgets_Aakash_common_mulsingleitemmodel" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\common\mulsingleitemmodel\group" name= "mulsingleitemmodel"/>
+ </component>
+</module>
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_widgets_Aakash_common_mulsingleitemmodel_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\common\mulsingleitemmodel\internal\test\group" name= "test"/>
+ </component>
+</module>
+
+
+<module name = "gesturehelper">
+ <component name = "gesturehelper">
+ <unit unitID = "mmuifw_widgets_Aakash_gesturehelper" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\gesturehelper\group" name= "gesturehelper"/>
+ </component>
+</module>
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_widgets_Aakash_gesturehelper_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\gesturehelper\test\group" name= "test"/>
+ </component>
+</module>
+<module name = "gesturetest">
+ <component name = "gesturetest">
+ <unit unitID = "mmuifw_widgets_Aakash_gesturehelper_test_gesturetest" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\gesturehelper\test\gesturetest\group" name= "gesturetest"/>
+ </component>
+</module>
+
+
+
+<module name = "configchanges">
+ <component name = "configchanges">
+ <unit unitID = "mmuifw_widgets_Aakash_internal_configchanges" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\internal\configchanges\group" name= "configchanges"/>
+ </component>
+</module>
+<module name = "mullogging">
+ <component name = "mullogging">
+ <unit unitID = "mmuifw_widgets_Aakash_mullogging" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mullogging\group" name= "mullogging"/>
+ </component>
+</module>
+<module name = "mulwidgets">
+ <component name = "mulwidgets">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\group" name= "mulwidgets"/>
+ </component>
+</module>
+
+
+<module name = "MMenuProto">
+ <component name = "MMenuProto">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_Internal_ProtoType_MMenuProto" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\Internal\ProtoType\MMenuProto\group" name= "MMenuProto"/>
+ </component>
+</module>
+<module name = "mulcoverflowwidget">
+ <component name = "mulcoverflowwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulcoverflowwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulcoverflowwidget\group" name= "mulcoverflowwidget"/>
+ </component>
+</module>
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulcoverflowwidget_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulcoverflowwidget\internal\test\group" name= "test"/>
+ </component>
+</module>
+<module name = "testcoverflowwidget">
+ <component name = "testcoverflowwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulcoverflowwidget_internal_test_testcoverflowwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulcoverflowwidget\internal\test\testcoverflowwidget\group" name= "testcoverflowwidget"/>
+ </component>
+</module>
+
+
+
+
+<module name = "mulgridwidget">
+ <component name = "mulgridwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulgridwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulgridwidget\group" name= "mulgridwidget"/>
+ </component>
+</module>
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulgridwidget_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulgridwidget\internal\test\group" name= "test"/>
+ </component>
+</module>
+<module name = "testgridwidget">
+ <component name = "testgridwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulgridwidget_internal_test_testgridwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulgridwidget\internal\test\testgridwidget\group" name= "testgridwidget"/>
+ </component>
+</module>
+
+
+
+
+<module name = "mullistwidget">
+ <component name = "mullistwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mullistwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mullistwidget\group" name= "mullistwidget"/>
+ </component>
+</module>
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mullistwidget_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mullistwidget\internal\test\group" name= "test"/>
+ </component>
+</module>
+<module name = "testlistwidget">
+ <component name = "testlistwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mullistwidget_internal_test_testlistwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mullistwidget\internal\test\testlistwidget\group" name= "testlistwidget"/>
+ </component>
+</module>
+
+
+
+
+<module name = "mulmetapanewidget">
+ <component name = "mulmetapanewidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulmetapanewidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulmetapanewidget\group" name= "mulmetapanewidget"/>
+ </component>
+</module>
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulmetapanewidget_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulmetapanewidget\internal\test\group" name= "test"/>
+ </component>
+</module>
+<module name = "testmetapanewidget">
+ <component name = "testmetapanewidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulmetapanewidget_internal_test_testmetapanewidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulmetapanewidget\internal\test\testmetapanewidget\group" name= "testmetapanewidget"/>
+ </component>
+</module>
+
+
+
+
+<module name = "mulsliderwidget">
+ <component name = "mulsliderwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulsliderwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulsliderwidget\group" name= "mulsliderwidget"/>
+ </component>
+</module>
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulsliderwidget_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulsliderwidget\internal\test\group" name= "test"/>
+ </component>
+</module>
+<module name = "testsliderwidget">
+ <component name = "testsliderwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulsliderwidget_internal_test_testsliderwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulsliderwidget\internal\test\testsliderwidget\group" name= "testsliderwidget"/>
+ </component>
+</module>
+
+
+
+
+
+
+
+
+
+
+<module name = "mulsoftkeywidget">
+ <component name = "mulsoftkeywidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulsoftkeywidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulsoftkeywidget\group" name= "mulsoftkeywidget"/>
+ </component>
+</module>
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulsoftkeywidget_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulsoftkeywidget\internal\test\group" name= "test"/>
+ </component>
+</module>
+<module name = "testsoftkeywidget">
+ <component name = "testsoftkeywidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_mulsoftkeywidget_internal_test_testsoftkeywidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\mulsoftkeywidget\internal\test\testsoftkeywidget\group" name= "testsoftkeywidget"/>
+ </component>
+</module>
+
+
+
+
+
+<module name = "multoolbarwidget">
+ <component name = "multoolbarwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_multoolbarwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\multoolbarwidget\group" name= "multoolbarwidget"/>
+ </component>
+</module>
+
+
+<module name = "test">
+ <component name = "test">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_multoolbarwidget_internal_test" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\multoolbarwidget\internal\test\group" name= "test"/>
+ </component>
+</module>
+<module name = "testtoolbarwidget">
+ <component name = "testtoolbarwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_multoolbarwidget_internal_test_testtoolbarwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\multoolbarwidget\internal\test\testtoolbarwidget\group" name= "testtoolbarwidget"/>
+ </component>
+</module>
+
+
+
+
+
+<module name = "recyling_protos">
+ <component name = "recyling_protos">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_recyling_protos" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\recyling_protos\group" name= "recyling_protos"/>
+ </component>
+</module>
+<module name = "common">
+ <component name = "common">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_recyling_protos_common" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\recyling_protos\common\group" name= "common"/>
+ </component>
+</module>
+<module name = "mulsingleitemmodel">
+ <component name = "mulsingleitemmodel">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_recyling_protos_common_mulsingleitemmodel" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\recyling_protos\common\mulsingleitemmodel\group" name= "mulsingleitemmodel"/>
+ </component>
+</module>
+<module name = "mullistwidget">
+ <component name = "mullistwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_recyling_protos_mullistwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\recyling_protos\mullistwidget\group" name= "mullistwidget"/>
+ </component>
+</module>
+
+
+
+<module name = "testlistwidget">
+ <component name = "testlistwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_recyling_protos_mullistwidget_internal_test_testlistwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\recyling_protos\mullistwidget\internal\test\testlistwidget\group" name= "testlistwidget"/>
+ </component>
+</module>
+<module name = "mul_listwidget_api">
+ <component name = "mul_listwidget_api">
+ <unit unitID = "mmuifw_widgets_Aakash_mulwidgets_recyling_protos_mul_listwidget_api" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\mulwidgets\recyling_protos\mul_listwidget_api\group" name= "mul_listwidget_api"/>
+ </component>
+</module>
+<module name = "performancetest">
+ <component name = "performancetest">
+ <unit unitID = "mmuifw_widgets_Aakash_performancetest" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\performancetest\group" name= "performancetest"/>
+ </component>
+</module>
+<module name = "avkonlist">
+ <component name = "avkonlist">
+ <unit unitID = "mmuifw_widgets_Aakash_performancetest_avkonlist" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\performancetest\avkonlist\group" name= "avkonlist"/>
+ </component>
+</module>
+
+<module name = "gridwidget">
+ <component name = "gridwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_performancetest_gridwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\performancetest\gridwidget\group" name= "gridwidget"/>
+ </component>
+</module>
+
+<module name = "listwidget">
+ <component name = "listwidget">
+ <unit unitID = "mmuifw_widgets_Aakash_performancetest_listwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\Aakash\performancetest\listwidget\group" name= "listwidget"/>
+ </component>
+</module>
+
+<module name = "alfwidgets">
+ <component name = "alfwidgets">
+ <unit unitID = "mmuifw_widgets_alfwidgets" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\alfwidgets\group" name= "alfwidgets"/>
+ </component>
+</module>
+<module name = "alfcontainerwidget">
+ <component name = "alfcontainerwidget">
+ <unit unitID = "mmuifw_widgets_alfwidgets_alfcontainerwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\alfwidgets\alfcontainerwidget\group" name= "alfcontainerwidget"/>
+ </component>
+</module>
+
+<module name = "alfscrollbarwidget">
+ <component name = "alfscrollbarwidget">
+ <unit unitID = "mmuifw_widgets_alfwidgets_alfscrollbarwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\alfwidgets\alfscrollbarwidget\group" name= "alfscrollbarwidget"/>
+ </component>
+</module>
+
+<module name = "alfviewwidget">
+ <component name = "alfviewwidget">
+ <unit unitID = "mmuifw_widgets_alfwidgets_alfviewwidget" mrp = "" filter = "not_build" bldFile = "&layer_real_source_path;\widgets\alfwidgets\alfviewwidget\group" name= "alfviewwidget"/>
+ </component>
+</module>
+
+</layer>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetfactory/group/alfwidgetfactory.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2006 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: Project definition file for project alfclient
+*
+*/
+
+#include <platform_paths.hrh>
+
+
+TARGET alfwidgetfactory.dll
+TARGETTYPE PLUGIN
+UID 0x10009d8d 0x10282329
+
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+SOURCEPATH ../src
+SOURCE alfwidgetfactoryplugin.cpp
+SOURCE alfwidgetfactory.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../../../inc
+
+MW_LAYER_SYSTEMINCLUDE
+
+OS_LAYER_LIBC_SYSTEMINCLUDE
+
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY libc.lib
+
+LIBRARY alfclient.lib
+LIBRARY alfwidgetutils.lib
+LIBRARY osncore.lib
+LIBRARY libstdcpp.lib
+#define ALF_LINK_STDCPP_DLL
+// following include must be after definition
+
+LIBRARY libpthread.lib
+
+LANG SC
+START RESOURCE 10282329.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET alfwidgetfactory.rsc
+#endif
+END
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetfactory/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2006 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: Build information file
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+alfwidgetfactory.mmp
+
+PRJ_TESTMMPFILES
+
+
+
+PRJ_TESTEXPORTS
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetfactory/inc/alfwidgetfactory.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 2007-2007 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: Widget factory interface implementation
+*
+*/
+
+
+#ifndef ALFWIDGETFACTORY_H
+#define ALFWIDGETFACTORY_H
+
+//OSN core includes
+#include <osn/alfptrvector.h>
+
+//Widget Utils Includes
+#include <alf/alffactorypluginloader.h>
+#include <alf/alftypes.h>
+
+//Widget Factory Includes
+#include <alf/ialfwidgetfactory.h>
+
+//Forward declarations
+class CAlfEnv;
+class CAlfDisplay;
+
+//Namespaces
+namespace duiuimodel
+{
+class DuiNode;
+}
+
+using namespace duiuimodel;
+using namespace osncore;
+
+namespace Alf
+ {
+//Forward declarations
+class IAlfWidgetControl;
+
+
+/**
+ * @class AlfWidgetFactory alfwidgetfactory.h "alf/alfwidgetfactory.h"
+ *
+ * Widget factory implementation.
+ *
+ * @lib alfwidgetfactory.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ * @interfaces IAlfWidgetFactory.
+ */
+class AlfWidgetFactory: public IAlfWidgetFactory
+ {
+public:
+ /**
+ * Destructor.
+ */
+ ~AlfWidgetFactory();
+
+ /**
+ * Explicit Parametrized Constructor
+ */
+ explicit AlfWidgetFactory(CAlfEnv& aEnv);
+
+public:
+
+ // From IAlfWidgetFactory
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ IAlfViewWidget* createViewWidget(
+ const char* aInstanceId,
+ int aControlGroupID,
+ DuiNode* aNode=0,
+ CAlfDisplay* aDisplay=0,
+ const char* aFilePath=0,
+ AlfCustomInitDataBase* aCustomData=0);
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ IAlfWidget* createWidget(
+ const char* aLoadId,
+ const char* aInstanceId,
+ IAlfContainerWidget& aContainerWidget,
+ DuiNode* aNode=0,
+ const char* aFilePath=0,
+ AlfCustomInitDataBase* aCustomData=0);
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ int destroyWidget(IAlfWidget* aWidget);
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ IAlfWidget* findWidget(const char* aWidgetName) const;
+
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ int appendWidget(IAlfWidget* aWidget);
+
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ IAlfModel* createModel(
+ const char* aLoadId,
+ AlfCustomInitDataBase* aCustomData=0);
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ IAlfWidgetControl* createControl(
+ const char* aLoadId,
+ const char* aInstanceId,
+ CAlfDisplay* aDisplay=0,
+ AlfCustomInitDataBase* aCustomData=0);
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ IAlfElement* createElement(
+ const char* aLoadId,
+ const char* aInstanceId,
+ IAlfWidgetControl& aControl,
+ DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0);
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ IAlfVisualTemplate* createVisualTemplate(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0);
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ IAlfWidgetEventHandler* createEventHandler(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0);
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ IAlfLayoutManager* createLayoutManager(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode=0,
+ AlfCustomInitDataBase* aCustomData=0);
+
+ /**
+ * @see IAlfWidgetFactory.
+ */
+ void registerCustomWidgetFactory(IAlfFactoryPlugin* aFactory);
+
+public: // From IAlfInterfaceBase
+
+ /**
+ * @see IAlfInterfaceBase.
+ */
+ IAlfInterfaceBase* makeInterface(const IfId& aType);
+
+private:
+ /**
+ * Not owned.
+ */
+ CAlfEnv& mAlfEnv;
+ /**
+ * Not owned.
+ */
+ AlfPtrVector<IAlfFactoryPlugin> mRegisteredFactoryList;
+
+ /**
+ * Owned.
+ */
+ AlfFactoryPluginLoader mFactoryPluginLoader;
+
+ /**
+ * List of the widgets added to the factory
+ *
+ * Owned
+ */
+ AlfPtrVector<IAlfWidget> mWidgetList;
+ };
+
+
+ } // namespace Alf
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetfactory/inc/alfwidgetfactoryplugin.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2007-2007 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: Widget factory interface
+*
+*/
+
+
+#ifndef ALFWIDGETFACTORYPLUGIN_H
+#define ALFWIDGETFACTORYPLUGIN_H
+
+#include <ecom/implementationproxy.h>
+#include <alf/ialffactoryplugin.h>
+#include <osn/osndefines.h>
+
+namespace Alf
+ {
+class AlfWidgetFactory;
+
+
+/**
+ * @class AlfWidgetFactoryPlugin AlfWidgetFactoryPlugin.h "alf/alfwidgetfactoryplugin.h"
+ *
+ * Plugin factory to create widget factory
+ *
+ *
+ * @lib alfwidgetfactory.dll
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfWidgetFactoryPlugin: public IAlfFactoryPlugin
+ {
+public:
+
+ /**
+ * Static Creator Method
+ * @since S60 5.0
+ * @return Interface pointer to factory plugin instance.
+ */
+ static IAlfFactoryPlugin* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfWidgetFactoryPlugin();
+
+public: // from MAlfPluginFactory
+ IAlfInterfaceBase* createProduct(const char* aProduct,void* aInitData);
+ int productCount()const;
+ const char* productInfo(int aIndex)const;
+public:
+ // from IAlfInterfaceBase
+ virtual IAlfInterfaceBase* makeInterface(const IfId& aType);
+private:
+ };
+ } // namespace
+
+// Exported factory function required by ECOM-framework
+OSN_IMPORT const TImplementationProxy* ImplementationGroupProxy(
+ TInt& aTableCount);
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetfactory/src/10282329.rss Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 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: File defines ecom related data for factory plugin.
+*
+*/
+
+#include <ecom/registryinfo.rh>
+
+RESOURCE REGISTRY_INFO theInfo
+{
+dll_uid = 0x10282329;
+interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = 0x11201113;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x10201256;
+ version_no = 1;
+ display_name = "";
+ default_data = "alfwidgetfactory";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetfactory/src/alfwidgetfactory.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1114 @@
+/*
+* Copyright (c) 2007-2007 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: Widget factory implementation file
+*
+*/
+
+
+//STL includes
+#include <string.h>
+
+//ALF Client includes
+#include <alf/alfenv.h>
+#include <alf/alfdisplay.h>
+
+//OSN core includes
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+
+//Widget Utils includes
+#include <alf/alfexceptions.h>
+
+//Widget factory includes
+#include <alf/ialffactoryplugin.h>
+
+//Widget Model includes
+#include <alf/ialfwidget.h>
+#include <alf/ialfmodel.h>
+#include <alf/ialfwidgetcontrol.h>
+#include <alf/ialfelement.h>
+#include "alf/ialfvisualtemplate.h"
+#include <alf/ialfwidgeteventhandler.h>
+#include <alf/ialflayoutmanager.h>
+
+//View Widget includes
+#include <alf/ialfviewwidget.h>
+
+//Local Includes
+#include "alfwidgetfactory.h"
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+static const char* const KViewWidgetProductId = "viewwidget";
+
+
+static IAlfViewWidget* createDefaultViewWidget(
+ const char* aInstanceId,
+ int aControlGroupID,
+ DuiNode* aNode,
+ CAlfDisplay& aDisplay,
+ CAlfEnv& aEnv,
+ IAlfFactoryPlugin& aFactoryPlugin,
+ const char* aFilePath,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfViewWidget* ret = 0;
+
+ // Create construction parameter structure.
+ AlfViewWidgetInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfViewWidgetInitData));
+
+ // Set the construction parameters.
+ init.mEnv = &aEnv;
+ init.mDisplay = &aDisplay;
+ init.mWidgetId = aInstanceId;
+ init.mControlGroupId = aControlGroupID;
+ init.mNode = aNode;
+ init.mFilePath = aFilePath;
+ init.mCustomData = aCustomData;
+
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(
+ KViewWidgetProductId, &init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfViewWidget>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfWidget* createDefaultWidget(
+ const char* aLoadId,
+ const char* aInstanceId,
+ IAlfContainerWidget& aContainerWidget,
+ DuiNode* aNode,
+ CAlfEnv& aEnv,
+ IAlfFactoryPlugin& aFactoryPlugin,
+ const char* aFilePath,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfWidget* ret = 0;
+
+ // Create construction parameter structure.
+ AlfWidgetInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfWidgetInitData));
+
+ // Set the construction parameters.
+ init.mEnv = &aEnv;
+ init.mContainerWidget = &aContainerWidget;
+ init.mWidgetId = const_cast<char*>(aInstanceId);
+ init.mNode = aNode;
+ init.mFilePath = aFilePath;
+ init.mCustomData = aCustomData;
+
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfWidget>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfModel* createDefaultModel(
+ const char* aLoadId,
+ IAlfFactoryPlugin& aFactoryPlugin,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfModel* ret = 0;
+
+ // Create construction parameter structure.
+ AlfModelInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfModelInitData));
+
+ // Set the construction parameters.
+ init.mCustomData = aCustomData;
+
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfModel>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfWidgetControl* createDefaultControl(
+ const char* aLoadId,
+ CAlfDisplay& aDisplay,
+ IAlfFactoryPlugin& aFactoryPlugin,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfWidgetControl* ret(0);
+
+ // Create construction parameter structure.
+ AlfWidgetControlInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfWidgetControlInitData));
+
+ // Set the construction parameters.
+ init.mDisplay = &aDisplay;
+ init.mCustomData = aCustomData;
+
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfWidgetControl>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfElement* createDefaultElement(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ IAlfWidgetControl& aControl,
+ IAlfFactoryPlugin& aFactoryPlugin,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfElement* ret(0);
+
+ // Create construction parameter structure.
+ AlfElementInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfElementInitData));
+
+ // Set the construction parameters.
+ init.mControl= &aControl;
+ init.mElementId = const_cast<char*>(aInstanceId);
+ init.mNode= aNode;
+ init.mCustomData = aCustomData;
+
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfElement>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfVisualTemplate* createDefaultVisualTemplate(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ IAlfFactoryPlugin& aFactoryPlugin,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfVisualTemplate* ret(0);
+
+ // Create construction parameter structure.
+ AlfVisualTemplateInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfVisualTemplateInitData));
+
+ // Set the construction parameters.
+ init.mVisualTemplateId = const_cast<char*>(aInstanceId);
+ init.mNode= aNode;
+ init.mCustomData = aCustomData;
+
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfVisualTemplate>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfWidgetEventHandler* createDefaultEventHandler(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ IAlfFactoryPlugin& aFactoryPlugin,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfWidgetEventHandler* ret(0);
+
+ // Create construction parameter structure.
+ AlfWidgetEventHandlerInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfWidgetEventHandlerInitData));
+
+ // Set the construction parameters.
+ init.mWidgetEventHandlerId = const_cast<char*>(aInstanceId);
+ init.mNode= aNode;
+ init.mCustomData = aCustomData;
+
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfWidgetEventHandler>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfLayoutManager* createDefaultLayoutManager(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ IAlfFactoryPlugin& aFactoryPlugin,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfLayoutManager* ret(0);
+
+ // Create construction parameter structure.
+ AlfLayoutManagerInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfLayoutManagerInitData));
+
+ // Set the construction parameters.
+ init.mLayoutManagerId = const_cast<char*>(aInstanceId);
+ init.mNode= aNode;
+ init.mCustomData = aCustomData;
+
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId, &init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfLayoutManager>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfViewWidget* createRegisteredViewWidget(
+ const char* aInstanceId,
+ int aControlGroupID,
+ DuiNode* aNode,
+ CAlfEnv& aEnv,
+ CAlfDisplay& aDisplay,
+ AlfPtrVector<IAlfFactoryPlugin>& aFactoryList,
+ const char* aFilePath,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfViewWidget* ret(0);
+ IAlfInterfaceBase* tmp(0);
+
+ // Create construction parameter structure.
+ AlfViewWidgetInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfViewWidgetInitData));
+
+ // Set the construction parameters.
+ init.mEnv = &aEnv;
+ init.mDisplay = &aDisplay;
+ init.mWidgetId = aInstanceId;
+ init.mControlGroupId = aControlGroupID;
+ init.mNode = aNode;
+ init.mFilePath = aFilePath;
+ init.mCustomData = aCustomData;
+
+ // Run through registered factories.
+ for(int i=0;i<aFactoryList.count()&&!ret;i++)
+ {
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ tmp = aFactoryList.at(i)->createProduct(KViewWidgetProductId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfViewWidget>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ tmp=0;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfWidget* createRegisteredWidget(
+ const char* aLoadId,
+ const char* aInstanceId,
+ IAlfContainerWidget& aContainerWidget,
+ DuiNode* aNode,
+ CAlfEnv& aEnv,
+ AlfPtrVector<IAlfFactoryPlugin>& aFactoryList,
+ const char* aFilePath,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfWidget* ret(0);
+ IAlfInterfaceBase* tmp(0);
+
+ // Create construction parameter structure.
+ AlfWidgetInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfWidgetInitData));
+
+ // Set the construction parameters.
+ init.mEnv = &aEnv;
+ init.mContainerWidget = &aContainerWidget;
+ init.mWidgetId = const_cast<char*>(aInstanceId);
+ init.mNode = aNode;
+ init.mFilePath= aFilePath;
+ init.mCustomData = aCustomData;
+
+ // Run through registered factories.
+ for(int i=0;i<aFactoryList.count()&&!ret;i++)
+ {
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ tmp = aFactoryList.at(i)->createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfWidget>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ tmp=0;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfModel* createRegisteredModel(
+ const char* aLoadId,
+ AlfPtrVector<IAlfFactoryPlugin>& aFactoryList,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfModel* ret(0);
+ IAlfInterfaceBase* tmp(0);
+
+ // Create construction parameter structure.
+ AlfModelInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfModelInitData));
+
+ // Set the construction parameters.
+ init.mCustomData = aCustomData;
+
+ // Run through registered factories.
+ for(int i=0;i<aFactoryList.count()&&!ret;i++)
+ {
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ tmp = aFactoryList.at(i)->createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfModel>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ tmp=0;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfWidgetControl* createRegisteredControl(
+ const char* aLoadId,
+ CAlfDisplay& aDisplay,
+ AlfPtrVector<IAlfFactoryPlugin>& aFactoryList,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfWidgetControl* ret(0);
+ IAlfInterfaceBase* tmp(0);
+
+
+ // Create construction parameter structure.
+ AlfWidgetControlInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfWidgetControlInitData));
+
+ // Set the construction parameters.
+ init.mDisplay = &aDisplay;
+ init.mCustomData = aCustomData;
+
+ // Run through registered factories.
+ for(int i=0;i<aFactoryList.count()&&!ret;i++)
+ {
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ tmp = aFactoryList.at(i)->createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfWidgetControl>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ tmp=0;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfElement* createRegisteredElement(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ IAlfWidgetControl& aControl,
+ AlfPtrVector<IAlfFactoryPlugin>& aFactoryList,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfElement* ret(0);
+ IAlfInterfaceBase* tmp(0);
+
+ // Create construction parameter structure.
+ AlfElementInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfElementInitData));
+
+ // Set the construction parameters.
+ init.mControl= &aControl;
+ init.mElementId = const_cast<char*>(aInstanceId);
+ init.mNode= aNode;
+ init.mCustomData = aCustomData;
+
+ // Run through registered factories.
+ for(int i=0;i<aFactoryList.count()&&!ret;i++)
+ {
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ tmp = aFactoryList.at(i)->createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfElement>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ tmp=0;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfVisualTemplate* createRegisteredVisualTemplate(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ AlfPtrVector<IAlfFactoryPlugin>& aFactoryList,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfVisualTemplate* ret(0);
+ IAlfInterfaceBase* tmp(0);
+
+ // Create construction parameter structure.
+ AlfVisualTemplateInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfVisualTemplateInitData));
+
+ // Set the construction parameters.
+ init.mVisualTemplateId = const_cast<char*>(aInstanceId);
+ init.mNode= aNode;
+ init.mCustomData = aCustomData;
+
+ // Run through registered factories.
+ for(int i=0;i<aFactoryList.count()&&!ret;i++)
+ {
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ tmp = aFactoryList.at(i)->createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfVisualTemplate>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ tmp=0;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfWidgetEventHandler* createRegisteredEventHandler(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ AlfPtrVector<IAlfFactoryPlugin>& aFactoryList,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfWidgetEventHandler* ret(0);
+ IAlfInterfaceBase* tmp(0);
+
+ // Create construction parameter structure.
+ AlfWidgetEventHandlerInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfWidgetEventHandlerInitData));
+
+ // Set the construction parameters.
+ init.mWidgetEventHandlerId = const_cast<char*>(aInstanceId);
+ init.mNode= aNode;
+ init.mCustomData = aCustomData;
+
+ // Run through registered factories.
+ for(int i=0;i<aFactoryList.count()&&!ret;i++)
+ {
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ tmp = aFactoryList.at(i)->createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfWidgetEventHandler>(
+ tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ tmp=0;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+static IAlfLayoutManager* createRegisteredLayoutManager(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ AlfPtrVector<IAlfFactoryPlugin>& aFactoryList,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfLayoutManager* ret(0);
+ IAlfInterfaceBase* tmp(0);
+
+ // Create construction parameter structure.
+ AlfLayoutManagerInitData init;
+
+ // Zero out the data in the construction structure.
+ memset(&init, 0, sizeof(AlfLayoutManagerInitData));
+
+ // Set the construction parameters.
+ init.mLayoutManagerId = const_cast<char*>(aInstanceId);
+ init.mNode= aNode;
+ init.mCustomData = aCustomData;
+
+ // Run through registered factories.
+ for(int i=0;i<aFactoryList.count()&&!ret;i++)
+ {
+ // Create a temporary factory product and typecast it to the correct
+ // interface.
+ tmp = aFactoryList.at(i)->createProduct(aLoadId,&init);
+ if(tmp)
+ {
+ // Object created. Attempt to typecast to correct interface.
+ ret = IAlfInterfaceBase::makeInterface<IAlfLayoutManager>(tmp);
+ if(!ret)
+ {
+ // Interface not found. Delete the temporary product.
+ delete tmp;
+ tmp=0;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+
+AlfWidgetFactory::AlfWidgetFactory(CAlfEnv& aAlfEnv):
+ mAlfEnv(aAlfEnv)
+ {
+ mWidgetList.setAutoDelete(true);
+ }
+
+AlfWidgetFactory::~AlfWidgetFactory()
+ {
+ mWidgetList.clear();
+ mRegisteredFactoryList.clear();
+ }
+
+IAlfViewWidget* AlfWidgetFactory::createViewWidget(
+ const char* aInstanceId,
+ int aControlGroupID,
+ DuiNode* aNode,
+ CAlfDisplay* aDisplay,
+ const char* aFilePath,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfViewWidget* ret(0);
+ auto_ptr<IAlfViewWidget> autoptr = auto_ptr<IAlfViewWidget>(0);
+
+ IAlfFactoryPlugin* factoryPlugin = mFactoryPluginLoader.loadFactoryPlugin(
+ KViewWidgetProductId);
+
+ CAlfDisplay* display = aDisplay;
+
+ //Check there is already a widget with the same instance ID.
+ if(findWidget(aInstanceId))
+ {
+ ALF_THROW(AlfWidgetException,EInvalidWidgetInstanceId,
+ "Instance ID same as an existing widget.")
+ }
+
+ //Both node and presentation declaration file handle cannot have
+ //non-null value at the same time.
+ if(aNode && aFilePath)
+ {
+ ALF_THROW(AlfWidgetException,EInvalidArgument,
+ "Both node & presentation declaration file handle cannot have non-null values at the same time")
+ }
+
+ if(!display)
+ {
+ if(mAlfEnv.DisplayCount() == 0)
+ {
+ // No display objects defined in the environment.
+ // Throw an exception.
+ ALF_THROW(AlfException, EDisplayNotFound,
+ "No display found from environment.Unable to associate a display with the view widget.");
+ }
+ display = &mAlfEnv.PrimaryDisplay();
+ }
+
+ // Try default factory first
+ if(factoryPlugin)
+ {
+ autoptr.reset(createDefaultViewWidget(
+ aInstanceId,aControlGroupID,aNode,*display,
+ mAlfEnv,*factoryPlugin,aFilePath,aCustomData));
+ }
+
+ // Then try registered factories
+ if(!autoptr.get())
+ {
+ autoptr.reset(createRegisteredViewWidget(
+ aInstanceId,aControlGroupID,aNode,
+ mAlfEnv,*display,mRegisteredFactoryList,
+ aFilePath,aCustomData));
+ }
+
+ if(autoptr.get() != 0)
+ {
+ // If trap occurs throw exception. Created widget will be automatically
+ // destroyed since it is in auto pointer.
+ TRAPD(err, appendWidget(
+ IAlfInterfaceBase::makeInterface<IAlfWidget>(autoptr.get())));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfException, err,
+ "Appending created widget to environment failed.");
+ }
+
+ // After succesfull call to AppendWidgetL we can release the autoptr.
+ ret = autoptr.release();
+ }
+
+ return ret;
+ }
+
+IAlfWidget* AlfWidgetFactory::createWidget(
+ const char* aLoadId,
+ const char* aInstanceId,
+ IAlfContainerWidget& aContainerWidget,
+ DuiNode* aNode,
+ const char* aFilePath,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfWidget* ret(0);
+ IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin(
+ aLoadId);
+
+ //Check there is already a widget with the same instance ID.
+ if(findWidget(aInstanceId))
+ {
+ ALF_THROW(AlfWidgetException,EInvalidWidgetInstanceId,
+ "Instance ID same as an existing widget.")
+ }
+
+ //Both node and presentation declaration file handle cannot have
+ //non-null value at the same time.
+ if(aNode && aFilePath)
+ {
+ ALF_THROW(AlfWidgetException,EInvalidArgument,
+ "Both node & presentation declaration file handle cannot have non-null values at the same time")
+ }
+
+ // Try first default factory
+ if(pluginFactory)
+ {
+ ret = createDefaultWidget(
+ aLoadId,aInstanceId,aContainerWidget,aNode,
+ mAlfEnv,*pluginFactory,aFilePath,aCustomData);
+ }
+
+ // Then try registered factories
+ if(!ret)
+ {
+ ret = createRegisteredWidget(
+ aLoadId,aInstanceId,aContainerWidget,aNode,mAlfEnv,
+ mRegisteredFactoryList,aFilePath,aCustomData);
+ }
+
+ if(ret)
+ {
+ TRAPD(err, appendWidget(ret));
+ if(err != KErrNone)
+ {
+ delete ret;
+ ALF_THROW(AlfException, err,
+ "Appending created widget to environment failed.");
+ }
+ }
+
+ return ret;
+ }
+
+int AlfWidgetFactory::destroyWidget(IAlfWidget* aWidget)
+ {
+ int ret = -1;
+ int widgetCount = mWidgetList.count();
+ for ( int i = 0; i < widgetCount; ++i )
+ {
+ if ( mWidgetList[i] == aWidget )
+ {
+ // remove and destroy the widget
+ mWidgetList.remove( i );
+ ret = 0;
+ break; ;
+ }
+ }
+ return ret;
+ }
+
+int AlfWidgetFactory::appendWidget(IAlfWidget* aWidget)
+ {
+ int ret = 0;
+ int widgetCount = mWidgetList.count();
+ for ( int i = 0; i < widgetCount; ++i )
+ {
+ if ( mWidgetList[i] == aWidget )
+ {
+ ret = -1;
+ break; ;
+ }
+ }
+ if(ret != -1 )
+ {
+ mWidgetList.resize( mWidgetList.count()+1);
+ mWidgetList.insert( mWidgetList.count(), aWidget );
+ }
+ return ret;
+ }
+
+IAlfWidget* AlfWidgetFactory::findWidget(const char* aWidgetName) const
+ {
+ IAlfWidget* ret(NULL);
+ int widgetCount = mWidgetList.count();
+ for(int i=0; i<widgetCount && !ret; i++)
+ {
+ const char* widgetName = mWidgetList[i]->widgetName();
+ if(!strcmp(widgetName,aWidgetName))
+ {
+ ret = mWidgetList[i];
+ }
+ }
+ return ret;
+ }
+
+IAlfModel* AlfWidgetFactory::createModel(
+ const char* aLoadId,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfModel* ret(0);
+ IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin(
+ aLoadId);
+
+ // Try first default factory
+ if(pluginFactory)
+ {
+ ret = createDefaultModel(aLoadId,*pluginFactory, aCustomData);
+ }
+
+ // Then try registered factories
+ if(!ret)
+ {
+ ret = createRegisteredModel(
+ aLoadId,mRegisteredFactoryList,aCustomData);
+ }
+
+ return ret;
+ }
+
+IAlfWidgetControl* AlfWidgetFactory::createControl(
+ const char* aLoadId,
+ const char* aInstanceId,
+ CAlfDisplay* aDisplay,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfWidgetControl* ret(0);
+ IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin(
+ aLoadId);
+ //Compiler warning removal. Left here for future use cases.
+ (void)aInstanceId;
+
+ CAlfDisplay* display = aDisplay;
+
+ if(!display)
+ {
+ display = &mAlfEnv.PrimaryDisplay();
+ }
+
+ // Try first default factory
+ if(pluginFactory)
+ {
+ ret = createDefaultControl(aLoadId,*display,*pluginFactory,aCustomData);
+ }
+
+ // Then try registered factories
+ if(!ret)
+ {
+ ret = createRegisteredControl(
+ aLoadId,*display,mRegisteredFactoryList,aCustomData);
+ }
+
+ return ret;
+ }
+
+IAlfElement* AlfWidgetFactory::createElement(
+ const char* aLoadId,
+ const char* aInstanceId,
+ IAlfWidgetControl& aControl,
+ DuiNode* aNode,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfElement* ret(0);
+ IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin(
+ aLoadId);
+
+ // Try first default factory
+ if (pluginFactory)
+ {
+ ret = createDefaultElement(
+ aLoadId,aInstanceId,aNode,aControl,
+ *pluginFactory,aCustomData);
+ }
+
+ // Then try registered factories
+ if(!ret)
+ {
+ ret = createRegisteredElement(
+ aLoadId,aInstanceId,aNode,aControl,
+ mRegisteredFactoryList,aCustomData);
+ }
+
+ return ret;
+ }
+
+IAlfVisualTemplate* AlfWidgetFactory::createVisualTemplate(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ AlfCustomInitDataBase* aCustomData )
+ {
+
+ IAlfVisualTemplate* ret(0);
+ IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin(
+ aLoadId);
+
+ // Try first default factory
+ if (pluginFactory)
+ {
+ ret = createDefaultVisualTemplate(
+ aLoadId,aInstanceId,aNode,*pluginFactory,aCustomData);
+ }
+
+ // Then try registered factories
+ if(!ret)
+ {
+ ret = createRegisteredVisualTemplate(
+ aLoadId,aInstanceId,aNode,
+ mRegisteredFactoryList,aCustomData);
+ }
+
+ return ret;
+ }
+
+IAlfWidgetEventHandler* AlfWidgetFactory::createEventHandler(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ AlfCustomInitDataBase* aCustomData )
+ {
+ IAlfWidgetEventHandler* ret(0);
+ IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin(
+ aLoadId);
+
+ // Try first default factory
+ if (pluginFactory)
+ {
+ ret = createDefaultEventHandler(
+ aLoadId,aInstanceId,aNode,*pluginFactory,aCustomData);
+ }
+
+ // Then try registered factories
+ if(!ret)
+ {
+ ret = createRegisteredEventHandler(
+ aLoadId,aInstanceId,aNode,
+ mRegisteredFactoryList,aCustomData);
+ }
+
+ return ret;
+ }
+
+IAlfLayoutManager* AlfWidgetFactory::createLayoutManager(
+ const char* aLoadId,
+ const char* aInstanceId,
+ DuiNode* aNode,
+ AlfCustomInitDataBase* aCustomData)
+ {
+ IAlfLayoutManager* ret(0);
+ IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin(
+ aLoadId);
+
+ // Try first default factory
+ if (pluginFactory)
+ {
+ ret = createDefaultLayoutManager(
+ aLoadId,aInstanceId,aNode,*pluginFactory,aCustomData);
+ }
+
+ // Then try registered factories
+ if(!ret)
+ {
+ ret = createRegisteredLayoutManager(
+ aLoadId,aInstanceId,aNode,
+ mRegisteredFactoryList,aCustomData);
+ }
+
+ return ret;
+ }
+
+void AlfWidgetFactory::registerCustomWidgetFactory(
+ IAlfFactoryPlugin* aFactory)
+ {
+ mRegisteredFactoryList.resize(mRegisteredFactoryList.count()+1);
+ mRegisteredFactoryList.insert(mRegisteredFactoryList.count(),aFactory);
+ }
+
+IAlfInterfaceBase* AlfWidgetFactory::makeInterface(const IfId& aType)
+ {
+ if ( !strcmp(aType.mImplementationId,
+ IAlfWidgetFactory::type().mImplementationId) )
+ {
+ return static_cast<IAlfWidgetFactory*>(this);
+ }
+
+ return 0;
+ }
+ } // namespace Alf
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetfactory/src/alfwidgetfactoryplugin.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2009 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: File imeplemets the widgetfactory for interfaces.
+*
+*/
+
+
+//Symbian includes
+#include <ecom/ecom.h>
+
+//Alfred client includes
+#include <alf/alfenv.h>
+
+//OSN core includes
+#include <osn/ustring.h>
+#include <osn/osnnew.h>
+#include <osn/osncommon.h>
+
+//Widget utils includes
+#include <alf/alftypes.h>
+
+//Local includes
+#include "alfwidgetfactoryplugin.h"
+#include "alfwidgetfactory.h"
+
+//Namespaces
+using namespace Alf;
+using namespace osncore;
+
+
+namespace Alf
+ {
+
+const TInt KWidgetFactoryPluginUid = {0x10201256};
+const int KProductCount = 1;
+static const char* const KAlfWidgetFactory = "alfwidgetfactory";
+
+
+IAlfFactoryPlugin* AlfWidgetFactoryPlugin::NewL()
+ {
+ // Must use (ELeave), because ECOM won't undestand bad_alloc
+ return new(ELeave)AlfWidgetFactoryPlugin;
+ }
+
+AlfWidgetFactoryPlugin::~AlfWidgetFactoryPlugin()
+ {
+ }
+
+IAlfInterfaceBase* AlfWidgetFactoryPlugin::createProduct(
+ const char* aProduct,
+ void* aInitData)
+ {
+ (void) aProduct; //Compiler Warning removal.
+
+ CAlfEnv* env = reinterpret_cast<CAlfEnv*>(aInitData);
+ AlfWidgetFactory* widgetFactory( new( EMM ) AlfWidgetFactory(*env) );
+ // This basically returns the widgetFactory object.
+ // The ownership of that object is transferred to the caller.
+ return widgetFactory->makeInterface(IAlfWidgetFactory::type());
+ }
+
+IAlfInterfaceBase* AlfWidgetFactoryPlugin::makeInterface(const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ if(param == UString(IAlfFactoryPlugin::type().mImplementationId))
+ {
+ return static_cast<IAlfFactoryPlugin*>(this);
+ }
+ return NULL;
+ }
+
+int AlfWidgetFactoryPlugin::productCount()const
+ {
+ return KProductCount;
+ }
+
+const char* AlfWidgetFactoryPlugin::productInfo(int aIndex)const
+ {
+ if(aIndex == 0)
+ {
+ return KAlfWidgetFactory;
+ }
+ return 0;
+ }
+
+ } // namespace Alf
+
+
+
+const TImplementationProxy ImplementationTable[] =
+ {
+ #ifdef __EABI__
+ IMPLEMENTATION_PROXY_ENTRY(
+ KWidgetFactoryPluginUid,
+ AlfWidgetFactoryPlugin::NewL),
+ #else
+ {{KWidgetFactoryPluginUid}, AlfWidgetFactoryPlugin::NewL}
+ #endif
+ };
+
+OSN_EXPORT const TImplementationProxy* ImplementationGroupProxy(
+ TInt& aTableCount)
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+ return ImplementationTable;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/bwins/alfwidgetmodelu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,468 @@
+EXPORTS
+ ?makeInterface@AlfFlowLayoutManager@Alf@@UAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 1 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfFlowLayoutManager::makeInterface(struct Alf::IfId const &)
+ ?isValueSet@AlfAttribute@Alf@@QBE_NXZ @ 2 NONAME ; bool Alf::AlfAttribute::isValueSet(void) const
+ ?getTargetValue@AlfAttribute@Alf@@QBEPAVAlfAttributeValueType@2@I@Z @ 3 NONAME ; class Alf::AlfAttributeValueType * Alf::AlfAttribute::getTargetValue(unsigned int) const
+ ??0AlfCurvePathLayoutAttributeSetter@Alf@@QAE@XZ @ 4 NONAME ; Alf::AlfCurvePathLayoutAttributeSetter::AlfCurvePathLayoutAttributeSetter(void)
+ ?setTime@AlfAttribute@Alf@@QAEXH@Z @ 5 NONAME ; void Alf::AlfAttribute::setTime(int)
+ ?replaceItem@AlfMap@Alf@@UAEXIPAVIAlfVariantType@2@@Z @ 6 NONAME ; void Alf::AlfMap::replaceItem(unsigned int, class Alf::IAlfVariantType *)
+ ?checkState@CAlfWidgetControl@Alf@@UBE_NI@Z @ 7 NONAME ; bool Alf::CAlfWidgetControl::checkState(unsigned int) const
+ ?getLayout@AlfLayoutManager@Alf@@UBEAAVCAlfLayout@@XZ @ 8 NONAME ; class CAlfLayout & Alf::AlfLayoutManager::getLayout(void) const
+ ?findEventHandler@CAlfWidgetControl@Alf@@UAEPAVIAlfWidgetEventHandler@2@ABVTAlfEvent@@@Z @ 9 NONAME ; class Alf::IAlfWidgetEventHandler * Alf::CAlfWidgetControl::findEventHandler(class TAlfEvent const &)
+ ?numContainerIndices@AlfModelOperation@Alf@@QBEHXZ @ 10 NONAME ; int Alf::AlfModelOperation::numContainerIndices(void) const
+ ??0AlfContainer@Alf@@QAE@XZ @ 11 NONAME ; Alf::AlfContainer::AlfContainer(void)
+ ?index@AlfModelOperation@Alf@@QBEHXZ @ 12 NONAME ; int Alf::AlfModelOperation::index(void) const
+ ?childRemoved@AlfLayoutManager@Alf@@UAEXPAVCAlfWidgetControl@2@@Z @ 13 NONAME ; void Alf::AlfLayoutManager::childRemoved(class Alf::CAlfWidgetControl *)
+ ?addCustomInput@AlfWidgetEventHandler@Alf@@QAEXH_NH@Z @ 14 NONAME ; void Alf::AlfWidgetEventHandler::addCustomInput(int, bool, int)
+ ?map@AlfMap@Alf@@UAEPAVIAlfMap@2@XZ @ 15 NONAME ; class Alf::IAlfMap * Alf::AlfMap::map(void)
+ ?setLayoutType@AlfVisualTemplate@Alf@@UAEXW4TAlfLayoutType@@@Z @ 16 NONAME ; void Alf::AlfVisualTemplate::setLayoutType(enum TAlfLayoutType)
+ ??1CAlfWidgetControl@Alf@@UAE@XZ @ 17 NONAME ; Alf::CAlfWidgetControl::~CAlfWidgetControl(void)
+ ?widgetCount@AlfWidget@Alf@@UBEHXZ @ 18 NONAME ; int Alf::AlfWidget::widgetCount(void) const
+ ?integer@AlfBranch@Alf@@UBEHXZ @ 19 NONAME ; int Alf::AlfBranch::integer(void) const
+ ?container@AlfBranch@Alf@@UAEPAVIAlfContainer@2@XZ @ 20 NONAME ; class Alf::IAlfContainer * Alf::AlfBranch::container(void)
+ ?setMappingFunctionId@AlfAttribute@Alf@@QAEXH@Z @ 21 NONAME ; void Alf::AlfAttribute::setMappingFunctionId(int)
+ ?removeItem@AlfMap@Alf@@UAEXI@Z @ 22 NONAME ; void Alf::AlfMap::removeItem(unsigned int)
+ ?handleFocusPrevious@CAlfWidgetControl@Alf@@IAE_NXZ @ 23 NONAME ; bool Alf::CAlfWidgetControl::handleFocusPrevious(void)
+ ?createAndSendCommands@AlfCommonVisualAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 24 NONAME ; void Alf::AlfCommonVisualAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?set@AlfVariantType@Alf@@UAEXAAVIAlfVariantType@2@@Z @ 25 NONAME ; void Alf::AlfVariantType::set(class Alf::IAlfVariantType &)
+ ?parentElementDataId@CAlfWidgetControl@Alf@@UAEIABVIAlfElement@2@I@Z @ 26 NONAME ; unsigned int Alf::CAlfWidgetControl::parentElementDataId(class Alf::IAlfElement const &, unsigned int)
+ ?makeInterface@AlfLayoutManager@Alf@@UAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 27 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfLayoutManager::makeInterface(struct Alf::IfId const &)
+ ?addPointerInput@AlfWidgetEventHandler@Alf@@QAEXPBD0W4WidgetPointerEvent@2@@Z @ 28 NONAME ; void Alf::AlfWidgetEventHandler::addPointerInput(char const *, char const *, enum Alf::WidgetPointerEvent)
+ ?item@AlfMap@Alf@@UAEPAVIAlfVariantType@2@ABVUString@osncore@@@Z @ 29 NONAME ; class Alf::IAlfVariantType * Alf::AlfMap::item(class osncore::UString const &)
+ ?branch@AlfMap@Alf@@UAEPAVIAlfBranch@2@XZ @ 30 NONAME ; class Alf::IAlfBranch * Alf::AlfMap::branch(void)
+ ?removeElement@CAlfWidgetControl@Alf@@UAEXABVIAlfElement@2@@Z @ 31 NONAME ; void Alf::CAlfWidgetControl::removeElement(class Alf::IAlfElement const &)
+ ?childRemoved@AlfAnchorLayoutManager@Alf@@UAEXPAVCAlfWidgetControl@2@@Z @ 32 NONAME ; void Alf::AlfAnchorLayoutManager::childRemoved(class Alf::CAlfWidgetControl *)
+ ?integer@AlfMap@Alf@@UBEHXZ @ 33 NONAME ; int Alf::AlfMap::integer(void) const
+ ?getAttribute@AlfAttributeContainer@Alf@@QBEAAVAlfAttribute@2@I@Z @ 34 NONAME ; class Alf::AlfAttribute & Alf::AlfAttributeContainer::getAttribute(unsigned int) const
+ ?addItem@AlfMap@Alf@@UAEXPAVIAlfVariantType@2@ABVUString@osncore@@@Z @ 35 NONAME ; void Alf::AlfMap::addItem(class Alf::IAlfVariantType *, class osncore::UString const &)
+ ??1AlfVisualTemplate@Alf@@UAE@XZ @ 36 NONAME ; Alf::AlfVisualTemplate::~AlfVisualTemplate(void)
+ ?removeVisualTree@AlfElement@Alf@@UAEXAAVIAlfBranch@2@HI@Z @ 37 NONAME ; void Alf::AlfElement::removeVisualTree(class Alf::IAlfBranch &, int, unsigned int)
+ ?makeInterface@CAlfWidgetControl@Alf@@UAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 38 NONAME ; class Alf::IAlfInterfaceBase * Alf::CAlfWidgetControl::makeInterface(struct Alf::IfId const &)
+ ?childTemplate@AlfVisualTemplate@Alf@@UBEAAVIAlfVisualTemplate@2@H@Z @ 39 NONAME ; class Alf::IAlfVisualTemplate & Alf::AlfVisualTemplate::childTemplate(int) const
+ ?model@AlfWidget@Alf@@UAEPAVIAlfModel@2@XZ @ 40 NONAME ; class Alf::IAlfModel * Alf::AlfWidget::model(void)
+ ?replaceVisualTree@AlfElement@Alf@@UAEXAAVIAlfVariantType@2@II@Z @ 41 NONAME ; void Alf::AlfElement::replaceVisualTree(class Alf::IAlfVariantType &, unsigned int, unsigned int)
+ ?customData@AlfBranch@Alf@@UAEPAVIAlfModelBase@2@XZ @ 42 NONAME ; class Alf::IAlfModelBase * Alf::AlfBranch::customData(void)
+ ?addWidgetEventOutputSignalSubscriber@AlfWidgetEventHandler@Alf@@QAEXAAVIAlfEventOutputSignalSubscriber@2@@Z @ 43 NONAME ; void Alf::AlfWidgetEventHandler::addWidgetEventOutputSignalSubscriber(class Alf::IAlfEventOutputSignalSubscriber &)
+ ?string@AlfBranch@Alf@@UBEABVUString@osncore@@XZ @ 44 NONAME ; class osncore::UString const & Alf::AlfBranch::string(void) const
+ ?setDelay@AlfAttribute@Alf@@QAEXH@Z @ 45 NONAME ; void Alf::AlfAttribute::setDelay(int)
+ ??0AlfVariantType@Alf@@QAE@ABH@Z @ 46 NONAME ; Alf::AlfVariantType::AlfVariantType(int const &)
+ ??0AlfAnchorLayoutManager@Alf@@QAE@XZ @ 47 NONAME ; Alf::AlfAnchorLayoutManager::AlfAnchorLayoutManager(void)
+ ??1AlfDeckLayoutAttributeSetter@Alf@@UAE@XZ @ 48 NONAME ; Alf::AlfDeckLayoutAttributeSetter::~AlfDeckLayoutAttributeSetter(void)
+ ?uinteger@AlfContainer@Alf@@UBEIXZ @ 49 NONAME ; unsigned int Alf::AlfContainer::uinteger(void) const
+ ?makeInterface@AlfModel@Alf@@UAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 50 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfModel::makeInterface(struct Alf::IfId const &)
+ ??0AlfFlowLayoutAttributeSetter@Alf@@QAE@XZ @ 51 NONAME ; Alf::AlfFlowLayoutAttributeSetter::AlfFlowLayoutAttributeSetter(void)
+ ?getAttributeByName@AlfAttributeContainer@Alf@@QBEAAVAlfAttribute@2@PBD@Z @ 52 NONAME ; class Alf::AlfAttribute & Alf::AlfAttributeContainer::getAttributeByName(char const *) const
+ ?string@AlfContainer@Alf@@UBEABVUString@osncore@@XZ @ 53 NONAME ; class osncore::UString const & Alf::AlfContainer::string(void) const
+ ??1AlfAnimationOutput@Alf@@QAE@XZ @ 54 NONAME ; Alf::AlfAnimationOutput::~AlfAnimationOutput(void)
+ ?attributeCount@AlfAttributeContainer@Alf@@QBEIXZ @ 55 NONAME ; unsigned int Alf::AlfAttributeContainer::attributeCount(void) const
+ ?type@AlfAttributeValueType@Alf@@UBE?AW4Type@12@XZ @ 56 NONAME ; enum Alf::AlfAttributeValueType::Type Alf::AlfAttributeValueType::type(void) const
+ ?setEventHandlerData@AlfRecyclingGridElement@Alf@@UAEXABUAlfWidgetEventHandlerInitData@2@@Z @ 57 NONAME ; void Alf::AlfRecyclingGridElement::setEventHandlerData(struct Alf::AlfWidgetEventHandlerInitData const &)
+ ??0AlfElement@Alf@@QAE@AAVCAlfWidgetControl@1@PBD@Z @ 58 NONAME ; Alf::AlfElement::AlfElement(class Alf::CAlfWidgetControl &, char const *)
+ ?real@AlfMap@Alf@@UBENXZ @ 59 NONAME ; double Alf::AlfMap::real(void) const
+ ?setData@AlfModel@Alf@@UAEXPAVIAlfVariantType@2@@Z @ 60 NONAME ; void Alf::AlfModel::setData(class Alf::IAlfVariantType *)
+ ?addKeyInput@AlfWidgetEventHandler@Alf@@QAEXHW4EventTypeFlags@2@I@Z @ 61 NONAME ; void Alf::AlfWidgetEventHandler::addKeyInput(int, enum Alf::EventTypeFlags, unsigned int)
+ ?numAttributeSetters@AlfVisualTemplate@Alf@@UBEHXZ @ 62 NONAME ; int Alf::AlfVisualTemplate::numAttributeSetters(void) const
+ ??0AlfCommonLayoutAttributeSetter@Alf@@QAE@XZ @ 63 NONAME ; Alf::AlfCommonLayoutAttributeSetter::AlfCommonLayoutAttributeSetter(void)
+ ??1AlfMap@Alf@@UAE@XZ @ 64 NONAME ; Alf::AlfMap::~AlfMap(void)
+ ??0AlfAttribute@Alf@@QAE@XZ @ 65 NONAME ; Alf::AlfAttribute::AlfAttribute(void)
+ ?createVisualTree@AlfRecyclingGridElement@Alf@@UAEPAVCAlfVisual@@AAVIAlfVariantType@2@IPAVCAlfLayout@@H@Z @ 66 NONAME ; class CAlfVisual * Alf::AlfRecyclingGridElement::createVisualTree(class Alf::IAlfVariantType &, unsigned int, class CAlfLayout *, int)
+ ?removeWidget@AlfWidget@Alf@@UAEXH@Z @ 67 NONAME ; void Alf::AlfWidget::removeWidget(int)
+ ?eventHandler@CAlfWidgetControl@Alf@@UAEAAVIAlfWidgetEventHandler@2@H@Z @ 68 NONAME ; class Alf::IAlfWidgetEventHandler & Alf::CAlfWidgetControl::eventHandler(int)
+ ?removeChildVisualTree@AlfRecyclingGridElement@Alf@@UAEXPAVIAlfElement@2@AAVIAlfBranch@2@HI@Z @ 69 NONAME ; void Alf::AlfRecyclingGridElement::removeChildVisualTree(class Alf::IAlfElement *, class Alf::IAlfBranch &, int, unsigned int)
+ ?createCommand@AlfViewportLayoutAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 70 NONAME ; class TAlfCommand * Alf::AlfViewportLayoutAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?addWidgetAttributeInput@AlfWidgetEventHandler@Alf@@QAEXAAVUString@osncore@@PAVAlfAttributeValueType@2@PBD@Z @ 71 NONAME ; void Alf::AlfWidgetEventHandler::addWidgetAttributeInput(class osncore::UString &, class Alf::AlfAttributeValueType *, char const *)
+ ??1AlfAnchorLayoutManager@Alf@@UAE@XZ @ 72 NONAME ; Alf::AlfAnchorLayoutManager::~AlfAnchorLayoutManager(void)
+ ?createChildVisualTree@AlfElement@Alf@@UAEXPAVIAlfElement@2@AAVIAlfVariantType@2@AAVIAlfBranch@2@HI@Z @ 73 NONAME ; void Alf::AlfElement::createChildVisualTree(class Alf::IAlfElement *, class Alf::IAlfVariantType &, class Alf::IAlfBranch &, int, unsigned int)
+ ?map@AlfVariantType@Alf@@UAEPAVIAlfMap@2@XZ @ 74 NONAME ; class Alf::IAlfMap * Alf::AlfVariantType::map(void)
+ ?container@AlfContainer@Alf@@UAEPAVIAlfContainer@2@XZ @ 75 NONAME ; class Alf::IAlfContainer * Alf::AlfContainer::container(void)
+ ?dataID@AlfElement@Alf@@UBEIABVCAlfVisual@@@Z @ 76 NONAME ; unsigned int Alf::AlfElement::dataID(class CAlfVisual const &) const
+ ?setSelectChildMode@AlfVisualTemplate@Alf@@UAEX_NABVUString@osncore@@@Z @ 77 NONAME ; void Alf::AlfVisualTemplate::setSelectChildMode(bool, class osncore::UString const &)
+ ?createVisualTree@AlfElement@Alf@@UAEPAVCAlfVisual@@AAVIAlfVariantType@2@IPAVCAlfLayout@@H@Z @ 78 NONAME ; class CAlfVisual * Alf::AlfElement::createVisualTree(class Alf::IAlfVariantType &, unsigned int, class CAlfLayout *, int)
+ ??0AlfModel@Alf@@QAE@PAVIAlfVariantType@1@@Z @ 79 NONAME ; Alf::AlfModel::AlfModel(class Alf::IAlfVariantType *)
+ ?widget@CAlfWidgetControl@Alf@@UAEPAVAlfWidget@2@XZ @ 80 NONAME ; class Alf::AlfWidget * Alf::CAlfWidgetControl::widget(void)
+ ?owner@AlfLayoutManager@Alf@@QBEAAVCAlfWidgetControl@2@XZ @ 81 NONAME ; class Alf::CAlfWidgetControl & Alf::AlfLayoutManager::owner(void) const
+ ?updateChildLayout@AlfGridLayoutManager@Alf@@UAEXPAVCAlfWidgetControl@2@@Z @ 82 NONAME ; void Alf::AlfGridLayoutManager::updateChildLayout(class Alf::CAlfWidgetControl *)
+ ?setAttributeValue@AlfMeshVisualAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 83 NONAME ; void Alf::AlfMeshVisualAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ?makeInterface@AlfWidget@Alf@@UAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 84 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfWidget::makeInterface(struct Alf::IfId const &)
+ ?notifyModelChanged@AlfModel@Alf@@QAEXXZ @ 85 NONAME ; void Alf::AlfModel::notifyModelChanged(void)
+ ?resourcePool@AlfWidgetEnvExtension@Alf@@SAAAVResourcePool@2@AAVCAlfEnv@@@Z @ 86 NONAME ; class Alf::ResourcePool & Alf::AlfWidgetEnvExtension::resourcePool(class CAlfEnv &)
+ ??1AlfBranch@Alf@@UAE@XZ @ 87 NONAME ; Alf::AlfBranch::~AlfBranch(void)
+ ?getDataField@AlfAttribute@Alf@@QBEPBDXZ @ 88 NONAME ; char const * Alf::AlfAttribute::getDataField(void) const
+ ?createAndSendCommands@AlfMeshVisualAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 89 NONAME ; void Alf::AlfMeshVisualAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?numChildTemplates@AlfVisualTemplate@Alf@@UBEHXZ @ 90 NONAME ; int Alf::AlfVisualTemplate::numChildTemplates(void) const
+ ?attributeSetter@AlfVisualTemplate@Alf@@UBEAAVIAlfAttributeSetter@2@H@Z @ 91 NONAME ; class Alf::IAlfAttributeSetter & Alf::AlfVisualTemplate::attributeSetter(int) const
+ ??0AlfLineVisualAttributeSetter@Alf@@QAE@XZ @ 92 NONAME ; Alf::AlfLineVisualAttributeSetter::AlfLineVisualAttributeSetter(void)
+ ?branch@AlfContainer@Alf@@UAEPAVIAlfBranch@2@XZ @ 93 NONAME ; class Alf::IAlfBranch * Alf::AlfContainer::branch(void)
+ ?setState@CAlfWidgetControl@Alf@@UAEXI@Z @ 94 NONAME ; void Alf::CAlfWidgetControl::setState(unsigned int)
+ ?rgbValue@AlfAttributeValueType@Alf@@UBEMXZ @ 95 NONAME ; float Alf::AlfAttributeValueType::rgbValue(void) const
+ ?string@AlfVariantType@Alf@@UBEABVUString@osncore@@XZ @ 96 NONAME ; class osncore::UString const & Alf::AlfVariantType::string(void) const
+ ??1AlfModelOperation@Alf@@QAE@XZ @ 97 NONAME ; Alf::AlfModelOperation::~AlfModelOperation(void)
+ ??0AlfVisualTemplate@Alf@@IAE@W4TAlfVisualType@@@Z @ 98 NONAME ; Alf::AlfVisualTemplate::AlfVisualTemplate(enum TAlfVisualType)
+ ?unit@AlfAttributeValueType@Alf@@UBE?AW4TAlfUnit@@XZ @ 99 NONAME ; enum TAlfUnit Alf::AlfAttributeValueType::unit(void) const
+ ?removeItem@AlfContainer@Alf@@UAEXI@Z @ 100 NONAME ; void Alf::AlfContainer::removeItem(unsigned int)
+ ?addWidget@AlfWidget@Alf@@UAEXAAVIAlfWidget@2@@Z @ 101 NONAME ; void Alf::AlfWidget::addWidget(class Alf::IAlfWidget &)
+ ?removeData@AlfModel@Alf@@UAEXHPAH@Z @ 102 NONAME ; void Alf::AlfModel::removeData(int, int *)
+ ?addElement@CAlfWidgetControl@Alf@@UAEXPAVIAlfElement@2@@Z @ 103 NONAME ; void Alf::CAlfWidgetControl::addElement(class Alf::IAlfElement *)
+ ??0AlfWidget@Alf@@QAE@PBD@Z @ 104 NONAME ; Alf::AlfWidget::AlfWidget(char const *)
+ ??1AlfFlowLayoutAttributeSetter@Alf@@UAE@XZ @ 105 NONAME ; Alf::AlfFlowLayoutAttributeSetter::~AlfFlowLayoutAttributeSetter(void)
+ ?sort@AlfBranch@Alf@@UAEXABVIAlfSortFunction@2@@Z @ 106 NONAME ; void Alf::AlfBranch::sort(class Alf::IAlfSortFunction const &)
+ ?doUpdateChildLayout@AlfAnchorLayoutManager@Alf@@MAEXPAVCAlfWidgetControl@2@@Z @ 107 NONAME ; void Alf::AlfAnchorLayoutManager::doUpdateChildLayout(class Alf::CAlfWidgetControl *)
+ ?integer@AlfVariantType@Alf@@UBEHXZ @ 108 NONAME ; int Alf::AlfVariantType::integer(void) const
+ ?createAndSendCommands@AlfViewportLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 109 NONAME ; void Alf::AlfViewportLayoutAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?nextFocusableControl@CAlfWidgetControl@Alf@@AAEPAV12@PAV12@@Z @ 110 NONAME ; class Alf::CAlfWidgetControl * Alf::CAlfWidgetControl::nextFocusableControl(class Alf::CAlfWidgetControl *)
+ ?getLayoutPreferences@AlfLayoutManager@Alf@@IBEPBVIAlfLayoutPreferences@2@PAVCAlfWidgetControl@2@@Z @ 111 NONAME ; class Alf::IAlfLayoutPreferences const * Alf::AlfLayoutManager::getLayoutPreferences(class Alf::CAlfWidgetControl *) const
+ ?findVisual@AlfElement@Alf@@QAEPAVCAlfVisual@@I@Z @ 112 NONAME ; class CAlfVisual * Alf::AlfElement::findVisual(unsigned int)
+ ?removeAndDestroyElement@CAlfWidgetControl@Alf@@UAEXABVIAlfElement@2@@Z @ 113 NONAME ; void Alf::CAlfWidgetControl::removeAndDestroyElement(class Alf::IAlfElement const &)
+ ?setSourceValue@AlfAttribute@Alf@@QAEXPAVAlfAttributeValueType@2@I@Z @ 114 NONAME ; void Alf::AlfAttribute::setSourceValue(class Alf::AlfAttributeValueType *, unsigned int)
+ ??0AlfVariantType@Alf@@QAE@ABN@Z @ 115 NONAME ; Alf::AlfVariantType::AlfVariantType(double const &)
+ ??1AlfCommonVisualAttributeSetter@Alf@@UAE@XZ @ 116 NONAME ; Alf::AlfCommonVisualAttributeSetter::~AlfCommonVisualAttributeSetter(void)
+ ??0AlfImageVisualAttributeSetter@Alf@@QAE@XZ @ 117 NONAME ; Alf::AlfImageVisualAttributeSetter::AlfImageVisualAttributeSetter(void)
+ ?createChildVisualTree@AlfRecyclingGridElement@Alf@@UAEXPAVIAlfElement@2@AAVIAlfVariantType@2@AAVIAlfBranch@2@HI@Z @ 118 NONAME ; void Alf::AlfRecyclingGridElement::createChildVisualTree(class Alf::IAlfElement *, class Alf::IAlfVariantType &, class Alf::IAlfBranch &, int, unsigned int)
+ ?getFocusableBefore@CAlfWidgetControl@Alf@@MAEPAV12@AAVIAlfContainerWidget@2@AAV12@@Z @ 119 NONAME ; class Alf::CAlfWidgetControl * Alf::CAlfWidgetControl::getFocusableBefore(class Alf::IAlfContainerWidget &, class Alf::CAlfWidgetControl &)
+ ?setAttributeValue@AlfDeckLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 120 NONAME ; void Alf::AlfDeckLayoutAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ?modelChanged@CAlfWidgetControl@Alf@@UAEXAAVIAlfModel@2@@Z @ 121 NONAME ; void Alf::CAlfWidgetControl::modelChanged(class Alf::IAlfModel &)
+ ?createCommand@AlfFlowLayoutAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 122 NONAME ; class TAlfCommand * Alf::AlfFlowLayoutAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?createAndSendCommands@AlfAnchorLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 123 NONAME ; void Alf::AlfAnchorLayoutAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?createVisualTree@AlfVisualTemplate@Alf@@UAEPAVCAlfVisual@@AAVCAlfControl@@PAVIAlfMap@2@PAVCAlfLayout@@H@Z @ 124 NONAME ; class CAlfVisual * Alf::AlfVisualTemplate::createVisualTree(class CAlfControl &, class Alf::IAlfMap *, class CAlfLayout *, int)
+ ?uinteger@AlfBranch@Alf@@UBEIXZ @ 125 NONAME ; unsigned int Alf::AlfBranch::uinteger(void) const
+ ?getWidget@AlfWidget@Alf@@UBEPAVIAlfWidget@2@H@Z @ 126 NONAME ; class Alf::IAlfWidget * Alf::AlfWidget::getWidget(int) const
+ ?getSourceValueCount@AlfAttribute@Alf@@QBEIXZ @ 127 NONAME ; unsigned int Alf::AlfAttribute::getSourceValueCount(void) const
+ ??0AlfVariantType@Alf@@QAE@ABI@Z @ 128 NONAME ; Alf::AlfVariantType::AlfVariantType(unsigned int const &)
+ ?getSourceValue@AlfAttribute@Alf@@QBEPAVAlfAttributeValueType@2@I@Z @ 129 NONAME ; class Alf::AlfAttributeValueType * Alf::AlfAttribute::getSourceValue(unsigned int) const
+ ?boolean@AlfContainer@Alf@@UBE_NXZ @ 130 NONAME ; bool Alf::AlfContainer::boolean(void) const
+ ?setVisualType@AlfVisualTemplate@Alf@@UAEXW4TAlfVisualType@@@Z @ 131 NONAME ; void Alf::AlfVisualTemplate::setVisualType(enum TAlfVisualType)
+ ?construct@CAlfWidgetControl@Alf@@IAEXAAVCAlfEnv@@@Z @ 132 NONAME ; void Alf::CAlfWidgetControl::construct(class CAlfEnv &)
+ ?addEventHandler@CAlfWidgetControl@Alf@@UAEXPAVIAlfWidgetEventHandler@2@H@Z @ 133 NONAME ; void Alf::CAlfWidgetControl::addEventHandler(class Alf::IAlfWidgetEventHandler *, int)
+ ?integer@AlfContainer@Alf@@UBEHXZ @ 134 NONAME ; int Alf::AlfContainer::integer(void) const
+ ??1AlfReferenceToVisual@Alf@@QAE@XZ @ 135 NONAME ; Alf::AlfReferenceToVisual::~AlfReferenceToVisual(void)
+ ?uinteger@AlfVariantType@Alf@@UBEIXZ @ 136 NONAME ; unsigned int Alf::AlfVariantType::uinteger(void) const
+ ?destroyPresentation@CAlfWidgetControl@Alf@@UAEXH@Z @ 137 NONAME ; void Alf::CAlfWidgetControl::destroyPresentation(int)
+ ??1AlfLineVisualAttributeSetter@Alf@@UAE@XZ @ 138 NONAME ; Alf::AlfLineVisualAttributeSetter::~AlfLineVisualAttributeSetter(void)
+ ??0AlfVariantType@Alf@@QAE@ABVUString@osncore@@@Z @ 139 NONAME ; Alf::AlfVariantType::AlfVariantType(class osncore::UString const &)
+ ?executeOperations@AlfModel@Alf@@UAEXAAV?$AlfPtrVector@VAlfModelOperation@Alf@@@osncore@@@Z @ 140 NONAME ; void Alf::AlfModel::executeOperations(class osncore::AlfPtrVector<class Alf::AlfModelOperation> &)
+ ??1AlfVariantType@Alf@@UAE@XZ @ 141 NONAME ; Alf::AlfVariantType::~AlfVariantType(void)
+ ?removeSourceValue@AlfAttribute@Alf@@QAEXI@Z @ 142 NONAME ; void Alf::AlfAttribute::removeSourceValue(unsigned int)
+ ?removeEventHandler@CAlfWidgetControl@Alf@@UAEXAAVIAlfWidgetEventHandler@2@@Z @ 143 NONAME ; void Alf::CAlfWidgetControl::removeEventHandler(class Alf::IAlfWidgetEventHandler &)
+ ?parent@AlfVisualTemplate@Alf@@UBEPAVIAlfVisualTemplate@2@XZ @ 144 NONAME ; class Alf::IAlfVisualTemplate * Alf::AlfVisualTemplate::parent(void) const
+ ?createAndSendCommands@AlfCommonAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 145 NONAME ; void Alf::AlfCommonAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?getTime@AlfAttributeContainer@Alf@@QBEIXZ @ 146 NONAME ; unsigned int Alf::AlfAttributeContainer::getTime(void) const
+ ?addVisualTree@AlfElement@Alf@@QAEXPAVCAlfVisual@@I@Z @ 147 NONAME ; void Alf::AlfElement::addVisualTree(class CAlfVisual *, unsigned int)
+ ?setAttributeValue@AlfTextVisualAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 148 NONAME ; void Alf::AlfTextVisualAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ?isDirty@AlfAttribute@Alf@@QBE_NXZ @ 149 NONAME ; bool Alf::AlfAttribute::isDirty(void) const
+ ?makeInterface@AlfAnchorLayoutManager@Alf@@MAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 150 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfAnchorLayoutManager::makeInterface(struct Alf::IfId const &)
+ ?insertChildTemplate@AlfVisualTemplate@Alf@@UAEXAAVIAlfVisualTemplate@2@H@Z @ 151 NONAME ; void Alf::AlfVisualTemplate::insertChildTemplate(class Alf::IAlfVisualTemplate &, int)
+ ?create@AlfVisualTemplate@Alf@@SAPAV12@W4TAlfVisualType@@@Z @ 152 NONAME ; class Alf::AlfVisualTemplate * Alf::AlfVisualTemplate::create(enum TAlfVisualType)
+ ?setTime@AlfAttributeContainer@Alf@@QAEXI@Z @ 153 NONAME ; void Alf::AlfAttributeContainer::setTime(unsigned int)
+ ?real@AlfContainer@Alf@@UBENXZ @ 154 NONAME ; double Alf::AlfContainer::real(void) const
+ ?clone@AlfContainer@Alf@@UAEPAVIAlfContainer@2@XZ @ 155 NONAME ; class Alf::IAlfContainer * Alf::AlfContainer::clone(void)
+ ?getFirstFocusable@CAlfWidgetControl@Alf@@MAEPAV12@AAVIAlfContainerWidget@2@@Z @ 156 NONAME ; class Alf::CAlfWidgetControl * Alf::CAlfWidgetControl::getFirstFocusable(class Alf::IAlfContainerWidget &)
+ ?setData@AlfBranch@Alf@@UAEXPAVIAlfMap@2@@Z @ 157 NONAME ; void Alf::AlfBranch::setData(class Alf::IAlfMap *)
+ ??1AlfGridLayoutManager@Alf@@UAE@XZ @ 158 NONAME ; Alf::AlfGridLayoutManager::~AlfGridLayoutManager(void)
+ ?setAttributeValue@AlfAnchorLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 159 NONAME ; void Alf::AlfAnchorLayoutAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ?destroyChildTemplate@AlfVisualTemplate@Alf@@UAEXH@Z @ 160 NONAME ; void Alf::AlfVisualTemplate::destroyChildTemplate(int)
+ ?setAttributeValue@AlfViewportLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 161 NONAME ; void Alf::AlfViewportLayoutAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ?setPresentation@AlfWidget@Alf@@UAEXPBD@Z @ 162 NONAME ; void Alf::AlfWidget::setPresentation(char const *)
+ ?customData@AlfMap@Alf@@UAEPAVIAlfModelBase@2@XZ @ 163 NONAME ; class Alf::IAlfModelBase * Alf::AlfMap::customData(void)
+ ?createVisualTree@AlfElement@Alf@@UAEPAVCAlfVisual@@AAVIAlfVariantType@2@AAVIAlfBranch@2@HIPAVCAlfLayout@@H@Z @ 164 NONAME ; class CAlfVisual * Alf::AlfElement::createVisualTree(class Alf::IAlfVariantType &, class Alf::IAlfBranch &, int, unsigned int, class CAlfLayout *, int)
+ ?childName@AlfBranch@Alf@@UAEABVUString@osncore@@H@Z @ 165 NONAME ; class osncore::UString const & Alf::AlfBranch::childName(int)
+ ?type@AlfAttribute@Alf@@QBE?AW4Type@AlfAttributeValueType@2@I@Z @ 166 NONAME ; enum Alf::AlfAttributeValueType::Type Alf::AlfAttribute::type(unsigned int) const
+ ??0AlfAttribute@Alf@@QAE@PBDABVUString@osncore@@W4attributecategory@01@@Z @ 167 NONAME ; Alf::AlfAttribute::AlfAttribute(char const *, class osncore::UString const &, enum Alf::AlfAttribute::attributecategory)
+ ?intValue@AlfAttributeValueType@Alf@@UBEHXZ @ 168 NONAME ; int Alf::AlfAttributeValueType::intValue(void) const
+ ?branch@AlfVariantType@Alf@@UAEPAVIAlfBranch@2@XZ @ 169 NONAME ; class Alf::IAlfBranch * Alf::AlfVariantType::branch(void)
+ ?addItem@AlfContainer@Alf@@UAEXIPAVIAlfVariantType@2@@Z @ 170 NONAME ; void Alf::AlfContainer::addItem(unsigned int, class Alf::IAlfVariantType *)
+ ?dataIdToIndex@CAlfWidgetControl@Alf@@UAEIABVIAlfElement@2@I@Z @ 171 NONAME ; unsigned int Alf::CAlfWidgetControl::dataIdToIndex(class Alf::IAlfElement const &, unsigned int)
+ ?type@AlfMap@Alf@@UBE?AW4Type@IAlfVariantType@2@XZ @ 172 NONAME ; enum Alf::IAlfVariantType::Type Alf::AlfMap::type(void) const
+ ??0CAlfWidgetControl@Alf@@IAE@XZ @ 173 NONAME ; Alf::CAlfWidgetControl::CAlfWidgetControl(void)
+ ?removeVisualTree@AlfElement@Alf@@UAEXAAVIAlfVariantType@2@I@Z @ 174 NONAME ; void Alf::AlfElement::removeVisualTree(class Alf::IAlfVariantType &, unsigned int)
+ ?name@AlfMap@Alf@@UBEABVUString@osncore@@I@Z @ 175 NONAME ; class osncore::UString const & Alf::AlfMap::name(unsigned int) const
+ ?updateVisualTree@AlfElement@Alf@@UAEXAAVIAlfVariantType@2@0I@Z @ 176 NONAME ; void Alf::AlfElement::updateVisualTree(class Alf::IAlfVariantType &, class Alf::IAlfVariantType &, unsigned int)
+ ??0AlfBranch@Alf@@QAE@PAVIAlfMap@1@0@Z @ 177 NONAME ; Alf::AlfBranch::AlfBranch(class Alf::IAlfMap *, class Alf::IAlfMap *)
+ ?destroyVisualTemplate@AlfElement@Alf@@UAEXXZ @ 178 NONAME ; void Alf::AlfElement::destroyVisualTemplate(void)
+ ??0AlfWidgetEventHandler@Alf@@QAE@W4AlfEventHandlerType@IAlfWidgetEventHandler@1@W4AlfEventHandlerExecutionPhase@31@@Z @ 179 NONAME ; Alf::AlfWidgetEventHandler::AlfWidgetEventHandler(enum Alf::IAlfWidgetEventHandler::AlfEventHandlerType, enum Alf::IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase)
+ ?addBrush@AlfVisualTemplate@Alf@@UAEXAAVCAlfBrush@@@Z @ 180 NONAME ; void Alf::AlfVisualTemplate::addBrush(class CAlfBrush &)
+ ?category@AlfAttribute@Alf@@QBE?AW4attributecategory@12@XZ @ 181 NONAME ; enum Alf::AlfAttribute::attributecategory Alf::AlfAttribute::category(void) const
+ ?intValue@AlfAttribute@Alf@@QBEHI@Z @ 182 NONAME ; int Alf::AlfAttribute::intValue(unsigned int) const
+ ?createAndSendCommands@AlfImageVisualAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 183 NONAME ; void Alf::AlfImageVisualAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?updatePresentation@CAlfWidgetControl@Alf@@UAEXXZ @ 184 NONAME ; void Alf::CAlfWidgetControl::updatePresentation(void)
+ ?makeInterface@AlfGridLayoutManager@Alf@@MAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 185 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfGridLayoutManager::makeInterface(struct Alf::IfId const &)
+ ??0AlfRecyclingGridElement@Alf@@QAE@AAVCAlfWidgetControl@1@PBDHH@Z @ 186 NONAME ; Alf::AlfRecyclingGridElement::AlfRecyclingGridElement(class Alf::CAlfWidgetControl &, char const *, int, int)
+ ??0AlfVisualTemplate@Alf@@IAE@XZ @ 187 NONAME ; Alf::AlfVisualTemplate::AlfVisualTemplate(void)
+ ?setFillStyle@AlfRecyclingGridElement@Alf@@QAEXW4FillStyle@12@H@Z @ 188 NONAME ; void Alf::AlfRecyclingGridElement::setFillStyle(enum Alf::AlfRecyclingGridElement::FillStyle, int)
+ ?addItem@AlfMap@Alf@@UAEXIPAVIAlfVariantType@2@ABVUString@osncore@@@Z @ 189 NONAME ; void Alf::AlfMap::addItem(unsigned int, class Alf::IAlfVariantType *, class osncore::UString const &)
+ ??1AlfAttributeValueType@Alf@@UAE@XZ @ 190 NONAME ; Alf::AlfAttributeValueType::~AlfAttributeValueType(void)
+ ??1AlfCommonLayoutAttributeSetter@Alf@@UAE@XZ @ 191 NONAME ; Alf::AlfCommonLayoutAttributeSetter::~AlfCommonLayoutAttributeSetter(void)
+ ?AcquireFocus@CAlfWidgetControl@Alf@@QAEXXZ @ 192 NONAME ; void Alf::CAlfWidgetControl::AcquireFocus(void)
+ ?visualType@AlfVisualTemplate@Alf@@UBEHXZ @ 193 NONAME ; int Alf::AlfVisualTemplate::visualType(void) const
+ ?processEvent@CAlfWidgetControl@Alf@@QAE?AW4AlfEventStatus@2@ABVTAlfEvent@@@Z @ 194 NONAME ; enum Alf::AlfEventStatus Alf::CAlfWidgetControl::processEvent(class TAlfEvent const &)
+ ??0AlfCommonAttributeSetter@Alf@@QAE@XZ @ 195 NONAME ; Alf::AlfCommonAttributeSetter::AlfCommonAttributeSetter(void)
+ ?setParent@AlfVisualTemplate@Alf@@UAEXPAVIAlfVisualTemplate@2@@Z @ 196 NONAME ; void Alf::AlfVisualTemplate::setParent(class Alf::IAlfVisualTemplate *)
+ ?stringValue@AlfAttributeValueType@Alf@@UBEABVUString@osncore@@XZ @ 197 NONAME ; class osncore::UString const & Alf::AlfAttributeValueType::stringValue(void) const
+ ??0AlfAttribute@Alf@@QAE@PBDHW4TAlfUnit@@W4attributecategory@01@@Z @ 198 NONAME ; Alf::AlfAttribute::AlfAttribute(char const *, int, enum TAlfUnit, enum Alf::AlfAttribute::attributecategory)
+ ?updateVisualTree@AlfVisualTemplate@Alf@@UAEPAVCAlfVisual@@PAVIAlfMap@2@0AAV3@@Z @ 199 NONAME ; class CAlfVisual * Alf::AlfVisualTemplate::updateVisualTree(class Alf::IAlfMap *, class Alf::IAlfMap *, class CAlfVisual &)
+ ??0AlfTextVisualAttributeSetter@Alf@@QAE@XZ @ 200 NONAME ; Alf::AlfTextVisualAttributeSetter::AlfTextVisualAttributeSetter(void)
+ ?handleFocusNext@CAlfWidgetControl@Alf@@IAE_NXZ @ 201 NONAME ; bool Alf::CAlfWidgetControl::handleFocusNext(void)
+ ?initializeEnvironment@AlfWidgetEnvExtension@Alf@@SAXAAVCAlfEnv@@@Z @ 202 NONAME ; void Alf::AlfWidgetEnvExtension::initializeEnvironment(class CAlfEnv &)
+ ?setAttributeValue@AlfCommonAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 203 NONAME ; void Alf::AlfCommonAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ??0AlfGridLayoutAttributeSetter@Alf@@QAE@XZ @ 204 NONAME ; Alf::AlfGridLayoutAttributeSetter::AlfGridLayoutAttributeSetter(void)
+ ?makeInterface@AlfHostAPIImpl@Alf@@UAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 205 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfHostAPIImpl::makeInterface(struct Alf::IfId const &)
+ ?createCommand@AlfGridLayoutAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 206 NONAME ; class TAlfCommand * Alf::AlfGridLayoutAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?type@AlfBranch@Alf@@UBE?AW4Type@IAlfVariantType@2@XZ @ 207 NONAME ; enum Alf::IAlfVariantType::Type Alf::AlfBranch::type(void) const
+ ?addCancelOutput@AlfWidgetEventHandler@Alf@@QAEXPBDH_N@Z @ 208 NONAME ; void Alf::AlfWidgetEventHandler::addCancelOutput(char const *, int, bool)
+ ?enumValue@AlfAttributeValueType@Alf@@UBEHXZ @ 209 NONAME ; int Alf::AlfAttributeValueType::enumValue(void) const
+ ??1AlfAttributeContainer@Alf@@QAE@XZ @ 210 NONAME ; Alf::AlfAttributeContainer::~AlfAttributeContainer(void)
+ ?setModel@AlfWidget@Alf@@UAEXPAVIAlfModel@2@_N@Z @ 211 NONAME ; void Alf::AlfWidget::setModel(class Alf::IAlfModel *, bool)
+ ?createCommand@AlfLineVisualAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 212 NONAME ; class TAlfCommand * Alf::AlfLineVisualAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?set@AlfContainer@Alf@@UAEXAAVIAlfVariantType@2@@Z @ 213 NONAME ; void Alf::AlfContainer::set(class Alf::IAlfVariantType &)
+ ?addWidgetAttributeOutput@AlfWidgetEventHandler@Alf@@QAEXAAVAlfAttribute@2@PBD@Z @ 214 NONAME ; void Alf::AlfWidgetEventHandler::addWidgetAttributeOutput(class Alf::AlfAttribute &, char const *)
+ ?setControlSize@AlfLayoutManager@Alf@@IAEXAAVCAlfWidgetControl@2@ABUTAlfRealPoint@@@Z @ 215 NONAME ; void Alf::AlfLayoutManager::setControlSize(class Alf::CAlfWidgetControl &, struct TAlfRealPoint const &)
+ ?control@AlfElement@Alf@@IAEAAVCAlfWidgetControl@2@XZ @ 216 NONAME ; class Alf::CAlfWidgetControl & Alf::AlfElement::control(void)
+ ??0AlfGridLayoutManager@Alf@@QAE@XZ @ 217 NONAME ; Alf::AlfGridLayoutManager::AlfGridLayoutManager(void)
+ ?findVisual@AlfElement@Alf@@UAEPAVCAlfVisual@@PBDI@Z @ 218 NONAME ; class CAlfVisual * Alf::AlfElement::findVisual(char const *, unsigned int)
+ ?numEventHandlers@CAlfWidgetControl@Alf@@UBEHXZ @ 219 NONAME ; int Alf::CAlfWidgetControl::numEventHandlers(void) const
+ ??0AlfVariantType@Alf@@QAE@AB_N@Z @ 220 NONAME ; Alf::AlfVariantType::AlfVariantType(bool const &)
+ ??1AlfViewportLayoutAttributeSetter@Alf@@UAE@XZ @ 221 NONAME ; Alf::AlfViewportLayoutAttributeSetter::~AlfViewportLayoutAttributeSetter(void)
+ ?dataIdRange@CAlfWidgetControl@Alf@@UAEIABVIAlfElement@2@@Z @ 222 NONAME ; unsigned int Alf::CAlfWidgetControl::dataIdRange(class Alf::IAlfElement const &)
+ ?item@AlfMap@Alf@@UAEPAVIAlfVariantType@2@I@Z @ 223 NONAME ; class Alf::IAlfVariantType * Alf::AlfMap::item(unsigned int)
+ ??0AlfAttribute@Alf@@QAE@PBDMW4TAlfUnit@@W4attributecategory@01@@Z @ 224 NONAME ; Alf::AlfAttribute::AlfAttribute(char const *, float, enum TAlfUnit, enum Alf::AlfAttribute::attributecategory)
+ ?boolean@AlfVariantType@Alf@@UBE_NXZ @ 225 NONAME ; bool Alf::AlfVariantType::boolean(void) const
+ ?replaceItem@AlfMap@Alf@@UAEXABVUString@osncore@@PAVIAlfVariantType@2@@Z @ 226 NONAME ; void Alf::AlfMap::replaceItem(class osncore::UString const &, class Alf::IAlfVariantType *)
+ ??0AlfVariantType@Alf@@QAE@XZ @ 227 NONAME ; Alf::AlfVariantType::AlfVariantType(void)
+ ?count@AlfContainer@Alf@@UAEHXZ @ 228 NONAME ; int Alf::AlfContainer::count(void)
+ ??1AlfRecyclingGridElement@Alf@@UAE@XZ @ 229 NONAME ; Alf::AlfRecyclingGridElement::~AlfRecyclingGridElement(void)
+ ?map@AlfBranch@Alf@@UAEPAVIAlfMap@2@XZ @ 230 NONAME ; class Alf::IAlfMap * Alf::AlfBranch::map(void)
+ ?getMappingFunctionId@AlfAttribute@Alf@@QBEHXZ @ 231 NONAME ; int Alf::AlfAttribute::getMappingFunctionId(void) const
+ ??0AlfAttributeValueType@Alf@@QAE@MW4TAlfUnit@@@Z @ 232 NONAME ; Alf::AlfAttributeValueType::AlfAttributeValueType(float, enum TAlfUnit)
+ ?childData@AlfBranch@Alf@@UAEPAVIAlfVariantType@2@H@Z @ 233 NONAME ; class Alf::IAlfVariantType * Alf::AlfBranch::childData(int)
+ ?name@AlfVisualTemplate@Alf@@UBEPBDXZ @ 234 NONAME ; char const * Alf::AlfVisualTemplate::name(void) const
+ ?setDirty@AlfAttribute@Alf@@QAEX_N@Z @ 235 NONAME ; void Alf::AlfAttribute::setDirty(bool)
+ ?removeAndDestroyVisuals@AlfRecyclingGridElement@Alf@@UAEXH@Z @ 236 NONAME ; void Alf::AlfRecyclingGridElement::removeAndDestroyVisuals(int)
+ ?createAndSendCommands@AlfCurvePathLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 237 NONAME ; void Alf::AlfCurvePathLayoutAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?updateChildrenLayout@AlfLayoutManager@Alf@@UAEXXZ @ 238 NONAME ; void Alf::AlfLayoutManager::updateChildrenLayout(void)
+ ?setAttributeValue@AlfImageVisualAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 239 NONAME ; void Alf::AlfImageVisualAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ??0CAlfWidgetControl@Alf@@QAE@AAVCAlfEnv@@@Z @ 240 NONAME ; Alf::CAlfWidgetControl::CAlfWidgetControl(class CAlfEnv &)
+ ?count@AlfMap@Alf@@UBEHXZ @ 241 NONAME ; int Alf::AlfMap::count(void) const
+ ?uinteger@AlfMap@Alf@@UBEIXZ @ 242 NONAME ; unsigned int Alf::AlfMap::uinteger(void) const
+ ?removeAndDestroyEventHandler@CAlfWidgetControl@Alf@@UAEXABVUString@osncore@@@Z @ 243 NONAME ; void Alf::CAlfWidgetControl::removeAndDestroyEventHandler(class osncore::UString const &)
+ ?map@AlfContainer@Alf@@UAEPAVIAlfMap@2@XZ @ 244 NONAME ; class Alf::IAlfMap * Alf::AlfContainer::map(void)
+ ?accept@AlfRecyclingGridElement@Alf@@UBE_NAAVCAlfWidgetControl@2@ABVTAlfEvent@@@Z @ 245 NONAME ; bool Alf::AlfRecyclingGridElement::accept(class Alf::CAlfWidgetControl &, class TAlfEvent const &) const
+ ?createAndSendCommands@AlfFlowLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 246 NONAME ; void Alf::AlfFlowLayoutAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?widgetName@AlfWidget@Alf@@UBEPBDXZ @ 247 NONAME ; char const * Alf::AlfWidget::widgetName(void) const
+ ??0AlfElement@Alf@@IAE@XZ @ 248 NONAME ; Alf::AlfElement::AlfElement(void)
+ ?childRemoved@AlfGridLayoutManager@Alf@@UAEXPAVCAlfWidgetControl@2@@Z @ 249 NONAME ; void Alf::AlfGridLayoutManager::childRemoved(class Alf::CAlfWidgetControl *)
+ ??1AlfCurvePathLayoutAttributeSetter@Alf@@UAE@XZ @ 250 NONAME ; Alf::AlfCurvePathLayoutAttributeSetter::~AlfCurvePathLayoutAttributeSetter(void)
+ ?brush@AlfVisualTemplate@Alf@@UBEAAVCAlfBrush@@H@Z @ 251 NONAME ; class CAlfBrush & Alf::AlfVisualTemplate::brush(int) const
+ ?createCommand@AlfCurvePathLayoutAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 252 NONAME ; class TAlfCommand * Alf::AlfCurvePathLayoutAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?addTargetValue@AlfAttribute@Alf@@QAEXPAVAlfAttributeValueType@2@@Z @ 253 NONAME ; void Alf::AlfAttribute::addTargetValue(class Alf::AlfAttributeValueType *)
+ ?attributeContainer@AlfVisualTemplate@Alf@@UBEAAVAlfAttributeContainer@2@H@Z @ 254 NONAME ; class Alf::AlfAttributeContainer & Alf::AlfVisualTemplate::attributeContainer(int) const
+ ?getTime@AlfAttribute@Alf@@QBEHXZ @ 255 NONAME ; int Alf::AlfAttribute::getTime(void) const
+ ??0AlfAttributeValueType@Alf@@QAE@HW4TAlfUnit@@@Z @ 256 NONAME ; Alf::AlfAttributeValueType::AlfAttributeValueType(int, enum TAlfUnit)
+ ??8AlfContainer@Alf@@QBE_NABVIAlfVariantType@1@@Z @ 257 NONAME ; bool Alf::AlfContainer::operator==(class Alf::IAlfVariantType const &) const
+ ?realValue@AlfAttribute@Alf@@QBEMI@Z @ 258 NONAME ; float Alf::AlfAttribute::realValue(unsigned int) const
+ ?getNewData@AlfModelOperation@Alf@@QAEPAVIAlfVariantType@2@XZ @ 259 NONAME ; class Alf::IAlfVariantType * Alf::AlfModelOperation::getNewData(void)
+ ?customData@AlfVariantType@Alf@@UAEPAVIAlfModelBase@2@XZ @ 260 NONAME ; class Alf::IAlfModelBase * Alf::AlfVariantType::customData(void)
+ ?findElement@CAlfWidgetControl@Alf@@UAEPAVIAlfElement@2@PBD@Z @ 261 NONAME ; class Alf::IAlfElement * Alf::CAlfWidgetControl::findElement(char const *)
+ ?setAttributeValue@AlfCommonLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 262 NONAME ; void Alf::AlfCommonLayoutAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ?newData@AlfModelOperation@Alf@@QBEAAVIAlfVariantType@2@XZ @ 263 NONAME ; class Alf::IAlfVariantType & Alf::AlfModelOperation::newData(void) const
+ ??1AlfTextVisualAttributeSetter@Alf@@UAE@XZ @ 264 NONAME ; Alf::AlfTextVisualAttributeSetter::~AlfTextVisualAttributeSetter(void)
+ ??0AlfMap@Alf@@QAE@XZ @ 265 NONAME ; Alf::AlfMap::AlfMap(void)
+ ??8AlfVariantType@Alf@@QBE_NABVIAlfVariantType@1@@Z @ 266 NONAME ; bool Alf::AlfVariantType::operator==(class Alf::IAlfVariantType const &) const
+ ?setAttributeValue@AlfLineVisualAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 267 NONAME ; void Alf::AlfLineVisualAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ??1AlfGridLayoutAttributeSetter@Alf@@UAE@XZ @ 268 NONAME ; Alf::AlfGridLayoutAttributeSetter::~AlfGridLayoutAttributeSetter(void)
+ ?RelinquishFocus@CAlfWidgetControl@Alf@@QAEXXZ @ 269 NONAME ; void Alf::CAlfWidgetControl::RelinquishFocus(void)
+ ?makeInterface@AlfVisualTemplate@Alf@@UAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 270 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfVisualTemplate::makeInterface(struct Alf::IfId const &)
+ ??1AlfWidget@Alf@@UAE@XZ @ 271 NONAME ; Alf::AlfWidget::~AlfWidget(void)
+ ?real@AlfVariantType@Alf@@UBENXZ @ 272 NONAME ; double Alf::AlfVariantType::real(void) const
+ ?OfferEventL@CAlfWidgetControl@Alf@@EAEHABVTAlfEvent@@@Z @ 273 NONAME ; int Alf::CAlfWidgetControl::OfferEventL(class TAlfEvent const &)
+ ?elementDataId@CAlfWidgetControl@Alf@@UAEIABVIAlfElement@2@II@Z @ 274 NONAME ; unsigned int Alf::CAlfWidgetControl::elementDataId(class Alf::IAlfElement const &, unsigned int, unsigned int)
+ ?setName@AlfVisualTemplate@Alf@@UAEXPBD@Z @ 275 NONAME ; void Alf::AlfVisualTemplate::setName(char const *)
+ ?removeAttribute@AlfAttributeContainer@Alf@@QAEXI@Z @ 276 NONAME ; void Alf::AlfAttributeContainer::removeAttribute(unsigned int)
+ ?offerEvent@AlfRecyclingGridElement@Alf@@UAE?AW4AlfEventStatus@2@AAVCAlfWidgetControl@2@ABVTAlfEvent@@@Z @ 277 NONAME ; enum Alf::AlfEventStatus Alf::AlfRecyclingGridElement::offerEvent(class Alf::CAlfWidgetControl &, class TAlfEvent const &)
+ ?createCommand@AlfDeckLayoutAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 278 NONAME ; class TAlfCommand * Alf::AlfDeckLayoutAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?create@AlfVisualTemplate@Alf@@SAPAV12@XZ @ 279 NONAME ; class Alf::AlfVisualTemplate * Alf::AlfVisualTemplate::create(void)
+ ??1AlfContainer@Alf@@UAE@XZ @ 280 NONAME ; Alf::AlfContainer::~AlfContainer(void)
+ ?setInterpolationStyle@AlfAttribute@Alf@@QAEXW4TAlfInterpolationStyle@@@Z @ 281 NONAME ; void Alf::AlfAttribute::setInterpolationStyle(enum TAlfInterpolationStyle)
+ ?getInterpolationStyle@AlfAttribute@Alf@@QBE?AW4TAlfInterpolationStyle@@XZ @ 282 NONAME ; enum TAlfInterpolationStyle Alf::AlfAttribute::getInterpolationStyle(void) const
+ ?setAttributeValue@AlfFlowLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 283 NONAME ; void Alf::AlfFlowLayoutAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ?updateChildLayout@AlfLayoutManager@Alf@@UAEXPAVCAlfWidgetControl@2@@Z @ 284 NONAME ; void Alf::AlfLayoutManager::updateChildLayout(class Alf::CAlfWidgetControl *)
+ ?control@AlfWidget@Alf@@UBEPAVCAlfWidgetControl@2@XZ @ 285 NONAME ; class Alf::CAlfWidgetControl * Alf::AlfWidget::control(void) const
+ ?isContainer@CAlfWidgetControl@Alf@@QBE_NXZ @ 286 NONAME ; bool Alf::CAlfWidgetControl::isContainer(void) const
+ ??0AlfAttributeValueType@Alf@@QAE@ABVUString@osncore@@@Z @ 287 NONAME ; Alf::AlfAttributeValueType::AlfAttributeValueType(class osncore::UString const &)
+ ?addAttribute@AlfAttributeContainer@Alf@@QAEXPAVAlfAttribute@2@@Z @ 288 NONAME ; void Alf::AlfAttributeContainer::addAttribute(class Alf::AlfAttribute *)
+ ??1AlfLayoutManager@Alf@@UAE@XZ @ 289 NONAME ; Alf::AlfLayoutManager::~AlfLayoutManager(void)
+ ?setAttributeValue@AlfGridLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 290 NONAME ; void Alf::AlfGridLayoutAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ?addWidgetStateOutput@AlfWidgetEventHandler@Alf@@QAEXABVUString@osncore@@II@Z @ 291 NONAME ; void Alf::AlfWidgetEventHandler::addWidgetStateOutput(class osncore::UString const &, unsigned int, unsigned int)
+ ?makeInterface@AlfWidget@Alf@@SAPAVIAlfInterfaceBase@2@PAV12@ABUIfId@2@@Z @ 292 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfWidget::makeInterface(class Alf::AlfWidget *, struct Alf::IfId const &)
+ ??0AlfAnchorLayoutAttributeSetter@Alf@@QAE@XZ @ 293 NONAME ; Alf::AlfAnchorLayoutAttributeSetter::AlfAnchorLayoutAttributeSetter(void)
+ ?string@AlfMap@Alf@@UBEABVUString@osncore@@XZ @ 294 NONAME ; class osncore::UString const & Alf::AlfMap::string(void) const
+ ?set@AlfMap@Alf@@UAEXAAVIAlfVariantType@2@@Z @ 295 NONAME ; void Alf::AlfMap::set(class Alf::IAlfVariantType &)
+ ??0AlfWidget@Alf@@QAE@PBDAAVIAlfContainerWidget@1@AAVCAlfEnv@@@Z @ 296 NONAME ; Alf::AlfWidget::AlfWidget(char const *, class Alf::IAlfContainerWidget &, class CAlfEnv &)
+ ??0AlfLayoutManager@Alf@@QAE@W4TAlfLayoutType@@@Z @ 297 NONAME ; Alf::AlfLayoutManager::AlfLayoutManager(enum TAlfLayoutType)
+ ?removePresentationEventHandlers@CAlfWidgetControl@Alf@@UAEXXZ @ 298 NONAME ; void Alf::CAlfWidgetControl::removePresentationEventHandlers(void)
+ ?setActiveStates@AlfRecyclingGridElement@Alf@@UAEXI@Z @ 299 NONAME ; void Alf::AlfRecyclingGridElement::setActiveStates(unsigned int)
+ ?addAnimationOutput@AlfWidgetEventHandler@Alf@@QAEXPAVAlfReferenceToVisual@2@0PAVIAlfAttributeSetter@2@PAVAlfAttributeContainer@2@II@Z @ 300 NONAME ; void Alf::AlfWidgetEventHandler::addAnimationOutput(class Alf::AlfReferenceToVisual *, class Alf::AlfReferenceToVisual *, class Alf::IAlfAttributeSetter *, class Alf::AlfAttributeContainer *, unsigned int, unsigned int)
+ ?removeTargetValue@AlfAttribute@Alf@@QAEXI@Z @ 301 NONAME ; void Alf::AlfAttribute::removeTargetValue(unsigned int)
+ ?create@AlfModelOperation@Alf@@SAPAV12@W4OperationType@12@HPAHPAVIAlfVariantType@2@ABVUString@osncore@@@Z @ 302 NONAME ; class Alf::AlfModelOperation * Alf::AlfModelOperation::create(enum Alf::AlfModelOperation::OperationType, int, int *, class Alf::IAlfVariantType *, class osncore::UString const &)
+ ?ContainerLayout@CAlfWidgetControl@Alf@@UBEPAVCAlfLayout@@PBVCAlfControl@@@Z @ 303 NONAME ; class CAlfLayout * Alf::CAlfWidgetControl::ContainerLayout(class CAlfControl const *) const
+ ?data@AlfModel@Alf@@UBEPAVIAlfVariantType@2@XZ @ 304 NONAME ; class Alf::IAlfVariantType * Alf::AlfModel::data(void) const
+ ?replaceItem@AlfContainer@Alf@@UAEXIPAVIAlfVariantType@2@@Z @ 305 NONAME ; void Alf::AlfContainer::replaceItem(unsigned int, class Alf::IAlfVariantType *)
+ ?numBrushes@AlfVisualTemplate@Alf@@UBEHXZ @ 306 NONAME ; int Alf::AlfVisualTemplate::numBrushes(void) const
+ ??0AlfAttribute@Alf@@QAE@PBDW4attributecategory@01@@Z @ 307 NONAME ; Alf::AlfAttribute::AlfAttribute(char const *, enum Alf::AlfAttribute::attributecategory)
+ ?doUpdateChildLayout@AlfLayoutManager@Alf@@MAEXPAVCAlfWidgetControl@2@@Z @ 308 NONAME ; void Alf::AlfLayoutManager::doUpdateChildLayout(class Alf::CAlfWidgetControl *)
+ ?type@AlfContainer@Alf@@UBE?AW4Type@IAlfVariantType@2@XZ @ 309 NONAME ; enum Alf::IAlfVariantType::Type Alf::AlfContainer::type(void) const
+ ?clone@AlfBranch@Alf@@UAEPAVIAlfBranch@2@XZ @ 310 NONAME ; class Alf::IAlfBranch * Alf::AlfBranch::clone(void)
+ ?setParentElement@AlfElement@Alf@@UAEXAAVIAlfElement@2@@Z @ 311 NONAME ; void Alf::AlfElement::setParentElement(class Alf::IAlfElement &)
+ ?setOwner@AlfVisualTemplate@Alf@@UAEXPAVIAlfElement@2@@Z @ 312 NONAME ; void Alf::AlfVisualTemplate::setOwner(class Alf::IAlfElement *)
+ ?addEventPasserOutput@AlfWidgetEventHandler@Alf@@QAEXPBD0@Z @ 313 NONAME ; void Alf::AlfWidgetEventHandler::addEventPasserOutput(char const *, char const *)
+ ?setTargetValue@AlfAttribute@Alf@@QAEXPAVAlfAttributeValueType@2@I@Z @ 314 NONAME ; void Alf::AlfAttribute::setTargetValue(class Alf::AlfAttributeValueType *, unsigned int)
+ ??8AlfBranch@Alf@@QBE_NABVIAlfVariantType@1@@Z @ 315 NONAME ; bool Alf::AlfBranch::operator==(class Alf::IAlfVariantType const &) const
+ ?container@AlfVariantType@Alf@@UAEPAVIAlfContainer@2@XZ @ 316 NONAME ; class Alf::IAlfContainer * Alf::AlfVariantType::container(void)
+ ?eventHandlerData@AlfRecyclingGridElement@Alf@@UAEPAUAlfWidgetEventHandlerInitData@2@XZ @ 317 NONAME ; struct Alf::AlfWidgetEventHandlerInitData * Alf::AlfRecyclingGridElement::eventHandlerData(void)
+ ?numElements@CAlfWidgetControl@Alf@@UBEHXZ @ 318 NONAME ; int Alf::CAlfWidgetControl::numElements(void) const
+ ?getLastFocusable@CAlfWidgetControl@Alf@@MAEPAV12@AAVIAlfContainerWidget@2@@Z @ 319 NONAME ; class Alf::CAlfWidgetControl * Alf::CAlfWidgetControl::getLastFocusable(class Alf::IAlfContainerWidget &)
+ ??1AlfFlowLayoutManager@Alf@@UAE@XZ @ 320 NONAME ; Alf::AlfFlowLayoutManager::~AlfFlowLayoutManager(void)
+ ?type@AlfVariantType@Alf@@UBE?AW4Type@IAlfVariantType@2@XZ @ 321 NONAME ; enum Alf::IAlfVariantType::Type Alf::AlfVariantType::type(void) const
+ ?disableState@CAlfWidgetControl@Alf@@UAEXI@Z @ 322 NONAME ; void Alf::CAlfWidgetControl::disableState(unsigned int)
+ ?count@AlfLayoutManager@Alf@@QBEHXZ @ 323 NONAME ; int Alf::AlfLayoutManager::count(void) const
+ ?setAnimationTimes@AlfRecyclingGridElement@Alf@@QAEXHHHHH@Z @ 324 NONAME ; void Alf::AlfRecyclingGridElement::setAnimationTimes(int, int, int, int, int)
+ ?removeAndDestroyPresentationEventHandlers@CAlfWidgetControl@Alf@@UAEXXZ @ 325 NONAME ; void Alf::CAlfWidgetControl::removeAndDestroyPresentationEventHandlers(void)
+ ?eventHandlerIndex@CAlfWidgetControl@Alf@@UBEHAAVIAlfWidgetEventHandler@2@@Z @ 326 NONAME ; int Alf::CAlfWidgetControl::eventHandlerIndex(class Alf::IAlfWidgetEventHandler &) const
+ ?addEventPasserOutput@AlfWidgetEventHandler@Alf@@QAEXPBD0HH@Z @ 327 NONAME ; void Alf::AlfWidgetEventHandler::addEventPasserOutput(char const *, char const *, int, int)
+ ?createCommand@AlfCommonLayoutAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 328 NONAME ; class TAlfCommand * Alf::AlfCommonLayoutAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?updateData@AlfModel@Alf@@UAEXHPAHPAVIAlfVariantType@2@@Z @ 329 NONAME ; void Alf::AlfModel::updateData(int, int *, class Alf::IAlfVariantType *)
+ ?addOutput@AlfWidgetEventHandler@Alf@@QAEXHHPBDI@Z @ 330 NONAME ; void Alf::AlfWidgetEventHandler::addOutput(int, int, char const *, unsigned int)
+ ?createCommand@AlfTextVisualAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 331 NONAME ; class TAlfCommand * Alf::AlfTextVisualAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ??0AlfAnimationOutput@Alf@@QAE@PAVAlfReferenceToVisual@1@0PAVIAlfAttributeSetter@1@PAVAlfAttributeContainer@1@II@Z @ 332 NONAME ; Alf::AlfAnimationOutput::AlfAnimationOutput(class Alf::AlfReferenceToVisual *, class Alf::AlfReferenceToVisual *, class Alf::IAlfAttributeSetter *, class Alf::AlfAttributeContainer *, unsigned int, unsigned int)
+ ?data@AlfBranch@Alf@@UAEPAVIAlfMap@2@XZ @ 333 NONAME ; class Alf::IAlfMap * Alf::AlfBranch::data(void)
+ ??1AlfAttribute@Alf@@UAE@XZ @ 334 NONAME ; Alf::AlfAttribute::~AlfAttribute(void)
+ ?sort@AlfContainer@Alf@@UAEXABVIAlfSortFunction@2@@Z @ 335 NONAME ; void Alf::AlfContainer::sort(class Alf::IAlfSortFunction const &)
+ ?doUpdateChildLayout@AlfGridLayoutManager@Alf@@MAEXPAVCAlfWidgetControl@2@@Z @ 336 NONAME ; void Alf::AlfGridLayoutManager::doUpdateChildLayout(class Alf::CAlfWidgetControl *)
+ ?type@AlfAttributeContainer@Alf@@QBE?AW4Type@12@XZ @ 337 NONAME ; enum Alf::AlfAttributeContainer::Type Alf::AlfAttributeContainer::type(void) const
+ ?stringValue@AlfAttribute@Alf@@QBEABVUString@osncore@@I@Z @ 338 NONAME ; class osncore::UString const & Alf::AlfAttribute::stringValue(unsigned int) const
+ ?destroyChildTemplate@AlfVisualTemplate@Alf@@UAEXPBD@Z @ 339 NONAME ; void Alf::AlfVisualTemplate::destroyChildTemplate(char const *)
+ ?parentElement@AlfElement@Alf@@UBEPBVIAlfElement@2@XZ @ 340 NONAME ; class Alf::IAlfElement const * Alf::AlfElement::parentElement(void) const
+ ?addEventPasserInput@AlfWidgetEventHandler@Alf@@QAEXHH@Z @ 341 NONAME ; void Alf::AlfWidgetEventHandler::addEventPasserInput(int, int)
+ ?setControlPosition@AlfLayoutManager@Alf@@IAEXAAVCAlfWidgetControl@2@ABUTAlfRealPoint@@@Z @ 342 NONAME ; void Alf::AlfLayoutManager::setControlPosition(class Alf::CAlfWidgetControl &, struct TAlfRealPoint const &)
+ ??0AlfWidget@Alf@@IAE@XZ @ 343 NONAME ; Alf::AlfWidget::AlfWidget(void)
+ ?customData@AlfContainer@Alf@@UAEPAVIAlfModelBase@2@XZ @ 344 NONAME ; class Alf::IAlfModelBase * Alf::AlfContainer::customData(void)
+ ?addItem@AlfContainer@Alf@@UAEXPAVIAlfVariantType@2@@Z @ 345 NONAME ; void Alf::AlfContainer::addItem(class Alf::IAlfVariantType *)
+ ?updateChildLayout@AlfFlowLayoutManager@Alf@@UAEXPAVCAlfWidgetControl@2@@Z @ 346 NONAME ; void Alf::AlfFlowLayoutManager::updateChildLayout(class Alf::CAlfWidgetControl *)
+ ?isFocusable@CAlfWidgetControl@Alf@@QBE_NXZ @ 347 NONAME ; bool Alf::CAlfWidgetControl::isFocusable(void) const
+ ?clearModel@AlfModel@Alf@@UAEXXZ @ 348 NONAME ; void Alf::AlfModel::clearModel(void)
+ ?element@CAlfWidgetControl@Alf@@UAEAAVIAlfElement@2@H@Z @ 349 NONAME ; class Alf::IAlfElement & Alf::CAlfWidgetControl::element(int)
+ ??0AlfViewportLayoutAttributeSetter@Alf@@QAE@XZ @ 350 NONAME ; Alf::AlfViewportLayoutAttributeSetter::AlfViewportLayoutAttributeSetter(void)
+ ?removeWidget@AlfWidget@Alf@@QAEXAAVIAlfWidget@2@@Z @ 351 NONAME ; void Alf::AlfWidget::removeWidget(class Alf::IAlfWidget &)
+ ?realValue@AlfAttributeValueType@Alf@@UBEMXZ @ 352 NONAME ; float Alf::AlfAttributeValueType::realValue(void) const
+ ?handleEvent@CAlfWidgetControl@Alf@@UAE?AW4AlfEventStatus@2@ABVTAlfEvent@@@Z @ 353 NONAME ; enum Alf::AlfEventStatus Alf::CAlfWidgetControl::handleEvent(class TAlfEvent const &)
+ ?clone@AlfAttribute@Alf@@QAEPAV12@XZ @ 354 NONAME ; class Alf::AlfAttribute * Alf::AlfAttribute::clone(void)
+ ?setDataField@AlfAttribute@Alf@@QAEXPBD@Z @ 355 NONAME ; void Alf::AlfAttribute::setDataField(char const *)
+ ?childrenCount@AlfBranch@Alf@@UAEIXZ @ 356 NONAME ; unsigned int Alf::AlfBranch::childrenCount(void)
+ ?addAnimationCancelOutput@AlfWidgetEventHandler@Alf@@QAEXPBD0W4TAlfOp@@_N@Z @ 357 NONAME ; void Alf::AlfWidgetEventHandler::addAnimationCancelOutput(char const *, char const *, enum TAlfOp, bool)
+ ?container@AlfMap@Alf@@UAEPAVIAlfContainer@2@XZ @ 358 NONAME ; class Alf::IAlfContainer * Alf::AlfMap::container(void)
+ ??0AlfVisualTemplate@Alf@@IAE@W4TAlfLayoutType@@@Z @ 359 NONAME ; Alf::AlfVisualTemplate::AlfVisualTemplate(enum TAlfLayoutType)
+ ??0AlfMeshVisualAttributeSetter@Alf@@QAE@XZ @ 360 NONAME ; Alf::AlfMeshVisualAttributeSetter::AlfMeshVisualAttributeSetter(void)
+ ?setDefaultParentLayout@AlfElement@Alf@@QAEXPAVAlfReferenceToVisual@2@@Z @ 361 NONAME ; void Alf::AlfElement::setDefaultParentLayout(class Alf::AlfReferenceToVisual *)
+ ?clear@AlfMap@Alf@@UAEXXZ @ 362 NONAME ; void Alf::AlfMap::clear(void)
+ ?addTactileOutput@AlfWidgetEventHandler@Alf@@QAEXW4WidgetTactileFeedbackType@2@@Z @ 363 NONAME ; void Alf::AlfWidgetEventHandler::addTactileOutput(enum Alf::WidgetTactileFeedbackType)
+ ?setAttributeValue@AlfCurvePathLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@@Z @ 364 NONAME ; void Alf::AlfCurvePathLayoutAttributeSetter::setAttributeValue(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *)
+ ?addModelChangeObserver@AlfModel@Alf@@UAEXAAVIAlfModelChangeObserver@2@@Z @ 365 NONAME ; void Alf::AlfModel::addModelChangeObserver(class Alf::IAlfModelChangeObserver &)
+ ?resolve@AlfReferenceToVisual@Alf@@QAEPAVCAlfVisual@@AAVCAlfWidgetControl@2@I@Z @ 366 NONAME ; class CAlfVisual * Alf::AlfReferenceToVisual::resolve(class Alf::CAlfWidgetControl &, unsigned int)
+ ?updateChildLayout@AlfAnchorLayoutManager@Alf@@UAEXPAVCAlfWidgetControl@2@@Z @ 367 NONAME ; void Alf::AlfAnchorLayoutManager::updateChildLayout(class Alf::CAlfWidgetControl *)
+ ?makeInterface@AlfCommonAttributeSetter@Alf@@UAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 368 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfCommonAttributeSetter::makeInterface(struct Alf::IfId const &)
+ ?createCommand@AlfCommonVisualAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 369 NONAME ; class TAlfCommand * Alf::AlfCommonVisualAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?create@AlfReferenceToVisual@Alf@@SAPAV12@PBD0_N@Z @ 370 NONAME ; class Alf::AlfReferenceToVisual * Alf::AlfReferenceToVisual::create(char const *, char const *, bool)
+ ?createAndSendCommands@AlfCommonLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 371 NONAME ; void Alf::AlfCommonLayoutAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?destroyVisualsAndElements@CAlfWidgetControl@Alf@@UAEXH@Z @ 372 NONAME ; void Alf::CAlfWidgetControl::destroyVisualsAndElements(int)
+ ?setDataIdRange@CAlfWidgetControl@Alf@@UAEXABVIAlfElement@2@I@Z @ 373 NONAME ; void Alf::CAlfWidgetControl::setDataIdRange(class Alf::IAlfElement const &, unsigned int)
+ ?createCommand@AlfCommonAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 374 NONAME ; class TAlfCommand * Alf::AlfCommonAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?childData@AlfBranch@Alf@@UAEPAVIAlfMap@2@XZ @ 375 NONAME ; class Alf::IAlfMap * Alf::AlfBranch::childData(void)
+ ?setChildFocus@AlfWidget@Alf@@UAEX_N@Z @ 376 NONAME ; void Alf::AlfWidget::setChildFocus(bool)
+ ?getTargetValueCount@AlfAttribute@Alf@@QBEIXZ @ 377 NONAME ; unsigned int Alf::AlfAttribute::getTargetValueCount(void) const
+ ?addAttributeSetter@AlfVisualTemplate@Alf@@UAEXPAVIAlfAttributeSetter@2@PAVAlfAttributeContainer@2@@Z @ 378 NONAME ; void Alf::AlfVisualTemplate::addAttributeSetter(class Alf::IAlfAttributeSetter *, class Alf::AlfAttributeContainer *)
+ ?state@CAlfWidgetControl@Alf@@UBEIXZ @ 379 NONAME ; unsigned int Alf::CAlfWidgetControl::state(void) const
+ ?operation@AlfModelOperation@Alf@@QBE?AW4OperationType@12@XZ @ 380 NONAME ; enum Alf::AlfModelOperation::OperationType Alf::AlfModelOperation::operation(void) const
+ ?removeItem@AlfMap@Alf@@UAEXABVUString@osncore@@@Z @ 381 NONAME ; void Alf::AlfMap::removeItem(class osncore::UString const &)
+ ?getVisualTemplate@AlfElement@Alf@@UBEPAVIAlfVisualTemplate@2@XZ @ 382 NONAME ; class Alf::IAlfVisualTemplate * Alf::AlfElement::getVisualTemplate(void) const
+ ?itemIndex@AlfMap@Alf@@UAEHABVUString@osncore@@@Z @ 383 NONAME ; int Alf::AlfMap::itemIndex(class osncore::UString const &)
+ ??1AlfElement@Alf@@UAE@XZ @ 384 NONAME ; Alf::AlfElement::~AlfElement(void)
+ ??0AlfAttributeContainer@Alf@@QAE@W4Type@01@@Z @ 385 NONAME ; Alf::AlfAttributeContainer::AlfAttributeContainer(enum Alf::AlfAttributeContainer::Type)
+ ?removeAndDestroyVisuals@AlfElement@Alf@@UAEXH@Z @ 386 NONAME ; void Alf::AlfElement::removeAndDestroyVisuals(int)
+ ?executeOperation@AlfModel@Alf@@UAEXPAVAlfModelOperation@2@@Z @ 387 NONAME ; void Alf::AlfModel::executeOperation(class Alf::AlfModelOperation *)
+ ?getWidgetIndex@AlfWidget@Alf@@UBEHAAVIAlfWidget@2@@Z @ 388 NONAME ; int Alf::AlfWidget::getWidgetIndex(class Alf::IAlfWidget &) const
+ ??0AlfFlowLayoutManager@Alf@@QAE@XZ @ 389 NONAME ; Alf::AlfFlowLayoutManager::AlfFlowLayoutManager(void)
+ ?addWidgetAttributeOutput@AlfWidgetEventHandler@Alf@@QAEXAAVUString@osncore@@PAVAlfAttributeValueType@2@PBD@Z @ 390 NONAME ; void Alf::AlfWidgetEventHandler::addWidgetAttributeOutput(class osncore::UString &, class Alf::AlfAttributeValueType *, char const *)
+ ?addData@AlfModel@Alf@@UAEXHPAHPAVIAlfVariantType@2@@Z @ 391 NONAME ; void Alf::AlfModel::addData(int, int *, class Alf::IAlfVariantType *)
+ ?addChildTemplate@AlfVisualTemplate@Alf@@UAEXAAVIAlfVisualTemplate@2@@Z @ 392 NONAME ; void Alf::AlfVisualTemplate::addChildTemplate(class Alf::IAlfVisualTemplate &)
+ ?clear@AlfContainer@Alf@@UAEXXZ @ 393 NONAME ; void Alf::AlfContainer::clear(void)
+ ??4AlfAttribute@Alf@@QAEAAV01@ABV01@@Z @ 394 NONAME ; class Alf::AlfAttribute & Alf::AlfAttribute::operator=(class Alf::AlfAttribute const &)
+ ?name@AlfAttribute@Alf@@QBEPBDXZ @ 395 NONAME ; char const * Alf::AlfAttribute::name(void) const
+ ?createAndSendCommands@AlfGridLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 396 NONAME ; void Alf::AlfGridLayoutAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?removeChildVisualTree@AlfElement@Alf@@UAEXPAVIAlfElement@2@AAVIAlfBranch@2@HI@Z @ 397 NONAME ; void Alf::AlfElement::removeChildVisualTree(class Alf::IAlfElement *, class Alf::IAlfBranch &, int, unsigned int)
+ ?parent@AlfWidget@Alf@@UBEPAVIAlfContainerWidget@2@XZ @ 398 NONAME ; class Alf::IAlfContainerWidget * Alf::AlfWidget::parent(void) const
+ ?addSourceValue@AlfAttribute@Alf@@QAEXPAVAlfAttributeValueType@2@@Z @ 399 NONAME ; void Alf::AlfAttribute::addSourceValue(class Alf::AlfAttributeValueType *)
+ ?FocusChanged@CAlfWidgetControl@Alf@@MAEXAAVCAlfDisplay@@H@Z @ 400 NONAME ; void Alf::CAlfWidgetControl::FocusChanged(class CAlfDisplay &, int)
+ ?makeInterface@AlfElement@Alf@@UAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 401 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfElement::makeInterface(struct Alf::IfId const &)
+ ?addAppEventOutput@AlfWidgetEventHandler@Alf@@QAEXABVUString@osncore@@AAVIAlfAppEventListener@2@@Z @ 402 NONAME ; void Alf::AlfWidgetEventHandler::addAppEventOutput(class osncore::UString const &, class Alf::IAlfAppEventListener &)
+ ?defaultParentLayout@AlfElement@Alf@@UAEPAVCAlfLayout@@I@Z @ 403 NONAME ; class CAlfLayout * Alf::AlfElement::defaultParentLayout(unsigned int)
+ ?setControlRect@AlfLayoutManager@Alf@@IAEXAAVCAlfWidgetControl@2@ABUTAlfRealRect@@@Z @ 404 NONAME ; void Alf::AlfLayoutManager::setControlRect(class Alf::CAlfWidgetControl &, struct TAlfRealRect const &)
+ ?makeInterface@AlfRecyclingGridElement@Alf@@UAEPAVIAlfInterfaceBase@2@ABUIfId@2@@Z @ 405 NONAME ; class Alf::IAlfInterfaceBase * Alf::AlfRecyclingGridElement::makeInterface(struct Alf::IfId const &)
+ ?previousFocusableControl@CAlfWidgetControl@Alf@@AAEPAV12@PAV12@@Z @ 406 NONAME ; class Alf::CAlfWidgetControl * Alf::CAlfWidgetControl::previousFocusableControl(class Alf::CAlfWidgetControl *)
+ ?setChildData@AlfBranch@Alf@@UAEXPAVIAlfMap@2@@Z @ 407 NONAME ; void Alf::AlfBranch::setChildData(class Alf::IAlfMap *)
+ ?setControl@AlfWidget@Alf@@UAEXPAVCAlfWidgetControl@2@_N@Z @ 408 NONAME ; void Alf::AlfWidget::setControl(class Alf::CAlfWidgetControl *, bool)
+ ??2CAlfWidgetControl@Alf@@SAPAXIW4newarg@@@Z @ 409 NONAME ; void * Alf::CAlfWidgetControl::operator new(unsigned int, enum newarg)
+ ?enableState@CAlfWidgetControl@Alf@@UAEXI@Z @ 410 NONAME ; void Alf::CAlfWidgetControl::enableState(unsigned int)
+ ?themeManagerUtil@AlfWidgetEnvExtension@Alf@@SAAAVAlfThemeManagerUtil@2@AAVCAlfEnv@@@Z @ 411 NONAME ; class Alf::AlfThemeManagerUtil & Alf::AlfWidgetEnvExtension::themeManagerUtil(class CAlfEnv &)
+ ??1AlfMeshVisualAttributeSetter@Alf@@UAE@XZ @ 412 NONAME ; Alf::AlfMeshVisualAttributeSetter::~AlfMeshVisualAttributeSetter(void)
+ ?createLayout@AlfLayoutManager@Alf@@UAEXAAVCAlfWidgetControl@2@PAVCAlfLayout@@H@Z @ 413 NONAME ; void Alf::AlfLayoutManager::createLayout(class Alf::CAlfWidgetControl &, class CAlfLayout *, int)
+ ?sendCommand@AlfAnimationOutput@Alf@@QAEXAAVCAlfWidgetControl@2@I@Z @ 414 NONAME ; void Alf::AlfAnimationOutput::sendCommand(class Alf::CAlfWidgetControl &, unsigned int)
+ ??0AlfBranch@Alf@@QAE@XZ @ 415 NONAME ; Alf::AlfBranch::AlfBranch(void)
+ ?set@AlfBranch@Alf@@UAEXAAVIAlfVariantType@2@@Z @ 416 NONAME ; void Alf::AlfBranch::set(class Alf::IAlfVariantType &)
+ ?unit@AlfAttribute@Alf@@UBE?AW4TAlfUnit@@I@Z @ 417 NONAME ; enum TAlfUnit Alf::AlfAttribute::unit(unsigned int) const
+ ?resolve@AlfReferenceToVisual@Alf@@QAEPAVCAlfVisual@@AAVCAlfWidgetControl@2@PAV3@@Z @ 418 NONAME ; class CAlfVisual * Alf::AlfReferenceToVisual::resolve(class Alf::CAlfWidgetControl &, class CAlfVisual *)
+ ?real@AlfBranch@Alf@@UBENXZ @ 419 NONAME ; double Alf::AlfBranch::real(void) const
+ ?layoutType@AlfVisualTemplate@Alf@@UBEHXZ @ 420 NONAME ; int Alf::AlfVisualTemplate::layoutType(void) const
+ ?contains@AlfElement@Alf@@UBE_NAAVCAlfVisual@@@Z @ 421 NONAME ; bool Alf::AlfElement::contains(class CAlfVisual &) const
+ ?boolean@AlfMap@Alf@@UBE_NXZ @ 422 NONAME ; bool Alf::AlfMap::boolean(void) const
+ ?create@AlfVisualTemplate@Alf@@SAPAV12@W4TAlfLayoutType@@@Z @ 423 NONAME ; class Alf::AlfVisualTemplate * Alf::AlfVisualTemplate::create(enum TAlfLayoutType)
+ ?construct@AlfElement@Alf@@IAEXAAVCAlfWidgetControl@2@PBD@Z @ 424 NONAME ; void Alf::AlfElement::construct(class Alf::CAlfWidgetControl &, char const *)
+ ?createCommand@AlfAnchorLayoutAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 425 NONAME ; class TAlfCommand * Alf::AlfAnchorLayoutAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?removeAndDestroyEventHandler@CAlfWidgetControl@Alf@@UAEXAAVIAlfWidgetEventHandler@2@@Z @ 426 NONAME ; void Alf::CAlfWidgetControl::removeAndDestroyEventHandler(class Alf::IAlfWidgetEventHandler &)
+ ?getFocusableAfter@CAlfWidgetControl@Alf@@MAEPAV12@AAVIAlfContainerWidget@2@AAV12@@Z @ 427 NONAME ; class Alf::CAlfWidgetControl * Alf::CAlfWidgetControl::getFocusableAfter(class Alf::IAlfContainerWidget &, class Alf::CAlfWidgetControl &)
+ ??1AlfModel@Alf@@UAE@XZ @ 428 NONAME ; Alf::AlfModel::~AlfModel(void)
+ ?containerIndex@AlfModelOperation@Alf@@QBEHH@Z @ 429 NONAME ; int Alf::AlfModelOperation::containerIndex(int) const
+ ?updateDataIDs@AlfElement@Alf@@UAEXAAVIAlfBranch@2@HHII@Z @ 430 NONAME ; void Alf::AlfElement::updateDataIDs(class Alf::IAlfBranch &, int, int, unsigned int, unsigned int)
+ ?controlRect@AlfLayoutManager@Alf@@IAE_NAAVCAlfWidgetControl@2@AAUTAlfRealRect@@@Z @ 431 NONAME ; bool Alf::AlfLayoutManager::controlRect(class Alf::CAlfWidgetControl &, struct TAlfRealRect &)
+ ?setterType@AlfCommonAttributeSetter@Alf@@UAE?AW4SetterType@@XZ @ 432 NONAME ; enum SetterType Alf::AlfCommonAttributeSetter::setterType(void)
+ ?enableDirtyCheck@AlfCommonAttributeSetter@Alf@@QAEX_N@Z @ 433 NONAME ; void Alf::AlfCommonAttributeSetter::enableDirtyCheck(bool)
+ ?removeVisualTemplate@AlfElement@Alf@@UAEPAVIAlfVisualTemplate@2@XZ @ 434 NONAME ; class Alf::IAlfVisualTemplate * Alf::AlfElement::removeVisualTemplate(void)
+ ??0AlfCommonVisualAttributeSetter@Alf@@QAE@XZ @ 435 NONAME ; Alf::AlfCommonVisualAttributeSetter::AlfCommonVisualAttributeSetter(void)
+ ?dataChanging@CAlfWidgetControl@Alf@@UAEXABVAlfModelOperation@2@@Z @ 436 NONAME ; void Alf::CAlfWidgetControl::dataChanging(class Alf::AlfModelOperation const &)
+ ?applyLayout@AlfWidget@Alf@@UAEXAAVIAlfLayoutManager@2@@Z @ 437 NONAME ; void Alf::AlfWidget::applyLayout(class Alf::IAlfLayoutManager &)
+ ?dataChanging@CAlfWidgetControl@Alf@@UAEXABV?$AlfPtrVector@VAlfModelOperation@Alf@@@osncore@@@Z @ 438 NONAME ; void Alf::CAlfWidgetControl::dataChanging(class osncore::AlfPtrVector<class Alf::AlfModelOperation> const &)
+ ?branch@AlfBranch@Alf@@UAEPAVIAlfBranch@2@XZ @ 439 NONAME ; class Alf::IAlfBranch * Alf::AlfBranch::branch(void)
+ ?dataChanged@CAlfWidgetControl@Alf@@UAEXXZ @ 440 NONAME ; void Alf::CAlfWidgetControl::dataChanged(void)
+ ??0AlfVariantType@Alf@@QAE@PAVIAlfModelBase@1@@Z @ 441 NONAME ; Alf::AlfVariantType::AlfVariantType(class Alf::IAlfModelBase *)
+ ?parentData@AlfModelOperation@Alf@@QBEPAVIAlfVariantType@2@AAV32@@Z @ 442 NONAME ; class Alf::IAlfVariantType * Alf::AlfModelOperation::parentData(class Alf::IAlfVariantType &) const
+ ?createAndSendCommands@AlfLineVisualAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 443 NONAME ; void Alf::AlfLineVisualAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?createCommand@AlfMeshVisualAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 444 NONAME ; class TAlfCommand * Alf::AlfMeshVisualAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ??1AlfCommonAttributeSetter@Alf@@UAE@XZ @ 445 NONAME ; Alf::AlfCommonAttributeSetter::~AlfCommonAttributeSetter(void)
+ ??0AlfModel@Alf@@QAE@XZ @ 446 NONAME ; Alf::AlfModel::AlfModel(void)
+ ?boolean@AlfBranch@Alf@@UBE_NXZ @ 447 NONAME ; bool Alf::AlfBranch::boolean(void) const
+ ??1AlfImageVisualAttributeSetter@Alf@@UAE@XZ @ 448 NONAME ; Alf::AlfImageVisualAttributeSetter::~AlfImageVisualAttributeSetter(void)
+ ?getDelay@AlfAttribute@Alf@@QBEHXZ @ 449 NONAME ; int Alf::AlfAttribute::getDelay(void) const
+ ?item@AlfContainer@Alf@@UAEPAVIAlfVariantType@2@I@Z @ 450 NONAME ; class Alf::IAlfVariantType * Alf::AlfContainer::item(unsigned int)
+ ?updateParentLayout@CAlfWidgetControl@Alf@@QAEXXZ @ 451 NONAME ; void Alf::CAlfWidgetControl::updateParentLayout(void)
+ ?createAndSendCommands@AlfTextVisualAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 452 NONAME ; void Alf::AlfTextVisualAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?create@AlfModelOperation@Alf@@SAPAV12@W4OperationType@12@HPAHPAVIAlfVariantType@2@@Z @ 453 NONAME ; class Alf::AlfModelOperation * Alf::AlfModelOperation::create(enum Alf::AlfModelOperation::OperationType, int, int *, class Alf::IAlfVariantType *)
+ ??0AlfDeckLayoutAttributeSetter@Alf@@QAE@XZ @ 454 NONAME ; Alf::AlfDeckLayoutAttributeSetter::AlfDeckLayoutAttributeSetter(void)
+ ?createAndSendCommands@AlfDeckLayoutAttributeSetter@Alf@@UAEXAAVCAlfVisual@@PAVAlfAttributeContainer@2@PAV3@@Z @ 455 NONAME ; void Alf::AlfDeckLayoutAttributeSetter::createAndSendCommands(class CAlfVisual &, class Alf::AlfAttributeContainer *, class CAlfVisual *)
+ ?elementData@CAlfWidgetControl@Alf@@UAEPAVIAlfVariantType@2@ABVIAlfElement@2@I@Z @ 456 NONAME ; class Alf::IAlfVariantType * Alf::CAlfWidgetControl::elementData(class Alf::IAlfElement const &, unsigned int)
+ ??1AlfAnchorLayoutAttributeSetter@Alf@@UAE@XZ @ 457 NONAME ; Alf::AlfAnchorLayoutAttributeSetter::~AlfAnchorLayoutAttributeSetter(void)
+ ?createCommand@AlfImageVisualAttributeSetter@Alf@@UAEPAVTAlfCommand@@AAVCAlfVisual@@PAVAlfAttributeContainer@2@PAVIAlfMap@2@HPAV4@@Z @ 458 NONAME ; class TAlfCommand * Alf::AlfImageVisualAttributeSetter::createCommand(class CAlfVisual &, class Alf::AlfAttributeContainer *, class Alf::IAlfMap *, int, class CAlfVisual *)
+ ?newDataName@AlfModelOperation@Alf@@QBEABVUString@osncore@@XZ @ 459 NONAME ; class osncore::UString const & Alf::AlfModelOperation::newDataName(void) const
+ ?widgetFactory@AlfWidgetEnvExtension@Alf@@SAAAVIAlfWidgetFactory@2@AAVCAlfEnv@@@Z @ 460 NONAME ; class Alf::IAlfWidgetFactory & Alf::AlfWidgetEnvExtension::widgetFactory(class CAlfEnv &)
+ ?name@AlfElement@Alf@@UBEPBDXZ @ 461 NONAME ; char const * Alf::AlfElement::name(void) const
+ ?setVisualTemplate@AlfElement@Alf@@UAEXAAVIAlfVisualTemplate@2@@Z @ 462 NONAME ; void Alf::AlfElement::setVisualTemplate(class Alf::IAlfVisualTemplate &)
+ ?clone@AlfMap@Alf@@UAEPAVIAlfMap@2@XZ @ 463 NONAME ; class Alf::IAlfMap * Alf::AlfMap::clone(void)
+ ?owner@AlfVisualTemplate@Alf@@UBEPAVIAlfElement@2@XZ @ 464 NONAME ; class Alf::IAlfElement * Alf::AlfVisualTemplate::owner(void) const
+ ?removeModelChangeObserver@AlfModel@Alf@@UAEXAAVIAlfModelChangeObserver@2@@Z @ 465 NONAME ; void Alf::AlfModel::removeModelChangeObserver(class Alf::IAlfModelChangeObserver &)
+ ?getControl@AlfLayoutManager@Alf@@QBEPAVCAlfWidgetControl@2@H@Z @ 466 NONAME ; class Alf::CAlfWidgetControl * Alf::AlfLayoutManager::getControl(int) const
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/eabi/alfwidgetmodelu.def Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,715 @@
+EXPORTS
+ _ZN3Alf10AlfElement10findVisualEPKcj @ 1 NONAME
+ _ZN3Alf10AlfElement10findVisualEj @ 2 NONAME
+ _ZN3Alf10AlfElement13addVisualTreeEP10CAlfVisualj @ 3 NONAME
+ _ZN3Alf10AlfElement13makeInterfaceERKNS_4IfIdE @ 4 NONAME
+ _ZN3Alf10AlfElement13updateDataIDsERNS_10IAlfBranchEiijj @ 5 NONAME
+ _ZN3Alf10AlfElement16createVisualTreeERNS_15IAlfVariantTypeERNS_10IAlfBranchEijP10CAlfLayouti @ 6 NONAME
+ _ZN3Alf10AlfElement16createVisualTreeERNS_15IAlfVariantTypeEjP10CAlfLayouti @ 7 NONAME
+ _ZN3Alf10AlfElement16removeVisualTreeERNS_10IAlfBranchEij @ 8 NONAME
+ _ZN3Alf10AlfElement16removeVisualTreeERNS_15IAlfVariantTypeEj @ 9 NONAME
+ _ZN3Alf10AlfElement16setParentElementERNS_11IAlfElementE @ 10 NONAME
+ _ZN3Alf10AlfElement16updateVisualTreeERNS_15IAlfVariantTypeES2_j @ 11 NONAME
+ _ZN3Alf10AlfElement17replaceVisualTreeERNS_15IAlfVariantTypeEjj @ 12 NONAME
+ _ZN3Alf10AlfElement17setVisualTemplateERNS_18IAlfVisualTemplateE @ 13 NONAME
+ _ZN3Alf10AlfElement19defaultParentLayoutEj @ 14 NONAME
+ _ZN3Alf10AlfElement20removeVisualTemplateEv @ 15 NONAME
+ _ZN3Alf10AlfElement21createChildVisualTreeEPNS_11IAlfElementERNS_15IAlfVariantTypeERNS_10IAlfBranchEij @ 16 NONAME
+ _ZN3Alf10AlfElement21destroyVisualTemplateEv @ 17 NONAME
+ _ZN3Alf10AlfElement21removeChildVisualTreeEPNS_11IAlfElementERNS_10IAlfBranchEij @ 18 NONAME
+ _ZN3Alf10AlfElement22setDefaultParentLayoutEPNS_20AlfReferenceToVisualE @ 19 NONAME
+ _ZN3Alf10AlfElement23removeAndDestroyVisualsEi @ 20 NONAME
+ _ZN3Alf10AlfElement7controlEv @ 21 NONAME
+ _ZN3Alf10AlfElement9constructERNS_17CAlfWidgetControlEPKc @ 22 NONAME
+ _ZN3Alf10AlfElementC1ERNS_17CAlfWidgetControlEPKc @ 23 NONAME
+ _ZN3Alf10AlfElementC1Ev @ 24 NONAME
+ _ZN3Alf10AlfElementC2ERNS_17CAlfWidgetControlEPKc @ 25 NONAME
+ _ZN3Alf10AlfElementC2Ev @ 26 NONAME
+ _ZN3Alf10AlfElementD0Ev @ 27 NONAME
+ _ZN3Alf10AlfElementD1Ev @ 28 NONAME
+ _ZN3Alf10AlfElementD2Ev @ 29 NONAME
+ _ZN3Alf12AlfAttribute12setDataFieldEPKc @ 30 NONAME
+ _ZN3Alf12AlfAttribute14addSourceValueEPNS_21AlfAttributeValueTypeE @ 31 NONAME
+ _ZN3Alf12AlfAttribute14addTargetValueEPNS_21AlfAttributeValueTypeE @ 32 NONAME
+ _ZN3Alf12AlfAttribute14setSourceValueEPNS_21AlfAttributeValueTypeEj @ 33 NONAME
+ _ZN3Alf12AlfAttribute14setTargetValueEPNS_21AlfAttributeValueTypeEj @ 34 NONAME
+ _ZN3Alf12AlfAttribute17removeSourceValueEj @ 35 NONAME
+ _ZN3Alf12AlfAttribute17removeTargetValueEj @ 36 NONAME
+ _ZN3Alf12AlfAttribute20setMappingFunctionIdEi @ 37 NONAME
+ _ZN3Alf12AlfAttribute21setInterpolationStyleE22TAlfInterpolationStyle @ 38 NONAME
+ _ZN3Alf12AlfAttribute5cloneEv @ 39 NONAME
+ _ZN3Alf12AlfAttribute7setTimeEi @ 40 NONAME
+ _ZN3Alf12AlfAttribute8setDelayEi @ 41 NONAME
+ _ZN3Alf12AlfAttribute8setDirtyEb @ 42 NONAME
+ _ZN3Alf12AlfAttributeC1EPKcNS0_17attributecategoryE @ 43 NONAME
+ _ZN3Alf12AlfAttributeC1EPKcRKN7osncore7UStringENS0_17attributecategoryE @ 44 NONAME
+ _ZN3Alf12AlfAttributeC1EPKcf8TAlfUnitNS0_17attributecategoryE @ 45 NONAME
+ _ZN3Alf12AlfAttributeC1EPKci8TAlfUnitNS0_17attributecategoryE @ 46 NONAME
+ _ZN3Alf12AlfAttributeC1Ev @ 47 NONAME
+ _ZN3Alf12AlfAttributeC2EPKcNS0_17attributecategoryE @ 48 NONAME
+ _ZN3Alf12AlfAttributeC2EPKcRKN7osncore7UStringENS0_17attributecategoryE @ 49 NONAME
+ _ZN3Alf12AlfAttributeC2EPKcf8TAlfUnitNS0_17attributecategoryE @ 50 NONAME
+ _ZN3Alf12AlfAttributeC2EPKci8TAlfUnitNS0_17attributecategoryE @ 51 NONAME
+ _ZN3Alf12AlfAttributeC2Ev @ 52 NONAME
+ _ZN3Alf12AlfAttributeD0Ev @ 53 NONAME
+ _ZN3Alf12AlfAttributeD1Ev @ 54 NONAME
+ _ZN3Alf12AlfAttributeD2Ev @ 55 NONAME
+ _ZN3Alf12AlfAttributeaSERKS0_ @ 56 NONAME
+ _ZN3Alf12AlfContainer10customDataEv @ 57 NONAME
+ _ZN3Alf12AlfContainer10removeItemEj @ 58 NONAME
+ _ZN3Alf12AlfContainer11replaceItemEjPNS_15IAlfVariantTypeE @ 59 NONAME
+ _ZN3Alf12AlfContainer3mapEv @ 60 NONAME
+ _ZN3Alf12AlfContainer3setERNS_15IAlfVariantTypeE @ 61 NONAME
+ _ZN3Alf12AlfContainer4itemEj @ 62 NONAME
+ _ZN3Alf12AlfContainer4sortERKNS_16IAlfSortFunctionE @ 63 NONAME
+ _ZN3Alf12AlfContainer5clearEv @ 64 NONAME
+ _ZN3Alf12AlfContainer5cloneEv @ 65 NONAME
+ _ZN3Alf12AlfContainer5countEv @ 66 NONAME
+ _ZN3Alf12AlfContainer6branchEv @ 67 NONAME
+ _ZN3Alf12AlfContainer7addItemEPNS_15IAlfVariantTypeE @ 68 NONAME
+ _ZN3Alf12AlfContainer7addItemEjPNS_15IAlfVariantTypeE @ 69 NONAME
+ _ZN3Alf12AlfContainer9containerEv @ 70 NONAME
+ _ZN3Alf12AlfContainerC1Ev @ 71 NONAME
+ _ZN3Alf12AlfContainerC2Ev @ 72 NONAME
+ _ZN3Alf12AlfContainerD0Ev @ 73 NONAME
+ _ZN3Alf12AlfContainerD1Ev @ 74 NONAME
+ _ZN3Alf12AlfContainerD2Ev @ 75 NONAME
+ _ZN3Alf14AlfHostAPIImpl13makeInterfaceERKNS_4IfIdE @ 76 NONAME
+ _ZN3Alf14AlfVariantType10customDataEv @ 77 NONAME
+ _ZN3Alf14AlfVariantType3mapEv @ 78 NONAME
+ _ZN3Alf14AlfVariantType3setERNS_15IAlfVariantTypeE @ 79 NONAME
+ _ZN3Alf14AlfVariantType6branchEv @ 80 NONAME
+ _ZN3Alf14AlfVariantType9containerEv @ 81 NONAME
+ _ZN3Alf14AlfVariantTypeC1EPNS_13IAlfModelBaseE @ 82 NONAME
+ _ZN3Alf14AlfVariantTypeC1ERKN7osncore7UStringE @ 83 NONAME
+ _ZN3Alf14AlfVariantTypeC1ERKb @ 84 NONAME
+ _ZN3Alf14AlfVariantTypeC1ERKd @ 85 NONAME
+ _ZN3Alf14AlfVariantTypeC1ERKi @ 86 NONAME
+ _ZN3Alf14AlfVariantTypeC1ERKj @ 87 NONAME
+ _ZN3Alf14AlfVariantTypeC1Ev @ 88 NONAME
+ _ZN3Alf14AlfVariantTypeC2EPNS_13IAlfModelBaseE @ 89 NONAME
+ _ZN3Alf14AlfVariantTypeC2ERKN7osncore7UStringE @ 90 NONAME
+ _ZN3Alf14AlfVariantTypeC2ERKb @ 91 NONAME
+ _ZN3Alf14AlfVariantTypeC2ERKd @ 92 NONAME
+ _ZN3Alf14AlfVariantTypeC2ERKi @ 93 NONAME
+ _ZN3Alf14AlfVariantTypeC2ERKj @ 94 NONAME
+ _ZN3Alf14AlfVariantTypeC2Ev @ 95 NONAME
+ _ZN3Alf14AlfVariantTypeD0Ev @ 96 NONAME
+ _ZN3Alf14AlfVariantTypeD1Ev @ 97 NONAME
+ _ZN3Alf14AlfVariantTypeD2Ev @ 98 NONAME
+ _ZN3Alf16AlfLayoutManager11controlRectERNS_17CAlfWidgetControlER12TAlfRealRect @ 99 NONAME
+ _ZN3Alf16AlfLayoutManager12childRemovedEPNS_17CAlfWidgetControlE @ 100 NONAME
+ _ZN3Alf16AlfLayoutManager12createLayoutERNS_17CAlfWidgetControlEP10CAlfLayouti @ 101 NONAME
+ _ZN3Alf16AlfLayoutManager13makeInterfaceERKNS_4IfIdE @ 102 NONAME
+ _ZN3Alf16AlfLayoutManager14setControlRectERNS_17CAlfWidgetControlERK12TAlfRealRect @ 103 NONAME
+ _ZN3Alf16AlfLayoutManager14setControlSizeERNS_17CAlfWidgetControlERK13TAlfRealPoint @ 104 NONAME
+ _ZN3Alf16AlfLayoutManager17updateChildLayoutEPNS_17CAlfWidgetControlE @ 105 NONAME
+ _ZN3Alf16AlfLayoutManager18setControlPositionERNS_17CAlfWidgetControlERK13TAlfRealPoint @ 106 NONAME
+ _ZN3Alf16AlfLayoutManager19doUpdateChildLayoutEPNS_17CAlfWidgetControlE @ 107 NONAME
+ _ZN3Alf16AlfLayoutManager20updateChildrenLayoutEv @ 108 NONAME
+ _ZN3Alf16AlfLayoutManagerC1E14TAlfLayoutType @ 109 NONAME
+ _ZN3Alf16AlfLayoutManagerC2E14TAlfLayoutType @ 110 NONAME
+ _ZN3Alf16AlfLayoutManagerD0Ev @ 111 NONAME
+ _ZN3Alf16AlfLayoutManagerD1Ev @ 112 NONAME
+ _ZN3Alf16AlfLayoutManagerD2Ev @ 113 NONAME
+ _ZN3Alf17AlfModelOperation10getNewDataEv @ 114 NONAME
+ _ZN3Alf17AlfModelOperation6createENS0_13OperationTypeEiPiPNS_15IAlfVariantTypeE @ 115 NONAME
+ _ZN3Alf17AlfModelOperation6createENS0_13OperationTypeEiPiPNS_15IAlfVariantTypeERKN7osncore7UStringE @ 116 NONAME
+ _ZN3Alf17AlfModelOperationD1Ev @ 117 NONAME
+ _ZN3Alf17AlfModelOperationD2Ev @ 118 NONAME
+ _ZN3Alf17AlfVisualTemplate13makeInterfaceERKNS_4IfIdE @ 119 NONAME
+ _ZN3Alf17AlfVisualTemplate13setLayoutTypeE14TAlfLayoutType @ 120 NONAME
+ _ZN3Alf17AlfVisualTemplate13setVisualTypeE14TAlfVisualType @ 121 NONAME
+ _ZN3Alf17AlfVisualTemplate16addChildTemplateERNS_18IAlfVisualTemplateE @ 122 NONAME
+ _ZN3Alf17AlfVisualTemplate16createVisualTreeER11CAlfControlPNS_7IAlfMapEP10CAlfLayouti @ 123 NONAME
+ _ZN3Alf17AlfVisualTemplate16updateVisualTreeEPNS_7IAlfMapES2_R10CAlfVisual @ 124 NONAME
+ _ZN3Alf17AlfVisualTemplate18addAttributeSetterEPNS_19IAlfAttributeSetterEPNS_21AlfAttributeContainerE @ 125 NONAME
+ _ZN3Alf17AlfVisualTemplate18setSelectChildModeEbRKN7osncore7UStringE @ 126 NONAME
+ _ZN3Alf17AlfVisualTemplate19insertChildTemplateERNS_18IAlfVisualTemplateEi @ 127 NONAME
+ _ZN3Alf17AlfVisualTemplate20destroyChildTemplateEPKc @ 128 NONAME
+ _ZN3Alf17AlfVisualTemplate20destroyChildTemplateEi @ 129 NONAME
+ _ZN3Alf17AlfVisualTemplate6createE14TAlfLayoutType @ 130 NONAME
+ _ZN3Alf17AlfVisualTemplate6createE14TAlfVisualType @ 131 NONAME
+ _ZN3Alf17AlfVisualTemplate6createEv @ 132 NONAME
+ _ZN3Alf17AlfVisualTemplate7setNameEPKc @ 133 NONAME
+ _ZN3Alf17AlfVisualTemplate8addBrushER9CAlfBrush @ 134 NONAME
+ _ZN3Alf17AlfVisualTemplate8setOwnerEPNS_11IAlfElementE @ 135 NONAME
+ _ZN3Alf17AlfVisualTemplate9setParentEPNS_18IAlfVisualTemplateE @ 136 NONAME
+ _ZN3Alf17AlfVisualTemplateC1E14TAlfLayoutType @ 137 NONAME
+ _ZN3Alf17AlfVisualTemplateC1E14TAlfVisualType @ 138 NONAME
+ _ZN3Alf17AlfVisualTemplateC1Ev @ 139 NONAME
+ _ZN3Alf17AlfVisualTemplateC2E14TAlfLayoutType @ 140 NONAME
+ _ZN3Alf17AlfVisualTemplateC2E14TAlfVisualType @ 141 NONAME
+ _ZN3Alf17AlfVisualTemplateC2Ev @ 142 NONAME
+ _ZN3Alf17AlfVisualTemplateD0Ev @ 143 NONAME
+ _ZN3Alf17AlfVisualTemplateD1Ev @ 144 NONAME
+ _ZN3Alf17AlfVisualTemplateD2Ev @ 145 NONAME
+ _ZN3Alf17CAlfWidgetControl10addElementEPNS_11IAlfElementE @ 146 NONAME
+ _ZN3Alf17CAlfWidgetControl11OfferEventLERK9TAlfEvent @ 147 NONAME
+ _ZN3Alf17CAlfWidgetControl11dataChangedEv @ 148 NONAME
+ _ZN3Alf17CAlfWidgetControl11dataIdRangeERKNS_11IAlfElementE @ 149 NONAME
+ _ZN3Alf17CAlfWidgetControl11elementDataERKNS_11IAlfElementEj @ 150 NONAME
+ _ZN3Alf17CAlfWidgetControl11enableStateEj @ 151 NONAME
+ _ZN3Alf17CAlfWidgetControl11findElementEPKc @ 152 NONAME
+ _ZN3Alf17CAlfWidgetControl11handleEventERK9TAlfEvent @ 153 NONAME
+ _ZN3Alf17CAlfWidgetControl12AcquireFocusEv @ 154 NONAME
+ _ZN3Alf17CAlfWidgetControl12FocusChangedER11CAlfDisplayi @ 155 NONAME
+ _ZN3Alf17CAlfWidgetControl12dataChangingERKN7osncore12AlfPtrVectorINS_17AlfModelOperationEEE @ 156 NONAME
+ _ZN3Alf17CAlfWidgetControl12dataChangingERKNS_17AlfModelOperationE @ 157 NONAME
+ _ZN3Alf17CAlfWidgetControl12disableStateEj @ 158 NONAME
+ _ZN3Alf17CAlfWidgetControl12eventHandlerEi @ 159 NONAME
+ _ZN3Alf17CAlfWidgetControl12modelChangedERNS_9IAlfModelE @ 160 NONAME
+ _ZN3Alf17CAlfWidgetControl12processEventERK9TAlfEvent @ 161 NONAME
+ _ZN3Alf17CAlfWidgetControl13dataIdToIndexERKNS_11IAlfElementEj @ 162 NONAME
+ _ZN3Alf17CAlfWidgetControl13elementDataIdERKNS_11IAlfElementEjj @ 163 NONAME
+ _ZN3Alf17CAlfWidgetControl13makeInterfaceERKNS_4IfIdE @ 164 NONAME
+ _ZN3Alf17CAlfWidgetControl13removeElementERKNS_11IAlfElementE @ 165 NONAME
+ _ZN3Alf17CAlfWidgetControl14setDataIdRangeERKNS_11IAlfElementEj @ 166 NONAME
+ _ZN3Alf17CAlfWidgetControl15RelinquishFocusEv @ 167 NONAME
+ _ZN3Alf17CAlfWidgetControl15addEventHandlerEPNS_22IAlfWidgetEventHandlerEi @ 168 NONAME
+ _ZN3Alf17CAlfWidgetControl15handleFocusNextEv @ 169 NONAME
+ _ZN3Alf17CAlfWidgetControl16findEventHandlerERK9TAlfEvent @ 170 NONAME
+ _ZN3Alf17CAlfWidgetControl16getLastFocusableERNS_19IAlfContainerWidgetE @ 171 NONAME
+ _ZN3Alf17CAlfWidgetControl17getFirstFocusableERNS_19IAlfContainerWidgetE @ 172 NONAME
+ _ZN3Alf17CAlfWidgetControl17getFocusableAfterERNS_19IAlfContainerWidgetERS0_ @ 173 NONAME
+ _ZN3Alf17CAlfWidgetControl18getFocusableBeforeERNS_19IAlfContainerWidgetERS0_ @ 174 NONAME
+ _ZN3Alf17CAlfWidgetControl18removeEventHandlerERNS_22IAlfWidgetEventHandlerE @ 175 NONAME
+ _ZN3Alf17CAlfWidgetControl18updateParentLayoutEv @ 176 NONAME
+ _ZN3Alf17CAlfWidgetControl18updatePresentationEv @ 177 NONAME
+ _ZN3Alf17CAlfWidgetControl19destroyPresentationEi @ 178 NONAME
+ _ZN3Alf17CAlfWidgetControl19handleFocusPreviousEv @ 179 NONAME
+ _ZN3Alf17CAlfWidgetControl19parentElementDataIdERKNS_11IAlfElementEj @ 180 NONAME
+ _ZN3Alf17CAlfWidgetControl20nextFocusableControlEPS0_ @ 181 NONAME
+ _ZN3Alf17CAlfWidgetControl23removeAndDestroyElementERKNS_11IAlfElementE @ 182 NONAME
+ _ZN3Alf17CAlfWidgetControl24previousFocusableControlEPS0_ @ 183 NONAME
+ _ZN3Alf17CAlfWidgetControl25destroyVisualsAndElementsEi @ 184 NONAME
+ _ZN3Alf17CAlfWidgetControl28removeAndDestroyEventHandlerERKN7osncore7UStringE @ 185 NONAME
+ _ZN3Alf17CAlfWidgetControl28removeAndDestroyEventHandlerERNS_22IAlfWidgetEventHandlerE @ 186 NONAME
+ _ZN3Alf17CAlfWidgetControl31removePresentationEventHandlersEv @ 187 NONAME
+ _ZN3Alf17CAlfWidgetControl41removeAndDestroyPresentationEventHandlersEv @ 188 NONAME
+ _ZN3Alf17CAlfWidgetControl6widgetEv @ 189 NONAME
+ _ZN3Alf17CAlfWidgetControl7elementEi @ 190 NONAME
+ _ZN3Alf17CAlfWidgetControl8setStateEj @ 191 NONAME
+ _ZN3Alf17CAlfWidgetControl9constructER7CAlfEnv @ 192 NONAME
+ _ZN3Alf17CAlfWidgetControlC1ER7CAlfEnv @ 193 NONAME
+ _ZN3Alf17CAlfWidgetControlC1Ev @ 194 NONAME
+ _ZN3Alf17CAlfWidgetControlC2ER7CAlfEnv @ 195 NONAME
+ _ZN3Alf17CAlfWidgetControlC2Ev @ 196 NONAME
+ _ZN3Alf17CAlfWidgetControlD0Ev @ 197 NONAME
+ _ZN3Alf17CAlfWidgetControlD1Ev @ 198 NONAME
+ _ZN3Alf17CAlfWidgetControlD2Ev @ 199 NONAME
+ _ZN3Alf17CAlfWidgetControlnwEj6newarg @ 200 NONAME
+ _ZN3Alf18AlfAnimationOutput11sendCommandERNS_17CAlfWidgetControlEj @ 201 NONAME
+ _ZN3Alf18AlfAnimationOutputC1EPNS_20AlfReferenceToVisualES2_PNS_19IAlfAttributeSetterEPNS_21AlfAttributeContainerEjj @ 202 NONAME
+ _ZN3Alf18AlfAnimationOutputC2EPNS_20AlfReferenceToVisualES2_PNS_19IAlfAttributeSetterEPNS_21AlfAttributeContainerEjj @ 203 NONAME
+ _ZN3Alf18AlfAnimationOutputD1Ev @ 204 NONAME
+ _ZN3Alf18AlfAnimationOutputD2Ev @ 205 NONAME
+ _ZN3Alf20AlfFlowLayoutManager13makeInterfaceERKNS_4IfIdE @ 206 NONAME
+ _ZN3Alf20AlfFlowLayoutManager17updateChildLayoutEPNS_17CAlfWidgetControlE @ 207 NONAME
+ _ZN3Alf20AlfFlowLayoutManagerC1Ev @ 208 NONAME
+ _ZN3Alf20AlfFlowLayoutManagerC2Ev @ 209 NONAME
+ _ZN3Alf20AlfFlowLayoutManagerD0Ev @ 210 NONAME
+ _ZN3Alf20AlfFlowLayoutManagerD1Ev @ 211 NONAME
+ _ZN3Alf20AlfFlowLayoutManagerD2Ev @ 212 NONAME
+ _ZN3Alf20AlfGridLayoutManager12childRemovedEPNS_17CAlfWidgetControlE @ 213 NONAME
+ _ZN3Alf20AlfGridLayoutManager13makeInterfaceERKNS_4IfIdE @ 214 NONAME
+ _ZN3Alf20AlfGridLayoutManager17updateChildLayoutEPNS_17CAlfWidgetControlE @ 215 NONAME
+ _ZN3Alf20AlfGridLayoutManager19doUpdateChildLayoutEPNS_17CAlfWidgetControlE @ 216 NONAME
+ _ZN3Alf20AlfGridLayoutManagerC1Ev @ 217 NONAME
+ _ZN3Alf20AlfGridLayoutManagerC2Ev @ 218 NONAME
+ _ZN3Alf20AlfGridLayoutManagerD0Ev @ 219 NONAME
+ _ZN3Alf20AlfGridLayoutManagerD1Ev @ 220 NONAME
+ _ZN3Alf20AlfGridLayoutManagerD2Ev @ 221 NONAME
+ _ZN3Alf20AlfReferenceToVisual6createEPKcS2_b @ 222 NONAME
+ _ZN3Alf20AlfReferenceToVisual7resolveERNS_17CAlfWidgetControlEP10CAlfVisual @ 223 NONAME
+ _ZN3Alf20AlfReferenceToVisual7resolveERNS_17CAlfWidgetControlEj @ 224 NONAME
+ _ZN3Alf20AlfReferenceToVisualD1Ev @ 225 NONAME
+ _ZN3Alf20AlfReferenceToVisualD2Ev @ 226 NONAME
+ _ZN3Alf21AlfAttributeContainer12addAttributeEPNS_12AlfAttributeE @ 227 NONAME
+ _ZN3Alf21AlfAttributeContainer15removeAttributeEj @ 228 NONAME
+ _ZN3Alf21AlfAttributeContainer7setTimeEj @ 229 NONAME
+ _ZN3Alf21AlfAttributeContainerC1ENS0_4TypeE @ 230 NONAME
+ _ZN3Alf21AlfAttributeContainerC2ENS0_4TypeE @ 231 NONAME
+ _ZN3Alf21AlfAttributeContainerD1Ev @ 232 NONAME
+ _ZN3Alf21AlfAttributeContainerD2Ev @ 233 NONAME
+ _ZN3Alf21AlfAttributeValueTypeC1ERKN7osncore7UStringE @ 234 NONAME
+ _ZN3Alf21AlfAttributeValueTypeC1Ef8TAlfUnit @ 235 NONAME
+ _ZN3Alf21AlfAttributeValueTypeC1Ei8TAlfUnit @ 236 NONAME
+ _ZN3Alf21AlfAttributeValueTypeC2ERKN7osncore7UStringE @ 237 NONAME
+ _ZN3Alf21AlfAttributeValueTypeC2Ef8TAlfUnit @ 238 NONAME
+ _ZN3Alf21AlfAttributeValueTypeC2Ei8TAlfUnit @ 239 NONAME
+ _ZN3Alf21AlfAttributeValueTypeD0Ev @ 240 NONAME
+ _ZN3Alf21AlfAttributeValueTypeD1Ev @ 241 NONAME
+ _ZN3Alf21AlfAttributeValueTypeD2Ev @ 242 NONAME
+ _ZN3Alf21AlfWidgetEnvExtension12resourcePoolER7CAlfEnv @ 243 NONAME
+ _ZN3Alf21AlfWidgetEnvExtension13widgetFactoryER7CAlfEnv @ 244 NONAME
+ _ZN3Alf21AlfWidgetEnvExtension16themeManagerUtilER7CAlfEnv @ 245 NONAME
+ _ZN3Alf21AlfWidgetEnvExtension21initializeEnvironmentER7CAlfEnv @ 246 NONAME
+ _ZN3Alf21AlfWidgetEventHandler11addKeyInputEiNS_14EventTypeFlagsEj @ 247 NONAME
+ _ZN3Alf21AlfWidgetEventHandler14addCustomInputEibi @ 248 NONAME
+ _ZN3Alf21AlfWidgetEventHandler15addCancelOutputEPKcib @ 249 NONAME
+ _ZN3Alf21AlfWidgetEventHandler15addPointerInputEPKcS2_NS_18WidgetPointerEventE @ 250 NONAME
+ _ZN3Alf21AlfWidgetEventHandler16addTactileOutputENS_25WidgetTactileFeedbackTypeE @ 251 NONAME
+ _ZN3Alf21AlfWidgetEventHandler17addAppEventOutputERKN7osncore7UStringERNS_20IAlfAppEventListenerE @ 252 NONAME
+ _ZN3Alf21AlfWidgetEventHandler18addAnimationOutputEPNS_20AlfReferenceToVisualES2_PNS_19IAlfAttributeSetterEPNS_21AlfAttributeContainerEjj @ 253 NONAME
+ _ZN3Alf21AlfWidgetEventHandler19addEventPasserInputEii @ 254 NONAME
+ _ZN3Alf21AlfWidgetEventHandler20addEventPasserOutputEPKcS2_ @ 255 NONAME
+ _ZN3Alf21AlfWidgetEventHandler20addEventPasserOutputEPKcS2_ii @ 256 NONAME
+ _ZN3Alf21AlfWidgetEventHandler20addWidgetStateOutputERKN7osncore7UStringEjj @ 257 NONAME
+ _ZN3Alf21AlfWidgetEventHandler23addWidgetAttributeInputERN7osncore7UStringEPNS_21AlfAttributeValueTypeEPKc @ 258 NONAME
+ _ZN3Alf21AlfWidgetEventHandler24addAnimationCancelOutputEPKcS2_6TAlfOpb @ 259 NONAME
+ _ZN3Alf21AlfWidgetEventHandler24addWidgetAttributeOutputERN7osncore7UStringEPNS_21AlfAttributeValueTypeEPKc @ 260 NONAME
+ _ZN3Alf21AlfWidgetEventHandler24addWidgetAttributeOutputERNS_12AlfAttributeEPKc @ 261 NONAME
+ _ZN3Alf21AlfWidgetEventHandler36addWidgetEventOutputSignalSubscriberERNS_31IAlfEventOutputSignalSubscriberE @ 262 NONAME
+ _ZN3Alf21AlfWidgetEventHandler9addOutputEiiPKcj @ 263 NONAME
+ _ZN3Alf21AlfWidgetEventHandlerC1ENS_22IAlfWidgetEventHandler19AlfEventHandlerTypeENS1_29AlfEventHandlerExecutionPhaseE @ 264 NONAME
+ _ZN3Alf21AlfWidgetEventHandlerC2ENS_22IAlfWidgetEventHandler19AlfEventHandlerTypeENS1_29AlfEventHandlerExecutionPhaseE @ 265 NONAME
+ _ZN3Alf22AlfAnchorLayoutManager12childRemovedEPNS_17CAlfWidgetControlE @ 266 NONAME
+ _ZN3Alf22AlfAnchorLayoutManager13makeInterfaceERKNS_4IfIdE @ 267 NONAME
+ _ZN3Alf22AlfAnchorLayoutManager17updateChildLayoutEPNS_17CAlfWidgetControlE @ 268 NONAME
+ _ZN3Alf22AlfAnchorLayoutManager19doUpdateChildLayoutEPNS_17CAlfWidgetControlE @ 269 NONAME
+ _ZN3Alf22AlfAnchorLayoutManagerC1Ev @ 270 NONAME
+ _ZN3Alf22AlfAnchorLayoutManagerC2Ev @ 271 NONAME
+ _ZN3Alf22AlfAnchorLayoutManagerD0Ev @ 272 NONAME
+ _ZN3Alf22AlfAnchorLayoutManagerD1Ev @ 273 NONAME
+ _ZN3Alf22AlfAnchorLayoutManagerD2Ev @ 274 NONAME
+ _ZN3Alf23AlfRecyclingGridElement10offerEventERNS_17CAlfWidgetControlERK9TAlfEvent @ 275 NONAME
+ _ZN3Alf23AlfRecyclingGridElement12setFillStyleENS0_9FillStyleEi @ 276 NONAME
+ _ZN3Alf23AlfRecyclingGridElement13makeInterfaceERKNS_4IfIdE @ 277 NONAME
+ _ZN3Alf23AlfRecyclingGridElement15setActiveStatesEj @ 278 NONAME
+ _ZN3Alf23AlfRecyclingGridElement16createVisualTreeERNS_15IAlfVariantTypeEjP10CAlfLayouti @ 279 NONAME
+ _ZN3Alf23AlfRecyclingGridElement16eventHandlerDataEv @ 280 NONAME
+ _ZN3Alf23AlfRecyclingGridElement17setAnimationTimesEiiiii @ 281 NONAME
+ _ZN3Alf23AlfRecyclingGridElement19setEventHandlerDataERKNS_29AlfWidgetEventHandlerInitDataE @ 282 NONAME
+ _ZN3Alf23AlfRecyclingGridElement21createChildVisualTreeEPNS_11IAlfElementERNS_15IAlfVariantTypeERNS_10IAlfBranchEij @ 283 NONAME
+ _ZN3Alf23AlfRecyclingGridElement21removeChildVisualTreeEPNS_11IAlfElementERNS_10IAlfBranchEij @ 284 NONAME
+ _ZN3Alf23AlfRecyclingGridElementC1ERNS_17CAlfWidgetControlEPKcii @ 285 NONAME
+ _ZN3Alf23AlfRecyclingGridElementC2ERNS_17CAlfWidgetControlEPKcii @ 286 NONAME
+ _ZN3Alf23AlfRecyclingGridElementD0Ev @ 287 NONAME
+ _ZN3Alf23AlfRecyclingGridElementD1Ev @ 288 NONAME
+ _ZN3Alf23AlfRecyclingGridElementD2Ev @ 289 NONAME
+ _ZN3Alf24AlfCommonAttributeSetter10setterTypeEv @ 290 NONAME
+ _ZN3Alf24AlfCommonAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 291 NONAME
+ _ZN3Alf24AlfCommonAttributeSetter13makeInterfaceERKNS_4IfIdE @ 292 NONAME
+ _ZN3Alf24AlfCommonAttributeSetter16enableDirtyCheckEb @ 293 NONAME
+ _ZN3Alf24AlfCommonAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 294 NONAME
+ _ZN3Alf24AlfCommonAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 295 NONAME
+ _ZN3Alf24AlfCommonAttributeSetterC1Ev @ 296 NONAME
+ _ZN3Alf24AlfCommonAttributeSetterC2Ev @ 297 NONAME
+ _ZN3Alf24AlfCommonAttributeSetterD0Ev @ 298 NONAME
+ _ZN3Alf24AlfCommonAttributeSetterD1Ev @ 299 NONAME
+ _ZN3Alf24AlfCommonAttributeSetterD2Ev @ 300 NONAME
+ _ZN3Alf28AlfDeckLayoutAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 301 NONAME
+ _ZN3Alf28AlfDeckLayoutAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 302 NONAME
+ _ZN3Alf28AlfDeckLayoutAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 303 NONAME
+ _ZN3Alf28AlfDeckLayoutAttributeSetterC1Ev @ 304 NONAME
+ _ZN3Alf28AlfDeckLayoutAttributeSetterC2Ev @ 305 NONAME
+ _ZN3Alf28AlfDeckLayoutAttributeSetterD0Ev @ 306 NONAME
+ _ZN3Alf28AlfDeckLayoutAttributeSetterD1Ev @ 307 NONAME
+ _ZN3Alf28AlfDeckLayoutAttributeSetterD2Ev @ 308 NONAME
+ _ZN3Alf28AlfFlowLayoutAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 309 NONAME
+ _ZN3Alf28AlfFlowLayoutAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 310 NONAME
+ _ZN3Alf28AlfFlowLayoutAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 311 NONAME
+ _ZN3Alf28AlfFlowLayoutAttributeSetterC1Ev @ 312 NONAME
+ _ZN3Alf28AlfFlowLayoutAttributeSetterC2Ev @ 313 NONAME
+ _ZN3Alf28AlfFlowLayoutAttributeSetterD0Ev @ 314 NONAME
+ _ZN3Alf28AlfFlowLayoutAttributeSetterD1Ev @ 315 NONAME
+ _ZN3Alf28AlfFlowLayoutAttributeSetterD2Ev @ 316 NONAME
+ _ZN3Alf28AlfGridLayoutAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 317 NONAME
+ _ZN3Alf28AlfGridLayoutAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 318 NONAME
+ _ZN3Alf28AlfGridLayoutAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 319 NONAME
+ _ZN3Alf28AlfGridLayoutAttributeSetterC1Ev @ 320 NONAME
+ _ZN3Alf28AlfGridLayoutAttributeSetterC2Ev @ 321 NONAME
+ _ZN3Alf28AlfGridLayoutAttributeSetterD0Ev @ 322 NONAME
+ _ZN3Alf28AlfGridLayoutAttributeSetterD1Ev @ 323 NONAME
+ _ZN3Alf28AlfGridLayoutAttributeSetterD2Ev @ 324 NONAME
+ _ZN3Alf28AlfLineVisualAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 325 NONAME
+ _ZN3Alf28AlfLineVisualAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 326 NONAME
+ _ZN3Alf28AlfLineVisualAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 327 NONAME
+ _ZN3Alf28AlfLineVisualAttributeSetterC1Ev @ 328 NONAME
+ _ZN3Alf28AlfLineVisualAttributeSetterC2Ev @ 329 NONAME
+ _ZN3Alf28AlfLineVisualAttributeSetterD0Ev @ 330 NONAME
+ _ZN3Alf28AlfLineVisualAttributeSetterD1Ev @ 331 NONAME
+ _ZN3Alf28AlfLineVisualAttributeSetterD2Ev @ 332 NONAME
+ _ZN3Alf28AlfMeshVisualAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 333 NONAME
+ _ZN3Alf28AlfMeshVisualAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 334 NONAME
+ _ZN3Alf28AlfMeshVisualAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 335 NONAME
+ _ZN3Alf28AlfMeshVisualAttributeSetterC1Ev @ 336 NONAME
+ _ZN3Alf28AlfMeshVisualAttributeSetterC2Ev @ 337 NONAME
+ _ZN3Alf28AlfMeshVisualAttributeSetterD0Ev @ 338 NONAME
+ _ZN3Alf28AlfMeshVisualAttributeSetterD1Ev @ 339 NONAME
+ _ZN3Alf28AlfMeshVisualAttributeSetterD2Ev @ 340 NONAME
+ _ZN3Alf28AlfTextVisualAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 341 NONAME
+ _ZN3Alf28AlfTextVisualAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 342 NONAME
+ _ZN3Alf28AlfTextVisualAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 343 NONAME
+ _ZN3Alf28AlfTextVisualAttributeSetterC1Ev @ 344 NONAME
+ _ZN3Alf28AlfTextVisualAttributeSetterC2Ev @ 345 NONAME
+ _ZN3Alf28AlfTextVisualAttributeSetterD0Ev @ 346 NONAME
+ _ZN3Alf28AlfTextVisualAttributeSetterD1Ev @ 347 NONAME
+ _ZN3Alf28AlfTextVisualAttributeSetterD2Ev @ 348 NONAME
+ _ZN3Alf29AlfImageVisualAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 349 NONAME
+ _ZN3Alf29AlfImageVisualAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 350 NONAME
+ _ZN3Alf29AlfImageVisualAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 351 NONAME
+ _ZN3Alf29AlfImageVisualAttributeSetterC1Ev @ 352 NONAME
+ _ZN3Alf29AlfImageVisualAttributeSetterC2Ev @ 353 NONAME
+ _ZN3Alf29AlfImageVisualAttributeSetterD0Ev @ 354 NONAME
+ _ZN3Alf29AlfImageVisualAttributeSetterD1Ev @ 355 NONAME
+ _ZN3Alf29AlfImageVisualAttributeSetterD2Ev @ 356 NONAME
+ _ZN3Alf30AlfAnchorLayoutAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 357 NONAME
+ _ZN3Alf30AlfAnchorLayoutAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 358 NONAME
+ _ZN3Alf30AlfAnchorLayoutAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 359 NONAME
+ _ZN3Alf30AlfAnchorLayoutAttributeSetterC1Ev @ 360 NONAME
+ _ZN3Alf30AlfAnchorLayoutAttributeSetterC2Ev @ 361 NONAME
+ _ZN3Alf30AlfAnchorLayoutAttributeSetterD0Ev @ 362 NONAME
+ _ZN3Alf30AlfAnchorLayoutAttributeSetterD1Ev @ 363 NONAME
+ _ZN3Alf30AlfAnchorLayoutAttributeSetterD2Ev @ 364 NONAME
+ _ZN3Alf30AlfCommonLayoutAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 365 NONAME
+ _ZN3Alf30AlfCommonLayoutAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 366 NONAME
+ _ZN3Alf30AlfCommonLayoutAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 367 NONAME
+ _ZN3Alf30AlfCommonLayoutAttributeSetterC1Ev @ 368 NONAME
+ _ZN3Alf30AlfCommonLayoutAttributeSetterC2Ev @ 369 NONAME
+ _ZN3Alf30AlfCommonLayoutAttributeSetterD0Ev @ 370 NONAME
+ _ZN3Alf30AlfCommonLayoutAttributeSetterD1Ev @ 371 NONAME
+ _ZN3Alf30AlfCommonLayoutAttributeSetterD2Ev @ 372 NONAME
+ _ZN3Alf30AlfCommonVisualAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 373 NONAME
+ _ZN3Alf30AlfCommonVisualAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 374 NONAME
+ _ZN3Alf30AlfCommonVisualAttributeSetterC1Ev @ 375 NONAME
+ _ZN3Alf30AlfCommonVisualAttributeSetterC2Ev @ 376 NONAME
+ _ZN3Alf30AlfCommonVisualAttributeSetterD0Ev @ 377 NONAME
+ _ZN3Alf30AlfCommonVisualAttributeSetterD1Ev @ 378 NONAME
+ _ZN3Alf30AlfCommonVisualAttributeSetterD2Ev @ 379 NONAME
+ _ZN3Alf32AlfViewportLayoutAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 380 NONAME
+ _ZN3Alf32AlfViewportLayoutAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 381 NONAME
+ _ZN3Alf32AlfViewportLayoutAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 382 NONAME
+ _ZN3Alf32AlfViewportLayoutAttributeSetterC1Ev @ 383 NONAME
+ _ZN3Alf32AlfViewportLayoutAttributeSetterC2Ev @ 384 NONAME
+ _ZN3Alf32AlfViewportLayoutAttributeSetterD0Ev @ 385 NONAME
+ _ZN3Alf32AlfViewportLayoutAttributeSetterD1Ev @ 386 NONAME
+ _ZN3Alf32AlfViewportLayoutAttributeSetterD2Ev @ 387 NONAME
+ _ZN3Alf33AlfCurvePathLayoutAttributeSetter13createCommandER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapEiPS1_ @ 388 NONAME
+ _ZN3Alf33AlfCurvePathLayoutAttributeSetter17setAttributeValueER10CAlfVisualPNS_21AlfAttributeContainerEPNS_7IAlfMapE @ 389 NONAME
+ _ZN3Alf33AlfCurvePathLayoutAttributeSetter21createAndSendCommandsER10CAlfVisualPNS_21AlfAttributeContainerEPS1_ @ 390 NONAME
+ _ZN3Alf33AlfCurvePathLayoutAttributeSetterC1Ev @ 391 NONAME
+ _ZN3Alf33AlfCurvePathLayoutAttributeSetterC2Ev @ 392 NONAME
+ _ZN3Alf33AlfCurvePathLayoutAttributeSetterD0Ev @ 393 NONAME
+ _ZN3Alf33AlfCurvePathLayoutAttributeSetterD1Ev @ 394 NONAME
+ _ZN3Alf33AlfCurvePathLayoutAttributeSetterD2Ev @ 395 NONAME
+ _ZN3Alf6AlfMap10customDataEv @ 396 NONAME
+ _ZN3Alf6AlfMap10removeItemERKN7osncore7UStringE @ 397 NONAME
+ _ZN3Alf6AlfMap10removeItemEj @ 398 NONAME
+ _ZN3Alf6AlfMap11replaceItemERKN7osncore7UStringEPNS_15IAlfVariantTypeE @ 399 NONAME
+ _ZN3Alf6AlfMap11replaceItemEjPNS_15IAlfVariantTypeE @ 400 NONAME
+ _ZN3Alf6AlfMap3mapEv @ 401 NONAME
+ _ZN3Alf6AlfMap3setERNS_15IAlfVariantTypeE @ 402 NONAME
+ _ZN3Alf6AlfMap4itemERKN7osncore7UStringE @ 403 NONAME
+ _ZN3Alf6AlfMap4itemEj @ 404 NONAME
+ _ZN3Alf6AlfMap5clearEv @ 405 NONAME
+ _ZN3Alf6AlfMap5cloneEv @ 406 NONAME
+ _ZN3Alf6AlfMap6branchEv @ 407 NONAME
+ _ZN3Alf6AlfMap9containerEv @ 408 NONAME
+ _ZN3Alf6AlfMap9itemIndexERKN7osncore7UStringE @ 409 NONAME
+ _ZN3Alf6AlfMapC1Ev @ 410 NONAME
+ _ZN3Alf6AlfMapC2Ev @ 411 NONAME
+ _ZN3Alf6AlfMapD0Ev @ 412 NONAME
+ _ZN3Alf6AlfMapD1Ev @ 413 NONAME
+ _ZN3Alf6AlfMapD2Ev @ 414 NONAME
+ _ZN3Alf8AlfModel10clearModelEv @ 415 NONAME
+ _ZN3Alf8AlfModel10removeDataEiPi @ 416 NONAME
+ _ZN3Alf8AlfModel10updateDataEiPiPNS_15IAlfVariantTypeE @ 417 NONAME
+ _ZN3Alf8AlfModel13makeInterfaceERKNS_4IfIdE @ 418 NONAME
+ _ZN3Alf8AlfModel16executeOperationEPNS_17AlfModelOperationE @ 419 NONAME
+ _ZN3Alf8AlfModel17executeOperationsERN7osncore12AlfPtrVectorINS_17AlfModelOperationEEE @ 420 NONAME
+ _ZN3Alf8AlfModel18notifyModelChangedEv @ 421 NONAME
+ _ZN3Alf8AlfModel22addModelChangeObserverERNS_23IAlfModelChangeObserverE @ 422 NONAME
+ _ZN3Alf8AlfModel25removeModelChangeObserverERNS_23IAlfModelChangeObserverE @ 423 NONAME
+ _ZN3Alf8AlfModel7addDataEiPiPNS_15IAlfVariantTypeE @ 424 NONAME
+ _ZN3Alf8AlfModel7setDataEPNS_15IAlfVariantTypeE @ 425 NONAME
+ _ZN3Alf8AlfModelC1EPNS_15IAlfVariantTypeE @ 426 NONAME
+ _ZN3Alf8AlfModelC1Ev @ 427 NONAME
+ _ZN3Alf8AlfModelC2EPNS_15IAlfVariantTypeE @ 428 NONAME
+ _ZN3Alf8AlfModelC2Ev @ 429 NONAME
+ _ZN3Alf8AlfModelD0Ev @ 430 NONAME
+ _ZN3Alf8AlfModelD1Ev @ 431 NONAME
+ _ZN3Alf8AlfModelD2Ev @ 432 NONAME
+ _ZN3Alf9AlfBranch10customDataEv @ 433 NONAME
+ _ZN3Alf9AlfBranch12setChildDataEPNS_7IAlfMapE @ 434 NONAME
+ _ZN3Alf9AlfBranch13childrenCountEv @ 435 NONAME
+ _ZN3Alf9AlfBranch3mapEv @ 436 NONAME
+ _ZN3Alf9AlfBranch3setERNS_15IAlfVariantTypeE @ 437 NONAME
+ _ZN3Alf9AlfBranch4dataEv @ 438 NONAME
+ _ZN3Alf9AlfBranch4sortERKNS_16IAlfSortFunctionE @ 439 NONAME
+ _ZN3Alf9AlfBranch5cloneEv @ 440 NONAME
+ _ZN3Alf9AlfBranch6branchEv @ 441 NONAME
+ _ZN3Alf9AlfBranch7setDataEPNS_7IAlfMapE @ 442 NONAME
+ _ZN3Alf9AlfBranch9childDataEi @ 443 NONAME
+ _ZN3Alf9AlfBranch9childDataEv @ 444 NONAME
+ _ZN3Alf9AlfBranch9childNameEi @ 445 NONAME
+ _ZN3Alf9AlfBranch9containerEv @ 446 NONAME
+ _ZN3Alf9AlfBranchC1EPNS_7IAlfMapES2_ @ 447 NONAME
+ _ZN3Alf9AlfBranchC1Ev @ 448 NONAME
+ _ZN3Alf9AlfBranchC2EPNS_7IAlfMapES2_ @ 449 NONAME
+ _ZN3Alf9AlfBranchC2Ev @ 450 NONAME
+ _ZN3Alf9AlfBranchD0Ev @ 451 NONAME
+ _ZN3Alf9AlfBranchD1Ev @ 452 NONAME
+ _ZN3Alf9AlfBranchD2Ev @ 453 NONAME
+ _ZN3Alf9AlfWidget10setControlEPNS_17CAlfWidgetControlEb @ 454 NONAME
+ _ZN3Alf9AlfWidget11applyLayoutERNS_17IAlfLayoutManagerE @ 455 NONAME
+ _ZN3Alf9AlfWidget12removeWidgetERNS_10IAlfWidgetE @ 456 NONAME
+ _ZN3Alf9AlfWidget12removeWidgetEi @ 457 NONAME
+ _ZN3Alf9AlfWidget13makeInterfaceEPS0_RKNS_4IfIdE @ 458 NONAME
+ _ZN3Alf9AlfWidget13makeInterfaceERKNS_4IfIdE @ 459 NONAME
+ _ZN3Alf9AlfWidget13setChildFocusEb @ 460 NONAME
+ _ZN3Alf9AlfWidget15setPresentationEPKc @ 461 NONAME
+ _ZN3Alf9AlfWidget5modelEv @ 462 NONAME
+ _ZN3Alf9AlfWidget8setModelEPNS_9IAlfModelEb @ 463 NONAME
+ _ZN3Alf9AlfWidget9addWidgetERNS_10IAlfWidgetE @ 464 NONAME
+ _ZN3Alf9AlfWidgetC1EPKc @ 465 NONAME
+ _ZN3Alf9AlfWidgetC1EPKcRNS_19IAlfContainerWidgetER7CAlfEnv @ 466 NONAME
+ _ZN3Alf9AlfWidgetC1Ev @ 467 NONAME
+ _ZN3Alf9AlfWidgetC2EPKc @ 468 NONAME
+ _ZN3Alf9AlfWidgetC2EPKcRNS_19IAlfContainerWidgetER7CAlfEnv @ 469 NONAME
+ _ZN3Alf9AlfWidgetC2Ev @ 470 NONAME
+ _ZN3Alf9AlfWidgetD0Ev @ 471 NONAME
+ _ZN3Alf9AlfWidgetD1Ev @ 472 NONAME
+ _ZN3Alf9AlfWidgetD2Ev @ 473 NONAME
+ _ZNK3Alf10AlfElement13parentElementEv @ 474 NONAME
+ _ZNK3Alf10AlfElement17getVisualTemplateEv @ 475 NONAME
+ _ZNK3Alf10AlfElement4nameEv @ 476 NONAME
+ _ZNK3Alf10AlfElement6dataIDERK10CAlfVisual @ 477 NONAME
+ _ZNK3Alf10AlfElement8containsER10CAlfVisual @ 478 NONAME
+ _ZNK3Alf12AlfAttribute10isValueSetEv @ 479 NONAME
+ _ZNK3Alf12AlfAttribute11stringValueEj @ 480 NONAME
+ _ZNK3Alf12AlfAttribute12getDataFieldEv @ 481 NONAME
+ _ZNK3Alf12AlfAttribute14getSourceValueEj @ 482 NONAME
+ _ZNK3Alf12AlfAttribute14getTargetValueEj @ 483 NONAME
+ _ZNK3Alf12AlfAttribute19getSourceValueCountEv @ 484 NONAME
+ _ZNK3Alf12AlfAttribute19getTargetValueCountEv @ 485 NONAME
+ _ZNK3Alf12AlfAttribute20getMappingFunctionIdEv @ 486 NONAME
+ _ZNK3Alf12AlfAttribute21getInterpolationStyleEv @ 487 NONAME
+ _ZNK3Alf12AlfAttribute4nameEv @ 488 NONAME
+ _ZNK3Alf12AlfAttribute4typeEj @ 489 NONAME
+ _ZNK3Alf12AlfAttribute4unitEj @ 490 NONAME
+ _ZNK3Alf12AlfAttribute7getTimeEv @ 491 NONAME
+ _ZNK3Alf12AlfAttribute7isDirtyEv @ 492 NONAME
+ _ZNK3Alf12AlfAttribute8categoryEv @ 493 NONAME
+ _ZNK3Alf12AlfAttribute8getDelayEv @ 494 NONAME
+ _ZNK3Alf12AlfAttribute8intValueEj @ 495 NONAME
+ _ZNK3Alf12AlfAttribute9realValueEj @ 496 NONAME
+ _ZNK3Alf12AlfContainer4realEv @ 497 NONAME
+ _ZNK3Alf12AlfContainer4typeEv @ 498 NONAME
+ _ZNK3Alf12AlfContainer6stringEv @ 499 NONAME
+ _ZNK3Alf12AlfContainer7booleanEv @ 500 NONAME
+ _ZNK3Alf12AlfContainer7integerEv @ 501 NONAME
+ _ZNK3Alf12AlfContainer8uintegerEv @ 502 NONAME
+ _ZNK3Alf12AlfContainereqERKNS_15IAlfVariantTypeE @ 503 NONAME
+ _ZNK3Alf14AlfVariantType4realEv @ 504 NONAME
+ _ZNK3Alf14AlfVariantType4typeEv @ 505 NONAME
+ _ZNK3Alf14AlfVariantType6stringEv @ 506 NONAME
+ _ZNK3Alf14AlfVariantType7booleanEv @ 507 NONAME
+ _ZNK3Alf14AlfVariantType7integerEv @ 508 NONAME
+ _ZNK3Alf14AlfVariantType8uintegerEv @ 509 NONAME
+ _ZNK3Alf14AlfVariantTypeeqERKNS_15IAlfVariantTypeE @ 510 NONAME
+ _ZNK3Alf16AlfLayoutManager10getControlEi @ 511 NONAME
+ _ZNK3Alf16AlfLayoutManager20getLayoutPreferencesEPNS_17CAlfWidgetControlE @ 512 NONAME
+ _ZNK3Alf16AlfLayoutManager5countEv @ 513 NONAME
+ _ZNK3Alf16AlfLayoutManager5ownerEv @ 514 NONAME
+ _ZNK3Alf16AlfLayoutManager9getLayoutEv @ 515 NONAME
+ _ZNK3Alf17AlfModelOperation10parentDataERNS_15IAlfVariantTypeE @ 516 NONAME
+ _ZNK3Alf17AlfModelOperation11newDataNameEv @ 517 NONAME
+ _ZNK3Alf17AlfModelOperation14containerIndexEi @ 518 NONAME
+ _ZNK3Alf17AlfModelOperation19numContainerIndicesEv @ 519 NONAME
+ _ZNK3Alf17AlfModelOperation5indexEv @ 520 NONAME
+ _ZNK3Alf17AlfModelOperation7newDataEv @ 521 NONAME
+ _ZNK3Alf17AlfModelOperation9operationEv @ 522 NONAME
+ _ZNK3Alf17AlfVisualTemplate10layoutTypeEv @ 523 NONAME
+ _ZNK3Alf17AlfVisualTemplate10numBrushesEv @ 524 NONAME
+ _ZNK3Alf17AlfVisualTemplate10visualTypeEv @ 525 NONAME
+ _ZNK3Alf17AlfVisualTemplate13childTemplateEi @ 526 NONAME
+ _ZNK3Alf17AlfVisualTemplate15attributeSetterEi @ 527 NONAME
+ _ZNK3Alf17AlfVisualTemplate17numChildTemplatesEv @ 528 NONAME
+ _ZNK3Alf17AlfVisualTemplate18attributeContainerEi @ 529 NONAME
+ _ZNK3Alf17AlfVisualTemplate19numAttributeSettersEv @ 530 NONAME
+ _ZNK3Alf17AlfVisualTemplate4nameEv @ 531 NONAME
+ _ZNK3Alf17AlfVisualTemplate5brushEi @ 532 NONAME
+ _ZNK3Alf17AlfVisualTemplate5ownerEv @ 533 NONAME
+ _ZNK3Alf17AlfVisualTemplate6parentEv @ 534 NONAME
+ _ZNK3Alf17CAlfWidgetControl10checkStateEj @ 535 NONAME
+ _ZNK3Alf17CAlfWidgetControl11isContainerEv @ 536 NONAME
+ _ZNK3Alf17CAlfWidgetControl11isFocusableEv @ 537 NONAME
+ _ZNK3Alf17CAlfWidgetControl11numElementsEv @ 538 NONAME
+ _ZNK3Alf17CAlfWidgetControl15ContainerLayoutEPK11CAlfControl @ 539 NONAME
+ _ZNK3Alf17CAlfWidgetControl16numEventHandlersEv @ 540 NONAME
+ _ZNK3Alf17CAlfWidgetControl17eventHandlerIndexERNS_22IAlfWidgetEventHandlerE @ 541 NONAME
+ _ZNK3Alf17CAlfWidgetControl5stateEv @ 542 NONAME
+ _ZNK3Alf21AlfAttributeContainer12getAttributeEj @ 543 NONAME
+ _ZNK3Alf21AlfAttributeContainer14attributeCountEv @ 544 NONAME
+ _ZNK3Alf21AlfAttributeContainer18getAttributeByNameEPKc @ 545 NONAME
+ _ZNK3Alf21AlfAttributeContainer4typeEv @ 546 NONAME
+ _ZNK3Alf21AlfAttributeContainer7getTimeEv @ 547 NONAME
+ _ZNK3Alf21AlfAttributeValueType11stringValueEv @ 548 NONAME
+ _ZNK3Alf21AlfAttributeValueType4typeEv @ 549 NONAME
+ _ZNK3Alf21AlfAttributeValueType4unitEv @ 550 NONAME
+ _ZNK3Alf21AlfAttributeValueType8intValueEv @ 551 NONAME
+ _ZNK3Alf21AlfAttributeValueType8rgbValueEv @ 552 NONAME
+ _ZNK3Alf21AlfAttributeValueType9enumValueEv @ 553 NONAME
+ _ZNK3Alf21AlfAttributeValueType9realValueEv @ 554 NONAME
+ _ZNK3Alf23AlfRecyclingGridElement6acceptERNS_17CAlfWidgetControlERK9TAlfEvent @ 555 NONAME
+ _ZNK3Alf6AlfMap4nameEj @ 556 NONAME
+ _ZNK3Alf6AlfMap4realEv @ 557 NONAME
+ _ZNK3Alf6AlfMap4typeEv @ 558 NONAME
+ _ZNK3Alf6AlfMap5countEv @ 559 NONAME
+ _ZNK3Alf6AlfMap6stringEv @ 560 NONAME
+ _ZNK3Alf6AlfMap7booleanEv @ 561 NONAME
+ _ZNK3Alf6AlfMap7integerEv @ 562 NONAME
+ _ZNK3Alf6AlfMap8uintegerEv @ 563 NONAME
+ _ZNK3Alf8AlfModel4dataEv @ 564 NONAME
+ _ZNK3Alf9AlfBranch4realEv @ 565 NONAME
+ _ZNK3Alf9AlfBranch4typeEv @ 566 NONAME
+ _ZNK3Alf9AlfBranch6stringEv @ 567 NONAME
+ _ZNK3Alf9AlfBranch7booleanEv @ 568 NONAME
+ _ZNK3Alf9AlfBranch7integerEv @ 569 NONAME
+ _ZNK3Alf9AlfBranch8uintegerEv @ 570 NONAME
+ _ZNK3Alf9AlfBrancheqERKNS_15IAlfVariantTypeE @ 571 NONAME
+ _ZNK3Alf9AlfWidget10widgetNameEv @ 572 NONAME
+ _ZNK3Alf9AlfWidget11widgetCountEv @ 573 NONAME
+ _ZNK3Alf9AlfWidget14getWidgetIndexERNS_10IAlfWidgetE @ 574 NONAME
+ _ZNK3Alf9AlfWidget6parentEv @ 575 NONAME
+ _ZNK3Alf9AlfWidget7controlEv @ 576 NONAME
+ _ZNK3Alf9AlfWidget9getWidgetEi @ 577 NONAME
+ _ZTIN3Alf10AlfElementE @ 578 NONAME ; #<TI>#
+ _ZTIN3Alf12AlfAttributeE @ 579 NONAME ; #<TI>#
+ _ZTIN3Alf12AlfContainerE @ 580 NONAME ; #<TI>#
+ _ZTIN3Alf12AlfEnumValueE @ 581 NONAME ; #<TI>#
+ _ZTIN3Alf12AlfRealValueE @ 582 NONAME ; #<TI>#
+ _ZTIN3Alf14AlfHostAPIImplE @ 583 NONAME ; #<TI>#
+ _ZTIN3Alf14AlfStringValueE @ 584 NONAME ; #<TI>#
+ _ZTIN3Alf14AlfVariantTypeE @ 585 NONAME ; #<TI>#
+ _ZTIN3Alf16AlfLayoutManagerE @ 586 NONAME ; #<TI>#
+ _ZTIN3Alf17AlfVisualTemplateE @ 587 NONAME ; #<TI>#
+ _ZTIN3Alf17CAlfWidgetControlE @ 588 NONAME ; #<TI>#
+ _ZTIN3Alf20AlfFlowLayoutManagerE @ 589 NONAME ; #<TI>#
+ _ZTIN3Alf20AlfGridLayoutManagerE @ 590 NONAME ; #<TI>#
+ _ZTIN3Alf20AlfLayoutManagerImplE @ 591 NONAME ; #<TI>#
+ _ZTIN3Alf21AlfAttributeValueTypeE @ 592 NONAME ; #<TI>#
+ _ZTIN3Alf22AlfAnchorLayoutManagerE @ 593 NONAME ; #<TI>#
+ _ZTIN3Alf23AlfFlowLayoutPolicyImplE @ 594 NONAME ; #<TI>#
+ _ZTIN3Alf23AlfGridLayoutPolicyImplE @ 595 NONAME ; #<TI>#
+ _ZTIN3Alf23AlfRecyclingGridElementE @ 596 NONAME ; #<TI>#
+ _ZTIN3Alf24AlfCommonAttributeSetterE @ 597 NONAME ; #<TI>#
+ _ZTIN3Alf24AlfGridLayoutManagerImplE @ 598 NONAME ; #<TI>#
+ _ZTIN3Alf26AlfAnchorLayoutManagerImplE @ 599 NONAME ; #<TI>#
+ _ZTIN3Alf26TAlfWidgetAttributeCommandE @ 600 NONAME ; #<TI>#
+ _ZTIN3Alf27AlfWidgetAttributeOwnerImplE @ 601 NONAME ; #<TI>#
+ _ZTIN3Alf27AlfWidgetControlEventFilterE @ 602 NONAME ; #<TI>#
+ _ZTIN3Alf28AlfDeckLayoutAttributeSetterE @ 603 NONAME ; #<TI>#
+ _ZTIN3Alf28AlfElementAttributeOwnerImplE @ 604 NONAME ; #<TI>#
+ _ZTIN3Alf28AlfFlowLayoutAttributeSetterE @ 605 NONAME ; #<TI>#
+ _ZTIN3Alf28AlfFlowLayoutPreferencesImplE @ 606 NONAME ; #<TI>#
+ _ZTIN3Alf28AlfGridLayoutAttributeSetterE @ 607 NONAME ; #<TI>#
+ _ZTIN3Alf28AlfLineVisualAttributeSetterE @ 608 NONAME ; #<TI>#
+ _ZTIN3Alf28AlfMeshVisualAttributeSetterE @ 609 NONAME ; #<TI>#
+ _ZTIN3Alf28AlfTextVisualAttributeSetterE @ 610 NONAME ; #<TI>#
+ _ZTIN3Alf29AlfImageVisualAttributeSetterE @ 611 NONAME ; #<TI>#
+ _ZTIN3Alf30AlfAnchorLayoutAttributeSetterE @ 612 NONAME ; #<TI>#
+ _ZTIN3Alf30AlfCommonLayoutAttributeSetterE @ 613 NONAME ; #<TI>#
+ _ZTIN3Alf30AlfCommonVisualAttributeSetterE @ 614 NONAME ; #<TI>#
+ _ZTIN3Alf32AlfViewportLayoutAttributeSetterE @ 615 NONAME ; #<TI>#
+ _ZTIN3Alf33AlfCurvePathLayoutAttributeSetterE @ 616 NONAME ; #<TI>#
+ _ZTIN3Alf6AlfMapE @ 617 NONAME ; #<TI>#
+ _ZTIN3Alf8AlfModelE @ 618 NONAME ; #<TI>#
+ _ZTIN3Alf9AlfBranchE @ 619 NONAME ; #<TI>#
+ _ZTIN3Alf9AlfWidgetE @ 620 NONAME ; #<TI>#
+ _ZTVN3Alf10AlfElementE @ 621 NONAME ; #<VT>#
+ _ZTVN3Alf12AlfAttributeE @ 622 NONAME ; #<VT>#
+ _ZTVN3Alf12AlfContainerE @ 623 NONAME ; #<VT>#
+ _ZTVN3Alf12AlfEnumValueE @ 624 NONAME ; #<VT>#
+ _ZTVN3Alf12AlfRealValueE @ 625 NONAME ; #<VT>#
+ _ZTVN3Alf14AlfHostAPIImplE @ 626 NONAME ; #<VT>#
+ _ZTVN3Alf14AlfStringValueE @ 627 NONAME ; #<VT>#
+ _ZTVN3Alf14AlfVariantTypeE @ 628 NONAME ; #<VT>#
+ _ZTVN3Alf16AlfLayoutManagerE @ 629 NONAME ; #<VT>#
+ _ZTVN3Alf17AlfVisualTemplateE @ 630 NONAME ; #<VT>#
+ _ZTVN3Alf17CAlfWidgetControlE @ 631 NONAME ; #<VT>#
+ _ZTVN3Alf20AlfFlowLayoutManagerE @ 632 NONAME ; #<VT>#
+ _ZTVN3Alf20AlfGridLayoutManagerE @ 633 NONAME ; #<VT>#
+ _ZTVN3Alf20AlfLayoutManagerImplE @ 634 NONAME ; #<VT>#
+ _ZTVN3Alf21AlfAttributeValueTypeE @ 635 NONAME ; #<VT>#
+ _ZTVN3Alf22AlfAnchorLayoutManagerE @ 636 NONAME ; #<VT>#
+ _ZTVN3Alf23AlfFlowLayoutPolicyImplE @ 637 NONAME ; #<VT>#
+ _ZTVN3Alf23AlfGridLayoutPolicyImplE @ 638 NONAME ; #<VT>#
+ _ZTVN3Alf23AlfRecyclingGridElementE @ 639 NONAME ; #<VT>#
+ _ZTVN3Alf24AlfCommonAttributeSetterE @ 640 NONAME ; #<VT>#
+ _ZTVN3Alf24AlfGridLayoutManagerImplE @ 641 NONAME ; #<VT>#
+ _ZTVN3Alf26AlfAnchorLayoutManagerImplE @ 642 NONAME ; #<VT>#
+ _ZTVN3Alf26TAlfWidgetAttributeCommandE @ 643 NONAME ; #<VT>#
+ _ZTVN3Alf27AlfWidgetAttributeOwnerImplE @ 644 NONAME ; #<VT>#
+ _ZTVN3Alf27AlfWidgetControlEventFilterE @ 645 NONAME ; #<VT>#
+ _ZTVN3Alf28AlfDeckLayoutAttributeSetterE @ 646 NONAME ; #<VT>#
+ _ZTVN3Alf28AlfElementAttributeOwnerImplE @ 647 NONAME ; #<VT>#
+ _ZTVN3Alf28AlfFlowLayoutAttributeSetterE @ 648 NONAME ; #<VT>#
+ _ZTVN3Alf28AlfFlowLayoutPreferencesImplE @ 649 NONAME ; #<VT>#
+ _ZTVN3Alf28AlfGridLayoutAttributeSetterE @ 650 NONAME ; #<VT>#
+ _ZTVN3Alf28AlfLineVisualAttributeSetterE @ 651 NONAME ; #<VT>#
+ _ZTVN3Alf28AlfMeshVisualAttributeSetterE @ 652 NONAME ; #<VT>#
+ _ZTVN3Alf28AlfTextVisualAttributeSetterE @ 653 NONAME ; #<VT>#
+ _ZTVN3Alf29AlfImageVisualAttributeSetterE @ 654 NONAME ; #<VT>#
+ _ZTVN3Alf30AlfAnchorLayoutAttributeSetterE @ 655 NONAME ; #<VT>#
+ _ZTVN3Alf30AlfCommonLayoutAttributeSetterE @ 656 NONAME ; #<VT>#
+ _ZTVN3Alf30AlfCommonVisualAttributeSetterE @ 657 NONAME ; #<VT>#
+ _ZTVN3Alf32AlfViewportLayoutAttributeSetterE @ 658 NONAME ; #<VT>#
+ _ZTVN3Alf33AlfCurvePathLayoutAttributeSetterE @ 659 NONAME ; #<VT>#
+ _ZTVN3Alf6AlfMapE @ 660 NONAME ; #<VT>#
+ _ZTVN3Alf8AlfModelE @ 661 NONAME ; #<VT>#
+ _ZTVN3Alf9AlfBranchE @ 662 NONAME ; #<VT>#
+ _ZTVN3Alf9AlfWidgetE @ 663 NONAME ; #<VT>#
+ _ZThn32_N3Alf17CAlfWidgetControl11OfferEventLERK9TAlfEvent @ 664 NONAME ; #<thunk>#
+ _ZThn40_N3Alf17CAlfWidgetControl11dataChangedEv @ 665 NONAME ; #<thunk>#
+ _ZThn40_N3Alf17CAlfWidgetControl12dataChangingERKN7osncore12AlfPtrVectorINS_17AlfModelOperationEEE @ 666 NONAME ; #<thunk>#
+ _ZThn40_N3Alf17CAlfWidgetControl12dataChangingERKNS_17AlfModelOperationE @ 667 NONAME ; #<thunk>#
+ _ZThn40_N3Alf17CAlfWidgetControl12modelChangedERNS_9IAlfModelE @ 668 NONAME ; #<thunk>#
+ _ZThn40_N3Alf17CAlfWidgetControlD0Ev @ 669 NONAME ; #<thunk>#
+ _ZThn40_N3Alf17CAlfWidgetControlD1Ev @ 670 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl10addElementEPNS_11IAlfElementE @ 671 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl11dataIdRangeERKNS_11IAlfElementE @ 672 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl11elementDataERKNS_11IAlfElementEj @ 673 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl11enableStateEj @ 674 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl11findElementEPKc @ 675 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl11handleEventERK9TAlfEvent @ 676 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl12disableStateEj @ 677 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl12eventHandlerEi @ 678 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl13dataIdToIndexERKNS_11IAlfElementEj @ 679 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl13elementDataIdERKNS_11IAlfElementEjj @ 680 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl13makeInterfaceERKNS_4IfIdE @ 681 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl13removeElementERKNS_11IAlfElementE @ 682 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl14setDataIdRangeERKNS_11IAlfElementEj @ 683 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl15addEventHandlerEPNS_22IAlfWidgetEventHandlerEi @ 684 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl16findEventHandlerERK9TAlfEvent @ 685 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl18removeEventHandlerERNS_22IAlfWidgetEventHandlerE @ 686 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl18updatePresentationEv @ 687 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl19destroyPresentationEi @ 688 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl19parentElementDataIdERKNS_11IAlfElementEj @ 689 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl23removeAndDestroyElementERKNS_11IAlfElementE @ 690 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl25destroyVisualsAndElementsEi @ 691 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl28removeAndDestroyEventHandlerERKN7osncore7UStringE @ 692 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl28removeAndDestroyEventHandlerERNS_22IAlfWidgetEventHandlerE @ 693 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl31removePresentationEventHandlersEv @ 694 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl41removeAndDestroyPresentationEventHandlersEv @ 695 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl6widgetEv @ 696 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl7elementEi @ 697 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControl8setStateEj @ 698 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControlD0Ev @ 699 NONAME ; #<thunk>#
+ _ZThn44_N3Alf17CAlfWidgetControlD1Ev @ 700 NONAME ; #<thunk>#
+ _ZThn44_NK3Alf17CAlfWidgetControl10checkStateEj @ 701 NONAME ; #<thunk>#
+ _ZThn44_NK3Alf17CAlfWidgetControl11numElementsEv @ 702 NONAME ; #<thunk>#
+ _ZThn44_NK3Alf17CAlfWidgetControl16numEventHandlersEv @ 703 NONAME ; #<thunk>#
+ _ZThn44_NK3Alf17CAlfWidgetControl17eventHandlerIndexERNS_22IAlfWidgetEventHandlerE @ 704 NONAME ; #<thunk>#
+ _ZThn44_NK3Alf17CAlfWidgetControl5stateEv @ 705 NONAME ; #<thunk>#
+ _ZThn8_N3Alf23AlfRecyclingGridElement10offerEventERNS_17CAlfWidgetControlERK9TAlfEvent @ 706 NONAME ; #<thunk>#
+ _ZThn8_N3Alf23AlfRecyclingGridElement13makeInterfaceERKNS_4IfIdE @ 707 NONAME ; #<thunk>#
+ _ZThn8_N3Alf23AlfRecyclingGridElement15setActiveStatesEj @ 708 NONAME ; #<thunk>#
+ _ZThn8_N3Alf23AlfRecyclingGridElement16eventHandlerDataEv @ 709 NONAME ; #<thunk>#
+ _ZThn8_N3Alf23AlfRecyclingGridElement19setEventHandlerDataERKNS_29AlfWidgetEventHandlerInitDataE @ 710 NONAME ; #<thunk>#
+ _ZThn8_N3Alf23AlfRecyclingGridElementD0Ev @ 711 NONAME ; #<thunk>#
+ _ZThn8_N3Alf23AlfRecyclingGridElementD1Ev @ 712 NONAME ; #<thunk>#
+ _ZThn8_NK3Alf23AlfRecyclingGridElement6acceptERNS_17CAlfWidgetControlERK9TAlfEvent @ 713 NONAME ; #<thunk>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/group/alfwidgetmodel.mmp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2002 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:
+* Project definition file
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET alfwidgetmodel.dll
+TARGETTYPE DLL
+
+
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+#ifndef __WINSCW__
+EPOCALLOWDLLDATA
+#endif
+
+USERINCLUDE ../inc
+USERINCLUDE ../../../inc
+
+// This is a SYSTEMINCLUDE macro containing the middleware
+// layer specific include directories
+
+MW_LAYER_SYSTEMINCLUDE
+
+
+OS_LAYER_LIBC_SYSTEMINCLUDE
+OS_LAYER_STDCPP_SYSTEMINCLUDE
+OS_LAYER_BOOST_SYSTEMINCLUDE
+
+
+
+SOURCEPATH ../src
+SOURCE alfwidgeteventhandler.cpp
+SOURCE alfwidgeteventhandlerimpl.cpp
+SOURCE alfwidget.cpp
+SOURCE alfwidgetimpl.cpp
+SOURCE alfwidgetcontrol.cpp
+SOURCE alfelement.cpp
+SOURCE alfvisualtemplate.cpp
+SOURCE alfreferencetovisual.cpp
+SOURCE alfanimationoutput.cpp
+
+SOURCE alfvarianttype.cpp
+SOURCE alfmodel.cpp
+SOURCE alfeventinput.cpp
+SOURCE alfeventoutput.cpp
+SOURCE alfrecyclinggridelement.cpp
+SOURCE alfrecyclinggridelementimpl.cpp
+SOURCE alfmodeloperation.cpp
+SOURCE alfsort.cpp
+SOURCE alfattribute.cpp
+SOURCE alfattributevaluetype.cpp
+SOURCE alfenumvalue.cpp
+SOURCE alfrealvalue.cpp
+SOURCE alfstringvalue.cpp
+SOURCE alfattributecontainer.cpp
+SOURCE alfhostapiimpl.cpp
+SOURCE alflayoutmanager.cpp
+SOURCE alflayoutmanagerimpl.cpp
+SOURCE alfgridlayoutmanager.cpp
+SOURCE alfgridlayoutmanagerimpl.cpp
+SOURCE alfanchorlayoutmanager.cpp
+SOURCE alfanchorlayoutmanagerimpl.cpp
+SOURCE alfcommonattributesetter.cpp
+SOURCE alfcommonvisualattributesetter.cpp
+SOURCE alfimagevisualattributesetter.cpp
+SOURCE alftextvisualattributesetter.cpp
+SOURCE alfgridlayoutattributesetter.cpp
+SOURCE alfflowlayoutattributesetter.cpp
+SOURCE alfcommonlayoutattributesetter.cpp
+
+SOURCE alfanchorlayoutattributesetter.cpp
+
+SOURCE alflinevisualattributesetter.cpp
+SOURCE alfcurvepathlayoutattributesetter.cpp
+SOURCE alfmeshvisualattributesetter.cpp
+SOURCE alfviewportlayoutattributesetter.cpp
+SOURCE alfdecklayoutattributesetter.cpp
+
+SOURCE alfelementattributeownerimpl.cpp
+SOURCE alfwidgetattributeownerimpl.cpp
+SOURCE alfwidgetenvextension.cpp
+SOURCE alfwidgetcommand.cpp
+SOURCE alfflowlayoutmanager.cpp
+SOURCE alfflowlayoutpolicyimpl.cpp
+SOURCE alfflowlayoutpreferencesimpl.cpp
+SOURCE alfgridlayoutpolicyimpl.cpp
+SOURCE alfwidgetcontroleventfilter.cpp
+
+LANG SC
+
+LIBRARY euser.lib
+LIBRARY efsrv.lib
+LIBRARY flogger.lib
+LIBRARY charconv.lib
+
+LIBRARY libc.lib
+
+LIBRARY alfclient.lib
+
+LIBRARY osncore.lib
+
+LIBRARY alfwidgetutils.lib
+
+LIBRARY alfresourcepool.lib
+ LIBRARY libstdcpp.lib
+
+#define ALF_LINK_STDCPP_DLL
+// following include must be after definition
+
+LIBRARY libpthread.lib
+#ifdef RD_TACTILE_FEEDBACK
+LIBRARY touchfeedback.lib
+#endif // RD_TACTILE_FEEDBACK
+
+#ifdef RD_ALF_IN_PLATFORM
+
+#endif
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2002 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:
+* Build file
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+Alfwidgetmodel.mmp
+
+PRJ_TESTMMPFILES
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfanchorlayoutmanagerimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2007 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: anchor layoutmanager private implementation header.
+*
+*/
+
+
+#ifndef ALFANCHORLAYOUTMANAGERIMPL_H
+#define ALFANCHORLAYOUTMANAGERIMPL_H
+
+#include <osn/osndefines.h>
+#include <alf/alfanchorlayoutmanager.h>
+#include <alf/ialflayoutpreferences.h>
+
+using std::auto_ptr;
+using Alf::AlfAnchorLayoutManager;
+
+class CAlfControl;
+class CAlfAnchorLayout;
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class AlfWidget;
+class IAlfLayoutPreferences;
+
+/**
+ * layoutmanager implementation class
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfAnchorLayoutManagerImpl : public IAlfLayoutPreferences
+ {
+public:
+ /**
+ * layout manager constructor
+ *
+ * @param aLayoutType type of layout used by the manager.
+ */
+ AlfAnchorLayoutManagerImpl(AlfAnchorLayoutManager& aAnchorLayoutManager);
+
+ /**
+ * destructor
+ */
+ ~AlfAnchorLayoutManagerImpl();
+
+public:
+// from base class IAlfLayoutPreferences
+
+ /**
+ * Returns the minimum size of the layout by combining the minimum sizes of the
+ * layed out visuals.
+ *
+ * @param aMinSize The minimum size that the object would like to be laid out to
+ * @return false iff none of the layed out UI elements do not care about minimum size
+ */
+ virtual bool getMinimumSize( TAlfXYMetric& aMinSize ) const;
+
+ /**
+ * Returns the maximum size of the layout by combining the maximum sizes of the
+ * layed out visuals.
+ *
+ * @param aMaxSize The maximum size that the object would like to be laid out to
+ * @return false iff none of the layed out UI elements do not care about maximum size
+ */
+ virtual bool getMaximumSize( TAlfXYMetric& aMaxSize ) const;
+
+ /**
+ * Returns the size combined by all preferred sizes of child UI elements in this layout
+ * when they are being layed out according to the layout manager rules.
+ *
+ * @param aPreferredSize Filled with the referred area occupied by child elements when
+ * layed out by layouting rules in this layout manager.
+ * @return False if none of the child components report their preferred size. True
+ * otherwise.
+ */
+ virtual bool getPreferredSize(TAlfXYMetric& aPreferredSize) const;
+
+ /**
+ * Set the preferred size into a presentation object.
+ *
+ * This is not supported on the layout manager. Users should set preferred sizes of the
+ * contained UI elements.
+ */
+ virtual void setPreferredSize( const TAlfXYMetric& aPreferredSize );
+
+public:
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+private:
+ /**
+ * returns the anchorlayout used by the layoutmanager.
+ */
+ CAlfAnchorLayout& layout() const;
+private:
+
+ AlfAnchorLayoutManager & mAnchorLayoutManager;
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFANCHORLAYOUTMANAGERIMPL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfanimationoutput.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2007 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: Animation class for alfred widget model.
+ This class creates the animation and commands.
+*
+*
+*/
+
+
+
+
+#ifndef ALF_ANIMATIONOUTPUT_H
+#define ALF_ANIMATIONOUTPUT_H
+
+#include <osn/osndefines.h>
+// FORWARD DECLARATIONS
+class CAlfControl;
+class CAlfVisual;
+namespace Alf
+ {
+// FORWARD DECLARATIONS
+class IAlfAttributeSetter;
+class AlfReferenceToVisual;
+class AlfAttributeContainer;
+
+/**
+ * @class AlfAnimationOutput alfanimationoutput.h "alfanimationoutput.h"
+ * Class for creating a command for setting or animating
+ * visual attribute values. Animation sequences can be created
+ * by specifying delay parameters. The target attribute value
+ * can be specified relatively to a reference visual.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class AlfAnimationOutput
+ {
+public:
+ /**
+ * Constructor.
+ *
+ * @since S60 ?S60_version
+ *
+ * @param aTargetVisual Reference to the animated visual.
+ * @param aReferenceVisual Reference to the visual with the reference value,
+ * or NULL if no reference value is used.
+ * @param aAttributeSetter The attribute setter for animating the attribute
+ * using Hitchcock commands. Ownership is transferred.
+ *
+ * @param aAttributeContainer The attribute container holding the attribute
+ * value(s) used by the attribute setter. Ownership is transferred, if the method does not
+ * throw an exception. The container can hold new values for multiple different
+ * attributes, in which case all of them are applied when the animation output
+ * is triggered.
+ *
+ * @param aAnimationTime The duration of the animation. Note that this parameter
+ * is used only if the transition time parameter is not defined in the
+ * corresponding attribute in the attribute container.
+ *
+ * @param aDelay The delay in microseconds before starting the animation.
+ * Note that this parameter is used only if the delay parameter is not defined in the
+ * corresponding attribute in the attribute container.
+ */
+ OSN_IMPORT AlfAnimationOutput(AlfReferenceToVisual* aTargetVisual,
+ AlfReferenceToVisual* aReferenceVisual,
+ IAlfAttributeSetter* aAttributeSetter,
+ AlfAttributeContainer* aAttributeContainer,
+ unsigned int aAnimationTime, unsigned int aDelay);
+
+ /** Destructor. No derived classes, therefore not virtual. */
+ OSN_IMPORT ~AlfAnimationOutput();
+
+
+ /**
+ * Create and send the animation command.
+ * @exception osncore::AlfVisualException Thrown with EInvalidVisual if reference visual or \n
+ * target visual is invalid .
+ *
+ * @since S60 ?S60_version
+ * @param aControl The control to find the animated visual and
+ * the reference visual.
+ * @param aDataID The data ID used to create the animated visual
+ * and the reference visual. The caller
+ * is responsible for determining what data ID
+ * is related to the visuals. The visual references
+ * may or may not use the given data ID.
+ * @return The visual, or NULL if the visual was not found.
+ */
+ OSN_IMPORT void sendCommand(CAlfWidgetControl& aControl, unsigned int aDataID);
+
+private:
+ // Reference to the animated visual. Owned.
+ AlfReferenceToVisual* mTargetVisual;
+ // Reference to the visual with the reference value. Owned.
+ AlfReferenceToVisual* mReferenceVisual;
+ // The attribute setter. Owned.
+ IAlfAttributeSetter* mAttributeSetter;
+ // The attribute value container. Owned.
+ AlfAttributeContainer* mAttributeContainer;
+ // The duration of the animation.
+ unsigned int mAnimationTime;
+ // The delay before sending the animation command.
+ unsigned int mDelay;
+ };
+
+ } // namespace Alf
+
+#endif //ALF_ANIMATIONOUTPUT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfelementattributeownerimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,265 @@
+/*
+* Copyright (c) 2007 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 the IAlfAttributeOwner interface
+* for AlfElement.
+*
+*/
+
+
+#ifndef __ALFELEMENTATTRIBUTEOWNERIMPL_H__
+#define __ALFELEMENTATTRIBUTEOWNERIMPL_H__
+
+#include "alf/ialfattributeowner.h"
+#include <osn/alfptrvector.h>
+
+namespace Alf
+ {
+
+class AlfElement;
+
+/**
+ * Implementation of the IAlfAttributeOwner interface for AlfElement.
+ */
+class AlfElementAttributeOwnerImpl : public IAlfAttributeOwner
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aElement Reference to owner element.
+ * @param aControl Reference to control
+ */
+ AlfElementAttributeOwnerImpl(AlfElement& aElement,
+ CAlfWidgetControl& aControl);
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfElementAttributeOwnerImpl();
+
+// from base class IAlfInterfaceBase
+
+ /**
+ * Getter for interfaces provided by the element classes.
+ * Derived classes should always call the base class method
+ * from the overridden MakeInterface.
+ *
+ * @since S60 ?S60_version
+ * @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);
+
+// from base class IAlfAttributeOwner
+
+ /**
+ * Get the number of available attributes.
+ *
+ * @return The number of attributes.
+ */
+ virtual int attributeCount() const;
+
+ /**
+ * Gets the attribute with the given name.
+ * The returned attribute instance is owned by the widget and
+ * should not be deleted.
+ * Also the returned attribute instance should not be modified.
+ * Use SetAttribute for that.
+ *
+ * @param aAttribName The name of the attribute.
+ * @return The attribute, or 0 if the attribute was not found.
+ */
+ virtual const AlfAttribute* getAttribute(const UString& aAttribName) const;
+
+ /**
+ * Gets the attribute with the given name from specific target.
+ * The returned attribute instance is owned by the widget and
+ * should not be deleted.
+ * Also the returned attribute instance should not be modified.
+ * Use SetAttribute for that.
+ *
+ * @param aTargetId The name of the target widget part, e.g. element class
+ * @param aAttribName The name of the attribute.
+ * @return A pointer to the attribute, or 0 if the attribute was not found.
+ */
+ virtual const AlfAttribute* getAttribute( const UString& aTargetId ,
+ const UString& aAttribName ) const;
+ /**
+ * Set a value of an attribute.
+ *
+ * @param aAttribute Reference attribute, the data is copied from it.
+ * The ownership is not transferred.
+ * @return True if the attribute was supported, false if not.
+ */
+ virtual bool setAttribute(const AlfAttribute& aAttribute);
+
+ /**
+ * Sets a value of an attribute to a specific target.
+ * The target is identified by using aTargetId parameter.
+ *
+ * @param aTargetId Name of the target widget part, e.g element class tag.
+ * @param aAttribute Reference attribute, the data is copied from it.
+ * The ownership is not transferred.
+ * @return True if the attribute was supported, false if not.
+ */
+ virtual bool setAttribute( const UString& aTargetId ,
+ AlfAttribute& aAttribute );
+ /**
+ * Set a value of an attribute.
+ * This SetAttribute variant is for simple non animated attributes
+ * that only have name and value.
+ *
+ * @param aAttribName Name of the attribute.
+ * @param aValue Value of the attribute. Ownership is transferred
+ * @return True if the attribute was supported, false if not.
+ */
+ virtual bool setAttribute(const UString& aAttribName,
+ AlfAttributeValueType* aValue);
+
+ /**
+ * Sets a value of an static attribute.
+ * This SetAttribute variant is for simple non animated attributes
+ * that only have name and value.
+ *
+ * @param aTargetId The name of the target widget part, e.g. element class
+ * @param aAttribName Name of the attribute.
+ * @param aValue Value of the attribute. Ownership is transferred
+ * @return True if the attribute was supported, false if not.
+ */
+ virtual bool setAttribute( const UString& aTargetId,
+ const UString& aAttribName,
+ AlfAttributeValueType* aValue );
+
+ /**
+ * Sets values of each attribute in given container to a specific target.
+ * The target is identified by using aTargetId parameter.
+ *
+ * When the target attributeowner instance cannot handle an attribute in the container,
+ * an AlfAttributeException-exception is thrown with EInvalidAttribute parameter.
+ *
+ * @param aTargetId Name of the target widget part, e.g element class tag.
+ * @param aAttributeContainer Reference attributeContainer, All attributes
+ * in the container are handled. The ownership is not transferred.
+ * @return True if all attributes were supported, false if not.
+ */
+ virtual bool setAttributeContainer( const UString& aTargetId ,
+ AlfAttributeContainer& aAttributeContainer );
+
+ /**
+ * Sets values of each attribute in given container
+ *
+ * When an attributeowner-instance (which can handle some of the attributes in the container)
+ * cannot handle an attribute in the container,
+ * an AlfAttributeException-exception is thrown with EInvalidAttribute parameter.
+ *
+ * @param aAttributeContainer Reference attributeContainer, All attributes
+ * in the container are handled. The ownership is not transferred.
+ *
+ * @return True if all attributes were supported, false if not.
+ */
+ virtual bool setAttributeContainer( AlfAttributeContainer& aAttributeContainer );
+
+
+private:
+
+ /**
+ * Handles the attribute, sets proper values.
+ *
+ * @param aAttribute Reference attribute, the data is copied from it.
+ * The ownership is not transferred.
+ */
+ void handleAttribute(AlfAttribute& aAttribute);
+
+ /**
+ * Can attribute be handled with this widget.
+ *
+ * @param aAttributeName Name of the attribute.
+ * @return True if attribute is supported, false elsewhere.
+ */
+ bool canHandleAttribute(const char* aAttributeName);
+
+ /**
+ * Handles the Opacity Attribute.
+ *
+ * @param aAttribute the attribute to be handled.
+ */
+ void handleOpacityAttribute(AlfAttribute& aAttribute);
+
+ /**
+ * Handles the Position Attribute.
+ *
+ * @param aAttribute the attribute to be handled.
+ */
+ void handlePositionAttribute(AlfAttribute& aAttribute);
+
+ /**
+ * Handles the Tactile Attribute.
+ *
+ * @param aAttribute the attribute to be handled.
+ */
+ void handleTactileAttribute(AlfAttribute& aAttributeEvent,AlfAttribute& aAttributeFeedback);
+
+ /**
+ * Handles the Size Attribute.
+ *
+ * @param aAttribute the attribute to be handled.
+ */
+ void handleSizeAttribute(AlfAttribute& aAttribute);
+
+ /**
+ * Handles the Max Size Attribute.
+ *
+ * @param aAttribute the attribute to be handled.
+ */
+ void handleMaxSizeAttribute(AlfAttribute& aAttribute);
+
+ /**
+ * Handles the Min Size Attribute.
+ *
+ * @param aAttribute the attribute to be handled.
+ */
+ void handleMinSizeAttribute(AlfAttribute& aAttribute);
+
+ /**
+ * Handles setting of paired attributes: width & height, xpos & ypos etc.
+ *
+ * @param aAttribute the attribute to be handled.
+ * @param aAttributeNamePair name for the pair attribute of aAttribute.
+ */
+ bool handleAttributePairs(AlfAttribute& aAttribute,
+ const char* aAttributeNamePair);
+
+private:
+
+ /*
+ * Reference to owner element. Not own.
+ */
+ AlfElement& mElement;
+
+ /*
+ * Reference to control.
+ */
+ CAlfWidgetControl& mControl;
+
+ /*
+ * Array of attributes set through IAlfAttributeOwner interface. Own.
+ */
+ AlfPtrVector<AlfAttribute> mAttributeList;
+ };
+
+ } // namespace Alf
+
+#endif // __ALFELEMENTATTRIBUTEOWNERIMPL_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfenumvalue.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2007 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: Class for enumValue for attributes..
+*
+*/
+
+
+#ifndef ALFENUMVALUE_H
+#define ALFENUMVALUE_H
+
+//INCLUDES
+#include <osn/osndefines.h>
+#include <memory>
+#include "alf/alfattributevaluetype.h"
+
+// FORWARD DECLARATIONS
+
+using std::auto_ptr;
+
+namespace Alf
+ {
+
+/**
+ * A class for enum value type.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfEnumValue : public AlfAttributeValueType
+ {
+
+public:
+
+ /**
+ * Constructor.
+ *
+ * @since S60 ?S60_version
+ * @return New object.
+ */
+ AlfEnumValue(int aValue, TAlfUnit aUnit = EAlfUnitPixel);
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfEnumValue();
+
+ /**
+ * Gets the enum value.
+ *
+ * @since S60 ?S60_version
+ * @return The enum value.
+ */
+ int virtual enumValue() const;
+
+ /**
+ * Gets the type of the atrribute value.
+ *
+ * @since S60 ?S60_version
+ * @return The type of the value.
+ */
+ virtual Type type() const;
+
+ /**
+ * Gets the unit.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ virtual TAlfUnit unit() const;
+
+private: // data
+
+ int mEnum;
+ TAlfUnit mUnit;
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFENUMVALUE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfeventinput.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,171 @@
+/*
+* Copyright (c) 2007 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: Class for various input events, including custom events.
+*
+*/
+
+
+#ifndef ALFEVENTINPUT_H
+#define ALFEVENTINPUT_H
+
+#include <alf/alfwidgetevents.h>
+#include <osn/osndefines.h>
+#include <memory>
+#include <osn/ustring.h>
+class TAlfEvent;
+
+using namespace std;
+using namespace osncore;
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class AlfReferenceToVisual;
+class AlfAttribute;
+
+// bit definitions in the received key events
+enum
+ {
+ eventBitLeftAlt =0x00000004,
+ eventBitRightAlt =0x00000008,
+ eventBitAlt =0x00000010,
+ eventBitLeftCtrl =0x00000020,
+ eventBitRightCtrl =0x00000040,
+ eventBitCtrl =0x00000080,
+ eventBitLeftShift =0x00000100,
+ eventBitRightShift =0x00000200,
+ eventBitShift =0x00000400,
+ eventBitLeftFunc =0x00000800,
+ eventBitRightFunc =0x00001000,
+ eventBitFunc =0x00002000,
+ eventBitCapsLock =0x00004000,
+ eventBitNumLock =0x00008000,
+ eventBitScrollLock =0x00010000
+ };
+
+/**
+ * Event input, which may be either a custom event or a key event.
+ * Internal.
+ */
+OSN_NONSHARABLE_CLASS( AlfEventInput )
+ {
+public:
+public:
+ /**
+ * accepts the event.
+ */
+ bool accept( const TAlfEvent& aEvent ) const;
+
+public: // data
+ AlfEventInput(int, int, int, int);
+ // Event type flags, combination of EventTypeFlags values
+ int mEventTypeFlags;
+ // Key or custom event id
+ int mEventID;
+ // Custom event data, if used
+ int mEventData;
+ // Key event modifiers
+ int mKeyEventModifiers;
+ };
+
+/**
+ * Pointer event input.
+ * Internal.
+ */
+OSN_NONSHARABLE_CLASS( AlfPointerEventInput ) //: public CBase
+ {
+public:
+ /**
+ * constructor.
+ */
+ AlfPointerEventInput(const char* aElementName, const char* aVisualName,
+ WidgetPointerEvent aEvent );
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfPointerEventInput();
+
+public:
+ /**
+ * accept the event.
+ */
+ bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;
+
+private:
+ AlfPointerEventInput();
+
+private: // data
+
+ auto_ptr<AlfReferenceToVisual> mVisualRef;
+ WidgetPointerEvent mEvent;
+ };
+OSN_NONSHARABLE_CLASS( AlfWidgetAttributeInput )
+ {
+public:
+ /**
+ * Constructor.
+ */
+ AlfWidgetAttributeInput( AlfAttribute& aAttribute,
+ const char* aElementId );
+
+ ~AlfWidgetAttributeInput();
+
+public:
+ /**
+ * Executes the event output.
+ */
+ void execute( CAlfWidgetControl& aControl, const TAlfEvent& aEvent );
+
+ bool accept(const TAlfEvent& aEvent) const;
+
+private:
+ /**
+ * constructor
+ */
+ AlfWidgetAttributeInput();
+
+private: // data
+ AlfAttribute* mAttr;
+ // Reference to element
+ UString mElementId;
+ };
+OSN_NONSHARABLE_CLASS( AlfEventPasserInput )
+ {
+public:
+ /**
+ * Constructor.
+ */
+ AlfEventPasserInput( int aEventId, int aEventData );
+
+ ~AlfEventPasserInput();
+
+public:
+
+ bool accept(const TAlfEvent& aEvent) const;
+
+private:
+ /**
+ * constructor
+ */
+ AlfEventPasserInput();
+
+private: // data
+ int mEventId;
+ int mEventData;
+ };
+ } // namespace Alf
+
+#endif // ALFEVENTINPUT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfeventoutput.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,344 @@
+/*
+* Copyright (c) 2007 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: Class for various output events, including custom events.
+*
+*/
+
+
+#ifndef ALFEVENTOUTPUT_H
+#define ALFEVENTOUTPUT_H
+
+
+#include <osn/osndefines.h>
+#include <alf/alfcommand.h>
+#include <alf/alftypes.h>
+
+#include <osn/osntypes.h>
+#include <osn/ustring.h>
+using namespace osncore;
+
+#include <memory>
+using namespace std;
+
+#ifdef RD_TACTILE_FEEDBACK
+#include <touchfeedback.h>
+#endif // RD_TACTILE_FEEDBACK
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class AlfReferenceToVisual;
+class IAlfVariantType;
+class AlfAttribute;
+class IAlfEventOutputSignalSubscriber;
+class IAlfAppEventListener;
+
+/**
+ * Event output. Internal.
+ */
+OSN_NONSHARABLE_CLASS( AlfEventOutput )
+ {
+public:
+
+ /**
+ * If the event is to be broadcast, aTargetWidget is set to an empty string.
+ */
+ AlfEventOutput(int aEventType, int aEventID, const char* aTargetWidget, unsigned int aDelay );
+
+ ~AlfEventOutput();
+
+public:
+ /**
+ * Executes the event output.
+ */
+ void execute( const CAlfWidgetControl& aControl, const TAlfEvent& aEvent );
+
+private:
+ AlfEventOutput();
+
+public: // data
+
+ int mEventType; // either custom or key event
+ int mEventID;
+ UString mTargetWidget; // Empty string if the event is to be broadcast.
+ unsigned int mDelay;
+ };
+
+/**
+ * Event cancel output. Internal.
+ */
+OSN_NONSHARABLE_CLASS( AlfEventCancelOutput )
+ {
+public:
+ /**
+ * constructor.
+ */
+ AlfEventCancelOutput( const char* aTargetWidget, int aEventID, bool aCancelAll );
+
+ ~AlfEventCancelOutput();
+
+public:
+ /**
+ * Executes the event output.
+ */
+ void execute( const CAlfWidgetControl& aControl );
+ /**
+ * returns target widget id.
+ */
+ inline const UString& targetWidget() const
+ {
+ return mTargetWidget;
+ }
+
+private:
+ /**
+ * cancels the excecution.
+ */
+ AlfEventCancelOutput();
+
+private: // data
+
+ UString mTargetWidget;
+ int mEventID;
+ bool mCancelAll;
+ };
+
+/**
+ * Animation Event cancel output. Internal.
+ */
+OSN_NONSHARABLE_CLASS( AlfAnimationCancelOutput )
+ {
+public:
+ /**
+ * constructor.
+ */
+ AlfAnimationCancelOutput(const char* aElementName,const char* aVisualName, TAlfOp aOperation, bool aCancelAll );
+ /**
+ * destructor.
+ */
+ ~AlfAnimationCancelOutput();
+
+public:
+ /**
+ * excecutes the command.
+ */
+ void execute( CAlfWidgetControl& aControl, int aDataID );
+
+private:
+ /**
+ * constructor
+ */
+ AlfAnimationCancelOutput();
+
+
+private: // data
+
+ auto_ptr<AlfReferenceToVisual> mVisualRef;
+ TAlfOp mOperation;
+ bool mCancelAll;
+ };
+
+
+OSN_NONSHARABLE_CLASS( AlfWidgetAttributeOutput )
+ {
+public:
+ /**
+ * Constructor.
+ */
+ AlfWidgetAttributeOutput( AlfAttribute& aAttribute,
+ const char* aWidgetId );
+
+ ~AlfWidgetAttributeOutput();
+
+public:
+ /**
+ * Executes the event output.
+ */
+ void execute( CAlfWidgetControl& aControl );
+
+private:
+ /**
+ * constructor
+ */
+ AlfWidgetAttributeOutput();
+
+private: // data
+ AlfAttribute* mAttr;
+
+ // Reference to outside widget
+ UString mWidgetId;
+ };
+
+/**
+ * State change output. Internal.
+ */
+OSN_NONSHARABLE_CLASS( AlfStateChangeOutput )
+ {
+public:
+ /**
+ * constructor.
+ *
+ * @exception Alf::AlfWidgetException value osncore::EInvalidWidget
+ * if aTaretWidget is NULL or empty
+ * @exception Alf::AlfWidgetException value osncore::EInvalidArgument
+ * if aDisableStates and aEnableStates have a common bit set
+ */
+ AlfStateChangeOutput( const char* aTargetWidget, uint aEnableStates, uint aDisableStates );
+
+ ~AlfStateChangeOutput();
+
+public:
+ /**
+ * Executes the event output.
+ */
+ void execute( const CAlfWidgetControl& aControl );
+
+ /**
+ * returns target widget id.
+ */
+ inline const UString& targetWidget() const
+ {
+ return mTargetWidget;
+ }
+
+private: // data
+
+ UString mTargetWidget;
+ uint mEnableStates;
+ uint mDisableStates;
+ };
+
+
+#ifdef RD_TACTILE_FEEDBACK
+OSN_NONSHARABLE_CLASS( AlfTactileOutput )
+ {
+public:
+
+ /**
+ * Constructor.
+ */
+ AlfTactileOutput( TTouchLogicalFeedback aFeedbackType );
+
+ /**
+ * Destructor.
+ */
+ ~AlfTactileOutput();
+
+public:
+
+ /**
+ * Executes the event output.
+ */
+ void execute();
+
+private:
+
+ /**
+ * Constructor.
+ */
+ AlfTactileOutput();
+
+private: // data
+
+ TTouchLogicalFeedback mFeedbackType;
+
+ };
+
+#endif // RD_TACTILE_FEEDBACK
+
+/**
+ * Event output signal.
+ */
+OSN_NONSHARABLE_CLASS( AlfEventOutputSignal )
+ {
+public:
+ explicit AlfEventOutputSignal( IAlfEventOutputSignalSubscriber& aSubscriber );
+
+ ~AlfEventOutputSignal();
+
+ /**
+ * Executes the event output.
+ */
+ void execute();
+
+private: // data
+ IAlfEventOutputSignalSubscriber* mSubscriber;
+ };
+
+OSN_NONSHARABLE_CLASS( AlfEventPasserOutput)
+ {
+public:
+
+ /**
+ * Constructor.
+ */
+ AlfEventPasserOutput( const char* aSourceWidget , const char* aTargetWidget );
+
+ /**
+ * Constructor. Occurred event is mapped to a new event (specified by aNewEventId)
+ */
+ AlfEventPasserOutput::AlfEventPasserOutput( const char* aSourceWidget , const char* aTargetWidget,
+ int aNewEventId , int aNewEventCustomData );
+ /**
+ * Destructor.
+ */
+ ~AlfEventPasserOutput();
+
+public:
+
+ /**
+ * Executes the event output.
+ */
+ void execute( const CAlfWidgetControl* aControl , const TAlfEvent& aEvent );
+
+private:
+
+ /**
+ * Constructor.
+ */
+ AlfEventPasserOutput();
+
+private: // data
+
+ const char* mSourceWidget;
+ const char* mTargetWidget;
+ bool mEventMappingData;
+ int mNewEventId;
+ int mNewEventCustomData;
+ };
+
+/**
+ * Application Event output.
+ */
+OSN_NONSHARABLE_CLASS( AlfAppEventOutput )
+ {
+public:
+ explicit AlfAppEventOutput( const UString& aCmd, IAlfAppEventListener& aAppEvent );
+
+ ~AlfAppEventOutput();
+
+ /**
+ * Executes the event output.
+ */
+ void execute(const TAlfEvent& aEvent);
+
+private: // data
+ IAlfAppEventListener* mAppEvent;
+ UString mCmd;
+ };
+
+ } // namespace Alf
+
+#endif // ALFEVENTOUTPUT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfflowlayoutpolicyimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2007 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: flow layout policy implementation.
+*
+*/
+
+
+#ifndef ALFFLOWLAYOUTPOLICYIMPL_H
+#define ALFFLOWLAYOUTPOLICYIMPL_H
+
+#include <osn/osndefines.h>
+#include <alf/ialfflowlayoutpolicy.h>
+
+using std::auto_ptr;
+
+class CAlfFlowLayout;
+
+using namespace Alf;
+
+namespace Alf
+ {
+class AlfFlowLayoutManager;
+
+/**
+ * flow layout policy implementation
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfFlowLayoutPolicyImpl : public IAlfFlowLayoutPolicy
+ {
+public:
+ /**
+ * layout policy constructor
+ *
+ * @param aFlowLayoutManager flow layout manager instance
+ */
+ AlfFlowLayoutPolicyImpl(AlfFlowLayoutManager& aFlowLayoutManager);
+
+ /**
+ * destructor
+ */
+ ~AlfFlowLayoutPolicyImpl();
+
+public:
+//from IAlfFlowLayoutPolicy
+
+ /**
+ * Sets the direction of the flow.
+ *
+ * @param aDirection Flow direction.
+ */
+ virtual void setFlowDirection(enum flowDirection aDirection);
+
+ /**
+ * returns the flow direction
+ *
+ * @param aDirection Flow direction.
+ */
+ virtual enum flowDirection flowDirection() const;
+
+ /**
+ * Sets the mode of the flow. The mode flags determine how the flow layout
+ * behaves.
+ *
+ * @param aMode Mode flags (OR'd together).
+ *
+ * @see IAlfFlowLayoutPolicy::flowModeFlags
+ */
+ virtual void setMode(int aMode);
+
+ /**
+ * Returns the mode flags of the flow.
+ *
+ * @see IAlfFlowLayoutPolicy::flowModeFlags
+ *
+ * @return Returns the current mode flags.
+ */
+ virtual int mode() const;
+
+public:
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+private:
+ /**
+ * returns the native flowlayout used by the implementation.
+ */
+ CAlfFlowLayout& layout() const;
+private:
+
+ AlfFlowLayoutManager &mFlowLayoutManager;
+ enum IAlfFlowLayoutPolicy::flowDirection mDirection;
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFFLOWLAYOUTPOLICYIMPL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfflowlayoutpreferencesimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2007 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: layoutpreferences implementation class for flowlayoutmanager
+*
+*/
+
+
+#ifndef ALFFLOWLAYOUTPREFERENCESIMPL_H
+#define ALFFLOWLAYOUTPREFERENCESIMPL_H
+
+#include <osn/osndefines.h>
+#include <alf/ialflayoutpreferences.h>
+
+using namespace Alf;
+
+namespace Alf
+ {
+class AlfFlowLayoutManager;
+
+/**
+ * layout preferences implementation for flowlayoutmanager.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfFlowLayoutPreferencesImpl : public IAlfLayoutPreferences
+ {
+public:
+ AlfFlowLayoutPreferencesImpl(AlfFlowLayoutManager& aFlowLayoutManager);
+public:
+// from base class IAlfLayoutPreferences
+
+ /**
+ * Returns the minimum size of the layout by combining the minimum sizes of the
+ * layed out visuals.
+ *
+ * @param aMinSize The minimum size that the object would like to be laid out to
+ * @return false iff none of the layed out UI elements do not care about minimum size
+ */
+ virtual bool getMinimumSize( TAlfXYMetric& aMinSize ) const;
+
+ /**
+ * Returns the maximum size of the layout by combining the maximum sizes of the
+ * layed out visuals.
+ *
+ * @param aMaxSize The maximum size that the object would like to be laid out to
+ * @return false iff none of the layed out UI elements do not care about maximum size
+ */
+ virtual bool getMaximumSize( TAlfXYMetric& aMaxSize ) const;
+
+ /**
+ * Returns the size combined by all preferred sizes of child UI elements in this layout
+ * when they are being layed out according to the layout manager rules.
+ *
+ * @param aPreferredSize Filled with the referred area occupied by child elements when
+ * layed out by layouting rules in this layout manager.
+ * @return False if none of the child components report their preferred size. True
+ * otherwise.
+ */
+ virtual bool getPreferredSize(TAlfXYMetric& aPreferredSize) const;
+
+ /**
+ * Set the preferred size into a presentation object.
+ *
+ * This is not supported on the layout manager. Users should set preferred sizes of the
+ * contained UI elements.
+ */
+ virtual void setPreferredSize( const TAlfXYMetric& aPreferredSize );
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::makeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+protected:
+
+ /** size type to calculate @see calculateChildSizes */
+ enum sizeType
+ {
+ ESizePreferred,
+ ESizeMin,
+ ESizeMax
+ };
+
+ /**
+ * calculate the min-, preferred-, or max- sizes from the children.
+ *
+ * @param aSize on return, contains the calculated size.
+ * @param aFlowDirection direction of flow.
+ * @param aSizeType specifies, whether the min-, preferred- or max-size of the
+ * IAlfLayoutPreferences is used for calculation.
+ */
+ bool calculateChildSizes(TAlfXYMetric& aSize,
+ enum IAlfFlowLayoutPolicy::flowDirection aFlowDirection,
+ enum sizeType aSizeType) const;
+
+ /**
+ * fetches the size from the IAlfLayoutPreferences-interface of the aControl.
+ *
+ * @param aControl control, which preferences-interface to query.
+ * @param aSize on return, contains the size.
+ * @param aSizeType specifies, whether the min-, preferred- or max-size of the
+ * IAlfLayoutPreferences is returned.
+ */
+ bool getSize(CAlfWidgetControl* aControl,
+ TAlfXYMetric& aSize,
+ enum sizeType aSizeType) const;
+
+ /**
+ * @return the flow layout policy-instance of the layoutmanager.
+ *
+ */
+ const IAlfFlowLayoutPolicy& flowLayoutPolicy() const;
+
+ /**
+ * converts size in metrics to size in pixels. Implementation missing.
+ *
+ * @param aSize size to convert
+ * @return size in pixels.
+ */
+ static TAlfRealSize sizeInPixels(const TAlfXYMetric& aSize);
+
+private:
+ AlfFlowLayoutManager &mFlowLayoutManager;
+ TAlfXYMetric mPreferredSize;
+ };
+
+ } // namespace Alf
+
+#endif // ALFFLOWLAYOUTPREFERENCESIMPL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfgridlayoutmanagerimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2007 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: grid layoutmanager private implementation header.
+*
+*/
+
+
+#ifndef ALFGRIDLAYOUTMANAGERIMPL_H
+#define ALFGRIDLAYOUTMANAGERIMPL_H
+
+#include <osn/osndefines.h>
+#include <alf/alfgridlayoutmanager.h>
+#include <alf/ialflayoutpreferences.h>
+
+using std::auto_ptr;
+using Alf::AlfGridLayoutManager;
+
+class CAlfControl;
+class CAlfGridLayout;
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class AlfWidget;
+class IAlfLayoutPreferences;
+
+/**
+ * layoutmanager implementation class
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfGridLayoutManagerImpl : public IAlfLayoutPreferences
+ {
+public:
+ /**
+ * layout manager constructor
+ *
+ * @param aLayoutType type of layout used by the manager.
+ */
+ AlfGridLayoutManagerImpl(AlfGridLayoutManager& aGridLayoutManager);
+
+ /**
+ * destructor
+ */
+ ~AlfGridLayoutManagerImpl();
+
+public:
+// from base class IAlfLayoutPreferences
+
+ /**
+ * Returns the minimum size of the layout by combining the minimum sizes of the
+ * layed out visuals.
+ *
+ * @param aMinSize The minimum size that the object would like to be laid out to
+ * @return false iff none of the layed out UI elements do not care about minimum size
+ */
+ virtual bool getMinimumSize( TAlfXYMetric& aMinSize ) const;
+
+ /**
+ * Returns the maximum size of the layout by combining the maximum sizes of the
+ * layed out visuals.
+ *
+ * @param aMaxSize The maximum size that the object would like to be laid out to
+ * @return false iff none of the layed out UI elements do not care about maximum size
+ */
+ virtual bool getMaximumSize( TAlfXYMetric& aMaxSize ) const;
+
+ /**
+ * Returns the size combined by all preferred sizes of child UI elements in this layout
+ * when they are being layed out according to the layout manager rules.
+ *
+ * @param aPreferredSize Filled with the referred area occupied by child elements when
+ * layed out by layouting rules in this layout manager.
+ * @return False if none of the child components report their preferred size. True
+ * otherwise.
+ */
+ virtual bool getPreferredSize(TAlfXYMetric& aPreferredSize) const;
+
+ /**
+ * Set the preferred size into a presentation object.
+ *
+ * This is not supported on the layout manager. Users should set preferred sizes of the
+ * contained UI elements.
+ */
+ virtual void setPreferredSize( const TAlfXYMetric& aPreferredSize );
+
+public:
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+private:
+ /**
+ * returns the gridlayout used by the layoutmanager.
+ */
+ CAlfGridLayout& layout() const;
+private:
+
+ AlfGridLayoutManager &mGridLayoutManager;
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFGRIDLAYOUTMANAGERIMPL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfgridlayoutpolicyimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 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: grid layoutpolicy private implementation header.
+*
+*/
+
+
+#ifndef ALFGRIDLAYOUTPOLICYIMPL_H
+#define ALFGRIDLAYOUTPOLICYIMPL_H
+
+#include <osn/osndefines.h>
+#include <alf/alfgridlayoutmanager.h>
+#include <alf/ialfgridlayoutpolicy.h>
+
+using std::auto_ptr;
+using Alf::AlfGridLayoutManager;
+
+class CAlfControl;
+class CAlfGridLayout;
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class AlfWidget;
+class IAlfGridLayoutPolicy;
+
+/**
+ * layoutmanager implementation class
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfGridLayoutPolicyImpl : public IAlfGridLayoutPolicy
+ {
+public:
+ /**
+ * layout manager constructor
+ *
+ * @param aLayoutType type of layout used by the manager.
+ */
+ AlfGridLayoutPolicyImpl(AlfGridLayoutManager& aGridLayoutManager);
+
+ /**
+ * destructor
+ */
+ ~AlfGridLayoutPolicyImpl();
+
+
+
+public:
+ // from IAlfGridLayoutPolicy
+
+ /**
+ * Sets the number and weights of blocks in this grid layout in the direction of the specified
+ * dimension. Each block's weight will be set to equal the supplied value, the result
+ * of which is that all blocks will be equally spaced, whatever the units.
+ *
+ * @see appendWeight; for more information on how weights are used to calculate layout positions.
+ *
+ * @note This API could be useful if then subsequent calls to @c replaceWeight are made to
+ * change specific values, depending on how many of the values are different.
+ * @note Calling this with aCount set to 0 will clear all of the existing weights in the direction
+ * of the specified dimension.
+ * @note this is the same as using metrics with unit type EAlfUnitWeight.
+ *
+ * @param aDim the dimension along which to fill
+ * @param aCount The number of lines of blocks to fill
+ * @param aWeight the weights to be used for all blocks
+ * @throw AlfVisualException(EInvalidArgument), if aPos is out of bounds
+ */
+ virtual void fillWeights(IAlfGridLayoutPolicy::gridLayoutDimension aDim, int aCount, const TAlfMetric& aWeight);
+
+ /**
+ * Add a new line of blocks to this grid layout at the last position in the direction of the
+ * specified dimension. It will have the supplied weight. Weights can be any metric value,
+ * hence different units can be used for each block. In particular, EAlfUnitWeight can be used
+ * to represent weight values in aribtrary proportional units.
+ *
+ * In the case of proportional weights, the effect of this will be to cause the other blocks to
+ * resize according to the new total weight.
+ *
+ * @note If non-relative coordinates are specified (e.g., real pixels), the combined blocks might not
+ * fill the entire layout area. However, weights will always stretch to fill all available space
+ * after the fixed units have been determined. Therefore, depending on circumstances it may
+ * be better to use EAlfUnitWeight
+ * @note For example [2 weights, 1 weight, 2 weights] in a layout of 100 pixels would result
+ * in [40 pixels, 20 pixels, 40 pixels].
+ * @note For example [10 pixels, 1 weight, 15 pixels] in a layout of 100 pixels would result
+ * in [10 pixels, 75 pixels, 15 pixels].
+ *
+ * @param aDim the dimension to which the weight corresponds
+ * @param aWeight the weight to be used for the block in the specified dimension,
+ * replacing any previously existing weight for that block
+ * @throw AlfVisualException(ECommonError), if memory allocation error
+ */
+ virtual void appendWeight(IAlfGridLayoutPolicy::gridLayoutDimension aDim, const TAlfMetric& aWeight);
+
+ /**
+ * Add a new line of blocks to this grid layout at the specified position in the direciton of
+ * the specified dimension. It will have the supplied weight. In the case of proportional
+ * weights, the effect of this will be to cause the other blocks to resize according to the new
+ * total weight. It will also mean that many child visuals will now occupy different blocks within
+ * the grid according to how the blocks wrap.
+ *
+ * @note will leave if the specified position is greater than the number of objects currently in the array,
+ * so check first by calling @c preferredDimensionCount
+ * @see appendWeight for more information on how weights are used to calculate layout positions.
+ *
+ * @param aDim the dimension to which the weight corresponds
+ * @param aWeight the weight to be used for the block in the specified dimension,
+ * replacing any previously existing weight for that block
+ * @param aPos the index of the block
+ * @throw AlfVisualException(EInvalidArrayIndex), if aPos is out of bounds
+ */
+ virtual void insertWeight(IAlfGridLayoutPolicy::gridLayoutDimension aDim, const TAlfMetric& aWeight, int aPos);
+
+ /**
+ * Sets the weight of a specific line of blocks in this grid layout, in the direction of the supplied dimension.
+ * In the case of proportional weights, the effect of this will be to cause the
+ * other blocks to resize according to the new total weight.
+ *
+ * @see appendWeight for more information on how weights are used to calculate layout positions.
+ *
+ * @param aDim the dimension to which the weight corresponds
+ * @param aWeight the weight to be used for the block in the specified dimension,
+ * replacing any previously existing weight for that cell
+ * @param aPos the index of the cell
+ * @throw AlfVisualException(EInvalidArrayIndex), if aPos is out of bounds
+ */
+ virtual void replaceWeight(IAlfGridLayoutPolicy::gridLayoutDimension aDim, const TAlfMetric& aWeight, int aPos);
+
+ /**
+ * Remove a line of blocks from this grid layout at the specified position in the
+ * specified dimension. In the case of proportional weights, the effect of this will
+ * be to cause the other blocks to resize according to the new total weight. It will also mean
+ * that many child visuals will now occupy different blocks within the grid according to how
+ * the blocks wrap.
+ *
+ * @see appendWeight for more information on how weights are used to calculate layout positions.
+ *
+ * @param aDim the dimension to which the weight corresponds
+ * @param aPos the index of the cell
+ * @throw AlfVisualException(EInvalidArrayIndex), if aPos is out of bounds
+ */
+ virtual void removeWeight(IAlfGridLayoutPolicy::gridLayoutDimension aDim, int aPos);
+
+ /**
+ * Returns the weight of a specific line of blocks in this grid layout, in the
+ * specified dimension.
+ *
+ * @see appendWeight for more information on how weights are used to calculate layout positions.
+ *
+ * @param aDim the dimension to which the weight corresponds
+ * @param aPos the index of the cell
+ * @return the weight being used for the cell in the specified dimension, will be 0 magnitude if not set
+ * @throw AlfVisualException(EInvalidArrayIndex), if aPos is out of bounds
+ */
+ virtual TAlfMetric weight(IAlfGridLayoutPolicy::gridLayoutDimension aDim, int aPos) const;
+
+ /**
+ * Return the number of lines of blocks in this grid, along the specified dimension
+ *
+ * @param aDim the dimension along which to count
+ * @return The number of lines of blocks in this grid.
+ */
+ virtual int count(IAlfGridLayoutPolicy::gridLayoutDimension aDim) const;
+
+public:
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+private:
+ /**
+ * returns the gridlayout used by the layoutmanager.
+ */
+ CAlfGridLayout& layout() const;
+private:
+
+ AlfGridLayoutManager &mGridLayoutManager;
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFGRIDLAYOUTPOLICYIMPL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfhostapiimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2007 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: The private implementation of AlfHostAPI.
+*
+*/
+
+
+#ifndef ALFHOSTAPIIMPL_H
+#define ALFHOSTAPIIMPL_H
+
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+#include <memory>
+
+#include "ialfhostapi.h"
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class AlfWidget;
+/**
+ * The private implementation of CAlfHostAPIImpl.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfHostAPIImpl:public IAlfHostAPI
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @since S60 ?S60_version
+ */
+ AlfHostAPIImpl();
+
+ /**
+ * Destructor.
+ *
+ * @since S60 ?S60_version
+ */
+ virtual ~AlfHostAPIImpl();
+
+ /**
+ * Set the host control.Should be set before any IAlfHostAPI call is made
+ */
+ void setHostControl(CAlfWidgetControl& aControl);
+ /**
+ * setConnection.
+ *
+ * @since S60 ?S60_version
+ */
+ void setConnection(CAlfWidgetControl& aControl, AlfRole aRole);
+ /**
+ * getConnection.
+ *
+ * @since S60 ?S60_version
+ */
+ CAlfWidgetControl* getConnection(int aIndex) const;
+
+ /**
+ * gets the number of connections
+ *
+ * @since S60 ?S60_version
+ */
+ int getConnectionCount() const;
+
+ /**
+ * gets the connection index of aControl
+ *
+ * @since S60 ?S60_version
+ * @param aControl control, which index to return.
+ */
+ int getConnectionIndex(CAlfWidgetControl& aControl) const;
+
+ /**
+ * removeConnection.
+ *
+ * @since S60 ?S60_version
+ */
+ void removeConnection(CAlfWidgetControl& aControl);
+ /**
+ * setBaseLayout.
+ *
+ * @since S60 ?S60_version
+ */
+ void setBaseLayout(IAlfLayoutManager& aLayout);
+ /**
+ * getBaseLayout.
+ *
+ * @since S60 ?S60_version
+ */
+ IAlfLayoutManager* getBaseLayout() const;
+ /**
+ * Template getter for interfaces provided by the control classes.
+ * The type of the queried interface is specified by the
+ * template parameter.
+ *
+ * @since S60 ?S60_version
+ * @param aControl The control to get the interface for.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ template <class T>
+ static T* makeInterface( AlfHostAPIImpl* aControl );
+ /**
+ * From MAlfInterfaceBase.
+ * Getter for interfaces provided by the control classes.
+ * Derived classes should always call the base class method
+ * from the overridden makeInterface.
+ *
+ * @since S60 ?S60_version
+ * @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 );
+private:
+ /**
+ * Base layout of container widget.
+ */
+ auto_ptr<IAlfLayoutManager> mBaseLayout;
+ /**
+ * Host control for IAlfHostAPIs. Not Owned.
+ */
+ CAlfWidgetControl *mHostControl;
+ }; //class AlfHostAPIImpl
+ } // namespace Alf
+
+#endif // C_ALFHOSTAPIIMPL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alflayoutmanagerimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2007 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: layoutmanager implementation header.
+*
+*/
+
+
+#ifndef ALFLAYOUTMANAGERIMPL
+#define ALFLAYOUTMANAGERIMPL
+
+#include <osn/osndefines.h>
+#include <alf/alflayoutmanager.h>
+#include <alf/ialflayoutpreferences.h>
+
+using std::auto_ptr;
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class IAlfWidget;
+class IAlfLayoutPreferences;
+
+/**
+ * layoutmanager implementation class
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfLayoutManagerImpl : public IAlfLayoutPreferences
+ {
+public:
+ /**
+ * layout manager constructor
+ *
+ * @param aLayoutType type of layout used by the manager.
+ */
+ AlfLayoutManagerImpl(TAlfLayoutType aLayoutType);
+
+ /**
+ * destructor
+ */
+ ~AlfLayoutManagerImpl();
+
+ /**
+ * creates the layout used by the layoutmanager.
+ *
+ * @param aOwner, owner-control of the the created layout.
+ * @param aParentLayout parent for the created layout
+ * @param aLayoutIndex index, where created visual should be placed in the parent layout.
+ */
+ void createLayout(CAlfWidgetControl& aOwner, CAlfLayout* aParentLayout,
+ int aLayoutIndex);
+
+ /**
+ * returns the layout used by layoutmanager.
+ *
+ * @return layout used by this layoutmanager.
+ */
+ CAlfLayout& getLayout() const;
+
+ /**
+ * updates the main layout
+ */
+ void updateMainLayout();
+
+ /**
+ * notifies the layout manager, that the control's has been
+ * removed from the layout.
+ *
+ * @param aControl control, which size has changed.
+ */
+ void childRemoved(CAlfWidgetControl* aControl);
+
+ /**
+ * notifies the layout manager, that the child control's layout
+ * must be updated.
+ *
+ * @param aControl control, which size or position has changed.
+ */
+ void doUpdateChildLayout(CAlfWidgetControl* aControl);
+
+ /**
+ * returns the rect of the control.
+ *
+ * @param aControl, control, which size is queried.
+ * @param aRect, will receive the rect of aControl.
+ */
+ bool controlRect(CAlfWidgetControl& aControl, TAlfRealRect& aRect);
+
+ /**
+ * sets the size and position to the widget.
+ *
+ * @param aWidget, widget, which size and position is being set.
+ * @param aRect, rect for aWidget
+ */
+ void setWidgetRect(IAlfWidget& aWidget, const TAlfRealRect &aRect);
+
+ /**
+ * sets the position to the widget.
+ *
+ * @param aWidget, widget, which position is being set.
+ * @param aPos, position for aWidget
+ */
+ void setWidgetPosition(IAlfWidget& aWidget, const TAlfRealPoint &aPos);
+
+ /**
+ * sets the size to widget.
+ *
+ * @param aWidget, widget, which size is being set.
+ * @param aSize, new size for aWidget.
+ */
+ void setWidgetSize(IAlfWidget& aWidget, const TAlfRealPoint &aSize);
+
+ /**
+ * updates widget size and position properties for all the children
+ * to correct sizes and positions of the root visuals.
+ */
+ void updateAllWidgetRects();
+
+ /**
+ * @return the child visual count
+ */
+ int count() const;
+
+ /**
+ * returns the control at aIndex.
+ *
+ * @param aIndex index for the control.
+ * @return control at aIndex
+ */
+ CAlfWidgetControl* getControl(int aIndex) const;
+
+ /**
+ * @return the owner control of the layoutmanager.
+ */
+ CAlfWidgetControl& owner() const ;
+
+public:
+// from base class IAlfLayoutPreferences
+
+ /**
+ * Returns the minimum size of the layout by combining the minimum sizes of the
+ * layed out visuals.
+ *
+ * @param aMinSize The minimum size that the object would like to be laid out to
+ * @return false iff none of the layed out UI elements do not care about minimum size
+ */
+ virtual bool getMinimumSize( TAlfXYMetric& aMinSize ) const;
+
+ /**
+ * Returns the maximum size of the layout by combining the maximum sizes of the
+ * layed out visuals.
+ *
+ * @param aMaxSize The maximum size that the object would like to be laid out to
+ * @return false iff none of the layed out UI elements do not care about maximum size
+ */
+ virtual bool getMaximumSize( TAlfXYMetric& aMaxSize ) const;
+
+ /**
+ * Returns the size combined by all preferred sizes of child UI elements in this layout
+ * when they are being layed out according to the layout manager rules.
+ *
+ * @param aPreferredSize Filled with the referred area occupied by child elements when
+ * layed out by layouting rules in this layout manager.
+ * @return False if none of the child components report their preferred size. True
+ * otherwise.
+ */
+ virtual bool getPreferredSize(TAlfXYMetric& aPreferredSize) const;
+
+ /**
+ * Set the preferred size into a presentation object.
+ *
+ * This is not supported on the layout manager. Users should set preferred sizes of the
+ * contained UI elements.
+ */
+ virtual void setPreferredSize( const TAlfXYMetric& aPreferredSize );
+
+ /**
+ * returns the layout preferences for a control
+ *
+ * @param aControl control instance
+ * @return layout preferences for a control.
+ */
+ const IAlfLayoutPreferences* getLayoutPreferences(CAlfWidgetControl* aControl) const;
+
+public:
+// from base class IAlfInterfaceBase
+
+ /**
+ * Interface getter.
+ * @see IAlfInterfaceBase::MakeInterface
+ *
+ * @since S60 ?S60_version
+ * @param aType The type id of the queried interface.
+ * @return The queried interface, or NULL if the interface is not
+ * supported or available.
+ */
+ virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+private:
+
+ /**
+ * returns the control, which owns the visual
+ *
+ * @param aVisual visual, which the control owns.
+ * @return control, which owns the visual at aIndex.
+ */
+ CAlfWidgetControl* getControl(CAlfVisual& aVisual) const;
+
+ /**
+ * finds the root visual for a control
+ *
+ * @param aControl control, which rootvisual is searched
+ * @return root visual
+ */
+ CAlfVisual* findRootVisual(CAlfWidgetControl* aControl) const;
+
+ /**
+ * checks, that layout is created. If not, throws an exception.
+ */
+ void checkLayout() const;
+
+private:
+
+ /**
+ * the layout created and used by the layout manager.
+ * Destroyed along with instance of this class.
+ */
+ auto_ptr<CAlfLayout> mLayout;
+
+ /**
+ * the layout type of mLayout
+ */
+ TAlfLayoutType mLayoutType;
+ };
+
+ } // namespace Alf
+
+#endif // ALFLAYOUTMANAGERIMPL
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alflctattributesetterutils.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2007 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: TThe attribute setter utility for lct attributesetters
+*
+*/
+
+
+#ifndef ALFCTATTRIBUTESETTERUTILS_H
+#define ALFCTATTRIBUTESETTERUTILS_H
+
+#ifdef RD_ALF_IN_PLATFORM
+#include <aknlayout2hierarchy.h>
+#endif
+
+namespace Alf
+ {
+
+class AlfAttributeContainer;
+class IAlfMap;
+
+/**
+ * The implementation of the attribute setter utility for lct attributesetters.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfLctAttributeSetterUtils
+ {
+
+public:
+
+ /**
+ * Gets common lct attributes.
+ *
+ * @param aContainer The container holding the new value of the attribute.
+ * Ownership of the object is not transferred.
+ * @ret Component handle
+ */
+ static TAknLayoutHierarchyComponentHandle getCommonLctAttributes(
+ AlfAttributeContainer* aContainer);
+
+ /**
+ * Gets lct size.
+ *
+ * @param aComponentHandle Component handle
+ * @param aWidth returned width.
+ * @param aHeight returned height.
+ * @return true if size is found.
+ */
+ static bool itemSize(const TAknLayoutHierarchyComponentHandle& aComponentHandle,
+ int& aWidth, int& aHeight);
+
+private: // data
+ };
+
+ } // namespace Alf
+
+#endif // ALFCTATTRIBUTESETTERUTILS_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfrealvalue.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2007 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: Defines RealValue for attributeTypes..
+*
+*/
+
+
+#ifndef ALFREALVALUE_H
+#define ALFREALVALUE_H
+
+//INCLUDES
+#include <osn/osndefines.h>
+#include <memory>
+#include "alf/alfattributevaluetype.h"
+
+// FORWARD DECLARATIONS
+
+using std::auto_ptr;
+
+namespace Alf
+ {
+
+/**
+ * A class for a real value type.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfRealValue : public AlfAttributeValueType
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @since S60 ?S60_version
+ * @param aValue The value of the attribute. Makes a copy of the attribute.
+ * @return New object.
+ */
+ AlfRealValue( float aValue, TAlfUnit aUnit = EAlfUnitNormalized );
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfRealValue();
+
+ /**
+ * Gets the real value.
+ *
+ * @since S60 ?S60_version
+ * @return The real value.
+ */
+ float virtual realValue() const;
+
+ /**
+ * Gets the type of the attribute value.
+ *
+ * @since S60 ?S60_version
+ * @return The type of the value.
+ */
+ virtual Type type() const;
+
+ /**
+ * Gets the unit.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ virtual TAlfUnit unit() const;
+
+private: // data
+
+ float mReal;
+ TAlfUnit mUnit;
+
+ };
+
+ } // namespace Alf
+
+#endif // ALFREALVALUE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfrecyclinggridelementimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,240 @@
+/*
+* Copyright (c) 2007 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: Class for private implementation for AlfRecyclingGridElement.
+*
+*/
+
+
+#ifndef ALFRECYCLINGGRIDELEMENTIMPL_H
+#define ALFRECYCLINGGRIDELEMENTIMPL_H
+
+#include "alf/alfrecyclinggridelement.h"
+#include <osn/osndefines.h>
+
+class CAlfVisual;
+class CAlfLayout;
+class TAlfEvent;
+
+namespace Alf
+ {
+class CAlfWidgetControl;
+class IAlfVariantType;
+class IAlfBranch;
+class IAlfElement;
+
+/**
+ * Implementation class used with the implPtr paradigm.
+ */
+OSN_NONSHARABLE_CLASS( AlfRecyclingGridElementImpl )
+ {
+public:
+ /**
+ * Gets the unit.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ AlfRecyclingGridElementImpl(
+ AlfRecyclingGridElement& aOwner,
+ int aNumColumns,
+ int aNumRows);
+ /**
+ * Gets the unit.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ ~AlfRecyclingGridElementImpl();
+ /**
+ * setFillStyle.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ void setFillStyle(AlfRecyclingGridElement::FillStyle aFillStyle, int aFillStyleParam);
+
+ /**
+ * setAnimationTimes.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ void setAnimationTimes( int aScrollingTime,
+ int aFadeInTime, int aFadeInDelay,
+ int aFadeOutTime, int aFadeOutDelay );
+ /**
+ * createVisualTree.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ CAlfVisual* createVisualTree(
+ IAlfVariantType& aData, uint aDataID,
+ CAlfLayout* aParentLayout, int aLayoutIndex );
+ /**
+ * accept.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;
+ /**
+ * offerEvent.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ bool offerEvent( CAlfWidgetControl& aControl, const TAlfEvent& aEvent );
+ /**
+ * setActiveStates.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ void setActiveStates( unsigned int aStates );
+ /**
+ * Sets AlfWidgetEventHandlerInitData to event handler.
+ *
+ * @param aData A data structure which contains for example id of the event
+ * handler.
+ */
+ void setEventHandlerData( const AlfWidgetEventHandlerInitData& /*aData*/ ) { }
+
+ /**
+ * Returns AlfWidgetEventHandlerInitData.
+ *
+ * @return A pointer to AlfWidgetEventHandlerInitData structure which contains
+ * for example id of the event handler.
+ */
+ AlfWidgetEventHandlerInitData* eventHandlerData() { return NULL; }
+ /**
+ * createChildVisualTree.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ void createChildVisualTree( IAlfElement* aElement,
+ IAlfVariantType& aChildData,
+ IAlfBranch& aData,
+ int aIndex, uint aDataID );
+ /**
+ * removeChildVisualTree.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ void removeChildVisualTree( IAlfElement* aElement, IAlfBranch& aData, int aIndex, uint aDataID );
+ /**
+ * removeAndDestroyVisuals.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ void removeAndDestroyVisuals( int aTimeMilliseconds );
+
+private:
+
+ /**
+ * Api to naviagte by a single row or column.
+ * @since S60 ?S60_version
+ * @param aControl - Widget Control
+ * @param aPageUp - indicates the direction either a page up or page down
+ */
+ bool moveSingleRowOrColumn( CAlfWidgetControl& aControl, bool aPageUp);
+
+ /**
+ * APi to find the point in the grid for a given index in the visual array on the recycle grid .
+ * @since S60 ?S60_version
+ * @param aInd - index of the element
+ * @return TPoint - Point or cordinates
+ */
+ TPoint calculateChildPos(int aInd) const;
+
+ /**
+ * APi to find the index for a given point
+ * @since S60 ?S60_version
+ * @param aPos- position for whom the index needs to be found out
+ * @return int - Index of the cordinate
+ */
+ int calculateChildInd(TPoint aPos) const;
+
+ /**
+ * Internal APi to do the index calcuation for navigation and recycling
+ */
+ void doPositioningAndScrolling( CAlfWidgetControl& aControl,uint aEventID);
+
+private:
+
+ AlfRecyclingGridElement& mOwner;
+
+ //class Data
+ /**
+ * The number of visible rows and columns.
+ */
+ int mNumVisibleColumns, mNumVisibleRows;
+
+ /**
+ * The number of rows and columns in the grid layout.
+ */
+ int mNumColumns, mNumRows;
+
+ /**
+ * The strategy for adding new items to the grid
+ */
+ AlfRecyclingGridElement::FillStyle mFillStyle;
+
+ /**
+ * The maximum number of items used with EColumnsFirst and ERowsFirst fill styles
+ */
+ int mFillStyleParam;
+
+
+ /**
+ * Duration of the scrolling animation
+ */
+ int mScrollingTime;
+
+ /**
+ * Duration of the fade in animation
+ */
+ int mFadeInTime;
+
+ /**
+ * Delay before the fade in animation
+ */
+ int mFadeInDelay;
+
+ /**
+ * Duration of the fade out animation
+ */
+ int mFadeOutTime;
+
+ /**
+ * Delay before the fade out animation
+ */
+ int mFadeOutDelay;
+
+ /**
+ * The logical scrolling offset.
+ */
+ TPoint mScrollOffset;
+
+ bool mHorizontalOffset;
+ bool mVerticalOffset;
+ unsigned int mActiveStates;
+ };
+
+ } // namespace Alf
+
+#endif // C_ALFWIDGETEVENTHANDLERIMPL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfsort.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* 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: contains sorting routine
+*
+*/
+
+
+
+#ifndef ALFSORT_H
+#define ALFSORT_H
+
+// INCLUDES
+#include <osn/osntypes.h>
+
+namespace Alf
+ {
+
+class IAlfVariantType;
+class IAlfSortFunction;
+ }
+
+namespace Alf
+ {
+/**
+* class containig sort routine.
+* @since S60 ?S60_version
+*/
+class AlfSort
+ {
+public:
+ /**
+ * sorts the array
+ *
+ * @since S60 ?S60_version
+ * @param aArr array to sort
+ * @param aCount count of items in aArr.
+ * @param aSortFunction. Callback interface, specifies how the items are sorted.
+ */
+ static void sort(IAlfVariantType** aArr, uint aCount, const IAlfSortFunction& aSortFunction );
+ };
+
+ }
+
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfstringvalue.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2007 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: Declares StringType attribute Value.
+*
+*/
+
+
+#ifndef ALFSTRINGVALUE_H
+#define ALFSTRINGVALUE_H
+
+//INCLUDES
+#include <osn/osndefines.h>
+#include <memory>
+#include <osn/ustring.h>
+#include "alf/alfattributevaluetype.h"
+
+// FORWARD DECLARATIONS
+
+namespace osncore
+ {
+class UString;
+ }
+using namespace osncore;
+using std::auto_ptr;
+
+namespace Alf
+ {
+
+/**
+ * A class for a string value type.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfStringValue : public AlfAttributeValueType
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @since S60 ?S60_version
+ * @return New object.
+ */
+ AlfStringValue( const UString& aValue );
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfStringValue();
+
+ /**
+ * Gets the string value.
+ *
+ * @since S60 ?S60_version
+ * @return The string value.
+ */
+ const virtual UString& stringValue() const;
+
+ /**
+ * Gets the type of the atrribute value.
+ *
+ * @since S60 ?S60_version
+ * @return The type of the value.
+ */
+ virtual Type type() const;
+
+ /**
+ * Gets the unit.
+ *
+ * @since S60 ?S60_version
+ * @return The unit.
+ */
+ virtual TAlfUnit unit() const;
+
+private: // data
+
+ UString mString;
+ };
+
+ } // namespace Alf
+
+#endif // ALFSTRINGVALUE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfwidgetattributeownerimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 2007 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 the IAlfAttributeOwner interface
+* for AlfWidget.
+*
+*/
+
+
+#ifndef __ALFELEMENTATTRIBUTEOWNERIMPL_H__
+#define __ALFELEMENTATTRIBUTEOWNERIMPL_H__
+
+#include "alf/ialfattributeowner.h"
+#include <osn/alfptrvector.h>
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+
+/**
+ * Implementation of the IAlfAttributeOwner interface for AlfWidget.
+ */
+class AlfWidgetAttributeOwnerImpl : public IAlfAttributeOwner
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param aWidget Reference to owner widget.
+ */
+ AlfWidgetAttributeOwnerImpl(CAlfWidgetControl* aControl);
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfWidgetAttributeOwnerImpl();
+
+// from base class IAlfInterfaceBase
+
+ /**
+ * Getter for interfaces provided by the widget classes.
+ * Derived classes should always call the base class method
+ * from the overridden MakeInterface.
+ *
+ * @since S60 ?S60_version
+ * @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);
+
+// from base class IAlfAttributeOwner
+
+ /**
+ * Get the number of available attributes.
+ *
+ * @return The number of attributes.
+ */
+ virtual int attributeCount() const;
+
+ /**
+ * Gets the attribute with the given name.
+ * The returned attribute instance is owned by the widget and
+ * should not be deleted.
+ * Also the returned attribute instance should not be modified.
+ * Use SetAttribute for that.
+ *
+ * @param aAttribName The name of the attribute.
+ * @return The attribute, or 0 if the attribute was not found.
+ */
+ virtual const AlfAttribute* getAttribute(const UString& aAttribName) const;
+
+ /**
+ * Set a value of an attribute.
+ *
+ * @param aAttribute Reference attribute, the data is copied from it.
+ * The ownership is not transferred.
+ * @return True if the attribute was supported, false if not.
+ */
+ virtual bool setAttribute(const AlfAttribute& aAttribute);
+
+ /**
+ * Set a value of an attribute.
+ * This SetAttribute variant is for simple non animated attributes
+ * that only have name and value.
+ *
+ * @param aAttribName Name of the attribute.
+ * @param aValue Value of the attribute. Ownership is transferred
+ * @return True if the attribute was supported, false if not.
+ */
+ virtual bool setAttribute(const UString& aAttribName,
+ AlfAttributeValueType* aValue);
+
+ /**
+ * Sets a value of an attribute to a specific target.
+ * The target is identified by using aTargetId parameter.
+ *
+ * @param aTargetId Name of the target widget part, e.g element class tag.
+ * @param aAttribute Reference attribute, the data is copied from it.
+ * The ownership is not transferred.
+ * @return True if the attribute was supported, false if not.
+ */
+ virtual bool setAttribute( const UString& aTargetId ,
+ AlfAttribute& aAttribute );
+
+
+ /**
+ * Sets values of each attribute in given container to a specific target.
+ * The target is identified by using aTargetId parameter.
+ *
+ * @param aTargetId Name of the target widget part, e.g element class tag.
+ * @param aAttributeContainer Reference attributeContainer, All attributes
+ * in the container are handled. The ownership is not transferred.
+ * @return True if some attributes were supported, false if not.
+ */
+ virtual bool setAttributeContainer( const UString& aTargetId ,
+ AlfAttributeContainer& aAttributeContainer );
+
+ /**
+ * Sets a value of an static attribute.
+ * This SetAttribute variant is for simple non animated attributes
+ * that only have name and value.
+ *
+ * @param aTargetId The name of the target widget part, e.g. element class
+ * @param aAttribName Name of the attribute.
+ * @param aValue Value of the attribute. Ownership is transferred
+ * @return True if the attribute was supported, false if not.
+ */
+ virtual bool setAttribute( const UString& aTargetId,
+ const UString& aAttribName,
+ AlfAttributeValueType* aValue );
+
+ /**
+ * Sets values of each attribute in given container
+ *
+ * @param aAttributeContainer Reference attributeContainer, All attributes
+ * in the container are handled. The ownership is not transferred.
+ *
+ * @return True if some attributes were supported, false if not.
+ */
+ virtual bool setAttributeContainer( AlfAttributeContainer& aAttributeContainer );
+
+ /**
+ * Gets the attribute with the given name from specific target.
+ * The returned attribute instance is owned by the widget and
+ * should not be deleted.
+ * Also the returned attribute instance should not be modified.
+ * Use SetAttribute for that.
+ *
+ * @param aTargetId The name of the target widget part, e.g. element class
+ * @param aAttribName The name of the attribute.
+ * @return A pointer to the attribute, or 0 if the attribute was not found.
+ */
+ virtual const AlfAttribute* getAttribute( const UString& aTargetId ,
+ const UString& aAttribName ) const;
+private:
+
+ /**
+ * Lets elements to try handle attribute.
+ *
+ * @param aAttribute Reference attribute, the data is copied from it.
+ * The ownership is not transferred.
+ * @return True if the attribute was supported, false if not.
+ */
+ bool handleElementAttribute(const AlfAttribute& aAttribute);
+
+ /**
+ * Handles the attribute, sets proper values.
+ *
+ * @param aAttribute Reference attribute, the data is copied from it.
+ * The ownership is not transferred.
+ */
+ void handleAttribute(const AlfAttribute& aAttribute);
+
+ /**
+ * Can attribute be handled with this widget.
+ *
+ * @param aAttributeName Name of the attribute.
+ * @return True if attribute is supported, false elsewhere.
+ */
+ bool canHandleAttribute(const char* aAttributeName);
+
+private:
+
+ /**
+ * The control. Not own.
+ */
+ CAlfWidgetControl* mControl;
+
+ /*
+ * Array of attributes set through IAlfAttributeOwner interface. Own.
+ */
+ AlfPtrVector<AlfAttribute> mAttributeList;
+ };
+
+ } // namespace Alf
+
+#endif // __ALFELEMENTATTRIBUTEOWNERIMPL_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfwidgetcontroleventfilter.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2007 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: Event Filter Header.
+*
+*/
+
+#ifndef __ALFWIDGETCONTROLEVENTFILTER_H__
+#define __ALFWIDGETCONTROLEVENTFILTER_H__
+#include <libc/string.h>
+
+
+#include <alf/alfevent.h>
+#include <alf/alfwidgetevents.h>
+#include <osn/ustring.h>
+#include <osn/osndefines.h>
+#include <alf/alfeventhandler.h>
+
+#include <alf/alfscrollevents.h>
+#include <alf/ialfwidgeteventhandler.h>
+
+using namespace osncore;
+using namespace Alf;
+namespace Alf
+{
+/**
+* AlfWidgetControlEventFilter delivers the Missed PointerUp event as a custom
+* event .If AfWidgetControl gets a stray pointerUp event, the
+* AlfWidgetControlEventFilter will consume the Stray pointerup event and send a
+* EEventMissedPointerUp custom event.
+*
+*/
+class AlfWidgetControlEventFilter: public IAlfWidgetEventHandler
+ {
+ public:
+
+ /**
+ * Constructor
+ *
+ */
+ AlfWidgetControlEventFilter();
+
+ /**
+ * Destructor
+ *
+ */
+ ~AlfWidgetControlEventFilter();
+
+ /**
+ * Used to identify event handlers that are capable of handling
+ * a specified key or custom event. Pointer event handlers cannot be
+ * identified directly, since they are dependent on the presentation.
+ * Therefore, pointer event handlers should be associated with
+ * a custom event ID that can be used to simulate the actual pointer event.
+ *
+ * @since S60 ?S60_version
+ * @param aEvent The event.
+ * @return <code>ETrue</code> if the event can be processed. Otherwise <code>EFalse</code>.
+ */
+ bool accept ( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;
+
+ /**
+ * @see IAlfWidgetEventHandler
+ */
+ virtual AlfEventStatus offerEvent ( CAlfWidgetControl& aControl, const TAlfEvent& aEvent );
+
+ /**
+ * Returns the type of EventHandler.
+ * @see IAlfWidgetEventHandler::AlfEventHandlerType
+ *
+ * @return The type of event handler.
+ */
+ AlfEventHandlerType eventHandlerType();
+
+ /**
+ * Returns information about the phase in the event handling cycle in
+ * which the event hadler will be executed.
+ * @see IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase
+ *
+ * @return Event handler execution phase.
+ */
+
+ AlfEventHandlerExecutionPhase eventExecutionPhase();
+ /**
+ * Defines the widget states, where the event handler is active.
+ * By default, if this method is not called, the event handler is expected
+ * to be active in all states.
+ *
+ * @param aStates A bitmask defining the widget states, where the event
+ * handler is active. The low 16 bits are reserved for the states
+ * defined by the framework in <: add reference>. The high 16 bits are
+ * available for states defined by the client code.
+ */
+ /**
+ * Sets AlfWidgetEventHandlerInitData to event handler.
+ *
+ * @param aData A data structure which contains for example id of the event
+ * handler.
+ */
+ virtual void setEventHandlerData( const AlfWidgetEventHandlerInitData& /*aData*/ )
+ {
+
+ }
+
+ /**
+ * Returns AlfWidgetEventHandlerInitData.
+ *
+ * @return A pointer to AlfWidgetEventHandlerInitData structure which contains
+ * for example id of the event handler.
+ */
+ virtual AlfWidgetEventHandlerInitData* eventHandlerData()
+ {
+ return NULL;
+ }
+
+
+ void setActiveStates ( unsigned int aStates );
+
+ IAlfInterfaceBase* makeInterface ( const IfId& aType );
+ // Stores Button Down State
+ bool mButtonDown ;
+
+ };
+}
+
+
+#endif // __ALFWIDGETCONTROLEVENTFILTER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfwidgeteventhandlerimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2007 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: Class for private implementation for AlfWidgetEventHandler.
+*
+*/
+
+
+#ifndef ALFWIDGETEVENTHANDLERIMPL_H
+#define ALFWIDGETEVENTHANDLERIMPL_H
+
+#include <osn/alfptrvector.h>
+#include <osn/osndefines.h>
+#include <alf/ialfwidgeteventhandler.h>
+#include "alfeventinput.h"
+#include "alfeventoutput.h"
+#include "alfanimationoutput.h"
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+/**
+ * Widget event handler internal implementation.
+ */
+OSN_NONSHARABLE_CLASS( AlfWidgetEventHandlerImpl )
+ {
+public:
+
+ /**
+ * constructor.
+ *
+ * @param aEventHandlerType Event handler type.
+ * It can be presentaion related or logical.
+ * @param aEventHandlerExecutionPhase Event handler exceution phase.
+ * It can be tunneling phase/bubbling phase/both.
+ */
+ AlfWidgetEventHandlerImpl(IAlfWidgetEventHandler::AlfEventHandlerType aEventHandlerType,
+ IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase aEventHandlerExecutionPhase);
+
+ /**
+ * Destructor.
+ */
+ virtual ~AlfWidgetEventHandlerImpl();
+
+private:
+ /**
+ * Destructor.
+ */
+ void construct();
+
+public: // data
+
+ AlfPtrVector<AlfEventInput>mInputs;
+ AlfPtrVector<AlfPointerEventInput> mPointerInputs;
+ AlfPtrVector<AlfEventOutput> mOutputs;
+ AlfPtrVector<AlfAnimationOutput> mAnimationOutputs;
+ AlfPtrVector<AlfWidgetAttributeOutput> mWidgetAttributeOutputs;
+ AlfPtrVector<AlfWidgetAttributeInput> mWidgetAttributeInputs;
+ AlfPtrVector<AlfEventCancelOutput> mCancelOutputs;
+ AlfPtrVector<AlfAnimationCancelOutput> mAnimationCancelOutputs;
+ AlfPtrVector<AlfStateChangeOutput> mStateChangeOutputs;
+ AlfPtrVector<AlfEventPasserInput> mEventPasserInputs;
+ AlfPtrVector<AlfEventPasserOutput> mEventPasserOutputs;
+
+#ifdef RD_TACTILE_FEEDBACK
+ AlfPtrVector<AlfTactileOutput> mTactileOutputs;
+#endif // RD_TACTILE_FEEDBACK
+ AlfPtrVector<AlfEventOutputSignal> mWidgetEventOutputSignals;
+ AlfPtrVector<AlfAppEventOutput> mAppEventOutputs;
+
+ unsigned int mActiveStates;
+ bool mCapturing;
+ /**
+ * Event handler init data
+ */
+ AlfWidgetEventHandlerInitData mEhData;
+
+ /*
+ * Type of event handler. It can be presentaion related or logical.
+ */
+ IAlfWidgetEventHandler::AlfEventHandlerType mEventHandlerType;
+
+ /*
+ * Event handler exceution phase. It can be tunneling phase/bubbling phase/both.
+ */
+ IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase mEventHandlerExecutionPhase;
+ };
+
+ } // namespace Alf
+
+#endif // C_ALFWIDGETEVENTHANDLERIMPL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/alfwidgetimpl.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2007 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: The private implementation of CAlfWidget.
+*
+*/
+
+
+#ifndef ALFWIDGETIMPL_H
+#define ALFWIDGETIMPL_H
+
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+using osncore::UString;
+using osncore::AlfPtrVector;
+
+namespace Alf
+ {
+
+class CAlfWidgetControl;
+class IAlfModel;
+class AlfWidget;
+class AlfAttribute;
+class AlfAttributeValueType;
+class AlfWidgetAttributeOwnerImpl;
+
+/**
+ * The private implementation of AlfWidget.
+ * The methods are documented in the class AlfWidget.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ */
+class AlfWidgetImpl
+ {
+public:
+
+ /**
+ * Constructor.
+ *
+ * @since S60 ?S60_version
+ */
+ AlfWidgetImpl();
+
+ /**
+ * Destructor.
+ *
+ * @since S60 ?S60_version
+ */
+ ~AlfWidgetImpl();
+ /**
+ * control.
+ *
+ * @since S60 ?S60_version
+ */
+ CAlfWidgetControl* control();
+ /**
+ * setControl.
+ *
+ * @since S60 ?S60_version
+ */
+ void setControl( CAlfWidgetControl* aControl,bool aDeletePreviousControl);
+ /**
+ * model.
+ *
+ * @since S60 ?S60_version
+ */
+ IAlfModel* model();
+ /**
+ * setModel.
+ *
+ * @since S60 ?S60_version
+ */
+ void setModel( IAlfModel* aModel ,bool aTakeOwnership);
+
+ /**
+ * Set the id of the widget.
+ *
+ * @since S60 ?S60_version
+ * @param aWidgetName The name of the widget instance.
+ */
+ void setWidgetName( const UString& aWidgetName );
+ /**
+ * widgetName.
+ *
+ * @since S60 ?S60_version
+ */
+ const UString& widgetName() const;
+
+ /**
+ * Add a widget to the widgets array.
+ *
+ * @param aWidget The widget to be appended to the array of widgets.
+ */
+ void addWidget(AlfWidget *aWidget);
+
+ /**
+ * Return total number of widgets in the list.
+ */
+ int widgetCount();
+
+ /**
+ * Return widget at the index
+ */
+ AlfWidget* getWidget(int aIndex);
+
+ /**
+ * Returns the index of the widget in this array.
+ * If the given widget is not found from the array -1
+ * is returned.
+ *
+ * @param aWidget Widget to be searched from the array.
+ * @return Index of the widget in the internal array or -1 if the widget
+ * is not found.
+ */
+ int findWidget(AlfWidget* aWidget);
+
+ /*
+ *Removes a widget at given index
+ */
+ void removeWidget(int aIndex);
+
+ /*
+ * Returns attribute owner interface.Ownership is not transferred.
+ *
+ * @return attribute owner interface.
+ */
+ AlfWidgetAttributeOwnerImpl* getAttributeOwner();
+
+private: // data
+
+ /**
+ * The control. Not own.
+ */
+ CAlfWidgetControl* mControl;
+
+ /**
+ * The model. Own.
+ */
+ IAlfModel* mModel;
+
+ /**
+ * The widget id. Own.
+ */
+ UString mWidgetName;
+
+ AlfPtrVector<AlfAttribute> mAttributeList;
+
+ AlfPtrVector<AlfWidget> mWidgets;
+ bool mTakesModelOwnership;
+
+ /*
+ * IAlfAttributeOwner implementation. Own.
+ */
+ auto_ptr<AlfWidgetAttributeOwnerImpl> mAttributeOwnerImpl;
+
+private:
+
+ friend class AlfWidget;
+ };
+
+ } // namespace Alf
+
+#endif // C_ALFWIDGETIMPL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/autoarrayptr.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2009 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: AutoPtr class for array.
+*
+*/
+
+
+/**
+ * Holds reference to an auto_arrayptr. Prevents unsafe copying
+ *
+ * ?more_complete_description
+ *
+ * @lib ?library
+ * @since S60 ?S60_version *** for example, S60 v3.0
+ */
+
+ template<typename Y>
+ struct auto_arrayptr_ref
+ {
+ Y* iPtr;
+
+ explicit
+ auto_arrayptr_ref(Y* aPtr): iPtr(aPtr) { }
+ };
+
+/**
+ * Auto pointer template implementation for C++ arrays
+ *
+ * ?more_complete_description
+ *
+ * @lib ?library
+ * @since S60 ?S60_version *** for example, S60 v3.0
+ */
+ template<typename X>
+ class auto_arrayptr
+ {
+ private:
+ X* iPtr;
+
+ public:
+
+ typedef X element_type;
+
+ /**
+ * Constructor.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+ explicit
+ auto_arrayptr(X* p = 0) throw() : iPtr(p) { }
+ /**
+ * Copy argument a to this object. Owned pointer ownership is transferred to this.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+
+ auto_arrayptr(auto_arrayptr& a) throw() : iPtr(a.release()) { }
+ /**
+ * Copy argument a to this object. Owned pointer ownership is transferred to this.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+
+ template<typename Y>
+ auto_arrayptr(auto_arrayptr<Y>& a) throw() : iPtr(a.release()) { }
+
+ /**
+ * Assign argument a to this object. If this already owned pointer that pointer is deleted.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+ auto_arrayptr& operator=(auto_arrayptr& a) throw()
+ {
+ reset(a.release());
+ return *this;
+ }
+ /**
+ * Assign argument a to this object. If this already owned pointer that pointer is deleted.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+
+ template<typename Y>
+ auto_arrayptr& operator=(auto_arrayptr<Y>& a) throw()
+ {
+ reset(a.release());
+ return *this;
+ }
+ /**
+ * Deletes the underlying pointer.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+ ~auto_arrayptr() { delete [] iPtr; }
+
+ /**
+ * Return owned pointer
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+
+ X* get() const throw() { return iPtr; }
+ /**
+ * Releases ownership of the managed pointer and returns that pointer.
+ * The *this object is left holding a null pointer.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+
+ X* release() throw()
+ {
+ X* tmp = iPtr;
+ iPtr = 0;
+ return tmp;
+ }
+
+ /**
+ * Reset managed pointer. Deletes previously owned pointer.
+ * The *this object is holding given pointer.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+ void reset(X* aPtr = 0) throw()
+ {
+ if (aPtr != iPtr)
+ {
+ delete [] iPtr;
+ iPtr = aPtr;
+ }
+ }
+
+
+ /**
+ * Constructor for value object.Uses type conversion function.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+ auto_arrayptr(auto_arrayptr_ref<X> aRef) throw()
+ : iPtr(aRef.iPtr) { }
+
+ /**
+ * Assign argument a (value object) to this object. If this already owned pointer that pointer is deleted.
+ * Uses type conversion function.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+ auto_arrayptr& operator=(auto_arrayptr_ref<X> aRef) throw()
+ {
+ if (aRef.iPtr != this->get())
+ {
+ delete [] iPtr;
+ iPtr = aRef.iPtr;
+ }
+ return *this;
+ }
+
+ /**
+ * Type conversion. Constructs an auto_arrayptr_ref from *this and returns it.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+ template<typename Y>
+ operator auto_arrayptr_ref<Y>() throw()
+ { return auto_arrayptr_ref<Y>(this->release()); }
+
+ /**
+ * Type conversion. Constructs a new auto_arrayptr using the underlying pointer held by *this.
+ * Calls release() on *this, so *this no longer possesses the pointer.
+ * Returns the new auto_arrayptr.
+ *
+ * @since S60 ?S60_version
+ * @param ?arg1 ?description
+ * @param ?arg2 ?description
+ * @return ?description
+ */
+ template<typename Y>
+ operator auto_arrayptr<Y>() throw()
+ { return auto_arrayptr<Y>(this->release()); }
+ };
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/inc/ialfhostapi.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2007 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: Interface implements by CAlfWidgetControl to provide containment
+*
+*/
+
+
+#ifndef I_ALFHOSTAPI_H
+#define I_ALFHOSTAPI_H
+
+#include <alf/ialfinterfacebase.h>
+#include <alf/alflayout.h>
+#include <alf/ialfwidgetcontrol.h>
+
+namespace Alf
+ {
+
+class IAlfLayoutManager;
+class CAlfWidgetControl;
+
+enum AlfRole
+ {
+ EChild,
+ EParent
+ };
+
+namespace alfhostapi
+ {
+static const IfId ident =
+ {
+ 0, "alfhostapi"
+ };
+ }
+/**
+ * The interface for host appis used by widget controls.
+ *
+ * @lib alfwidgetmodel.lib
+ * @since S60 ?S60_version
+ * @status Draft
+ */
+class IAlfHostAPI : public IAlfInterfaceBase
+ {
+public:
+
+ static inline const IfId& type()
+ {
+ return alfhostapi::ident;
+ }
+
+ virtual inline ~IAlfHostAPI() {}
+
+ /**
+ * Sets a connection from this host to a given control.
+ *
+ * A control can never have more than one host control. If the connected
+ * control has a host control the connection from old host control
+ * to connected control will be removed.
+ *
+ * @param aControl Control to be connected.
+ * @param aRole Relationship with connected control.
+ */
+ virtual void setConnection(CAlfWidgetControl& aControl, AlfRole aRole) = 0;
+
+ /**
+ * Get the connected control at given index.
+ *
+ * @param aIndex Index of connected control.
+ * @return Connected control at given index. If index is not found returns null.
+ */
+ virtual CAlfWidgetControl* getConnection(int aIndex) const = 0;
+
+ /**
+ * gets the number of connections
+ *
+ * @since S60 ?S60_version
+ */
+ virtual int getConnectionCount() const = 0;
+
+ /**
+ * gets the connection index of aControl
+ *
+ * @since S60 ?S60_version
+ * @param aControl control, which index to return.
+ */
+ virtual int getConnectionIndex(CAlfWidgetControl& aControl) const = 0;
+
+ /**
+ * Removes connection with the given control.
+ *
+ * If the connected control is in the same control group with host control,
+ * it will be removed from the host control's control group.
+ *
+ * If the connected control is in a separate control group or if the
+ * host control is not in a control group, the connected control's control
+ * group relation will not be affected.
+ *
+ * @see setConnection()
+ *
+ * @param aControl Control with which connection is to be removed.
+ */
+ virtual void removeConnection(CAlfWidgetControl& aControl) = 0;
+
+ /**
+ * Sets the base layout of control.
+ *
+ * @param aLayout Base layout.
+ */
+ virtual void setBaseLayout(IAlfLayoutManager& aLayout) = 0;
+
+ /**
+ * Returns the base layout of control.
+ *
+ * @return Base layout of control.Returns null id there is no base layout.
+ */
+ virtual IAlfLayoutManager* getBaseLayout() const = 0;
+
+
+ };
+
+ } // namespace Alf
+
+#endif // I_ALFHOSTAPI_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfanchorlayoutattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,457 @@
+/*
+* Copyright (c) 2007 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: Implements attributesetters for anchorlayout.
+*
+*/
+
+
+
+//includes
+
+//widget model includes
+#include "alf/alfattributecontainer.h"
+#include "alf/alfattributevaluetype.h"
+#include "alf/alfattribute.h"
+#include "alf/alfanchorlayoutattributesetter.h"
+#include <alf/alfvisualexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfattributeexception.h>
+
+
+//osn includes
+#include <osn/ustring.h>
+
+//alf includes
+#include <alf/alfenv.h>
+#include <alf/alfanchorlayout.h>
+#include <alf/alftexture.h>
+#include <alf/alfeventhandler.h>
+#include <alf/alfevent.h>
+
+//dui includes
+#include "alf/attrproperty.h"
+
+//other includes
+#include <libc/string.h>
+#include <utf.h>
+
+
+
+//namespaces
+
+using namespace osncore;
+
+using namespace duiuimodel::anchorlayoutinput;
+
+using namespace duiuimodel::layoutattributes;
+
+using namespace duiuimodel::anchor;
+
+using namespace duiuimodel::metric;
+
+namespace Alf
+ {
+
+bool isMultivalueDataAchment ( TAlfAnchorAttachmentOrigin val )
+ {
+ return ( val == EAlfAnchorAttachmentOriginNone||
+ val == EAlfAnchorAttachmentOriginTopLeft ||
+ val == EAlfAnchorAttachmentOriginTopCenter ||
+ val == EAlfAnchorAttachmentOriginTopRight ||
+ val == EAlfAnchorAttachmentOriginCenterLeft ||
+ val == EAlfAnchorAttachmentOriginCenter ||
+ val == EAlfAnchorAttachmentOriginCenterRight ||
+ val == EAlfAnchorAttachmentOriginBottomLeft ||
+ val == EAlfAnchorAttachmentOriginBottomCenter ||
+ val == EAlfAnchorAttachmentOriginBottomRight );
+ }
+
+typedef void ( *pFunc ) ( AlfContainer* aCont, AlfAttribute* aAttrib, IAlfMap* aData );
+
+void addToAnchortypecont ( AlfContainer* aCont, AlfAttribute* aAttrib, IAlfMap* aData )
+ {
+
+ if ( aData )
+ {
+ IAlfVariantType* dataX = aData->item ( UString(aAttrib->getDataField() ));
+
+ if ( dataX && dataX->type() == IAlfVariantType::EInt )
+ {
+ aCont->addItem ( new ( EMM ) AlfVariantType ( dataX->integer() ) );
+ }
+ }
+ else
+ {
+ aCont->addItem ( new ( EMM ) AlfVariantType ( aAttrib->intValue() ) );
+ }
+
+ }
+
+void addToAttachmentcont ( AlfContainer* aCont, AlfAttribute* aAttrib, IAlfMap* aData )
+ {
+
+ if ( aData )
+ {
+ IAlfVariantType* dataX = aData->item ( UString(aAttrib->getDataField()));
+
+ if ( dataX && dataX->type() == IAlfVariantType::EInt )
+ {
+ aCont->addItem ( new ( EMM ) AlfVariantType ( dataX->integer() ) );
+ }
+ }
+ else
+ {
+ aCont->addItem ( new ( EMM ) AlfVariantType ( aAttrib->intValue() ) );
+ }
+ }
+
+void addToMagnitudecont ( AlfContainer* aCont, AlfAttribute* aAttrib, IAlfMap* aData )
+ {
+
+ if ( aData )
+ {
+ IAlfVariantType* dataX = aData->item ( UString(aAttrib->getDataField()) );
+
+ if ( dataX != NULL && dataX->type() == IAlfVariantType::EMap )
+ {
+ IAlfVariantType* valueX = dataX->map()->item ( UString("value"));
+ IAlfVariantType* unitX = dataX->map()->item ( UString("unit"));
+ auto_ptr<AlfContainer> value ( new ( EMM ) AlfContainer() );
+ auto_ptr<AlfVariantType> vtype1(new ( EMM ) AlfVariantType ( valueX->real() ));
+ value->addItem ( vtype1.get() );
+ vtype1.release();
+ auto_ptr<AlfVariantType> vtype2(new ( EMM ) AlfVariantType ( unitX->integer() ));
+ value->addItem ( vtype2.get() );
+ vtype2.release();
+ aCont->addItem ( value.release() );
+
+ }
+ else if ( dataX != NULL && dataX->type() == IAlfVariantType::EReal )
+ {
+ auto_ptr<AlfContainer> value ( new ( EMM ) AlfContainer() );
+ auto_ptr<AlfVariantType> vtype1(new ( EMM ) AlfVariantType ( dataX->real() ));
+ value->addItem ( vtype1.get() );
+ vtype1.release();
+ auto_ptr<AlfVariantType> vtype2( new ( EMM ) AlfVariantType ( aAttrib->unit() ) );
+
+ value->addItem (vtype2.get());
+ vtype2.release();
+ aCont->addItem ( value.release() );
+ }
+ }
+ else
+ {
+ auto_ptr<AlfContainer> value ( new ( EMM ) AlfContainer() );
+ auto_ptr<AlfVariantType> vtype1( new ( EMM ) AlfVariantType ( aAttrib->realValue() ) );
+ value->addItem (vtype1.get());
+ vtype1.release();
+ auto_ptr<AlfVariantType> vtype2( new ( EMM ) AlfVariantType ( aAttrib->unit() ) );
+
+ value->addItem (vtype2.get());
+ vtype2.release();
+ aCont->addItem ( value.release() );
+
+ }
+
+ }
+
+void addToTextstylecont ( AlfContainer* /*aCont*/, AlfAttribute* /*aAttrib*/, IAlfMap* /*aData*/ )
+ {
+ }
+
+struct anchormap
+ {
+ const char* name;
+ pFunc addToContainer;
+ AlfContainer* pData;
+ };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAnchorLayoutAttributeSetter::AlfAnchorLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAnchorLayoutAttributeSetter::~AlfAnchorLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Sets Attribute Value. Delegates based on attribute Category.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAnchorLayoutAttributeSetter::setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData )
+ {
+
+ CAlfAnchorLayout* layout = dynamic_cast<CAlfAnchorLayout*> ( &aVisual );
+
+ if ( !layout )
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual,
+ "AlfAnchorLayoutAttributeSetter" )
+ }
+
+ AlfCommonLayoutAttributeSetter::setAttributeValue(aVisual,
+ aContainer, aData);
+ }
+
+
+// ---------------------------------------------------------------------------
+// Deprecated
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfAnchorLayoutAttributeSetter::createCommand ( CAlfVisual& /*aVisual*/,
+ AlfAttributeContainer* /*aContainer*/, IAlfMap* /*aData*/,
+ int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/ )
+ {
+ //deprecated
+ TAlfCommand* cmd = NULL;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// Sends a command to Env
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAnchorLayoutAttributeSetter::createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ //no animatable attributes in grid layout.
+ AlfCommonLayoutAttributeSetter::createAndSendCommands ( aVisual, aContainer, aRefVisual );
+ }
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfAnchorLayoutAttributeSetter::handleDynamicAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer )
+ {
+ //no dynamic attributes in anchor layout.
+ AlfCommonLayoutAttributeSetter::handleDynamicAttribute(aVisual, aAttr, aContainer);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfAnchorLayoutAttributeSetter::handleStaticAttribute (
+ CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer )
+ {
+ if (!doHandleStaticAttribute(aVisual, aAttr, aContainer, NULL))
+ {
+ AlfCommonLayoutAttributeSetter::handleStaticAttribute(aVisual, aAttr, aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual
+// ---------------------------------------------------------------------------
+//
+bool AlfAnchorLayoutAttributeSetter::doHandleStaticAttribute( CAlfVisual &aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData )
+ {
+ bool handled = true;
+ const char* attrName = aAttr.name();
+ CAlfAnchorLayout* layout = dynamic_cast<CAlfAnchorLayout*> ( &aVisual );
+ if(!layout)
+ {
+ return false;
+ }
+
+ if ( !strcmp ( attrName, KChildOrdinal )||!strcmp ( attrName, KAttachmentOrdinal )
+ || !strcmp ( attrName, KAnchorType )||!strcmp ( attrName, KAttachmentOrigin )
+ ||!strcmp ( attrName, KMagnitude )||!strcmp ( attrName, KTextStyleId ) )
+ {
+ AlfAttribute& attachmentordinal = aContainer.getAttributeByName ( KAttachmentOrdinal );
+ AlfAttribute& aAttrChildOrdinal = aContainer.getAttributeByName ( KChildOrdinal );
+ float ordianal=0;
+ float attachordinalval=-1;
+ if(aData)
+ {
+ IAlfVariantType* data = aData->item ( UString(aAttrChildOrdinal.getDataField()) );
+
+ if ( data && data->type() == IAlfVariantType::EReal )
+ {
+ ordianal=data->real();
+ }
+ data = aData->item ( UString(attachmentordinal.getDataField()) );
+ if ( data && data->type() == IAlfVariantType::EReal )
+ {
+ attachordinalval=data->real();
+ }
+ }
+ else
+ {
+ ordianal=aAttrChildOrdinal.realValue();
+ attachordinalval=attachmentordinal.realValue();
+ }
+ auto_ptr<AlfContainer> anchortypecont ( new ( EMM ) AlfContainer() );
+ auto_ptr<AlfContainer> attachmentorigincont ( new ( EMM ) AlfContainer() );
+ auto_ptr<AlfContainer> magnitudecont ( new ( EMM ) AlfContainer() );
+ auto_ptr<AlfContainer> textstyleidcont ( new ( EMM ) AlfContainer() );
+
+ anchormap maptable[] =
+ {
+ {KAnchorType, addToAnchortypecont, NULL},
+ {KAttachmentOrigin, addToAttachmentcont, NULL},
+ {KMagnitude, addToMagnitudecont, NULL},
+ {KTextStyleId, addToTextstylecont, NULL}
+ };
+ unsigned int tableCount = sizeof ( maptable ) / sizeof ( anchormap );
+ maptable[0].pData = anchortypecont.get();
+ maptable[1].pData = attachmentorigincont.get();
+ maptable[2].pData = magnitudecont.get();
+ maptable[3].pData = textstyleidcont.get();
+
+ unsigned int attrCount = aContainer.attributeCount();
+
+ for ( int i = 0;i < attrCount;i++ )
+ {
+ for ( int j = 0;j < tableCount;j++ )
+ {
+ if ( !strcmp ( maptable[j].name, aContainer.getAttribute ( i ).name() ) )
+ {
+ maptable[j].addToContainer ( maptable[j].pData, &aContainer.getAttribute ( i ), aData );
+ aContainer.getAttribute ( i ).setDirty(false);
+ }
+ }
+ }
+
+ unsigned int totalApitocall = attachmentorigincont->count();
+
+ unsigned int magnitudeindex = 0;
+
+ for ( int counter = 0;counter < totalApitocall;counter++ )
+ {
+ IAlfVariantType* Origin = attachmentorigincont->item ( counter );
+ TAlfAnchorAttachmentOrigin value = static_cast<TAlfAnchorAttachmentOrigin> ( Origin->integer() );
+
+ if ( isMultivalueDataAchment ( value ) )
+ {
+ IAlfVariantType* aType = anchortypecont->item ( counter );
+ TAlfAnchorType type = static_cast<TAlfAnchorType> ( aType->integer() );
+
+ if ( type == EAlfAnchorTypeNone )
+ {
+ IAlfContainer* magCont1 = static_cast<IAlfContainer*> ( magnitudecont->item ( magnitudeindex ) );
+ IAlfContainer* magCont2 = static_cast<IAlfContainer*> ( magnitudecont->item ( magnitudeindex + 1 ) );
+ IAlfContainer* magCont3 = static_cast<IAlfContainer*> ( magnitudecont->item ( magnitudeindex + 2 ) );
+ IAlfContainer* magCont4 = static_cast<IAlfContainer*> ( magnitudecont->item ( magnitudeindex + 3 ) );
+
+ TAlfMetric metric1 ( magCont1->item ( 0 )->real(), magCont1->item ( 1 )->integer() );
+ TAlfMetric metric2 ( magCont2->item ( 0 )->real(), magCont2->item ( 1 )->integer() );
+ TAlfMetric metric3 ( magCont3->item ( 0 )->real(), magCont3->item ( 1 )->integer() );
+ TAlfMetric metric4 ( magCont4->item ( 0 )->real(), magCont4->item ( 1 )->integer() );
+ TAlfBoxMetric boxmetric ( metric1, metric2, metric3, metric4 );
+ int err=layout->Attach ( ordianal, boxmetric, value, attachordinalval );
+ if(err!=KErrNone)
+ {
+ ALF_THROW ( AlfVisualException, err, "Anchor Attach Failed" )
+ }
+ magnitudeindex += 4;
+ }
+ else
+ {
+ IAlfContainer* magCont1 = static_cast<IAlfContainer*> ( magnitudecont->item ( magnitudeindex ) );
+ IAlfContainer* magCont2 = static_cast<IAlfContainer*> ( magnitudecont->item ( magnitudeindex + 1 ) );
+
+ TAlfMetric metric1 ( magCont1->item ( 0 )->real(), magCont1->item ( 1 )->integer() );
+ TAlfMetric metric2 ( magCont2->item ( 0 )->real(), magCont2->item ( 1 )->integer() );
+
+
+
+ TAlfXYMetric xymetric ( metric1, metric2 );
+
+ int err=layout->Attach ( ordianal, type, xymetric, value, attachordinalval );
+ if(err!=KErrNone)
+ {
+ ALF_THROW ( AlfVisualException, err, "Anchor Attach Failed" )
+ }
+
+ magnitudeindex += 2;
+ }
+ }
+ else
+ {
+ IAlfVariantType* typeVar = anchortypecont->item ( counter );
+ TAlfAnchorType type = static_cast<TAlfAnchorType> ( typeVar->integer() );
+ IAlfContainer* magCont1 = static_cast<IAlfContainer*> ( magnitudecont->item ( magnitudeindex ) );
+
+ TAlfMetric metric ( magCont1->item ( 0 )->real(), magCont1->item ( 1 )->integer() );
+
+
+ int err=layout->Attach ( ordianal, type, metric, value, attachordinalval );
+ if(err!=KErrNone)
+ {
+ ALF_THROW ( AlfVisualException, err, "Anchor Attach Failed" )
+ }
+
+ magnitudeindex++;
+ }
+ }
+
+ attachmentordinal.setDirty(false);
+ aAttrChildOrdinal.setDirty(false);
+ }
+ else
+ {
+ handled = false;
+ }
+
+ return handled;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfAnchorLayoutAttributeSetter::handleDynamicDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData )
+ {
+ AlfCommonLayoutAttributeSetter::handleDynamicDataAttribute ( aVisual, aAttr, aContainer, aData );
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfAnchorLayoutAttributeSetter::handleStaticDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData )
+ {
+ if (!doHandleStaticAttribute(aVisual, aAttr, aContainer, aData))
+ {
+ AlfCommonLayoutAttributeSetter::handleStaticDataAttribute(aVisual, aAttr, aContainer, aData);
+ }
+ }
+
+ } // namespace Alf
+
+// End of file
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfanchorlayoutmanager.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2007 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: anchorlayoutmanager with focus handling in 1D (next/previous)
+*
+*/
+
+
+#include <alf/alfanchorlayoutmanager.h>
+#include <alf/alfexceptions.h>
+#include <alf/alfwidgetcontrol.h>
+#include <osn/ustring.h>
+#include <osn/osnnew.h>
+
+#include "alfanchorlayoutmanagerimpl.h"
+
+using osncore::UString;
+
+using namespace Alf;
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// layout manager constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAnchorLayoutManager::AlfAnchorLayoutManager()
+ : AlfLayoutManager(EAlfLayoutTypeAnchor)
+ {
+ mData.reset(new (EMM) AlfAnchorLayoutManagerImpl(*this));
+ }
+
+// ---------------------------------------------------------------------------
+// virtual destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAnchorLayoutManager::~AlfAnchorLayoutManager()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// from AlfLayoutManager
+// notifies the layout manager, that the child control's layout
+// must be updated.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAnchorLayoutManager::updateChildLayout(
+ CAlfWidgetControl* aControl)
+ {
+ CAlfLayout& layout = getLayout();
+ doUpdateChildLayout(aControl);
+ layout.UpdateChildrenLayout();
+
+ //doUpdateChildLayout changes the visual size and position.
+ //need to notify the widget that size and position has changed.
+
+ //set the size and postion for aControl
+ TAlfRealRect rect;
+ if (controlRect(*aControl, rect)) //returns the real rect (of the root visual)
+ {
+ setControlRect(*aControl, rect);
+ }
+
+ // Inform parent layout manager about the changed presentation size
+ owner().updateParentLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutManager
+// notifies the layout manager, that the control's has been
+// removed from the layout.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAnchorLayoutManager::childRemoved(CAlfWidgetControl* aControl)
+ {
+ //when control is removed from layout, no change to other widget rects,
+ // just call the base class
+ AlfLayoutManager::childRemoved(aControl);
+ }
+
+// ---------------------------------------------------------------------------
+// from AlfLayoutManager
+// notifies the layout manager, that the child control's layout
+// must be updated.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAnchorLayoutManager::doUpdateChildLayout(
+ CAlfWidgetControl* /*aControl*/)
+ {
+ //anchorlayout changes the position and size, nothing to do here.
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfAnchorLayoutManager::makeInterface(
+ const IfId& aType )
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfLayoutManager::type().mImplementationId)
+ {
+ return this;
+ }
+
+ // Let the implementation class try the interface creation
+ IAlfInterfaceBase* pInterface = mData->makeInterface(aType);
+ return pInterface;
+ }
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfanchorlayoutmanagerimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2007 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: layoutmanager implementation class with focus handling in 1D (next/previous)
+*
+*/
+
+
+#include <alf/ialfwidgetcontrol.h>
+#include <alf/alfvisual.h>
+#include <alf/alfanchorlayout.h>
+#include "alf/alfwidget.h"
+#include <alf/alfvisualfactory.h>
+#include <alf/alfexceptions.h>
+#include <alf/ialflayoutpreferences.h>
+#include <osn/osnnew.h>
+
+//stl
+#include <algorithm> //for min & max
+
+#include "alfanchorlayoutmanagerimpl.h"
+
+using namespace Alf;
+
+namespace Alf
+ {
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// layoutmanagerimpl constructor
+// ---------------------------------------------------------------------------
+//
+AlfAnchorLayoutManagerImpl::AlfAnchorLayoutManagerImpl(
+ AlfAnchorLayoutManager& aAnchorLayoutManager) :
+ mAnchorLayoutManager(aAnchorLayoutManager)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// creates the layout used by the layoutmanager.
+// ---------------------------------------------------------------------------
+//
+AlfAnchorLayoutManagerImpl::~AlfAnchorLayoutManagerImpl()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// Returns the minimum area that this layout manager can occupy by observing
+// the minimum sizes of the child UI elements in the layout
+// ---------------------------------------------------------------------------
+//
+bool AlfAnchorLayoutManagerImpl::getMinimumSize( TAlfXYMetric& /*aMinSize*/ ) const
+ {
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// Returns the maximum area that this layout manager can occupy by observing
+// the maximum sizes of the child UI elements in the layout
+// ---------------------------------------------------------------------------
+//
+bool AlfAnchorLayoutManagerImpl::getMaximumSize( TAlfXYMetric& /*aMaxSize*/ ) const
+ {
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// Combines and returns the preferred sizes of all child UI elements according
+// to the layouting rules.
+// ---------------------------------------------------------------------------
+//
+bool AlfAnchorLayoutManagerImpl::getPreferredSize(TAlfXYMetric& /*aPreferredSize*/) const
+ {
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// At the moment doesn't do anything since preferred size is being queried
+// from the child UI elements added to this layout manager.
+// ---------------------------------------------------------------------------
+//
+void AlfAnchorLayoutManagerImpl::setPreferredSize( const TAlfXYMetric& aPreferredSize)
+ {
+ TAlfTimedPoint size((float)aPreferredSize.iX.iMagnitude,(float)aPreferredSize.iY.iMagnitude);
+ layout().SetSize(size);
+ mAnchorLayoutManager.owner().updateParentLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfAnchorLayoutManagerImpl::makeInterface(const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfLayoutPreferences::type().mImplementationId)
+ {
+ return this;
+ }
+
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// returns the anchorlayout used by the layoutmanager
+// ---------------------------------------------------------------------------
+//
+CAlfAnchorLayout& AlfAnchorLayoutManagerImpl::layout() const
+ {
+ return dynamic_cast<CAlfAnchorLayout&>(mAnchorLayoutManager.getLayout());
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfanimationoutput.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2007 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: Animation class for alfred widget model.
+ This class creates the animation and commands.
+*
+*
+*/
+
+
+
+
+//INCLUDES
+#include "alf/alfreferencetovisual.h"
+#include "alf/ialfattributesetter.h"
+#include "alf/alfattributecontainer.h"
+#include <alf/alfvisual.h>
+#include <alf/alfcontrol.h>
+#include <alf/alfenv.h>
+#include <alf/alfexceptions.h>
+//#include "alf/alfperf.h"
+#include "alfanimationoutput.h"
+
+namespace Alf
+ {
+
+////////////////////// AlfAnimationOutput //////////////////////
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// Description : Constructor
+// -----------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAnimationOutput::AlfAnimationOutput(
+ AlfReferenceToVisual* aTargetVisual,
+ AlfReferenceToVisual* aReferenceVisual,
+ IAlfAttributeSetter* aAttributeSetter,
+ AlfAttributeContainer* aAttributeContainer,
+ unsigned int aAnimationTime,
+ unsigned int aDelay)
+ {
+ if (!aTargetVisual || !aAttributeSetter || !aAttributeContainer )
+ {
+ ALF_THROW( AlfException, EInvalidArgument, "AlfAnimationOutput" )
+ }
+
+ mTargetVisual = aTargetVisual;
+ mReferenceVisual = aReferenceVisual;
+ mAttributeSetter = aAttributeSetter;
+ mAttributeContainer = aAttributeContainer;
+ mAnimationTime = aAnimationTime;
+ mDelay = aDelay;
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Destructor
+// -----------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAnimationOutput::~AlfAnimationOutput()
+ {
+ delete mTargetVisual;
+ delete mReferenceVisual;
+ delete mAttributeSetter;
+ delete mAttributeContainer;
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Create and send the animation command
+// -----------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAnimationOutput::sendCommand(
+ CAlfWidgetControl& aControl, unsigned int aDataID )
+ {
+ CAlfVisual* ref = 0;
+
+ if ( mReferenceVisual )
+ {
+ // Find the reference visual
+ ref = mReferenceVisual->resolve( aControl, aDataID );
+ }
+ // Find the animated visual
+ CAlfVisual* visual = NULL;
+ visual = mTargetVisual->resolve( aControl, aDataID );
+ if ( visual )
+ {
+ // Create the animation command(s) and send them through the env.
+ //ALF_PERF_START( perfdata, "AlfAnimationOutput-sendCommand-createAndSendCommands" )
+ // reference visual is optional, it may be 0.
+ mAttributeSetter->createAndSendCommands( *visual, mAttributeContainer, ref );
+ //ALF_PERF_STOP( perfdata, "AlfAnimationOutput-sendCommand-createAndSendCommands" )
+ }
+ }
+
+ } // namespace Alf
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfattribute.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,564 @@
+/*
+* Copyright (c) 2007 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 for creating different types of attributes.
+*
+*/
+
+
+#include <osn/osnnew.h>
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+#include "alf/alfattribute.h"
+#include <alf/alfdataexception.h>
+#include <stdexcept>
+#include <alf/alftimedvalue.h>
+#include <alf/alfattributeexception.h>
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+
+class AlfAttributeImpl
+ {
+public:
+ AlfAttributeImpl():mCategory(AlfAttribute::EStatic),
+ mInterpolationStyle(EAlfTimedValueStyleUseSystemDefault),
+ mTime(0),
+ mDelay(0),
+ mMappingFunctionId(0),
+ mDirtyFlag(true)
+ {
+ }
+
+ ~AlfAttributeImpl()
+ {
+ }
+
+ UString mName;
+ AlfAttribute::attributecategory mCategory;
+ TAlfInterpolationStyle mInterpolationStyle;
+ int mTime;
+ int mDelay;
+ int mMappingFunctionId;
+ UString mDataField;
+ AlfPtrVector<AlfAttributeValueType> mTargetValueContainer;
+ AlfPtrVector<AlfAttributeValueType> mSourceValueContainer;
+ bool mDirtyFlag;
+ };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::AlfAttribute()
+ {
+ reset("", 0, attributecategory(0));
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::AlfAttribute(const char* aName,
+ attributecategory aCategory)
+ {
+ reset(aName, 0, aCategory);
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::AlfAttribute(const char* aName, int aValue,
+ TAlfUnit aUnit, attributecategory aCategory)
+ {
+ auto_ptr<AlfAttributeValueType> value(new (EMM)
+ AlfAttributeValueType(aValue, aUnit));
+ reset(aName, value.get(), aCategory);
+ value.release();
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::AlfAttribute(const char* aName, float aValue,
+ TAlfUnit aUnit, attributecategory aCategory)
+ {
+ auto_ptr<AlfAttributeValueType> value(
+ new( EMM ) AlfAttributeValueType( aValue, aUnit ) );
+ reset(aName, value.get(), aCategory);
+ value.release();
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::AlfAttribute(const char* aName,
+ const UString& aValue, attributecategory aCategory)
+ {
+ if (aCategory == EStaticData)
+ {
+ reset(aName, 0, aCategory);
+ setDataField(aValue.getUtf8());
+ }
+ else
+ {
+ auto_ptr<AlfAttributeValueType> value(
+ new( EMM ) AlfAttributeValueType( aValue ) );
+ reset(aName, value.get(), aCategory);
+ value.release();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::~AlfAttribute()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Assigment operation.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute& AlfAttribute::operator=(const AlfAttribute& aAttribute)
+ {
+ if ( this == &aAttribute )
+ {
+ return *this;
+ }
+
+ mData.reset( new( EMM ) AlfAttributeImpl() );
+
+ mData->mCategory = aAttribute.mData->mCategory;
+ mData->mName = UString(aAttribute.name());
+ mData->mInterpolationStyle = aAttribute.mData->mInterpolationStyle;
+
+ mData->mTime = aAttribute.mData->mTime;
+ mData->mDelay = aAttribute.mData->mDelay;
+ mData->mMappingFunctionId = aAttribute.mData->mMappingFunctionId;
+ mData->mDataField = UString(aAttribute.getDataField());
+
+ int count = aAttribute.mData->mTargetValueContainer.count();
+ mData->mTargetValueContainer.resize( count );
+ for ( int i = 0 ; i < count ; i++ )
+ {
+ mData->mTargetValueContainer.insert(
+ i, cloneValueType( aAttribute.mData->mTargetValueContainer[i] ) );
+ }
+
+ count = aAttribute.mData->mSourceValueContainer.count();
+ mData->mSourceValueContainer.resize( count );
+ for ( int i = 0 ; i < count ; i++ )
+ {
+ mData->mSourceValueContainer.insert(
+ i, cloneValueType( aAttribute.mData->mSourceValueContainer[i] ) );
+ }
+
+ return *this;
+ }
+
+// ---------------------------------------------------------------------------
+// Clones the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute* AlfAttribute::clone()
+ {
+ auto_ptr<AlfAttribute> clone( new( EMM ) AlfAttribute() );
+ *clone.get() = *this;
+ return clone.release();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the name of the Attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfAttribute::name() const
+ {
+ return mData->mName.getUtf8();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the category of the atrribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::attributecategory AlfAttribute::category() const
+ {
+ return mData->mCategory;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the type of the target atrribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType::Type AlfAttribute::type(
+ unsigned int aIndex) const
+ {
+ if (aIndex >= mData->mTargetValueContainer.count())
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+ }
+ return mData->mTargetValueContainer[aIndex]->type();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the int value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfAttribute::intValue(unsigned int aIndex) const
+ {
+ if (aIndex >= mData->mTargetValueContainer.count())
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+ }
+ return mData->mTargetValueContainer[aIndex]->intValue();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the real value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT float AlfAttribute::realValue(unsigned int aIndex) const
+ {
+ if (aIndex >= mData->mTargetValueContainer.count())
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+ }
+ return mData->mTargetValueContainer[aIndex]->realValue();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the string value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const UString& AlfAttribute::stringValue(unsigned int aIndex) const
+ {
+ if (aIndex >= mData->mTargetValueContainer.count())
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+ }
+ return mData->mTargetValueContainer[aIndex]->stringValue();
+ }
+
+// ---------------------------------------------------------------------------
+// Returns true if attribute is set.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfAttribute::isValueSet() const
+ {
+ return mData->mTargetValueContainer.count() > 0;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the unit of the value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfUnit AlfAttribute::unit(unsigned int aIndex) const
+ {
+ if (aIndex >= mData->mTargetValueContainer.count())
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+ }
+ return mData->mTargetValueContainer[aIndex]->unit();
+ }
+
+// ---------------------------------------------------------------------------
+// Adds a new target value to the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::addTargetValue(AlfAttributeValueType* aValue)
+ {
+ mData->mTargetValueContainer.resize(mData->mTargetValueContainer.count() +1 );
+ mData->mTargetValueContainer.insert(mData->mTargetValueContainer.count(), aValue);
+ }
+
+// ---------------------------------------------------------------------------
+// Gets target value count.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT unsigned int AlfAttribute::getTargetValueCount() const
+ {
+ return mData->mTargetValueContainer.count();
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the target value of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setTargetValue(AlfAttributeValueType* aValue,
+ unsigned int aIndex)
+ {
+ if (aIndex < mData->mTargetValueContainer.count())
+ {
+ mData->mTargetValueContainer.remove(aIndex);
+ }
+ mData->mTargetValueContainer.insert(aIndex, aValue);
+ mData->mDirtyFlag=true;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the target value of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType* AlfAttribute::getTargetValue(
+ unsigned int aIndex) const
+ {
+ if (aIndex >= mData->mTargetValueContainer.count())
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+ }
+ return mData->mTargetValueContainer[aIndex];
+ }
+
+// ---------------------------------------------------------------------------
+// Removes the target value of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::removeTargetValue(unsigned int aIndex)
+ {
+ if (aIndex >= mData->mTargetValueContainer.count())
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+ }
+ mData->mTargetValueContainer.remove(aIndex);
+ }
+
+// ---------------------------------------------------------------------------
+// Adds a new source value to the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::addSourceValue(AlfAttributeValueType* aValue)
+ {
+ mData->mSourceValueContainer.resize(mData->mSourceValueContainer.count() +1 );
+ mData->mSourceValueContainer.insert(mData->mSourceValueContainer.count(), aValue);
+ }
+
+// ---------------------------------------------------------------------------
+// Gets source value count.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT unsigned int AlfAttribute::getSourceValueCount() const
+ {
+ return mData->mSourceValueContainer.count();
+ }
+
+// ---------------------------------------------------------------------------
+// Adds a new source value to the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setSourceValue(AlfAttributeValueType* aValue,
+ unsigned int aIndex)
+ {
+ if (aIndex < mData->mSourceValueContainer.count())
+ {
+ mData->mSourceValueContainer.remove(aIndex);
+ }
+ mData->mSourceValueContainer.insert(aIndex, aValue);
+ mData->mDirtyFlag=true;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the source value of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType* AlfAttribute::getSourceValue(
+ unsigned int aIndex) const
+ {
+ if (aIndex >= mData->mSourceValueContainer.count())
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+ }
+ return mData->mSourceValueContainer[aIndex];
+ }
+
+// ---------------------------------------------------------------------------
+// Removes the source value of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::removeSourceValue(unsigned int aIndex)
+ {
+ if (aIndex >= mData->mSourceValueContainer.count())
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+ }
+ mData->mSourceValueContainer.remove(aIndex);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the interpolation style of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setInterpolationStyle(
+ TAlfInterpolationStyle aInterpolationStyle)
+ {
+ mData->mInterpolationStyle = aInterpolationStyle;
+ mData->mDirtyFlag=true;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the interpolation style of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfInterpolationStyle AlfAttribute::getInterpolationStyle()const
+ {
+ return mData->mInterpolationStyle;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the transition time for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setTime(int aTime)
+ {
+ mData->mTime = aTime;
+ mData->mDirtyFlag=true;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the transition time for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfAttribute::getTime()const
+ {
+ return mData->mTime;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the mapping function id for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setMappingFunctionId(int aId)
+ {
+ mData->mMappingFunctionId = aId;
+ mData->mDirtyFlag=true;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the mapping function id for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfAttribute::getMappingFunctionId()const
+ {
+ return mData->mMappingFunctionId;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the datafield for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setDataField(const char* aDataField)
+ {
+ mData->mDataField = UString(aDataField);
+ mData->mDirtyFlag = true;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the datafield for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfAttribute::getDataField() const
+ {
+ return mData->mDataField.getUtf8();
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the delay before the transition.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setDelay(int aDelay)
+ {
+ mData->mDelay = aDelay;
+ mData->mDirtyFlag = true;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the delay before the transition.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfAttribute::getDelay() const
+ {
+ return mData->mDelay;
+ }
+
+// ---------------------------------------------------------------------------
+// Resets the data.
+// ---------------------------------------------------------------------------
+//
+void AlfAttribute::reset( const char* aName, AlfAttributeValueType* aValue,
+ attributecategory aCategory)
+ {
+ mData.reset(new (EMM) AlfAttributeImpl());
+
+ mData->mCategory = aCategory;
+ mData->mName = UString(aName);
+ mData->mTargetValueContainer.remove(0);
+ mData->mTargetValueContainer.insert(0, aValue);
+ }
+
+// ---------------------------------------------------------------------------
+// Helper function for cloning value type.
+// ---------------------------------------------------------------------------
+//
+AlfAttributeValueType* AlfAttribute::cloneValueType(
+ AlfAttributeValueType* aValue) const
+ {
+ AlfAttributeValueType* ret = 0;
+
+ if (aValue)
+ {
+ switch (aValue->type())
+ {
+ case AlfAttributeValueType::EInt:
+ {
+ ret = new (EMM) AlfAttributeValueType(
+ aValue->intValue(), aValue->unit());
+ break;
+ }
+ case AlfAttributeValueType::EFloat:
+ {
+ ret = new (EMM) AlfAttributeValueType(
+ aValue->realValue(), aValue->unit());
+ break;
+ }
+ case AlfAttributeValueType::EString:
+ {
+ ret = new (EMM) AlfAttributeValueType(
+ aValue->stringValue());
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ return ret;
+ }
+OSN_EXPORT bool AlfAttribute::isDirty( ) const
+ {
+ return mData->mDirtyFlag;
+ }
+
+OSN_EXPORT void AlfAttribute::setDirty(bool aFlag )
+ {
+ mData->mDirtyFlag = aFlag;
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfattributecontainer.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2007 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: Implements the Container class for atrributes.
+*
+*/
+
+
+#include <osn/osnnew.h>
+#include <osn/alfptrvector.h>
+#include <alf/alfdataexception.h>
+#include "alf/alfattribute.h"
+#include "alf/alfattributecontainer.h"
+#include <libc/string.h>
+#include <stdexcept>
+#include <assert.h> // from libc
+
+namespace Alf
+ {
+
+
+/**
+ * Attribute container implementation.
+ */
+class AlfAttributeContainerImpl
+ {
+public:
+ osncore::AlfPtrVector<AlfAttribute> mAttributes;
+ AlfAttributeContainer::Type mType;
+ uint mTime;
+ };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+
+OSN_EXPORT AlfAttributeContainer::AlfAttributeContainer(Type aType) :
+ mData(new (EMM) AlfAttributeContainerImpl())
+ {
+ mData->mType = aType;
+ mData->mTime = 0;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeContainer::~AlfAttributeContainer()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the type of the container.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeContainer::Type AlfAttributeContainer::type() const
+ {
+ return mData->mType;
+ }
+
+// ---------------------------------------------------------------------------
+// Adds a new attribute to the container.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttributeContainer::addAttribute(AlfAttribute* aAttribute)
+ {
+ mData->mAttributes.resize(mData->mAttributes.count() +1 );
+ mData->mAttributes.insert(mData->mAttributes.count(), aAttribute);
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the attribute count.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT unsigned int AlfAttributeContainer::attributeCount()const
+ {
+ return mData->mAttributes.count();
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute& AlfAttributeContainer::getAttribute(
+ unsigned int aIndex) const
+ {
+ // invariant
+ assert(aIndex < mData->mAttributes.count());
+ if (aIndex >= mData->mAttributes.count())
+ {
+ ALF_THROW(AlfDataException,EInvalidAttribute,"AlfAttributeContainer")
+ }
+
+ return *(mData->mAttributes[aIndex]);
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute& AlfAttributeContainer::getAttributeByName(
+ const char * aName) const
+ {
+ for (TInt i=0; i < mData->mAttributes.count(); i++)
+ {
+ if (!strcmp(mData->mAttributes[i]->name(), aName))
+ {
+ return *(mData->mAttributes[i]);
+ }
+ }
+ ALF_THROW(AlfDataException,EInvalidAttribute,"AlfAttributeContainer")
+ }
+
+// ---------------------------------------------------------------------------
+// Removes the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttributeContainer::removeAttribute(unsigned int aIndex)
+ {
+ assert(aIndex < mData->mAttributes.count());
+ if (aIndex >= mData->mAttributes.count())
+ {
+ ALF_THROW(AlfDataException,EInvalidAttribute,"AlfAttributeContainer")
+ }
+
+ mData->mAttributes.remove(aIndex);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the animation time of the attribute container.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttributeContainer::setTime(unsigned int aTime)
+ {
+ mData->mTime = aTime;
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the animation time of the attribute container.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT unsigned int AlfAttributeContainer::getTime()const
+ {
+ return mData->mTime;
+ }
+
+ } // Alf
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfattributevaluetype.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2007 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 to know the type of attribute.
+*
+*/
+
+
+#include <e32def.h>
+#include <osn/osnnew.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfattributeexception.h>
+#include "alf/alfattributevaluetype.h"
+
+#include "alfenumvalue.h"
+#include "alfrealvalue.h"
+#include "alfstringvalue.h"
+
+namespace Alf
+ {
+
+class AlfAttributeValueTypeImpl
+ {
+public:
+ AlfAttributeValueTypeImpl()
+ {
+ mValueType = NULL;
+ }
+
+ ~AlfAttributeValueTypeImpl()
+ {
+ delete mValueType;
+ }
+
+ AlfAttributeValueType* mValueType;
+ };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+AlfAttributeValueType::AlfAttributeValueType()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType::AlfAttributeValueType(int aValue,
+ TAlfUnit aUnit)
+ {
+ auto_ptr<AlfEnumValue> value(new (EMM) AlfEnumValue(aValue, aUnit));
+ auto_ptr<AlfAttributeValueTypeImpl> valueType(
+ new (EMM) AlfAttributeValueTypeImpl());
+
+ mData.reset(valueType.release()); // ownership transferred
+ mData->mValueType = value.release(); // ownership transferred
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType::AlfAttributeValueType(float aValue,
+ TAlfUnit aUnit)
+ {
+ auto_ptr<AlfRealValue> value(new (EMM) AlfRealValue(aValue, aUnit));
+ auto_ptr<AlfAttributeValueTypeImpl> valueType(
+ new (EMM) AlfAttributeValueTypeImpl());
+
+ mData.reset(valueType.release()); // ownership transferred
+ mData->mValueType = value.release(); // ownership transferred
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType::AlfAttributeValueType(const UString& aValue)
+ {
+ auto_ptr<AlfStringValue> value(new (EMM) AlfStringValue(aValue));
+ auto_ptr<AlfAttributeValueTypeImpl> valueType(
+ new (EMM) AlfAttributeValueTypeImpl());
+
+ mData.reset(valueType.release()); // ownership transferred
+ mData->mValueType = value.release(); // ownership transferred
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType::~AlfAttributeValueType()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the enum value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfAttributeValueType::enumValue() const
+ {
+ return intValue();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the string value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const UString& AlfAttributeValueType::stringValue() const
+ {
+ if (type() != EString)
+ {
+ ALF_THROW(AlfDataException,EInvalidAttributeValue,"AlfAttributeValueType")
+ }
+ return mData->mValueType->stringValue();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the int value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfAttributeValueType::intValue() const
+ {
+ if (type() != EInt)
+ {
+ ALF_THROW(AlfDataException,EInvalidAttributeValue,"AlfAttributeValueType")
+ }
+ return mData->mValueType->enumValue();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the real value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT float AlfAttributeValueType::realValue() const
+ {
+ if (type() != EFloat)
+ {
+ ALF_THROW(AlfDataException,EInvalidAttributeValue,"AlfAttributeValueType")
+ }
+ return mData->mValueType->realValue();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the RGB value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT float AlfAttributeValueType::rgbValue() const
+ {
+ return realValue();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the type of the atrribute value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType::Type AlfAttributeValueType::type() const
+ {
+ return mData->mValueType->type();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the unit.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfUnit AlfAttributeValueType::unit() const
+ {
+ return mData->mValueType->unit();
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfcommonattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2007 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 class implements common attribute setters.
+*
+*/
+
+
+#include <libc/string.h>
+#include <utf.h>
+
+#include <osn/ustring.h>
+#include <stdexcept>
+#include "alf/attrproperty.h"
+
+#include "alf/alfattribute.h"
+#include "alf/alfcommonattributesetter.h"
+#include <alf/alfvisual.h>
+#include <alf/alfattributeexception.h>
+#include "alf/alfattributecontainer.h"
+
+using namespace duiuimodel::commonattributes;
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfCommonAttributeSetter::AlfCommonAttributeSetter()
+ {
+ mDoDirtycheck=false;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfCommonAttributeSetter::~AlfCommonAttributeSetter()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the type of the attribute setter.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT SetterType AlfCommonAttributeSetter::setterType()
+ {
+ return ECustomAttributeSetter;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an attribute value in the target visual immediately
+// without a transition.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfCommonAttributeSetter::setAttributeValue(
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData)
+ {
+ if (!aContainer)
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "AlfCommonAttributeSetter" )
+ }
+
+ unsigned int attrCount = aContainer->attributeCount();
+ for (int i=0; i<attrCount; ++i)
+ {
+ AlfAttribute& attr = aContainer->getAttribute(i);
+ const char* attrName = attr.name();
+
+ if (attr.category() == AlfAttribute::EStaticData)
+ {
+ handleStaticDataAttribute(aVisual, attr, *aContainer, aData);
+ }
+ else if (attr.category() == AlfAttribute::EDynamicData)
+ {
+ handleDynamicDataAttribute(aVisual, attr, *aContainer, aData);
+ }
+ else if (attr.category() == AlfAttribute::EStatic)
+ {
+ if ((mDoDirtycheck&&attr.isDirty())||!mDoDirtycheck)
+ {
+ handleStaticAttribute(aVisual, attr, *aContainer);
+ }
+ attr.setDirty(false);
+
+ }
+ else if (attr.category() == AlfAttribute::EDynamic)
+ {
+ if ((mDoDirtycheck&&attr.isDirty())||!mDoDirtycheck)
+ {
+ handleDynamicAttribute(aVisual, attr, *aContainer);
+ }
+ attr.setDirty(false);
+
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Creates a command to change the value of an attribute in the target visual.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfCommonAttributeSetter::createCommand(
+ CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/, int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/)
+ {
+ // No need to implement.
+ TAlfCommand* cmd = 0;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// Creates commands to change the given attribute values in the target visual.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfCommonAttributeSetter::createAndSendCommands(
+ CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
+ CAlfVisual* /*aRefVisual*/)
+ {
+ // No need to implement.
+ }
+
+// ---------------------------------------------------------------------------
+// Getter for interfaces provided by the element classes.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfCommonAttributeSetter::makeInterface(
+ const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfAttributeSetter::type().mImplementationId)
+ {
+ return this;
+ }
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// Converts text between Unicode (UCS-2) and the Unicode transformation
+// format UTF-8.
+// ---------------------------------------------------------------------------
+//
+HBufC* AlfCommonAttributeSetter::convertToUnicodeFromUtf8(
+ const TPtrC8& aSrc) const
+ {
+ HBufC* desValue = 0;
+ TRAPD( err, desValue = CnvUtfConverter::ConvertToUnicodeFromUtf8L(aSrc))
+ if (err != KErrNone)
+ {
+ ALF_THROW(AlfAttributeException, err,"AlfCommonAttributeSetter")
+ }
+ return desValue;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets a value of a static attribute to target visual immediately
+// without a transition.
+// ---------------------------------------------------------------------------
+//
+void AlfCommonAttributeSetter::handleStaticAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& /*aContainer*/)
+ {
+ const char* attrName = aAttr.name();
+ if (!strcmp(attrName, KId))
+ {
+ const char* val = aAttr.stringValue().getUtf8();
+ TPtrC8 src((TUint8*)val);
+ TRAPD(err, aVisual.SetTagL( src ));
+ if (err)
+ {
+ ALF_THROW(AlfAttributeException, err,
+ "AlfCommonAttributeSetter")
+ }
+ }
+ }
+// ---------------------------------------------------------------------------
+// Sets a dynamic attribute value in the target visual using transitions
+// defined in attributes.
+// ---------------------------------------------------------------------------
+//
+void AlfCommonAttributeSetter::handleDynamicAttribute(
+ CAlfVisual& /*aVisual*/, AlfAttribute& /*aAttr*/,
+ AlfAttributeContainer& /*aContainer*/)
+ {
+ //nothing to do
+ }
+
+// ---------------------------------------------------------------------------
+// Sets a value for static data attribute in the target visual
+// immediately without a transition using data in map.
+// ---------------------------------------------------------------------------
+//
+void AlfCommonAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual& /*aVisual*/, AlfAttribute& /*aAttr*/,
+ AlfAttributeContainer& /*aContainer*/, IAlfMap* /*aData*/)
+ {
+ //nothing to do
+ }
+
+// ---------------------------------------------------------------------------
+// Sets a value for dynamic data attribute value in the target visual
+// using transitions and data in map.
+// ---------------------------------------------------------------------------
+//
+void AlfCommonAttributeSetter::handleDynamicDataAttribute(
+ CAlfVisual& /*aVisual*/, AlfAttribute& /*aAttr*/,
+ AlfAttributeContainer& /*aContainer*/, IAlfMap* /*aData*/)
+ {
+ //nothing to do
+ }
+
+OSN_EXPORT void AlfCommonAttributeSetter::enableDirtyCheck(bool aCheck)
+ {
+ mDoDirtycheck=aCheck;
+ }
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfcommonlayoutattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,412 @@
+/*
+* Copyright (c) 2007 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: Implements common attributesetters for layout.
+*
+*/
+
+
+
+#include "alf/alfattribute.h"
+#include "alf/alfcommonlayoutattributesetter.h"
+#include "alf/alfattributevaluetype.h"
+#include <alf/alfvisual.h>
+#include <alf/alflayout.h>
+#include <alf/alfattributeexception.h>
+#include "alf/alfattributecontainer.h"
+#include <libc/string.h>
+#include <osn/ustring.h>
+#include "alf/attrproperty.h"
+#include <alf/alfexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfvisualexception.h>
+#include <e32cmn.h>
+#include <utf.h>
+
+using namespace osncore;
+
+using namespace duiuimodel::layoutattributes;
+
+namespace Alf
+ {
+
+static void throwIfNot ( bool aBoolean )
+ {
+ if ( !aBoolean )
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,"CAlfCommonlayoutAttributeSetter")
+ }
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfCommonLayoutAttributeSetter::AlfCommonLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfCommonLayoutAttributeSetter::~AlfCommonLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Sets Attribute Value. Delegates based on attribute Category.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfCommonLayoutAttributeSetter::setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData )
+ {
+ CAlfLayout* layout = dynamic_cast<CAlfLayout*> ( &aVisual );
+
+ if ( !layout )
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual,
+ "AlfCommonLayoutAttributeSetter" )
+ }
+
+ AlfCommonVisualAttributeSetter::setAttributeValue(aVisual,
+ aContainer, aData);
+ }
+
+void AlfCommonLayoutAttributeSetter::handleStaticDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData )
+ {
+
+ if ( aData )
+ {
+ CAlfLayout* layout = dynamic_cast<CAlfLayout*> ( &aVisual );
+ if(!layout)
+ {
+ return;
+ }
+
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp ( attrName, KBaseUnitX ) )
+ {
+ IAlfVariantType* dataX = aData->item ( UString(aAttr.getDataField()) );
+ AlfAttribute& attrY = aContainer.getAttributeByName ( KBaseUnitY );
+
+ IAlfVariantType* dataY = aData->item ( UString(attrY.getDataField()));
+
+ if (dataX!=NULL&&dataX->type() == IAlfVariantType::EMap&&
+ dataY!=NULL&&dataY->type() == IAlfVariantType::EMap)
+ {
+ IAlfVariantType* valueX=((IAlfMap*)dataX)->item(UString("value"));
+ IAlfVariantType* unitX=((IAlfMap*)dataX)->item(UString("unit"));
+ IAlfVariantType* valueY=((IAlfMap*)dataY)->item(UString("value"));
+ IAlfVariantType* unitY=((IAlfMap*)dataY)->item(UString("unit"));
+
+ TAlfMetric xMetric ( valueX->real(), (TAlfUnit)unitX->integer() );
+ TAlfMetric yMetric ( valueX->real(), (TAlfUnit)unitX->integer());
+ TAlfXYMetric xyMetric ( xMetric, yMetric );
+ layout->SetBaseUnit( xyMetric );
+ }
+ else if (dataX!=NULL&&dataX->type() == IAlfVariantType::EReal&&
+ dataY!=NULL&&dataY->type() == IAlfVariantType::EReal)
+ {
+ TAlfMetric xMetric ( (float)dataX->real() );
+ TAlfMetric yMetric ( (float)dataY->real());
+ TAlfXYMetric xyMetric ( xMetric, yMetric );
+ layout->SetBaseUnit( xyMetric );
+ }
+ }
+ else if ( !strcmp ( attrName, KBaseUnitY ) )
+ {
+ //we have handled it
+ }
+
+ else if ( !strcmp ( attrName, KUpdateLayoutTime ) )
+ {
+ IAlfVariantType* data = aData->item (UString(aAttr.getDataField()) );
+
+ if ( data && data->type() == IAlfVariantType::EInt )
+ {
+ layout->SetTransitionTime ( data->integer() );
+ }
+ else if ( data && data->type() == IAlfVariantType::EReal )
+ {
+ layout->SetTransitionTime ( ( int ) data->real() );
+ }
+ }
+ else if ( !strcmp ( attrName, KTransitionTime ) )
+ {
+ IAlfVariantType* data = aData->item (UString(aAttr.getDataField()) );
+
+ if ( data && data->type() == IAlfVariantType::EInt )
+ {
+ layout->SetTransitionTime ( data->integer() );
+ }
+ else if ( data && data->type() == IAlfVariantType::EReal )
+ {
+ layout->SetTransitionTime ( ( int ) data->real() );
+ }
+ }
+ else if ( !strcmp ( attrName, KAutomaticLocaleMirroring ) )
+ {
+ IAlfVariantType* data = aData->item (UString(aAttr.getDataField()) );
+ throwIfNot ( data != NULL && data->type() == IAlfVariantType::EString );
+
+ if ( !strcmp ( data->string().getUtf8(), "true" ) )
+ layout->SetFlag ( EAlfVisualFlagAutomaticLocaleMirroringEnabled );
+ else if ( !strcmp ( data->string().getUtf8(), "false" ) )
+ layout->ClearFlag ( EAlfVisualFlagAutomaticLocaleMirroringEnabled );
+ }
+ else if ( !strcmp ( attrName, KInnerPaddingHoriz ) )
+ {
+ IAlfVariantType* dataX = aData->item (UString(aAttr.getDataField()) );
+ AlfAttribute& attrY = aContainer.getAttributeByName ( KInnerPaddingVertical );
+
+ IAlfVariantType* dataY = aData->item ( UString(attrY.getDataField() ));
+
+ if (dataX&&dataX->type() == IAlfVariantType::EMap&&dataY
+ &&dataY->type()== IAlfVariantType::EMap)
+ {
+ IAlfVariantType* valueX=((IAlfMap*)dataX)->item(UString("value"));
+ IAlfVariantType* unitX=((IAlfMap*)dataX)->item(UString("unit"));
+ IAlfVariantType* valueY=((IAlfMap*)dataY)->item(UString("value"));
+ IAlfVariantType* unitY=((IAlfMap*)dataY)->item(UString("unit"));
+
+ TAlfMetric xMetric ( valueX->real(), (TAlfUnit)unitX->integer() );
+ TAlfMetric yMetric ( valueX->real(), (TAlfUnit)unitX->integer());
+ TAlfXYMetric xyMetric ( xMetric, yMetric );
+ layout->SetInnerPadding( xyMetric );
+ }
+ if ( dataX&&dataX->type() == IAlfVariantType::EReal&&dataY
+ &&dataY->type()== IAlfVariantType::EReal)
+ {
+ TAlfMetric xMetric ( dataX->real(),EAlfUnitPixel );
+ TAlfMetric yMetric ( dataY->real() ,EAlfUnitPixel);
+ TAlfXYMetric xyMetric ( xMetric, yMetric );
+ layout->SetInnerPadding( xyMetric );
+ }
+ }
+ else if ( !strcmp ( attrName, KInnerPaddingVertical ) )
+ {
+ // we have handled it
+ }
+ else if ( !strcmp ( attrName, KScrolling ) )
+ {
+ IAlfVariantType* data = aData->item ( UString(aAttr.getDataField() ));
+
+ throwIfNot ( data != NULL && data->type() == IAlfVariantType::EString );
+
+ if ( !strcmp ( data->string().getUtf8(), "true" ) )
+ {
+ TRAPD(err,layout->EnableScrollingL())
+ throwIfNot(err!=KErrNone);
+ }
+
+ else
+ {
+ TRAPD(err,layout->EnableScrollingL(false))
+ throwIfNot(err!=KErrNone);
+ }
+ }
+ else if ( !strcmp ( attrName, KLayoutScrollOffsetX ) )
+ {
+ IAlfVariantType* dataX = aData->item ( UString(aAttr.getDataField() ));
+ throwIfNot ( dataX != NULL && dataX->type() == IAlfVariantType::EReal );
+
+ AlfAttribute& attrY = aContainer.getAttributeByName ( KLayoutScrollOffsetY );
+ IAlfVariantType* dataY = aData->item (UString( attrY.getDataField() ));
+ throwIfNot ( dataY != NULL && dataY->type() == IAlfVariantType::EReal );
+
+ TAlfTimedPoint point ( dataX->real(), dataY->real() );
+ layout->SetScrollOffset ( point );
+ }
+ else if ( !strcmp ( attrName, KLayoutScrollOffsetY ) )
+ {
+ // we have handled it
+ }
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleStaticDataAttribute( aVisual, aAttr, aContainer, aData);
+ }
+ }
+ }
+
+void AlfCommonLayoutAttributeSetter::handleDynamicDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData )
+ {
+ AlfCommonVisualAttributeSetter::handleDynamicDataAttribute( aVisual, aAttr, aContainer, aData);
+ }
+
+void AlfCommonLayoutAttributeSetter::handleStaticAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ CAlfLayout* layout = dynamic_cast<CAlfLayout*> ( &aVisual );
+ if(!layout)
+ {
+ return;
+ }
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp ( attrName, KBaseUnitX )||!strcmp ( attrName, KBaseUnitY ) )
+ {
+ AlfAttribute& attrX = aContainer.getAttributeByName ( KBaseUnitX );
+ AlfAttribute& attrY = aContainer.getAttributeByName ( KBaseUnitY );
+ TAlfMetric xMetric ( attrX.realValue(), attrX.unit() );
+ TAlfMetric yMetric ( attrY.realValue(), attrY.unit() );
+ TAlfXYMetric xyMetric ( xMetric, yMetric );
+ layout->SetBaseUnit ( xyMetric );
+ attrX.setDirty(false);
+ attrY.setDirty(false);
+ }
+ else if ( !strcmp ( attrName, KUpdateLayoutTime ) )
+ {
+ if ( aAttr.type() == AlfAttributeValueType::EInt )
+ {
+ layout->SetTransitionTime ( aAttr.intValue() );
+ }
+ else if ( aAttr.type() == AlfAttributeValueType::EFloat )
+ {
+ layout->SetTransitionTime ( ( int ) aAttr.realValue() );
+ }
+ }
+ else if ( !strcmp ( attrName, KTransitionTime ) )
+ {
+ if ( aAttr.type() == AlfAttributeValueType::EInt )
+ {
+ layout->SetTransitionTime ( aAttr.intValue() );
+ }
+ else if ( aAttr.type() == AlfAttributeValueType::EFloat )
+ {
+ layout->SetTransitionTime ( ( int ) aAttr.realValue() );
+ }
+ }
+ else if ( !strcmp ( attrName, KAutomaticLocaleMirroring ) )
+ {
+ throwIfNot ( aAttr.type() == AlfAttributeValueType::EString );
+
+ if ( !strcmp ( aAttr.stringValue().getUtf8(), "true" ) )
+ {
+ layout->SetFlag ( EAlfVisualFlagAutomaticLocaleMirroringEnabled );
+ }
+ else if ( !strcmp ( aAttr.stringValue().getUtf8(), "false" ) )
+ {
+ layout->ClearFlag ( EAlfVisualFlagAutomaticLocaleMirroringEnabled );
+ }
+ }
+ else if ( !strcmp ( attrName, KInnerPaddingHoriz )||!strcmp ( attrName, KInnerPaddingVertical ) )
+ {
+ AlfAttribute& attrY = aContainer.getAttributeByName ( KInnerPaddingVertical );
+ AlfAttribute& attrX= aContainer.getAttributeByName ( KInnerPaddingHoriz );
+ throwIfNot ( attrX.type() == AlfAttributeValueType::EFloat );
+ throwIfNot ( attrY.type() == AlfAttributeValueType::EFloat );
+ TAlfMetric xMetric ( attrX.realValue(), attrX.unit() );
+ TAlfMetric yMetric ( attrY.realValue(), attrY.unit() );
+ TAlfXYMetric xyMetric ( xMetric, yMetric );
+ layout->SetInnerPadding ( xyMetric );
+ attrX.setDirty(false);
+ attrY.setDirty(false);
+ }
+ else if ( !strcmp ( attrName, KScrolling ) )
+ {
+ throwIfNot ( aAttr.type() == AlfAttributeValueType::EString );
+
+ if ( !strcmp ( aAttr.stringValue().getUtf8(), "true" ) )
+ {
+ TRAPD(err, layout->EnableScrollingL () );
+ throwIfNot (err==KErrNone);
+ }
+ else
+ {
+ TRAPD(err, layout->EnableScrollingL ( false ) );
+ throwIfNot (err==KErrNone);
+ }
+ }
+ else if ( !strcmp ( attrName, KLayoutScrollOffsetX )||!strcmp ( attrName, KLayoutScrollOffsetY ) )
+ {
+ AlfAttribute& attrY = aContainer.getAttributeByName ( KLayoutScrollOffsetY );
+ AlfAttribute& attrX = aContainer.getAttributeByName ( KLayoutScrollOffsetX );
+
+ TAlfTimedPoint point ( attrX.realValue(), attrY.realValue() );
+
+ layout->SetScrollOffset ( point );
+ attrX.setDirty(false);
+ attrY.setDirty(false);
+ }
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleStaticAttribute(aVisual, aAttr, aContainer);
+ }
+ }
+
+void AlfCommonLayoutAttributeSetter::handleDynamicAttribute( CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ AlfCommonVisualAttributeSetter::handleDynamicAttribute(
+ aVisual, aAttr, aContainer);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfCommonLayoutAttributeSetter::createCommand (
+ CAlfVisual& aVisual, AlfAttributeContainer* aContainer,
+ IAlfMap* aData, int aTransitionTime, CAlfVisual* aRefVisual )
+ {
+ TAlfCommand* cmd = 0;
+ cmd = AlfCommonVisualAttributeSetter::createCommand (
+ aVisual,
+ aContainer,
+ aData,
+ aTransitionTime,
+ aRefVisual );
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfCommonLayoutAttributeSetter::createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+
+ unsigned int attrCount = aContainer->attributeCount();
+
+ for ( int i = 0; i < attrCount; ++i )
+ {
+ AlfAttribute* attrib = & ( aContainer->getAttribute ( i ) );
+ const char* attrName = attrib->name();
+
+ if (strcmp ( attrName, KBaseUnitX )&&strcmp ( attrName, KBaseUnitY )
+ &&strcmp ( attrName, KUpdateLayoutTime )&&strcmp ( attrName, KTransitionTime )
+ &&strcmp ( attrName, KAutomaticLocaleMirroring )&&strcmp ( attrName, KInnerPaddingHoriz )
+ &&strcmp ( attrName, KInnerPaddingVertical ))
+ {
+ // Call the base class implementation also.
+ // It goes through the same loop again and checks if there are attributes
+ // that it handles.
+ AlfCommonVisualAttributeSetter::createAndSendCommands (
+ aVisual,
+ aContainer,
+ aRefVisual );
+ }
+ }
+ }
+
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfcommonvisualattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,843 @@
+/*
+* Copyright (c) 2007 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: attributesetter for common visual attributes
+*
+*/
+
+
+#include "alf/alfattribute.h"
+#include "alf/alfcommonvisualattributesetter.h"
+#include "alf/alfattributevaluetype.h"
+#include <alf/alfvisual.h>
+#include <alf/alfattributeexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfvisualexception.h>
+#include "alf/alfattributecontainer.h"
+#include <libc/string.h>
+#include <osn/ustring.h>
+#include "alf/attrproperty.h"
+#include <alf/alfenv.h>
+
+using namespace osncore;
+
+using namespace duiuimodel::commonattributes;
+using namespace duiuimodel::commonattributevalues;
+using namespace duiuimodel::commonvisualattributes;
+using namespace duiuimodel::layoutattributes;
+using namespace duiuimodel::rect;
+using namespace duiuimodel::padding;
+using namespace duiuimodel::tactileattributes;
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// gets the data from map pointed by attribute's field name.
+// ---------------------------------------------------------------------------
+//
+IAlfVariantType* getData(const AlfAttribute& aAttr, IAlfMap* aData)
+ {
+ IAlfVariantType* data = 0;
+ const char* dataField = aAttr.getDataField();
+ if (dataField)
+ {
+ data = aData->item(UString(dataField));
+ }
+ return data;
+ }
+
+// ---------------------------------------------------------------------------
+// gets the time from attribute safely.
+// ---------------------------------------------------------------------------
+//
+int getTime(const AlfAttribute& aAttr, bool aImmediate = false)
+ {
+ int time = 0;
+ if (!aImmediate)
+ {
+ time = aAttr.getTime();
+ }
+
+ return time;
+ }
+
+// ---------------------------------------------------------------------------
+// sets source values from aAttr to aPoint.
+// ---------------------------------------------------------------------------
+//
+void setSourceValue(TAlfTimedValue& aValue, const AlfAttribute& aAttr)
+ {
+ if (aAttr.getSourceValueCount() > 0)
+ {
+ aValue.SetValueNow(aAttr.getSourceValue()->realValue());
+ }
+ }
+// ---------------------------------------------------------------------------
+// sets source values to aPoint.
+// ---------------------------------------------------------------------------
+//
+void SetSourceValues(TAlfTimedPoint& aPoint, const AlfAttribute& aAttrX,
+ const AlfAttribute& aAttrY)
+ {
+ if (aAttrX.getSourceValueCount() > 0)
+ {
+ aPoint.iX.SetValueNow(aAttrX.getSourceValue()->realValue());
+ }
+ if (aAttrY.getSourceValueCount() > 0)
+ {
+ aPoint.iY.SetValueNow(aAttrY.getSourceValue()->realValue());
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// sets source values to aRect.
+// ---------------------------------------------------------------------------
+//
+void SetSourceRect(TAlfRealRect& aRect, const AlfAttribute& aAttrTopX,
+ const AlfAttribute& aAttrTopY,
+ const AlfAttribute& aAttrBottomRightX,
+ const AlfAttribute& aAttrBottomRightY)
+ {
+ if (aAttrTopX.getSourceValueCount() > 0)
+ {
+ aRect.iTl.iX = aAttrTopX.getSourceValue()->realValue();
+ }
+ if (aAttrTopY.getSourceValueCount() > 0)
+ {
+ aRect.iTl.iY = aAttrTopY.getSourceValue()->realValue();
+ }
+ if (aAttrBottomRightX.getSourceValueCount() > 0)
+ {
+ aRect.iBr.iX = aAttrBottomRightX.getSourceValue()->realValue();
+ }
+ if (aAttrBottomRightY.getSourceValueCount() > 0)
+ {
+ aRect.iBr.iY = aAttrBottomRightY.getSourceValue()->realValue();
+ }
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfCommonVisualAttributeSetter::AlfCommonVisualAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfCommonVisualAttributeSetter::~AlfCommonVisualAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// creates one command.
+// deprecated
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfCommonVisualAttributeSetter::createCommand(
+ CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/, int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/ )
+ {
+ return 0;
+ }
+
+// ---------------------------------------------------------------------------
+// creates and sends one or more commands.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfCommonVisualAttributeSetter::createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ unsigned int attrCount = aContainer->attributeCount();
+
+ for ( int i = 0; i < attrCount; ++i )
+ {
+ AlfAttribute& attr = aContainer->getAttribute(i);
+ sendCommandsForAttribute(aVisual, *aContainer, attr, aRefVisual);
+ }
+
+ // Call the base class implementation also.
+ // It goes through the same loop again and checks if there are attributes
+ // that it handles.
+ AlfCommonAttributeSetter::createAndSendCommands(
+ aVisual,
+ aContainer,
+ aRefVisual );
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an value of a static attribute to target visual immediately
+// without a transition.
+// ---------------------------------------------------------------------------
+//
+void AlfCommonVisualAttributeSetter::handleStaticAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ const char* attrName = aAttr.name();
+ if ( !strcmp(attrName, KParentVisual))
+ {
+ }
+ else if (!strcmp(attrName, KMaxHeight)||!strcmp(attrName, KMaxWidth))
+ {
+ setMaxSize(aVisual,aContainer,NULL);
+ }
+ else if (!strcmp(attrName, KMinHeight)||!strcmp(attrName, KMinWidth))
+ {
+ setMinSize(aVisual,aContainer,NULL);
+ }
+ else if (!strcmp(attrName, KPaddingTop)||!strcmp(attrName, KPaddingBottom)
+ ||!strcmp(attrName, KPaddingLeft)||!strcmp(attrName, KPaddingRight))
+ {
+ setPadding(aVisual,aContainer,NULL);
+
+ }
+ else if (!strcmp(attrName, KSetFlags))
+ {
+ int val = aAttr.intValue();
+ aVisual.SetFlags(val);
+ }
+ else if (!strcmp(attrName, KClearFlags))
+ {
+ int val = aAttr.intValue();
+ aVisual.ClearFlags(val);
+ }
+ else if (!strcmp(attrName, KEventInput) || !strcmp(attrName, KFeedbackType))
+ {
+ setTactileFeedback(aVisual,aContainer,NULL);
+ }
+ // turnangle and secondaryalpha are implemented by derived attributesetters
+ else
+ {
+ //check, if dynamic attribute, if so, set attributes immediately.
+ if (!doHandleDynamicAttribute(aVisual, aAttr, aContainer, true))
+ {
+ //not handled here, try base class.
+ AlfCommonAttributeSetter::handleStaticAttribute(aVisual,
+ aAttr, aContainer);
+ }
+ }
+ }
+
+void AlfCommonVisualAttributeSetter::setTactileFeedback(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/)
+ {
+ TRAPD( error, aVisual.SetTactileFeedbackL(
+ aContainer.getAttributeByName( KEventInput ).intValue(),
+ aContainer.getAttributeByName( KFeedbackType ).intValue() ) );
+
+ if(error != KErrNone)
+ {
+ ALF_THROW(AlfVisualException,EInvalidAttribute,"AlfCommonVisualAttributeSetter")
+ }
+ try
+ {
+ aContainer.getAttributeByName( duiuimodel::tactileattributes::KEventInput ).setDirty( false );
+ aContainer.getAttributeByName( duiuimodel::tactileattributes::KFeedbackType ).setDirty( false );
+ }
+
+ catch( AlfDataException& exception )
+ {
+ //exception needed here?
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an dynamic attribute value in the target visual
+// using transitions defined in attributes
+// ---------------------------------------------------------------------------
+//
+void AlfCommonVisualAttributeSetter::handleDynamicAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ if (!doHandleDynamicAttribute(aVisual, aAttr, aContainer))
+ {
+ //not handled here, try base class.
+ AlfCommonAttributeSetter::handleDynamicAttribute(aVisual, aAttr,
+ aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an value for static attribute in the target visual immediately
+// without a transition using data in map.
+// ---------------------------------------------------------------------------
+//
+void AlfCommonVisualAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+
+ if (aData)
+ {
+ const char* attrName = aAttr.name();
+
+ if (!strcmp(attrName, KMaxHeight))
+ {
+ // If maxheight exists, maxwidth must exists also.
+ const IAlfVariantType* maxHeight = getData(aAttr, aData);
+ const IAlfVariantType* maxWidth = getData(
+ aContainer.getAttributeByName(KMaxWidth), aData);
+
+ if (maxHeight && maxHeight->type() == IAlfVariantType::EReal &&
+ maxWidth && maxWidth->type() == IAlfVariantType::EReal)
+ {
+ TAlfRealSize size( maxWidth->real(), maxHeight->real() );
+ aVisual.SetMaxSize(size);
+ }
+ }
+ else if (!strcmp(attrName, KMinHeight))
+ {
+ //If minheight exists, minwidth must exists also.
+ const IAlfVariantType* minHeight = getData(aAttr, aData);
+ const IAlfVariantType* minWidth = getData(
+ aContainer.getAttributeByName(KMinWidth), aData);
+
+ if (minHeight && minHeight->type() == IAlfVariantType::EReal &&
+ minWidth && minWidth->type() == IAlfVariantType::EReal)
+ {
+ TAlfRealSize size( minWidth->real(), minHeight->real() );
+ aVisual.SetMinSize(size);
+ }
+ }
+ else if (!strcmp(attrName, KPaddingTop))
+ {
+ const IAlfVariantType* top = getData(aAttr, aData);
+ const IAlfVariantType* right = getData(
+ aContainer.getAttributeByName(KPaddingRight), aData);
+ const IAlfVariantType* bottom = getData(
+ aContainer.getAttributeByName(KPaddingBottom), aData);
+ const IAlfVariantType* left = getData(
+ aContainer.getAttributeByName(KPaddingLeft), aData);
+
+ if (top && top->type() == IAlfVariantType::EReal &&
+ right && right->type() == IAlfVariantType::EReal &&
+ bottom && bottom->type() == IAlfVariantType::EReal &&
+ left && left->type() == IAlfVariantType::EReal)
+ {
+ float l = left->real();
+ float r = right->real();
+ float t = top->real();
+ float b = bottom->real();
+ TAlfBoxMetric metric(l, r, t, b);
+ aVisual.SetPadding(metric);
+ }
+ }
+ else if (!strcmp(attrName, KSetFlags))
+ {
+ const IAlfVariantType* flag = getData(aAttr, aData);
+ if (flag && flag->type() == IAlfVariantType::EInt)
+ {
+ int flagValue = flag->integer();
+ aVisual.SetFlags(flagValue);
+ }
+ }
+ else if (!strcmp(attrName, KClearFlags))
+ {
+ const IAlfVariantType* flag = getData(aAttr, aData);
+ if (flag && flag->type() == IAlfVariantType::EInt)
+ {
+ int flagValue = flag->integer();
+ aVisual.ClearFlags(flagValue);
+ }
+ }
+ // turnangle and secondaryalpha are implemented by derived attributesetters
+ else if (strcmp(attrName, KMaxWidth) && //these are already
+ strcmp(attrName, KMinWidth) && //handled above
+ strcmp(attrName, KPaddingRight) &&
+ strcmp(attrName, KPaddingBottom) &&
+ strcmp(attrName, KPaddingLeft))
+ {
+ //check, if dynamic attribute, if so, set attributes immediately.
+ //If not, the function will call baseclass SetAttributeValue.
+ if (!doHandleDynamicDataAttribute(aVisual, aAttr,
+ aContainer, aData, true))
+ {
+ //not handled here, try base class.
+ AlfCommonAttributeSetter::handleStaticDataAttribute(
+ aVisual, aAttr, aContainer, aData);
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From AlfCommonAttributeSetter
+//
+// Sets a value for dynamic data attribute value in the target visual
+// using transitions and data in map.
+// ---------------------------------------------------------------------------
+//
+void AlfCommonVisualAttributeSetter::handleDynamicDataAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ if (!doHandleDynamicDataAttribute(aVisual, aAttr, aContainer, aData))
+ {
+ //not handled here, try base class.
+ AlfCommonAttributeSetter::handleDynamicDataAttribute(aVisual, aAttr,
+ aContainer, aData);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an dynamic attribute value in the target visual
+// using transitions defined in attributes
+// Handles only attributes, belonging to this attributesetter, not bases.
+// ---------------------------------------------------------------------------
+//
+bool AlfCommonVisualAttributeSetter::doHandleDynamicAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, bool aImmediate)
+ {
+ const char* attrName = aAttr.name();
+ bool handled = true;
+
+ if ( !strcmp( attrName, KOpacity ) )
+ {
+ TAlfTimedValue v;
+ setSourceValue(v, aAttr);
+
+ float targetValue(aAttr.realValue());
+ int time = getTime(aAttr, aImmediate);
+ v.SetTarget(targetValue, time);
+ v.SetStyle(aAttr.getInterpolationStyle());
+ aVisual.SetOpacity(v);
+ }
+
+ else if (!strcmp( attrName, KPositionX)||!strcmp( attrName, KPositionY)) ////also handles: KPositionY
+ {
+ setPos(aVisual,aContainer,NULL,aImmediate);
+ }
+
+ else if (!strcmp( attrName, KWidth)||!strcmp( attrName, KHeight)) //also handles: KHeight
+ {
+ setSize(aVisual,aContainer,NULL,aImmediate);
+ }
+ else if (!strcmp(attrName, KTopLeftX)||!strcmp(attrName, KTopLeftY)
+ ||!strcmp(attrName, KBottomRightX)||!strcmp(attrName, KBottomRightY))
+ {
+ setRect(aVisual,aContainer,NULL,aImmediate);
+ }
+ else
+ {
+ handled = false;
+ }
+
+ return handled;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets an value for dynamic attribute value in the target visual
+// using transitions and data in map.
+// ---------------------------------------------------------------------------
+//
+bool AlfCommonVisualAttributeSetter::doHandleDynamicDataAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData, bool aImmediate )
+ {
+ bool handled = true;
+ if (aData)
+ {
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp( attrName, KOpacity ) )
+ {
+ const IAlfVariantType* data = getData(aAttr, aData);
+ if (data && data->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedValue v;
+ setSourceValue(v, aAttr);
+
+ float targetValue(data->real());
+ int time = getTime(aAttr, aImmediate);
+ v.SetTarget(targetValue, time);
+ v.SetStyle(aAttr.getInterpolationStyle());
+ aVisual.SetOpacity(v);
+ }
+ }
+ else if (!strcmp( attrName, KPositionX)) //also handles: KPositionY
+ {
+ //If positionx exists, positiony must exists also
+ const AlfAttribute& attrX = aAttr;
+ const AlfAttribute& attrY = aContainer.getAttributeByName(KPositionY);
+
+ const IAlfVariantType* posX = getData(attrX, aData);
+ const IAlfVariantType* posY = getData(attrY, aData);
+
+ if (posX && posX->type() == IAlfVariantType::EReal &&
+ posY && posY->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedPoint pos;
+ SetSourceValues(pos, attrX, attrY);
+
+ pos.iX.SetStyle(attrX.getInterpolationStyle());
+ pos.iX.SetTarget(posX->real(), getTime(attrX, aImmediate));
+ pos.iY.SetStyle(attrY.getInterpolationStyle());
+ pos.iY.SetTarget(posY->real(), getTime(attrY, aImmediate));
+ aVisual.SetPos(pos);
+ }
+ }
+ else if (!strcmp( attrName, KWidth)) //also handles: KHeight
+ {
+ const AlfAttribute& attrWidth = aAttr;
+ const AlfAttribute& attrHeight =
+ aContainer.getAttributeByName(KHeight);
+
+ const IAlfVariantType* width = getData(attrWidth, aData);
+ const IAlfVariantType* height = getData(attrHeight, aData);
+
+ if (width && width->type() == IAlfVariantType::EReal &&
+ height && height->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedPoint size;
+ SetSourceValues(size, attrWidth, attrHeight);
+
+ size.iX.SetStyle(attrWidth.getInterpolationStyle());
+ size.iX.SetTarget(width->real(),
+ getTime(attrWidth, aImmediate));
+ size.iY.SetStyle(attrHeight.getInterpolationStyle());
+ size.iY.SetTarget(height->real(),
+ getTime(attrHeight, aImmediate));
+
+ aVisual.SetSize(size);
+ }
+ }
+ else if (!strcmp(attrName, KTopLeftX))
+ {
+ //If topleftx exists, topy, bottomx and bottomy must exists also
+ const AlfAttribute& attrTopX = aAttr;
+ const AlfAttribute& attrTopY =
+ aContainer.getAttributeByName(KTopLeftY);
+ const AlfAttribute& attrBottomRightX =
+ aContainer.getAttributeByName(KBottomRightX);
+ const AlfAttribute& attrBottomRightY =
+ aContainer.getAttributeByName(KBottomRightY);
+
+ const IAlfVariantType* topX = getData(attrTopX, aData);
+ const IAlfVariantType* topY = getData(attrTopY, aData);
+ const IAlfVariantType* bottomX = getData(attrBottomRightX, aData);
+ const IAlfVariantType* bottomY = getData(attrBottomRightY, aData);
+
+ if (topX && topX->type() == IAlfVariantType::EReal &&
+ topY && topY->type() == IAlfVariantType::EReal &&
+ bottomX && bottomX->type() == IAlfVariantType::EReal &&
+ bottomY && bottomY->type() == IAlfVariantType::EReal)
+ {
+ const TAlfRealPoint sTopLeft(aVisual.Pos().ValueNow());
+ TAlfRealPoint size(aVisual.Size().ValueNow());
+ TAlfRealRect sRect(sTopLeft, TAlfRealPoint(
+ sTopLeft.iX + size.iX, sTopLeft.iY + size.iY));
+
+ SetSourceRect(sRect, attrTopX, attrTopY, attrBottomRightX,
+ attrBottomRightY);
+
+ aVisual.SetRect(sRect, 0);
+
+ TAlfRealPoint topLeft(topX->real(), topY->real());
+ TAlfRealPoint bottomRight(bottomX->real(), bottomY->real());
+ TAlfRealRect realRect(topLeft, bottomRight);
+ aVisual.SetRect(realRect, getTime(aAttr, aImmediate));
+ }
+ }
+ else if (strcmp(attrName, KPositionY) && //these are already
+ strcmp(attrName, KHeight) && //handled above
+ strcmp(attrName, KTopLeftY) &&
+ strcmp(attrName, KBottomRightX) &&
+ strcmp(attrName, KBottomRightY))
+ {
+ handled = false;
+ }
+ }
+
+ return handled;
+ }
+
+// ---------------------------------------------------------------------------
+// Creates and returns one command
+// ---------------------------------------------------------------------------
+//
+void AlfCommonVisualAttributeSetter::sendCommandsForAttribute(
+ CAlfVisual& aVisual, AlfAttributeContainer& aContainer,
+ AlfAttribute& aAttr, CAlfVisual* aRefVisual)
+ {
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp( attrName, KOpacity ) )
+ {
+ float value(aAttr.realValue());
+
+ if (aRefVisual)
+ {
+ // Add the opacity of the reference visual to the value
+ // of the opacity provided in the attribute
+ value += aRefVisual->Opacity().ValueNow();
+ }
+
+ int time = getTime(aAttr);
+
+ //setting interpolation style
+ TAlfInterpolationStyle style = aAttr.getInterpolationStyle();
+ TAlfTimedValue v;
+ v.SetStyle(style);
+ aVisual.SetOpacity(v);
+
+ //create command
+ TAlfValueCommand cmd(&aVisual, EAlfValueCommandVisualSetOpacity,
+ EAlfOpSet, value, time);
+
+ //send with delay.
+ CAlfEnv::Static()->Send(cmd, aAttr.getDelay());
+ }
+
+ else if (!strcmp( attrName, KPositionX)) ////also handles: KPositionY
+ {
+ // Must contain both KPositionX and KPositionY
+ const AlfAttribute& posXattrib = aAttr;
+ const AlfAttribute& posYattrib =
+ aContainer.getAttributeByName(KPositionY);
+
+ TAlfRealPoint value(posXattrib.realValue(),
+ posYattrib.realValue());
+
+ if ( aRefVisual )
+ {
+ value += aRefVisual->Pos().ValueNow(); // Add the reference point
+ }
+
+ int time = getTime(aAttr);
+
+ //create command
+ TAlfPointCommand cmd(&aVisual, EAlfPointCommandVisualSetPos,
+ value, time);
+
+ //send with delay.
+ CAlfEnv::Static()->Send(cmd, aAttr.getDelay());
+ }
+
+ else if (!strcmp( attrName, KWidth)) //also handles: KHeight
+ {
+ // Must contain both KWidth and KHeight
+ const AlfAttribute& widthAttrib = aAttr;
+ const AlfAttribute& heightAttrib =
+ aContainer.getAttributeByName(KHeight);
+
+ TAlfRealPoint value(widthAttrib.realValue(),
+ heightAttrib.realValue());
+
+ if (aRefVisual)
+ {
+ value += aRefVisual->Size().ValueNow(); // Add the reference point
+ }
+ int time = getTime(aAttr);
+
+ //create command
+ TAlfPointCommand cmd(&aVisual,
+ EAlfPointCommandVisualSetSize, value, time);
+
+ //send with delay.
+ CAlfEnv::Static()->Send(cmd, aAttr.getDelay());
+ }
+ else if (!strcmp(attrName, KTopLeftX))
+ {
+ //If topleftx exists, topy, bottomx and bottomy must exists also
+ float topX = aAttr.realValue();
+ const AlfAttribute& attrTopY =
+ aContainer.getAttributeByName(KTopLeftY);
+ const AlfAttribute& attrBottomX =
+ aContainer.getAttributeByName(KBottomRightX);
+ const AlfAttribute& attrBottomY =
+ aContainer.getAttributeByName(KBottomRightY);
+ TAlfRealPoint topLeft(topX, attrTopY.realValue());
+ TAlfRealPoint size(attrBottomX.realValue() - topLeft.iX,
+ attrBottomY.realValue() - topLeft.iY);
+ if (aRefVisual)
+ {
+ // Add the reference point
+ topLeft += aRefVisual->Pos().ValueNow();
+ size += aRefVisual->Size().ValueNow();
+ }
+
+ int posTime = getTime(aAttr);
+ int sizeTime = getTime(attrBottomX);
+
+ //create position command
+ TAlfPointCommand posCmd(&aVisual, EAlfPointCommandVisualSetPos,
+ topLeft, posTime);
+ TAlfPointCommand sizeCmd(&aVisual, EAlfPointCommandVisualSetPos,
+ size, sizeTime);
+
+ //send with delay.
+ CAlfEnv::Static()->Send(posCmd, aAttr.getDelay());
+ CAlfEnv::Static()->Send(sizeCmd, attrBottomX.getDelay());
+ }
+ }
+
+
+void AlfCommonVisualAttributeSetter::setPadding(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/)
+ {
+ //If padding-top exists, right, bottom and left must exists also
+
+ AlfAttribute& attrTop =
+ aContainer.getAttributeByName(KPaddingTop);
+ AlfAttribute& attrRight =
+ aContainer.getAttributeByName(KPaddingRight);
+ AlfAttribute& attrBottom =
+ aContainer.getAttributeByName(KPaddingBottom);
+ AlfAttribute& attrLeft =
+ aContainer.getAttributeByName(KPaddingLeft);
+
+ TAlfBoxMetric metric(
+ TAlfMetric(attrLeft.realValue(), attrLeft.unit()),
+ TAlfMetric(attrRight.realValue(), attrRight.unit()),
+ TAlfMetric(attrTop.realValue(), attrTop.unit()),
+ TAlfMetric(attrBottom.realValue(), attrBottom.unit()));
+
+ aVisual.SetPadding(metric);
+
+ attrTop.setDirty(false);
+ attrRight.setDirty(false);
+ attrBottom.setDirty(false);
+ attrLeft.setDirty(false);
+
+ }
+
+void AlfCommonVisualAttributeSetter::setMinSize(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/)
+ {
+ //If minheight exists, minwidth must exists also.
+ AlfAttribute& attrHt =
+ aContainer.getAttributeByName(KMinHeight);
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName(KMinWidth);
+ float height = attrHt.realValue();
+ float width = attrWidth.realValue();
+ TAlfRealSize size( width, height );
+
+ aVisual.SetMinSize(size);
+
+ attrHt.setDirty(false);
+ attrWidth.setDirty(false);
+ }
+
+void AlfCommonVisualAttributeSetter::setMaxSize(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/)
+ {
+ AlfAttribute& attrHt =
+ aContainer.getAttributeByName(KMaxHeight);
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName(KMaxWidth);
+ float height = attrHt.realValue();
+ float width = attrWidth.realValue();
+ TAlfRealSize size( width, height );
+
+ aVisual.SetMaxSize(size);
+
+
+ attrHt.setDirty(false);
+ attrWidth.setDirty(false);
+
+
+ }
+
+void AlfCommonVisualAttributeSetter::setSize(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/,bool aImmediate)
+ {
+ // Must contain both KWidth and KHeight
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName(KWidth);;
+ AlfAttribute& attrHeight =
+ aContainer.getAttributeByName(KHeight);
+
+ TAlfTimedPoint size(aVisual.Size());
+ SetSourceValues(size, attrWidth, attrHeight);
+
+ size.iX.SetStyle(attrWidth.getInterpolationStyle());
+ size.iX.SetTarget(attrWidth.realValue(),
+ getTime(attrWidth, aImmediate));
+ size.iY.SetStyle(attrHeight.getInterpolationStyle());
+ size.iY.SetTarget(attrHeight.realValue(),
+ getTime(attrHeight, aImmediate));
+
+
+ aVisual.SetSize(size);
+
+
+ attrWidth.setDirty(false);
+ attrHeight.setDirty(false);
+ }
+
+void AlfCommonVisualAttributeSetter::setPos(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/,bool aImmediate)
+ {
+ // Must contain both KPositionX and KPositionY
+ AlfAttribute& attrX = aContainer.getAttributeByName(KPositionX);
+ AlfAttribute& attrY = aContainer.getAttributeByName(KPositionY);
+
+ TAlfTimedPoint pos(aVisual.Pos());
+ SetSourceValues(pos, attrX, attrY);
+
+ pos.iX.SetStyle(attrX.getInterpolationStyle());
+ pos.iX.SetTarget(attrX.realValue(), getTime(attrX, aImmediate));
+ pos.iY.SetStyle(attrY.getInterpolationStyle());
+ pos.iY.SetTarget(attrY.realValue(), getTime(attrY, aImmediate));
+
+ aVisual.SetPos(pos);
+
+
+ attrX.setDirty(false);
+ attrY.setDirty(false);
+ }
+
+void AlfCommonVisualAttributeSetter::setRect(CAlfVisual &aVisual,AlfAttributeContainer& aContainer,IAlfMap* /*aData*/,bool aImmediate)
+ {
+ //If topleftx exists, topy, bottomx and bottomy must exists also
+ AlfAttribute& attrTopX =
+ aContainer.getAttributeByName(KTopLeftX);
+ AlfAttribute& attrTopY =
+ aContainer.getAttributeByName(KTopLeftY);
+ AlfAttribute& attrBottomRightX =
+ aContainer.getAttributeByName(KBottomRightX);
+ AlfAttribute& attrBottomRightY =
+ aContainer.getAttributeByName(KBottomRightY);
+
+ const TAlfRealPoint sTopLeft(aVisual.Pos().ValueNow());
+ TAlfRealPoint size(aVisual.Size().ValueNow());
+ TAlfRealRect sRect(sTopLeft, TAlfRealPoint(sTopLeft.iX + size.iX,
+ sTopLeft.iY + size.iY));
+
+ SetSourceRect(sRect, attrTopX, attrTopY, attrBottomRightX,
+ attrBottomRightY);
+
+ aVisual.SetRect(sRect, 0);
+
+ TAlfRealPoint tTopLeft(attrTopX.realValue(), attrTopY.realValue());
+ TAlfRealPoint tBottomRight(attrBottomRightX.realValue(),
+ attrBottomRightY.realValue());
+ TAlfRealRect tRealRect(tTopLeft, tBottomRight);
+
+ int time = getTime(attrTopX, aImmediate);
+ aVisual.SetRect(tRealRect, time);
+
+
+ attrTopX.setDirty(false);
+ attrTopY.setDirty(false);
+ attrBottomRightX.setDirty(false);
+ attrBottomRightY.setDirty(false);
+
+ }
+} // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfcurvepathlayoutattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,629 @@
+/*
+* Copyright (c) 2007 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: Implements attributesetters for curvePathLayout.
+*
+*/
+
+
+
+//includes
+
+//widget model includes
+#include "alf/alfattributecontainer.h"
+#include "alf/alfattributevaluetype.h"
+#include "alf/alfattribute.h"
+#include "alf/alfcurvepathlayoutattributesetter.h"
+#include <alf/alfvisualexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfattributeexception.h>
+
+
+//osn includes
+#include <osn/ustring.h>
+
+//alf includes
+#include <alf/alfenv.h>
+#include <alf/alfcurvepathlayout.h>
+#include <alf/alfcurvepath.h>
+
+//dui includes
+#include "alf/attrproperty.h"
+
+//other includes
+#include <libc/string.h>
+#include <utf.h>
+
+//namespaces
+
+using namespace osncore;
+
+using namespace duiuimodel::commonvisualattributes;
+
+using namespace duiuimodel::layoutattributes;
+
+using namespace duiuimodel::curvepathattributes;
+
+
+namespace Alf
+ {
+
+static void throwIfErr ( int aErr )
+ {
+ if (aErr!=KErrNone)
+ {
+ ALF_THROW ( AlfAttributeException, aErr,
+ "AlfCurvePathLayoutAttributeSetter")
+ }
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfCurvePathLayoutAttributeSetter::
+AlfCurvePathLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfCurvePathLayoutAttributeSetter::
+~AlfCurvePathLayoutAttributeSetter()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets Attribute Value. Delegates based on attribute Category.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfCurvePathLayoutAttributeSetter::setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData )
+ {
+
+ CAlfCurvePathLayout* curvepathlayout =
+ dynamic_cast<CAlfCurvePathLayout*>(&aVisual);
+
+ if ( !curvepathlayout )
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual,
+ "AlfCurvePathLayoutAttributeSetter" )
+ }
+
+ curvepathlayout->CurvePath().Reset();
+
+ AlfCommonLayoutAttributeSetter::setAttributeValue(aVisual, aContainer,
+ aData);
+
+ }
+
+// ---------------------------------------------------------------------------
+// Deprecated
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfCurvePathLayoutAttributeSetter::createCommand (
+ CAlfVisual& /*aVisual*/,
+ AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/,
+ int /*aTransitionTime*/,
+ CAlfVisual* /*aRefVisual*/ )
+ {
+ //deprecated
+ TAlfCommand* cmd = NULL;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// Sends a command to Env
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfCurvePathLayoutAttributeSetter::createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ //SetOffset in CAlfCurvePath can be sent as a TAlfCustomEventCommand
+
+ AlfCommonLayoutAttributeSetter::createAndSendCommands (
+ aVisual, aContainer, aRefVisual );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfCurvePathLayoutAttributeSetter::handleDynamicAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ CAlfCurvePathLayout* curvepathlayout =
+ dynamic_cast<CAlfCurvePathLayout*>(&aVisual);
+ if(!curvepathlayout)
+ {
+ return;
+ }
+
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp ( attrName, KOffsetX ) ||!strcmp ( attrName, KOffsetY ) )
+ {
+ // throws if attribute is not found
+ AlfAttribute& offsety = aContainer.getAttributeByName ( KOffsetY );
+ AlfAttribute& offsetx = aContainer.getAttributeByName ( KOffsetX );
+
+ TAlfTimedPoint offset((TReal32)offsetx.getSourceValue()->realValue(),
+ (TReal32)offsety.getSourceValue()->realValue());
+
+ offset.iX.SetTarget((TReal32)offsetx.getTargetValue()->realValue(),
+ offsetx.getTime());
+
+ offset.iY.SetTarget((TReal32)offsety.getTargetValue()->realValue(),
+ offsety.getTime());
+
+ offset.iX.SetStyle ( offsetx.getInterpolationStyle() );
+ offset.iY.SetStyle ( offsety.getInterpolationStyle() );
+
+ offset.iX.SetMappingFunctionIdentifier(
+ offsetx.getMappingFunctionId());
+ offset.iY.SetMappingFunctionIdentifier(
+ offsety.getMappingFunctionId());
+
+ curvepathlayout->CurvePath().SetOffset( offset );
+ offsetx.setDirty(false);
+ offsety.setDirty(false);
+ }
+ else
+ {
+ AlfCommonLayoutAttributeSetter::handleDynamicAttribute(
+ aVisual, aAttr, aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfCurvePathLayoutAttributeSetter::handleStaticAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+
+ CAlfCurvePathLayout* curvepathlayout =
+ dynamic_cast<CAlfCurvePathLayout*>(&aVisual);
+ if(!curvepathlayout)
+ {
+ return;
+ }
+
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp ( attrName, KEnableLoop ) )
+ {
+ // if value is not int, then use default parameter of EnableLoop
+ if ( AlfAttributeValueType::EInt != aAttr.type() )
+ {
+ curvepathlayout->CurvePath().EnableLoop();
+ }
+
+ else
+ {
+ int enableLoop = aAttr.intValue();
+ TBool flag = ETrue; //Assume true for any non-zero value.
+ if ( 0 == enableLoop )
+ {
+ flag = EFalse;
+ }
+ curvepathlayout->CurvePath().EnableLoop( flag );
+ }
+ }
+
+ else if ( !strcmp ( attrName, KOrigin ) )
+ {
+ curvepathlayout->CurvePath().SetOrigin( aAttr.realValue() );
+ }
+
+ else if ( !strcmp ( attrName, KOffsetX ) || !strcmp ( attrName, KOffsetY ) )
+ {
+ // throws if attribute is not found
+ AlfAttribute& offsety = aContainer.getAttributeByName ( KOffsetY );
+ AlfAttribute& offsetx = aContainer.getAttributeByName ( KOffsetX );
+
+ TAlfTimedPoint offset( offsetx.realValue(), offsety.realValue());
+ curvepathlayout->CurvePath().SetOffset ( offset );
+ offsety.setDirty(false);
+ offsetx.setDirty(false);
+ }
+ else if ( !strcmp ( attrName, KLine ) )
+ {
+ // This multi-value attribute has to be filled in this order:
+ // startx,starty,endx,endy,linelength
+
+ if ( 5 != aAttr.getTargetValueCount())
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "AlfCurvePathLayoutAttributeSetter" );
+ }
+
+ float startx = this->floatOrInt( aAttr, 0 );
+ float starty = this->floatOrInt( aAttr, 1 );
+ float endx = this->floatOrInt( aAttr, 2 );
+ float endy = this->floatOrInt( aAttr, 3 );
+ float len = aAttr.realValue(4);
+
+ TRAPD(err1,curvepathlayout->CurvePath().AppendLineL(
+ TAlfRealPoint(startx,starty),
+ TAlfRealPoint(endx,endy),len )
+ );
+ throwIfErr(err1);
+ }
+
+ else if ( !strcmp ( attrName, KArc ) )
+ {
+ // This multi-value attribute has to be filled in this order:
+ // arcoriginx,arcoriginy,archorzradius,arcvertradius,arcstartangle,
+ // arcendangle,arclength
+
+ if ( 7 != aAttr.getTargetValueCount())
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "AlfCurvePathLayoutAttributeSetter" );
+ }
+
+ float originx = this->floatOrInt( aAttr, 0 );
+ float originy = this->floatOrInt( aAttr, 1 );
+ float horzradius = this->floatOrInt( aAttr, 2 );
+ float vertradius = this->floatOrInt( aAttr, 3 );
+ float startangle = aAttr.realValue(4);
+ float endangle = aAttr.realValue(5);
+ float len = aAttr.realValue(6);
+ TRAPD(err1,curvepathlayout->CurvePath().AppendArcL(
+ TAlfRealPoint(originx,originy),
+ TAlfRealSize(horzradius,vertradius),
+ startangle,endangle,len));
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ AlfCommonLayoutAttributeSetter::handleStaticAttribute (
+ aVisual, aAttr, aContainer);
+ }
+ }
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfCurvePathLayoutAttributeSetter::handleDynamicDataAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData )
+ {
+ CAlfCurvePathLayout* curvepathlayout =
+ dynamic_cast<CAlfCurvePathLayout*> ( &aVisual );
+ if ( !curvepathlayout )
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfCurvePathLayoutAttributeSetter" )
+ }
+
+ const char* attrName = aAttr.name();
+ const char* dataField = aAttr.getDataField();
+
+ if ( !dataField )
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfCurvePathLayoutAttributeSetter" )
+ }
+
+ if (!aData)
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfCurvePathLayoutAttributeSetter" )
+ }
+
+ IAlfVariantType* data = aData->item ( UString(dataField) );
+
+ if (data)
+ {
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp ( attrName, KOffsetX ) )
+ {
+ // throws if attribute not found
+ AlfAttribute& offsety = aContainer.getAttributeByName( KOffsetY );
+
+ const char* offsetyDataField = offsety.getDataField();
+ if ( !offsetyDataField )
+ {
+ ALF_THROW ( AlfDataException,
+ ECommonError, "AlfCurvePathLayoutAttributeSetter")
+ }
+
+ IAlfVariantType* offsetyData = aData->item ( UString(offsetyDataField) );
+
+ if ( data->type() == IAlfVariantType::EReal &&
+ offsetyData && offsetyData->type() == IAlfVariantType::EReal)
+ {
+ // The time value is in the attribute? Is it not
+ // part of data as well?
+ TAlfTimedPoint offset;
+ offset.iX.SetTarget(data->real(), aAttr.getTime());
+ offset.iX.SetStyle ( aAttr.getInterpolationStyle() );
+ offset.iX.SetMappingFunctionIdentifier (aAttr.getMappingFunctionId());
+
+ offset.iY.SetTarget(offsetyData->real(), offsety.getTime());
+ offset.iY.SetStyle ( offsety.getInterpolationStyle() );
+ offset.iY.SetMappingFunctionIdentifier (
+ offsety.getMappingFunctionId());
+
+ curvepathlayout->CurvePath().SetOffset( offset );
+ }
+ }
+
+ else if ( !strcmp ( attrName, KOffsetY ) )
+ {
+ //Make sure X Attribute also exists, but do nothing.
+ //Actual values will be set in the iteration that checks
+ //for KOffsetX
+ aContainer.getAttributeByName ( KOffsetX );
+ //will throw if attribute is not found
+ }
+
+ else
+ {
+ AlfCommonLayoutAttributeSetter::handleDynamicDataAttribute(
+ aVisual, aAttr, aContainer, aData);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfCurvePathLayoutAttributeSetter::handleStaticDataAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData )
+ {
+ CAlfCurvePathLayout* curvepathlayout =
+ dynamic_cast<CAlfCurvePathLayout*> ( &aVisual );
+ if(!curvepathlayout)
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfCurvePathLayoutAttributeSetter" )
+ }
+ const char* attrName = aAttr.name();
+
+ const char* dataField = aAttr.getDataField();
+
+ if ( !dataField )
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfCurvePathLayoutAttributeSetter" )
+ }
+
+ if (!aData)
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfCurvePathLayoutAttributeSetter" )
+ }
+
+ IAlfVariantType* data = aData->item ( UString(dataField) );
+
+ if ( data )
+ {
+
+ if ( !strcmp ( attrName, KEnableLoop ) )
+ {
+ // if value is not bool, then use default parameter of EnableLoop
+ if ( data->type() != IAlfVariantType::EBool )
+ {
+ curvepathlayout->CurvePath().EnableLoop();
+ }
+ else
+ {
+ curvepathlayout->CurvePath().EnableLoop( data->boolean() );
+ }
+ }
+
+ else if ( !strcmp ( attrName, KOrigin ) )
+ {
+ if ( data->type() == IAlfVariantType::EReal )
+ {
+ float origin = data->real() ;
+ curvepathlayout->CurvePath().SetOrigin ( origin );
+ }
+ }
+
+ else if ( !strcmp ( attrName, KOffsetX ) )
+ {
+ AlfAttribute& offsety
+ = aContainer.getAttributeByName ( KOffsetY );
+ //will throw if attribute is not found
+
+ const char* offsetyDataField = offsety.getDataField();
+ if ( !offsetyDataField )
+ {
+ ALF_THROW ( AlfDataException,
+ ECommonError, "AlfCurvePathLayoutAttributeSetter")
+ }
+
+ IAlfVariantType* offsetyData = aData->item ( UString(offsetyDataField) );
+
+ if ( data->type() == IAlfVariantType::EReal &&
+ offsetyData && offsetyData->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedPoint offset( data->real(), offsetyData->real());
+ curvepathlayout->CurvePath().SetOffset( offset );
+ }
+ }
+
+ else if ( !strcmp ( attrName, KOffsetY ) )
+ {
+ //Make sure X Attribute also exists, but do nothing.
+ //Actual values will be set in the iteration that checks for
+ //KOffsetX
+ aContainer.getAttributeByName( KOffsetX );
+ //will throw if attribute is not found
+ }
+
+ else if ( !strcmp ( attrName, KLine ) )
+ {
+
+ //if not a container, dont proceed
+ if (!(data->type() == IAlfVariantType::EContainer))
+ {
+ return;
+ }
+
+ IAlfContainer* container = data->container();
+ //if all item are not present, throw
+ if (container->count() != 5)
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "AlfCurvePathLayoutAttributeSetter" );
+ }
+
+ IAlfVariantType* lineStartXvalue = container->item(0);
+ IAlfVariantType* lineStartYvalue = container->item(1);
+ IAlfVariantType* lineEndXvalue = container->item(2);
+ IAlfVariantType* lineEndYvalue = container->item(3);
+ IAlfVariantType* lineLengthvalue = container->item(4);
+
+ float startx = this->floatOrIntFromData( lineStartXvalue);
+ float starty = this->floatOrIntFromData( lineStartYvalue);
+ float endx = this->floatOrIntFromData( lineEndXvalue );
+ float endy = this->floatOrIntFromData( lineEndYvalue );
+ float len = float(lineLengthvalue->real());
+ TRAPD(err1,
+ curvepathlayout->CurvePath().AppendLineL(
+ TAlfRealPoint(startx,starty),
+ TAlfRealPoint(endx,endy),len)
+ );
+ throwIfErr(err1);
+ }
+
+ else if ( !strcmp ( attrName, KArc ) )
+ {
+
+ //if not a container, dont proceed
+ if (!(data->type() == IAlfVariantType::EContainer))
+ {
+ return;
+ }
+
+ IAlfContainer* container = data->container();
+
+ //if all item are not present, throw
+ if (container->count() != 7)
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "AlfCurvePathLayoutAttributeSetter" );
+ }
+
+ IAlfVariantType* arcOriginXValue = container->item(0);
+ IAlfVariantType* arcOriginYValue = container->item(1);
+ IAlfVariantType* archorzradiusValue = container->item(2);
+ IAlfVariantType* arcvertradiusValue = container->item(3);
+ IAlfVariantType* arcstartangleValue = container->item(4);
+ IAlfVariantType* arcendangleValue = container->item(5);
+ IAlfVariantType* arclengthValue = container->item(6);
+
+ float originx = this->floatOrIntFromData( arcOriginXValue);
+ float originy = this->floatOrIntFromData( arcOriginYValue);
+ float horzradius = this->floatOrIntFromData( archorzradiusValue);
+ float vertradius = this->floatOrIntFromData( arcvertradiusValue);
+ float startangle = float(arcstartangleValue->real());
+ float endangle = float(arcendangleValue->real());
+ float len = float(arclengthValue->real());
+ TRAPD(err1,
+ curvepathlayout->CurvePath().AppendArcL(
+ TAlfRealPoint(originx,originy),
+ TAlfRealSize(horzradius,vertradius),
+ startangle,endangle,len));
+ throwIfErr(err1);
+ }
+ else
+ {
+ AlfCommonLayoutAttributeSetter::handleStaticDataAttribute (
+ aVisual, aAttr, aContainer, aData );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Check if data in the attribute is int or float.
+// Return the value as a float value
+// ---------------------------------------------------------------------------
+//
+float AlfCurvePathLayoutAttributeSetter::floatOrInt(
+ const AlfAttribute& aAttr,
+ int aIndex)
+ {
+ if (aAttr.type(aIndex) == AlfAttributeValueType::EInt)
+ {
+ return float(aAttr.intValue(aIndex));
+ }
+ else if (aAttr.type(aIndex) == AlfAttributeValueType::EFloat)
+ {
+ return aAttr.realValue(aIndex); //will throw an exception i
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException,
+ ECommonError, "AlfCurvePathLayoutAttributeSetter" );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Check if data in the variant type is int or float.
+// Return the value as a float value
+// ---------------------------------------------------------------------------
+//
+float AlfCurvePathLayoutAttributeSetter::floatOrIntFromData(
+ IAlfVariantType* aData)
+ {
+ if (IAlfVariantType::EInt == aData->type())
+ {
+ return float(aData->integer());
+ }
+ else if (IAlfVariantType::EReal == aData->type())
+ {
+ return aData->real();; //will throw an exception i
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException,
+ ECommonError, "AlfCurvePathLayoutAttributeSetter" );
+ }
+ }
+
+ } // namespace Alf
+// End of file
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfdecklayoutattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2007 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: Implements attributesetters for DeckLayout.
+*
+*/
+
+
+
+//includes
+
+//widget model includes
+#include "alf/alfattributecontainer.h"
+#include "alf/alfattributevaluetype.h"
+#include "alf/alfattribute.h"
+#include "alf/alfdecklayoutattributesetter.h"
+#include <alf/alfattributeexception.h>
+#include <alf/alfvisualexception.h>
+#include <alf/alfdataexception.h>
+
+//osn includes
+#include <osn/ustring.h>
+
+//alf includes
+#include <alf/alfenv.h>
+#include <alf/alfvisual.h>
+#include <alf/alfdecklayout.h>
+
+//dui includes
+#include "alf/attrproperty.h"
+
+//other includes
+#include <libc/string.h>
+
+//namespaces
+using namespace osncore;
+using namespace duiuimodel::layoutattributes;
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfDeckLayoutAttributeSetter::AlfDeckLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfDeckLayoutAttributeSetter::~AlfDeckLayoutAttributeSetter()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfDeckLayoutAttributeSetter::setAttributeValue(
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData)
+ {
+ CAlfDeckLayout* deckLayout = dynamic_cast<CAlfDeckLayout*>(&aVisual);
+ if (!deckLayout)
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfDeckLayoutAttributeSetter")
+ }
+
+ // Deck layout does not have any attribute of its own
+ // So, call the base class implementation.
+ AlfCommonLayoutAttributeSetter::setAttributeValue(aVisual, aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfDeckLayoutAttributeSetter::createCommand(
+ CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/, int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/)
+ {
+ TAlfCommand* cmd = 0;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfDeckLayoutAttributeSetter::createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ // Deck layout has no api specific to it which takes a timedvalue
+ // So, call the base class implementation.
+ // It goes through its loop and checks if there are attributes that it handles.
+ AlfCommonLayoutAttributeSetter::createAndSendCommands(aVisual,aContainer,aRefVisual);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets a value of a static attribute to target visual immediately
+// without a transition.
+// ---------------------------------------------------------------------------
+//
+void AlfDeckLayoutAttributeSetter::handleStaticAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer)
+ {
+ AlfCommonLayoutAttributeSetter::handleStaticAttribute(aVisual,
+ aAttr, aContainer);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets a dynamic attribute value in the target visual
+// using transitions defined in attributes
+// ---------------------------------------------------------------------------
+//
+void AlfDeckLayoutAttributeSetter::handleDynamicAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer)
+ {
+ AlfCommonLayoutAttributeSetter::handleDynamicAttribute(aVisual,
+ aAttr, aContainer);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets a value for static data attribute in the target visual
+// immediately without a transition using data in map.
+// ---------------------------------------------------------------------------
+//
+void AlfDeckLayoutAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ AlfCommonLayoutAttributeSetter::handleStaticDataAttribute(
+ aVisual, aAttr, aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets a value for dynamic data attribute value in the target visual
+// using transitions and data in map.
+// ---------------------------------------------------------------------------
+//
+void AlfDeckLayoutAttributeSetter::handleDynamicDataAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ AlfCommonLayoutAttributeSetter::handleDynamicDataAttribute(aVisual,
+ aAttr, aContainer, aData);
+ }
+
+ }// Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfelement.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,636 @@
+/*
+* Copyright (c) 2007 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: The basic implementation for presentation elements.
+*
+*/
+
+
+#include "alf/alfelement.h"
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfvarianttype.h>
+#include "alf/ialfvisualtemplate.h"
+#include "alf/alfreferencetovisual.h"
+//#include "alf/alfperf.h"
+#include <alf/alfexceptions.h>
+
+#include "alfelementattributeownerimpl.h"
+
+namespace Alf
+ {
+
+class AlfVisualData
+ {
+public:
+ AlfVisualData( CAlfVisual* aVisualTree, uint aDataID ) :
+ mVisualTree( aVisualTree ), mDataID( aDataID )
+ {
+ }
+ CAlfVisual *mVisualTree;
+ uint mDataID;
+ ~AlfVisualData()
+ {
+
+ }
+
+ };
+
+class AlfElementImpl
+ {
+public:
+ AlfElementImpl()
+ {
+ mControl = 0;
+ mVisualTemplate = 0;
+ mParentElement = 0;
+ mParentLayout = 0;
+ }
+ ~AlfElementImpl()
+ {
+ if (mVisualTemplate)
+ {
+ delete mVisualTemplate;
+ mVisualTemplate = 0;
+ }
+ if (mParentLayout)
+ {
+ delete mParentLayout;
+ mParentLayout = 0;
+ }
+
+ mVisualTreeArray.clear();
+ }
+ /**
+ * The control. Not own.
+ */
+ CAlfWidgetControl* mControl;
+
+ /**
+ * The element name.
+ */
+ UString mName;
+
+ /**
+ * The visual template for creating visual trees. Own.
+ */
+ IAlfVisualTemplate* mVisualTemplate;
+
+ /*
+ * Parent element. NULL for root elements. Not own.
+ */
+ IAlfElement *mParentElement;
+
+ /*
+ * Array of created visual trees with the associated data IDs.
+ */
+ AlfPtrVector<AlfVisualData>mVisualTreeArray; //RArray<TAlfVisualData> mVisualTreeArray;
+
+ /*
+ * Reference to the default parent layout. Own.
+ */
+ AlfReferenceToVisual *mParentLayout;
+
+ /*
+ * IAlfAttributeOwner implementation. Own.
+ */
+ auto_ptr<AlfElementAttributeOwnerImpl> mAttributeOwnerImpl;
+ };
+
+// ======== MEMBER FUNCTIONS ========
+
+OSN_EXPORT AlfElement::AlfElement()
+ {
+ }
+
+OSN_EXPORT void AlfElement::construct( CAlfWidgetControl& aControl, const char* aName )
+ {
+ mData.reset(new (EMM) AlfElementImpl());
+
+ mData->mControl = &aControl;
+ mData->mName = UString(aName);
+ mData->mParentLayout=NULL;
+ mData->mParentElement=NULL;
+ mData->mVisualTemplate=NULL;
+ mData->mVisualTreeArray.setAutoDelete(true);
+ mData->mAttributeOwnerImpl.reset(new (EMM) AlfElementAttributeOwnerImpl(*this,
+ *mData->mControl));
+ aControl.addElement(this);
+ }
+
+
+OSN_EXPORT AlfElement::AlfElement(CAlfWidgetControl& aControl, const char* aName)
+ {
+ construct( aControl, aName );
+
+ }
+
+OSN_EXPORT AlfElement::~AlfElement()
+ {
+ }
+
+OSN_EXPORT const char* AlfElement::name() const
+ {
+ return mData->mName.getUtf8();
+ }
+
+OSN_EXPORT void AlfElement::createChildVisualTree(
+ IAlfElement* aElement, IAlfVariantType& aChildData,
+ IAlfBranch& aData, int aIndex, uint aDataID )
+ {
+ // Pass directly to the child element CreateVisualTree, no need
+ // to do anything else. Derived classes may need additional steps here.
+// ALF_PERF_START( perfdata, "AlfElement-createVisualTree-createChildVisualTree")
+ aElement->createVisualTree( aChildData, aData, aIndex, aDataID,
+ aElement->defaultParentLayout( aDataID ),
+ aIndex );
+// ALF_PERF_STOP( perfdata, "AlfElement-createVisualTree-createChildVisualTree")
+ }
+
+OSN_EXPORT CAlfVisual* AlfElement::createVisualTree(
+ IAlfVariantType& aData, IAlfBranch& aParentData, int aIndex,
+ uint aParentDataID, CAlfLayout* aParentLayout, int aLayoutIndex )
+ {
+ if ( aIndex >= 0 && aIndex <= aParentData.childrenCount() )
+ {
+ // Update data IDs of all visual trees after the new visual tree
+ // Start from the aIndex, and increase all indices by one
+ updateDataIDs( aParentData, aIndex, 1, aParentDataID, aParentDataID );
+
+ // Create the new visual tree
+ uint dataID = control().elementDataId( *this, aIndex, aParentDataID );
+ return createVisualTree( aData, dataID, aParentLayout, aLayoutIndex );
+ }
+ ALF_THROW(AlfElementException,EInvalidElement,"AlfElement")
+ }
+
+OSN_EXPORT CAlfVisual* AlfElement::createVisualTree(
+ IAlfVariantType& aData, uint aDataID, CAlfLayout* aParentLayout, int aLayoutIndex )
+ {
+ CAlfVisual *retVisual = NULL;
+ IAlfMap* currentData = NULL;
+ IAlfBranch* branch = NULL;
+ if ( aData.type()== IAlfVariantType::EMap )
+ {
+ currentData = aData.map();
+ }
+ else if (aData.type()== IAlfVariantType::EBranch)
+ {
+ branch = aData.branch();
+ currentData = aData.branch()->data();
+ }
+
+ if ( currentData && mData->mVisualTemplate )
+ {
+ //Find the visual tree with data id
+ int index = findFromArray( aDataID );
+ if ( index < 0 )
+ {
+ // Create a new visual tree
+ try
+ {
+ retVisual = mData->mVisualTemplate->createVisualTree(*mData->mControl,
+ currentData, aParentLayout, aLayoutIndex);
+ }
+ catch (...)
+ {
+ ALF_THROW(AlfVisualException,ECanNotCreateVisual,"AlfElement")
+ }
+ // Append the visual into the array
+ mData->mVisualTreeArray.resize(mData->mVisualTreeArray.count()+1);
+ mData->mVisualTreeArray.insert(mData->mVisualTreeArray.count(),(new (EMM) AlfVisualData(retVisual, aDataID)));
+ }
+ else
+ {
+ ALF_THROW(AlfVisualException,EInvalidElement,"AlfElement")
+ }
+ }
+
+ if ( branch )
+ {
+ // Pass to children
+ int count = branch->childrenCount();
+ for ( int i = 0; i < count; ++i )
+ {
+ IAlfElement* element = mData->mControl->findElement(
+ branch->childName( i ).getUtf8() );
+ if ( element )
+ {
+ createChildVisualTree(
+ element, *branch->childData( i ), *branch, i, aDataID );
+ }
+ }
+ }
+
+ return retVisual;
+ }
+
+OSN_EXPORT void AlfElement::removeChildVisualTree(
+ IAlfElement* aElement, IAlfBranch& aData, int aIndex, uint aDataID )
+ {
+ // Pass directly to the child element RemoveVisualTree, no need
+ // to do anything else. Derived classes may need additional steps here.
+ aElement->removeVisualTree( aData, aIndex, aDataID );
+ }
+
+OSN_EXPORT void AlfElement::removeVisualTree( IAlfBranch& aParentData,
+ int aIndex, uint aParentDataID )
+ {
+ if ( aIndex < aParentData.childrenCount() )
+ {
+ IAlfVariantType* data = aParentData.childData( aIndex );
+ uint dataID = control().elementDataId( *this, aIndex, aParentDataID );
+
+ removeVisualTree( *data, dataID );
+
+ // Update data IDs of all visual trees after the removed visual tree
+ // Start from the aIndex + 1, and decrease all indices by one
+ updateDataIDs( aParentData, aIndex + 1, -1, aParentDataID, aParentDataID );
+ }
+ else
+ ALF_THROW(AlfVisualException,EInvalidElement,"AlfElement")
+ }
+
+OSN_EXPORT void AlfElement::removeVisualTree( IAlfVariantType& aData, uint aDataID )
+ {
+ if ( aData.type() == IAlfVariantType::EBranch )
+ {
+ // Pass to children
+ IAlfBranch* branch = aData.branch();
+ int count = branch->childrenCount();
+ for ( int i = 0; i < count; ++i )
+ {
+ IAlfElement* element = mData->mControl->findElement( branch->childName( i ).getUtf8() );
+ if ( element )
+ {
+ removeChildVisualTree( element, *branch, i, aDataID );
+ }
+ }
+ }
+
+ // Remove visual tree from this element
+ int index = findFromArray( aDataID );
+ if (index >= 0)
+ {
+ CAlfVisual* visual = mData->mVisualTreeArray[index]->mVisualTree;
+ visual->RemoveAndDestroyAllD();
+ mData->mVisualTreeArray.remove( index );
+ }
+ else
+ {
+ ALF_THROW(AlfVisualException,EInvalidElement,"AlfElement")
+ }
+ }
+
+OSN_EXPORT void AlfElement::updateVisualTree(
+ IAlfVariantType& aNewData, IAlfVariantType& aOldData, uint aDataID )
+ {
+ IAlfMap* currentNewData = NULL;
+ IAlfMap* currentOldData = NULL;
+ IAlfBranch* branch = NULL;
+ IAlfBranch* oldBranch = NULL;
+
+ if ( aNewData.type()== IAlfVariantType::EMap )
+ {
+ currentNewData = aNewData.map();
+ }
+ else if (aNewData.type()== IAlfVariantType::EBranch)
+ {
+ branch = aNewData.branch();
+ currentNewData = branch->data();
+ }
+
+ if (&aOldData)
+ {
+ if (aOldData.type()== IAlfVariantType::EMap)
+ {
+ currentOldData = aOldData.map();
+ }
+ else if (aOldData.type()== IAlfVariantType::EBranch)
+ {
+ oldBranch = aOldData.branch();
+ currentOldData = aOldData.branch()->data();
+ }
+ }
+
+ if ( currentNewData && mData->mVisualTemplate )
+ {
+ //Find the visual tree with data id
+ int index = findFromArray( aDataID );
+ if (index >= 0)
+ {
+ // Update the contents of the visual tree
+ CAlfVisual* visual = mData->mVisualTreeArray[index]->mVisualTree;
+ //ALF_PERF_START( perfdata, "AlfElement-updateVisualTree-VTUpdateVisualTree")
+ mData->mVisualTreeArray[index]->mVisualTree =
+ mData->mVisualTemplate->updateVisualTree(
+ currentNewData, currentOldData, *visual );
+ //ALF_PERF_STOP( perfdata, "AlfElement-UpdateVisualTree-VTUpdateVisualTree")
+ }
+ }
+
+ if ( branch )
+ {
+ // Pass to children
+ int count = branch->childrenCount();
+ for ( int i = 0; i < count; ++i )
+ {
+ IAlfElement* element = mData->mControl->findElement( branch->childName( i ).getUtf8() );
+ if ( element )
+ {
+ IAlfVariantType* oldData = NULL;
+ if (oldBranch)
+ {
+ oldData = oldBranch->childData( i );
+ }
+
+ element->updateVisualTree( *branch->childData( i ), *oldData,
+ mData->mControl->elementDataId( *element, i, aDataID ) );
+ }
+ }
+ }
+ }
+
+OSN_EXPORT void AlfElement::addVisualTree(CAlfVisual* aVisualTree, uint aDataID)
+ {
+ int index = findFromArray( aDataID );
+ if ( index >= 0 || aVisualTree == NULL )
+ {
+ ALF_THROW(AlfVisualException,EInvalidElement,"AlfElement")
+ }
+ // Append the visual with the assiciated data id into the array
+
+ mData->mVisualTreeArray.resize(mData->mVisualTreeArray.count()+1);
+ mData->mVisualTreeArray.insert(mData->mVisualTreeArray.count(),(new (EMM) AlfVisualData(aVisualTree, aDataID)));
+ }
+
+OSN_EXPORT void AlfElement::replaceVisualTree( IAlfVariantType& aData, uint aDataID, uint aOldDataID )
+ {
+ IAlfVariantType* oldData = control().elementData(*this, aOldDataID );
+
+ int index = findFromArray( aOldDataID );
+ if ( index < 0 )
+ {
+ ALF_THROW(AlfVisualException,EInvalidElement,"AlfElement")
+ }
+ mData->mVisualTreeArray[index]->mDataID = aDataID;
+
+ // Update the contents of the visual tree with the new data
+ updateVisualTree( aData, *oldData, aDataID );
+ }
+
+OSN_EXPORT void AlfElement::updateDataIDs(
+ IAlfBranch& aParentBranch, int aStartIndex,
+ int aOffset, uint /*aOldParentDataId*/, uint aParentDataID )
+ {
+
+ for ( int i = 0; i < mData->mVisualTreeArray.count(); ++i )
+ {
+ uint oldDataID = mData->mVisualTreeArray[i]->mDataID;
+ uint index = control().dataIdToIndex( *this, oldDataID );
+ uint newDataID = control().elementDataId(
+ *this, index + aOffset, aParentDataID );
+ if ( index >= aStartIndex && oldDataID != newDataID )
+ {
+ // Update the data ID
+ mData->mVisualTreeArray[i]->mDataID = newDataID;
+ // The old data ID was used to calculate the child element data IDs
+ // We need to update the visual trees in child elements
+ IAlfVariantType* data = aParentBranch.childData( index );
+ if ( data != NULL )
+ {
+ if ( data->type() == IAlfVariantType::EBranch )
+ {
+ IAlfBranch* branch = data->branch();
+ for ( int j = 0; j < branch->childrenCount(); ++j )
+ {
+ IAlfElement* childElement =
+ mData->mControl->findElement( branch->childName( j ).getUtf8() );
+ if ( childElement )
+ {
+ childElement->updateDataIDs(
+ *branch, 0, 0, oldDataID, newDataID );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+OSN_EXPORT CAlfLayout* AlfElement::defaultParentLayout(uint aParentDataID)
+ {
+ if (mData->mParentLayout)
+ {
+ CAlfVisual* visual=NULL;
+ try
+ {
+ visual = mData->mParentLayout->resolve(*mData->mControl, aParentDataID);
+ }
+ catch (...)
+ {
+ ALF_THROW(AlfVisualException,EInvalidVisual,"AlfElement")
+ }
+ return (CAlfLayout *)visual;
+ }
+ return NULL;
+ }
+
+OSN_EXPORT void AlfElement::setDefaultParentLayout(AlfReferenceToVisual* aReference)
+ {
+ if (mData->mParentLayout)
+ {
+ delete mData->mParentLayout;
+ mData->mParentLayout = 0;
+ }
+ mData->mParentLayout = aReference;
+ }
+
+OSN_EXPORT void AlfElement::setVisualTemplate(IAlfVisualTemplate& aTemplate) throw()
+ {
+ // Remove the visual template from its previous owner
+ if(aTemplate.owner())
+ {
+ aTemplate.owner()->removeVisualTemplate();
+ }
+
+ // Set the visual template to this element
+ mData->mVisualTemplate = &aTemplate;
+ mData->mVisualTemplate->setOwner(this);
+ }
+
+OSN_EXPORT IAlfVisualTemplate* AlfElement::getVisualTemplate() const throw()
+ {
+ return mData->mVisualTemplate;
+ }
+
+OSN_EXPORT void AlfElement::destroyVisualTemplate() throw()
+ {
+ if (mData->mVisualTemplate)
+ {
+ delete mData->mVisualTemplate;
+ mData->mVisualTemplate = 0;
+ }
+ }
+
+OSN_EXPORT IAlfVisualTemplate* AlfElement::removeVisualTemplate() throw()
+ {
+ IAlfVisualTemplate* ret = mData->mVisualTemplate;
+
+ // Set owner to NULL in removed visual template
+ if(mData->mVisualTemplate)
+ {
+ mData->mVisualTemplate->setOwner(0);
+ }
+ mData->mVisualTemplate = 0;
+
+ return ret;
+ }
+
+OSN_EXPORT CAlfVisual* AlfElement::findVisual(const char* aName, uint aDataID)
+ {
+ int index = findFromArray( aDataID );
+ if ( index < 0 )
+ {
+ return NULL;
+ }
+ return mData->mVisualTreeArray[index]->mVisualTree->FindTag(TPtrC8((unsigned char*)aName));//Alf dependency
+ }
+
+OSN_EXPORT CAlfVisual* AlfElement::findVisual(uint aDataID)
+ {
+ int index = findFromArray( aDataID );
+ if ( index < 0 )
+ {
+ return NULL;
+ }
+ return mData->mVisualTreeArray[index]->mVisualTree;
+ }
+
+OSN_EXPORT uint AlfElement::dataID( const CAlfVisual& aVisual ) const
+ {
+ for ( int i = 0; i < mData->mVisualTreeArray.count(); ++i )
+ {
+ if ( mData->mVisualTreeArray[i]->mVisualTree == &aVisual )
+ {
+ return mData->mVisualTreeArray[i]->mDataID;
+ }
+ }
+ return 0;
+ }
+
+int AlfElement::findFromArray( uint aDataID ) const
+ {
+ for ( int i = 0; i < mData->mVisualTreeArray.count(); ++i )
+ {
+ if ( mData->mVisualTreeArray[i]->mDataID == aDataID )
+ {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+OSN_EXPORT const IAlfElement* AlfElement::parentElement() const
+ {
+ return mData->mParentElement;
+ }
+
+OSN_EXPORT void AlfElement::setParentElement(IAlfElement& aParent)
+ {
+ mData->mParentElement = &aParent;
+ }
+
+OSN_EXPORT CAlfWidgetControl& AlfElement::control()
+ {
+ return *mData->mControl;
+ }
+
+OSN_EXPORT void AlfElement::removeAndDestroyVisuals( int aTimeMilliseconds )
+ {
+ //remove child elements
+ for (int i = 0; i<control().numElements(); i++)
+ {
+ IAlfElement& element = control().element(i);
+ if (element.parentElement() == this)
+ {
+ element.removeAndDestroyVisuals(aTimeMilliseconds);
+ }
+ }
+
+ //remove visual trees and elements, that are linked
+ //to this element with parentlayout.
+ for (int i = 0 ; i < mData->mVisualTreeArray.count(); i++)
+ {
+ AlfVisualData* vData = mData->mVisualTreeArray[i];
+ CAlfVisual* visual = vData->mVisualTree;
+ if(visual)
+ {
+ CAlfLayout* layout = dynamic_cast<CAlfLayout*>(visual);
+ if (layout)
+ {
+ for (int j = 0; j<control().numElements(); j++)
+ {
+ IAlfElement& element = control().element(j);
+ CAlfLayout* parent = element.defaultParentLayout(vData->mDataID);
+ if (parent && contains(*parent))
+ {
+ element.removeAndDestroyVisuals(aTimeMilliseconds);
+ }
+ }
+ }
+ visual->RemoveAndDestroyAllD();
+ vData->mVisualTree = NULL;
+ }
+ }
+
+ mData->mVisualTreeArray.clear();
+ }
+
+
+//From IAlfElement
+OSN_EXPORT bool AlfElement::contains(CAlfVisual& aVisual) const
+ {
+ CAlfVisual* visual = &aVisual;
+ //traverse back to the root parent
+ while (visual)
+ {
+ for (int i = 0 ; i < mData->mVisualTreeArray.count(); i++)
+ {
+ if (visual == mData->mVisualTreeArray[i]->mVisualTree)//is this visual parent of passed visual?
+ return true;
+ }
+ visual = visual->Layout();
+ }
+ return false; //referred visual is not part of this element.
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfElement::makeInterface( const IfId& aType )
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfElement::type().mImplementationId)
+ {
+ return static_cast<IAlfElement*>(this);
+ }
+ else if (param == IAlfAttributeOwner::type().mImplementationId)
+ {
+ return static_cast<IAlfAttributeOwner*>(mData->mAttributeOwnerImpl.get());
+ }
+ return NULL;
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfelementattributeownerimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,739 @@
+/*
+* Copyright (c) 2007 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 the IAlfAttributeOwner interface
+* for AlfElement.
+*
+*/
+
+
+#include <alf/alfexceptions.h>
+#include "alf/alfattribute.h"
+#include "alf/alfattributecontainer.h"
+#include "alf/ialfvisualtemplate.h"
+#include <alf/alfwidgetcontrol.h>
+#include "alf/ialfattributesetter.h"
+#include "alf/alfcommonvisualattributesetter.h"
+#include "alf/alfelement.h"
+#include <osn/ustring.h>
+#include "alf/attrproperty.h"
+#include <alf/alfwidgetcommand.h>
+
+
+#include "alfelementattributeownerimpl.h"
+
+using namespace duiuimodel;
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+AlfElementAttributeOwnerImpl::AlfElementAttributeOwnerImpl(
+ AlfElement& aElement, CAlfWidgetControl& aControl) :
+ mElement(aElement), mControl(aControl)
+ {
+ mAttributeList.setAutoDelete(true);
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+AlfElementAttributeOwnerImpl::~AlfElementAttributeOwnerImpl()
+ {
+ mAttributeList.clear();
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfElementAttributeOwnerImpl::makeInterface(
+ const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfAttributeOwner::type().mImplementationId)
+ {
+ return static_cast<IAlfAttributeOwner*>(this);
+ }
+ return 0;
+ }
+
+// ---------------------------------------------------------------------------
+// Get the number of available attributes.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+int AlfElementAttributeOwnerImpl::attributeCount() const
+ {
+ return mAttributeList.count();
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the attribute with the given name.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+const AlfAttribute* AlfElementAttributeOwnerImpl::getAttribute(
+ const UString& aAttribName) const
+ {
+ AlfAttribute* attribute = 0;
+ for (int i = 0; i < mAttributeList.count(); i++)
+ {
+ if (!strcmp(aAttribName.getUtf8(), mAttributeList[i]->name()))
+ {
+ attribute = mAttributeList[i];
+ break;
+ }
+ }
+ return attribute;
+ }
+
+// ---------------------------------------------------------------------------
+// Set a value of an attribute.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfElementAttributeOwnerImpl::setAttribute(const AlfAttribute& aAttribute)
+ {
+ // The attribute must have at least one value set.
+ if (!aAttribute.getTargetValueCount())
+ {
+ ALF_THROW(
+ AlfAttributeException, EInvalidAttribute, "AlfElementAttributeOwnerImpl")
+ }
+
+ if (!canHandleAttribute(aAttribute.name()))
+ {
+ return false;
+ }
+
+ // Check whether the attribute exists already.
+ int i = 0;
+ for (i = 0; i < mAttributeList.count() ; i++)
+ {
+ if (!strcmp(aAttribute.name(), mAttributeList[i]->name()))
+ {
+ // Attribute exists already, modify the contents.
+ *mAttributeList[i] = aAttribute;
+ handleAttribute(*mAttributeList[i]);
+ return true;
+ }
+ }
+
+ // Attribute with the given name does not exist,
+ // clone the given attribute and insert it in the list.
+ mAttributeList.resize(mAttributeList.count() + 1);
+ // Insert cannot fail because already resized.
+ mAttributeList.insert(mAttributeList.count(),
+ const_cast<AlfAttribute&>(aAttribute).clone());
+
+ handleAttribute(*mAttributeList[i]);
+ return true;
+ }
+
+// ---------------------------------------------------------------------------
+// Set a value of an attribute.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfElementAttributeOwnerImpl::setAttribute(
+ const UString& aAttribName, AlfAttributeValueType* aValue)
+ {
+ if (!aValue)
+ {
+ ALF_THROW(
+ AlfAttributeException, EInvalidAttribute, "AlfElementAttributeOwnerImpl")
+ }
+
+ // Create a new attribute.
+ auto_ptr<AlfAttribute> attribute(
+ new (EMM) AlfAttribute(aAttribName.getUtf8(), AlfAttribute::EStatic));
+ attribute->addTargetValue(aValue);
+
+ return setAttribute(*attribute.get());
+ }
+// ---------------------------------------------------------------------------
+// Set a value of an attribute.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfElementAttributeOwnerImpl::setAttribute( const UString& aTargetId ,
+ AlfAttribute& aAttribute )
+ {
+ bool ret(false);
+
+ // The attribute must have at least one value set.
+ if (!aAttribute.getTargetValueCount())
+ {
+ ALF_THROW(
+ AlfAttributeException, EInvalidAttribute, "AlfElementAttributeOwnerImpl")
+ }
+
+ //check targetId
+ if (!aTargetId.isEmpty()
+ && !aTargetId.compare(mElement.name()) )
+ {
+ ret = setAttribute(aAttribute);
+ }
+
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Set a value of an attribute.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfElementAttributeOwnerImpl::setAttribute( const UString& aTargetId,
+ const UString& aAttribName,
+ AlfAttributeValueType* aValue )
+ {
+ bool ret(false);
+
+ if (!aValue)
+ {
+ ALF_THROW(
+ AlfAttributeException, EInvalidAttribute, "AlfElementAttributeOwnerImpl")
+ }
+
+ if (!aTargetId.isEmpty())
+ {
+ // Create a new static attribute.
+ auto_ptr<AlfAttribute> attribute(
+ new (EMM) AlfAttribute(aAttribName.getUtf8(), AlfAttribute::EStatic));
+ attribute->addTargetValue(aValue);
+
+ ret = setAttribute(*attribute.get());
+
+ }
+
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the attribute with the given name.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+const AlfAttribute* AlfElementAttributeOwnerImpl::getAttribute( const UString& aTargetId ,
+ const UString& aAttribName ) const
+ {
+ const AlfAttribute* attr(0);
+
+ //check targetId
+ if (!aTargetId.isEmpty()
+ && !aTargetId.compare(mElement.name()))
+ {
+ attr = getAttribute(aAttribName);
+ }
+
+ return attr;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the attributes from container
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfElementAttributeOwnerImpl::setAttributeContainer( AlfAttributeContainer& aAttributeContainer )
+ {
+
+ const int attributeCount = aAttributeContainer.attributeCount();
+ int numAttributesHandled = 0;
+
+ for (int i = 0; i < attributeCount ; i++)
+ {
+ AlfAttribute& attribute = aAttributeContainer.getAttribute(i);
+ if (!strcmp(attribute.name(), duiuimodel::tactileattributes::KEventInput))
+ {
+
+ // Look for feedback type attribute.
+ try
+ {
+ AlfAttribute& feedBackType =
+ aAttributeContainer.getAttributeByName(duiuimodel::tactileattributes::KFeedbackType);
+ handleTactileAttribute(attribute,feedBackType);
+ numAttributesHandled += 2;
+ }
+ catch(AlfDataException& exception)
+ {
+ // attribute not found,so return false
+ return false;
+ }
+ }
+
+ else if(setAttribute(attribute))
+ {
+ numAttributesHandled++;
+ }
+ }
+
+
+ return (numAttributesHandled == attributeCount);
+ }
+
+// ---------------------------------------------------------------------------
+// Handles the Tactile Attribute.
+// ---------------------------------------------------------------------------
+//
+void AlfElementAttributeOwnerImpl::handleTactileAttribute(
+ AlfAttribute& aAttributeEvent,AlfAttribute& aAttributeFeedback)
+ {
+ IAlfVisualTemplate* visualTemplate = mElement.getVisualTemplate();
+
+ // Find the root layout
+ CAlfVisual* main = mElement.findVisual(0);//needs to be changed because in some cases id may be
+ // set by the user
+
+ if(visualTemplate )
+ {
+ AlfAttribute* attrEvent = NULL;
+ AlfAttribute* attrFeedback = NULL;
+
+ int setterCount = visualTemplate->numAttributeSetters();
+ bool found(false);
+ for (int j = 0; j < setterCount ; j++)
+ {
+ AlfAttributeContainer& container = visualTemplate->attributeContainer(j);
+ try
+ {
+ //find the attribute in each container until it is found
+ attrEvent = &(container.getAttributeByName(duiuimodel::tactileattributes::KEventInput));
+ attrFeedback = &(container.getAttributeByName(duiuimodel::tactileattributes::KFeedbackType));
+ }
+ catch(AlfDataException& exception)
+ {
+ // attribute not found,so continue
+ continue;
+ }
+ //attribute found in one of the existing containers of the visual template, update it
+ *attrEvent = aAttributeEvent;
+ *attrFeedback = aAttributeFeedback;
+ found = true;
+ IAlfAttributeSetter& setter = visualTemplate->attributeSetter(j);
+ if(main)
+ setter.setAttributeValue(*main,&container,0);
+ break;
+ }
+ // attribute not found in any of the containers, so create one attribute container and one
+ // attribute setter and add both to the visual template
+ if (!found)
+ {
+ auto_ptr<AlfAttributeContainer> container(
+ new (EMM) AlfAttributeContainer());
+
+ auto_ptr<AlfCommonVisualAttributeSetter> setter(
+ new (EMM) AlfCommonVisualAttributeSetter());
+
+ AlfAttribute* attribe =aAttributeEvent.clone();
+ AlfAttribute* attribf =aAttributeFeedback.clone();
+
+ container.get()->addAttribute(attribe);
+ container.get()->addAttribute(attribf);
+ if(main)
+ setter.get()->setAttributeValue(*main, container.get(), 0);
+
+ visualTemplate->addAttributeSetter(setter.release(),
+ container.release());
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the attributes from container using targetId
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfElementAttributeOwnerImpl::setAttributeContainer( const UString& aTargetId ,
+ AlfAttributeContainer& aAttributeContainer )
+ {
+
+
+ const int attributeCount = aAttributeContainer.attributeCount();
+ int numAttributesHandled = 0;
+
+ for (int i = 0; i < attributeCount ; i++)
+ {
+ AlfAttribute& attribute = aAttributeContainer.getAttribute(i);
+ if (!strcmp(attribute.name(), duiuimodel::tactileattributes::KEventInput))
+ {
+ // Look for feedback type attribute.
+
+ // Look for feedback type attribute.
+ try
+ {
+ AlfAttribute& feedBackType =
+ aAttributeContainer.getAttributeByName(duiuimodel::tactileattributes::KFeedbackType);
+ handleTactileAttribute(attribute,feedBackType);
+ numAttributesHandled += 2;
+ }
+ catch(AlfDataException& exception)
+ {
+ // attribute not found,so return false
+ return false;
+ }
+ }
+ else if(setAttribute(aTargetId,attribute))
+ {
+ numAttributesHandled++;
+ }
+ }
+
+ return (numAttributesHandled == attributeCount);
+
+ }
+
+// ---------------------------------------------------------------------------
+// Handles the attribute, sets proper values.
+// ---------------------------------------------------------------------------
+//
+void AlfElementAttributeOwnerImpl::handleAttribute(AlfAttribute& aAttribute)
+ {
+ const char* attrName = aAttribute.name();
+
+ if (!strcmp(attrName, commonvisualattributes::KOpacity))
+ {
+ handleOpacityAttribute(aAttribute);
+ }
+ else if(!strcmp(attrName, layoutattributes::KPositionX) ||
+ !strcmp(attrName, layoutattributes::KPositionY))
+ {
+ handlePositionAttribute(aAttribute);
+ }
+ else if(!strcmp(attrName, layoutattributes::KWidth) ||
+ !strcmp(attrName, layoutattributes::KHeight))
+ {
+ handleSizeAttribute(aAttribute);
+ }
+ else if(!strcmp(attrName, layoutattributes::KMaxWidth) ||
+ !strcmp(attrName, layoutattributes::KMaxHeight))
+ {
+ handleMaxSizeAttribute(aAttribute);
+ }
+ else if(!strcmp(attrName, layoutattributes::KMinWidth) ||
+ !strcmp(attrName, layoutattributes::KMinHeight))
+ {
+ handleMinSizeAttribute(aAttribute);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Can attribute be handled with this widget.
+// ---------------------------------------------------------------------------
+//
+bool AlfElementAttributeOwnerImpl::canHandleAttribute(
+ const char* aAttributeName)
+ {
+ bool canHandle(false);
+ if (!strcmp(aAttributeName, commonvisualattributes::KOpacity) ||
+ !strcmp(aAttributeName, layoutattributes::KPositionX) ||
+ !strcmp(aAttributeName, layoutattributes::KPositionY) ||
+ !strcmp(aAttributeName, layoutattributes::KWidth) ||
+ !strcmp(aAttributeName, layoutattributes::KHeight) ||
+ !strcmp(aAttributeName, layoutattributes::KMaxWidth) ||
+ !strcmp(aAttributeName, layoutattributes::KMaxHeight) ||
+ !strcmp(aAttributeName, layoutattributes::KMinWidth) ||
+ !strcmp(aAttributeName, layoutattributes::KMinHeight))
+ {
+ canHandle = true;
+ }
+ return canHandle;
+ }
+
+// ---------------------------------------------------------------------------
+// Handles the Opacity Attribute.
+// ---------------------------------------------------------------------------
+//
+void AlfElementAttributeOwnerImpl::handleOpacityAttribute(
+ AlfAttribute& aAttribute)
+ {
+ const char* attrName = aAttribute.name();
+
+ IAlfVisualTemplate* visualTemplate = mElement.getVisualTemplate();
+
+ // Find the root layout
+ CAlfVisual* main = mElement.findVisual(0);
+
+ if(visualTemplate && main)
+ {
+ int setterCount = visualTemplate->numAttributeSetters();
+ bool found(false);
+ for (int j = 0; j < setterCount && main; j++)
+ {
+ AlfAttributeContainer& container = visualTemplate->attributeContainer(j);
+ AlfAttribute* attr = NULL;
+ try
+ {
+ //find the attribute in each container until it is found
+ attr = &(container.getAttributeByName(attrName));
+ }
+ catch(AlfDataException& exception)
+ {
+ // attribute not found,so continue
+ continue;
+ }
+ //attribute found in one of the existing containers of the visual template, update it
+ *attr = aAttribute;
+ found = true;
+ IAlfAttributeSetter& setter = visualTemplate->attributeSetter(j);
+ setter.setAttributeValue(*main,&container,0);
+ break;
+ }
+ // attribute not found in any of the containers, so create one attribute container and one
+ // attribute setter and add both to the visual template
+ if (!found)
+ {
+ auto_ptr<AlfAttributeContainer> container(
+ new (EMM) AlfAttributeContainer());
+ auto_ptr<AlfCommonVisualAttributeSetter> setter(
+ new (EMM) AlfCommonVisualAttributeSetter());
+ AlfAttribute* attribute =aAttribute.clone();
+ container.get()->addAttribute(attribute);
+
+ setter.get()->setAttributeValue(*main, container.get(), 0);
+ visualTemplate->addAttributeSetter(setter.release(),
+ container.release());
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Handles the Position Attribute
+// ---------------------------------------------------------------------------
+//
+void AlfElementAttributeOwnerImpl::handlePositionAttribute(AlfAttribute& aAttribute)
+ {
+ const char* attrName = aAttribute.name();
+ const char* attrPair = layoutattributes::KPositionX;
+ bool isPositionXAttr = false;
+ if(!strcmp(attrName, layoutattributes::KPositionX))
+ {
+ attrPair = layoutattributes::KPositionY;
+ isPositionXAttr = true;
+ }
+ if (handleAttributePairs(aAttribute, attrPair))
+ {
+ CAlfVisual* main = mElement.findVisual(0);
+ if (main)
+ {
+ bool needsRelayouting = false;
+ TAlfRealPoint pos(main->Pos().Target());
+
+ //for optimizing relayouting, which is expensive. Check, whether we need to do it.
+ if (isPositionXAttr)
+ {
+ //check against visual x position
+ needsRelayouting = (pos.iX != aAttribute.realValue());
+ }
+ else
+ {
+ needsRelayouting = (pos.iY != aAttribute.realValue());
+ }
+
+ if (needsRelayouting)
+ {
+ main->UpdateChildrenLayout();
+ mControl.updateParentLayout();
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Handles the Size Attribute.
+// ---------------------------------------------------------------------------
+//
+void AlfElementAttributeOwnerImpl::handleSizeAttribute(AlfAttribute& aAttribute)
+ {
+ const char* attrName = aAttribute.name();
+ const char* attrPair = layoutattributes::KWidth;
+ bool isWidthAttr = false;
+
+ if(!strcmp(attrName, layoutattributes::KWidth))
+ {
+ attrPair = layoutattributes::KHeight;
+ isWidthAttr = true;
+ }
+ if (handleAttributePairs(aAttribute, attrPair))
+ {
+ CAlfVisual* main = mElement.findVisual(0);
+ if (main)
+ {
+ bool needsRelayouting = false;
+ TAlfRealPoint size(main->Size().Target());
+
+ //for optimizing relayouting, which is expensive. Check, whether we need to do it.
+ if (isWidthAttr)
+ {
+ needsRelayouting = (size.iX != aAttribute.realValue());
+ }
+ else
+ {
+ needsRelayouting = (size.iY != aAttribute.realValue());
+ }
+
+ if (needsRelayouting)
+ {
+ main->UpdateChildrenLayout();
+ mControl.updateParentLayout();
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Handles the Max Size Attribute.
+// ---------------------------------------------------------------------------
+//
+void AlfElementAttributeOwnerImpl::handleMaxSizeAttribute(AlfAttribute& aAttribute)
+ {
+ const char* attrName = aAttribute.name();
+ const char* attrPair = layoutattributes::KMaxWidth;
+ if(!strcmp(attrName, layoutattributes::KMaxWidth))
+ {
+ attrPair = layoutattributes::KMaxHeight;
+ }
+ handleAttributePairs(aAttribute, attrPair);
+ }
+
+// ---------------------------------------------------------------------------
+// Handles the Min Size Attribute.
+// ---------------------------------------------------------------------------
+//
+void AlfElementAttributeOwnerImpl::handleMinSizeAttribute(AlfAttribute& aAttribute)
+ {
+ const char* attrName = aAttribute.name();
+ const char* attrPair = layoutattributes::KMinWidth;
+ if(!strcmp(attrName, layoutattributes::KMinWidth))
+ {
+ attrPair = layoutattributes::KMinHeight;
+ }
+ handleAttributePairs(aAttribute, attrPair);
+ }
+
+// ---------------------------------------------------------------------------
+// Handles setting of paired attributes: widget & height, xpos & ypos etc.
+// ---------------------------------------------------------------------------
+//
+bool AlfElementAttributeOwnerImpl::handleAttributePairs(AlfAttribute& aAttribute,
+ const char* aAttributeNamePair)
+ {
+ const char* attrName = aAttribute.name();
+ bool changed(false);
+ IAlfVisualTemplate* visualTemplate = mElement.getVisualTemplate();
+
+ // Find the root layout
+ CAlfVisual* main = mElement.findVisual(0);
+ if(visualTemplate && main)
+ {
+ int setterCount = visualTemplate->numAttributeSetters();
+ bool found(false);
+
+ //find the attribute in all the existing containers
+ for (int j = 0; j < setterCount; j++)
+ {
+ AlfAttributeContainer& container = visualTemplate->attributeContainer(j);
+ AlfAttribute* attri = NULL;
+ try
+ {
+ attri = &(container.getAttributeByName(attrName));
+ }
+ catch(AlfDataException& exception)
+ {
+ // attribute not found in the container
+ // continue to find in other containers
+ continue;
+ }
+ // attribute found, update it
+ *attri = aAttribute;
+ found = true;
+
+ //check, that attribute pair exists.
+ try
+ {
+ AlfAttribute& attr =
+ container.getAttributeByName(aAttributeNamePair);
+ }
+ catch(AlfDataException& exception)
+ {
+ //attribute pair not found in the same container, so break
+ break;
+ }
+
+ // attribute pair found, so call setAttributeValue()
+ IAlfAttributeSetter& setter = visualTemplate->attributeSetter(j);
+ setter.setAttributeValue(*main, &container, 0);
+ changed = true;
+ break;
+ }
+
+ // the attribute not found in any of the existing containers
+ if(!found)
+ {
+ bool foundAttrPair(false);
+
+ // again try to find the attribute pair
+ // this is for the situation where the attribute already exists
+ for (int j = 0; j < setterCount; j++)
+ {
+ AlfAttributeContainer& container = visualTemplate->attributeContainer(j);
+
+ try
+ {
+ AlfAttribute& attr =
+ container.getAttributeByName(aAttributeNamePair);
+ }
+ catch(AlfDataException& exception)
+ {
+ // attribute not found,so continue
+ continue;
+ }
+ // attribute pair found, so add the attribute to the same container
+ // and call setAttributeValue()
+ AlfAttribute* attribute = aAttribute.clone();
+ container.addAttribute(attribute);
+ IAlfAttributeSetter& setter = visualTemplate->attributeSetter(j);
+ setter.setAttributeValue(*main, &container, 0);
+ changed = true;
+ foundAttrPair = true;
+ break;
+ }
+
+ // counter-part also does not exist, so create a new container and a attribute setter, add
+ // the attribute to the container, and the container and attribute setter to the visual template
+ if(!foundAttrPair)
+ {
+ auto_ptr<AlfAttributeContainer> container(
+ new (EMM) AlfAttributeContainer());
+ auto_ptr<AlfCommonVisualAttributeSetter> setter(
+ new (EMM) AlfCommonVisualAttributeSetter());
+ AlfAttribute* attribute = aAttribute.clone();
+ container.get()->addAttribute(attribute);
+ visualTemplate->addAttributeSetter(setter.get(),
+ container.get());
+ container.release();
+ setter.release();
+ }
+ }
+ }
+ return changed;
+ }
+
+ } // namespace Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfenumvalue.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2007 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: Implemenation file for enumValue for variants.
+*
+*/
+
+
+#include <osn/osnnew.h>
+#include "alfenumvalue.h"
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+AlfEnumValue::AlfEnumValue(int aValue, TAlfUnit aUnit)
+ {
+ mEnum = aValue;
+ mUnit = aUnit;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+AlfEnumValue::~AlfEnumValue()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the enum value.
+// ---------------------------------------------------------------------------
+//
+int AlfEnumValue::enumValue() const
+ {
+ return mEnum;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the type of the atrribute value.
+// ---------------------------------------------------------------------------
+//
+AlfAttributeValueType::Type AlfEnumValue::type() const
+ {
+ return EInt;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the unit.
+// ---------------------------------------------------------------------------
+//
+TAlfUnit AlfEnumValue::unit() const
+ {
+ return mUnit;
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfeventinput.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,304 @@
+/*
+* Copyright (c) 2009 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: File Implements the various input events, including custom events.
+*
+*/
+
+
+#include <alf/alfenv.h>
+#include <alf/alfevent.h>
+#include <alf/alfvisual.h>
+#include <osn/osncommon.h>
+#include "alf/alfreferencetovisual.h"
+#include <alf/alfexceptions.h>
+#include "alf/alfattribute.h"
+#include "alf/alfwidget.h"
+#include "alf/ialfattributeowner.h"
+#include <alf/alfwidgetevents.h>
+#include <alf/alfwidgetcommand.h>
+#include "alfeventinput.h"
+
+namespace Alf
+ {
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+AlfEventInput::AlfEventInput(int aEvtTypeFlags,int aEventID,int aEventData, int aKeyEventModifiers)
+ {
+ mEventTypeFlags = aEvtTypeFlags;
+ mEventID = aEventID;
+ mEventData = aEventData;
+ mKeyEventModifiers = aKeyEventModifiers;
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+bool AlfEventInput::accept( const TAlfEvent& aEvent ) const
+ {
+ bool ret = false;
+
+ // Custom event
+ if ( aEvent.Type() == TAlfEvent::ETypeCustom &&
+ ( mEventTypeFlags & custom ) &&
+ aEvent.CustomParameter() == mEventID )
+ {
+ // If event data is defined to be used, it must match also
+ if ( ( mEventTypeFlags & useEventData ) == 0 ||
+ aEvent.CustomEventData() == mEventData )
+ {
+ ret = true;
+ }
+ }
+ // Key event
+ else if( aEvent.Type() == TAlfEvent::ETypeKey &&
+ ( mEventTypeFlags & custom ) == 0 &&
+ aEvent.KeyEvent().iScanCode == mEventID )
+ {
+ // Test that key event up/down matches
+
+ // keyDown triggers from EEventKey event.
+ // keyUp triggers from EEventKeyUp event.
+
+ if ( ( mEventTypeFlags & keyDown &&
+ aEvent.Code() == EEventKey ) ||
+ ( mEventTypeFlags & keyUp &&
+ aEvent.Code() == EEventKeyUp ) )
+ {
+ // Set trigger status true first, match checks will change it to false if no match.
+ ret = true;
+
+ // If no modifiers requested, no need to check anything
+ if ( mKeyEventModifiers )
+ {
+ uint receivedModifiers = aEvent.KeyEvent().iModifiers;
+
+ while ( true )
+ {
+ if ( mKeyEventModifiers & alt )
+ {
+ if ( !(receivedModifiers & (eventBitLeftAlt|eventBitRightAlt|eventBitAlt)) )
+ {
+ ret = false;
+ break;
+ }
+ }
+ if ( mKeyEventModifiers & ctrl )
+ {
+ if ( !(receivedModifiers & (eventBitLeftCtrl|eventBitRightCtrl|eventBitCtrl)) )
+ {
+ ret = false;
+ break;
+ }
+ }
+ if ( mKeyEventModifiers & shift )
+ {
+ if ( !(receivedModifiers & (eventBitLeftShift|eventBitRightShift|eventBitShift)) )
+ {
+ ret = false;
+ break;
+ }
+ }
+ if ( mKeyEventModifiers & func )
+ {
+ if ( !(receivedModifiers & (eventBitLeftFunc|eventBitRightFunc|eventBitFunc)) )
+ {
+ ret = false;
+ break;
+ }
+ }
+
+ break;
+ }
+
+ if ( mKeyEventModifiers & capsLock && !(receivedModifiers & eventBitCapsLock) )
+ {
+ ret = false;
+ }
+
+ if ( mKeyEventModifiers & numLock && !(receivedModifiers & eventBitNumLock) )
+ {
+ ret = false;
+ }
+
+ if ( mKeyEventModifiers & scrollLock && !(receivedModifiers & eventBitScrollLock) )
+ {
+ ret = false;
+ }
+ }
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+AlfPointerEventInput::AlfPointerEventInput()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+AlfPointerEventInput::AlfPointerEventInput( const char* aElementName,
+ const char* aVisualName,
+ WidgetPointerEvent aEvent )
+ {
+ mVisualRef.reset(AlfReferenceToVisual::create(aElementName, aVisualName, true ));
+ mEvent = aEvent;
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+AlfPointerEventInput::~AlfPointerEventInput()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+bool AlfPointerEventInput::accept(
+ CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const
+ {
+ // Check whether the tapped visual matches with element and visual names
+ // of this pointer event input.
+ bool ret = false;
+
+ // map OSN pointer event to TPointerEvent::TType
+ TPointerEvent::TType eventType = TPointerEvent::EButton1Down;
+ switch (mEvent)
+ {
+ case pointerEventDown:
+ eventType = TPointerEvent::EButton1Down;
+ break;
+ case pointerEventUp:
+ eventType = TPointerEvent::EButton1Up;
+ break;
+ case pointerEventDrag:
+ eventType = TPointerEvent::EDrag;
+ break;
+ default:
+ break;
+ }
+
+ ret = aEvent.IsPointerEvent() &&
+ (eventType == aEvent.PointerEvent().iType) &&
+ mVisualRef->resolve( aControl, aEvent.Visual());
+
+ return ret;
+ }
+// ---------------------------------------------------------------------------
+// Class AlfWidgetAttributeInput
+// ---------------------------------------------------------------------------
+//
+AlfWidgetAttributeInput::AlfWidgetAttributeInput( AlfAttribute& aAttribute,
+ const char* aElementId )
+ {
+ mAttr = &aAttribute;
+ mElementId = "";
+ if (aElementId)
+ {
+ mElementId = aElementId;
+ }
+ }
+
+AlfWidgetAttributeInput::AlfWidgetAttributeInput()
+ {
+ }
+
+AlfWidgetAttributeInput::~AlfWidgetAttributeInput()
+ {
+ delete mAttr;
+ }
+
+bool AlfWidgetAttributeInput::accept(const TAlfEvent& aEvent) const
+ {
+ bool accept(false);
+
+ if (aEvent.IsCustomEvent())
+ {
+ unsigned int eventID = aEvent.CustomParameter();
+ if (eventID == EEventWidgetAttributeChanged)
+ {
+ TAlfWidgetAttributeCommand* command =
+ (TAlfWidgetAttributeCommand*)aEvent.CustomEventData();
+ AlfAttribute* attribute = command->mOwnedAttribute;
+ const char* name = attribute->name();
+ const char* targetelement = command->mTarget.getUtf8();
+
+ accept = true;
+ if (!mElementId.isEmpty() && targetelement)
+ {
+ if ( strcmp(mElementId.getUtf8(), targetelement) )
+ {
+ accept = false;
+ }
+ }
+
+ if (accept)
+ {
+ accept= false;
+ if (!strcmp(mAttr->name(), name))
+ {
+ accept = true;
+ }
+ }
+ }
+ }
+
+ return accept;
+ }
+// ---------------------------------------------------------------------------
+// Class AlfEventPasserInput
+// ---------------------------------------------------------------------------
+//
+// AlfEventInput could be used instead of this class, it contains all the same
+// functionality!
+//
+AlfEventPasserInput::AlfEventPasserInput( int aEventId, int aEventData )
+ {
+ mEventId = aEventId;
+ mEventData = aEventData;//not used yet...
+ }
+
+AlfEventPasserInput::AlfEventPasserInput()
+ {
+ }
+
+AlfEventPasserInput::~AlfEventPasserInput()
+ {
+ }
+
+bool AlfEventPasserInput::accept( const TAlfEvent& aEvent ) const
+ {
+ // check whether the event matches to the one we need to pass to another widget
+
+ return aEvent.IsCustomEvent() &&
+ aEvent.CustomParameter() == mEventId;
+ }
+
+ }//Alf
+
+// End of File.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfeventoutput.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,473 @@
+/*
+* Copyright (c) 2009 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: File Implements the various output events, including custom events.
+*
+*/
+
+
+#include <alf/alfevent.h>
+#include <alf/alfcommand.h>
+#include <alf/alfenv.h>
+#include <osn/ustring.h>
+
+#include <alf/alfwidgetcontrol.h>
+#include "alf/alfreferencetovisual.h"
+#include <alf/alfvarianttype.h>
+#include "alf/alfwidget.h"
+#include <alf/alfexceptions.h>
+#include "alf/alfattribute.h"
+#include "alf/alfattributevaluetype.h"
+#include "alf/ialfattributeowner.h"
+#include <alf/alfeventoutputsignalsubscriber.h>
+#include <alf/ialfappeventlistener.h>
+#include <alf/alfwidgetcommand.h>
+#include <alf/alfwidgetenvextension.h>
+#include <alf/ialfwidgetfactory.h>
+
+#include "alfeventoutput.h"
+
+namespace Alf
+ {
+
+// ======== LOCAL FUNCTIONS ========
+
+void DeleteIAlfVariantType( TAny* aParam )
+ {
+ IAlfVariantType* ptr = static_cast<IAlfVariantType*>( aParam );
+ delete ptr;
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Class AlfEventOutput
+// ---------------------------------------------------------------------------
+//
+AlfEventOutput::AlfEventOutput(
+ int aEventType, int aEventID, const char* aTargetWidget, unsigned int aDelay )
+ {
+ if ( aEventType != TAlfEvent::ETypeCustom &&
+ aEventType != TAlfEvent::ETypeKey )
+ {
+ ALF_THROW(AlfVisualException,EInvalidAttribute,"AlfEventOutput")
+ }
+
+ // Key event outputs must have a target widget.
+ if ( aEventType == TAlfEvent::ETypeKey &&
+ !UString(aTargetWidget).compare(UString("")) )
+ {
+ ALF_THROW(AlfVisualException,EInvalidAttribute,"AlfEventOutput")
+ }
+
+ mEventType = aEventType;
+ mEventID = aEventID;
+ mTargetWidget = UString(aTargetWidget);
+
+ mDelay = aDelay;
+ }
+AlfEventOutput::AlfEventOutput()
+ {
+ }
+
+AlfEventOutput::~AlfEventOutput()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void AlfEventOutput::execute( const CAlfWidgetControl& aControl, const TAlfEvent& aEvent )
+ {
+ CAlfEnv& env = aControl.Env();
+ CAlfWidgetControl* controller = NULL;
+
+ if ( mTargetWidget.compare( UString("") ) )
+ {
+ IAlfWidget* widget = AlfWidgetEnvExtension::widgetFactory(env).findWidget( mTargetWidget.getUtf8() );
+
+ if ( !widget )
+ {
+ ALF_THROW(AlfWidgetException,EInvalidWidget,"AlfEventOutput")
+ }
+ controller = widget->control();
+ }
+
+ if ( mEventType == TAlfEvent::ETypeCustom )
+ {
+ // control is NULL if the event is to be broadcast
+
+ TAlfCustomEventCommand command( mEventID, controller, aEvent.CustomEventData() );
+ env.Send( command, mDelay );
+ }
+ else if ( mEventType == TAlfEvent::ETypeKey && controller )
+ {
+ // Simulate a key event with a given event ID as scan code.
+
+ TKeyEvent key =
+ {
+ 0, // iCode
+ mEventID, // iScanCode
+ 0, // iModifiers
+ 0 // iRepeats
+ };
+
+ TAlfEvent event( *controller->Display(), key, EEventKey );
+ controller->processEvent( event );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Class AlfEventCancelOutput
+// ---------------------------------------------------------------------------
+//
+AlfEventCancelOutput::AlfEventCancelOutput(
+ const char* aTargetWidget, int aEventID, bool aCancelAll )
+ {
+ mTargetWidget = UString(aTargetWidget);
+ mEventID = aEventID;
+ mCancelAll = aCancelAll;
+ }
+
+AlfEventCancelOutput::AlfEventCancelOutput()
+ {
+ }
+
+AlfEventCancelOutput::~AlfEventCancelOutput()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void AlfEventCancelOutput::execute( const CAlfWidgetControl& aControl )
+ {
+ // This cancels either all or specified command in the given
+ // target control.
+
+ CAlfEnv& env = aControl.Env();
+
+ IAlfWidget* widget = AlfWidgetEnvExtension::widgetFactory(env).findWidget( mTargetWidget.getUtf8() );
+
+ if ( !widget )
+ {
+ ALF_THROW(AlfWidgetException,EInvalidWidget,"AlfEventCancelOutput")
+ }
+
+ CAlfControl* controller = widget->control();
+
+ if ( mCancelAll )
+ {
+ env.CancelCustomCommands( controller );
+ }
+ else
+ {
+ env.CancelCustomCommands( controller, mEventID );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Class AlfAnimationCancelOutput
+// ---------------------------------------------------------------------------
+//
+AlfAnimationCancelOutput::AlfAnimationCancelOutput(
+ const char* aElementName,
+ const char* aVisualName,
+ TAlfOp aOperation,
+ bool aCancelAll )
+ {
+ mVisualRef.reset(AlfReferenceToVisual::create( aElementName, aVisualName, true ));
+
+ mOperation = aOperation;
+ mCancelAll = aCancelAll;
+ }
+
+AlfAnimationCancelOutput::AlfAnimationCancelOutput()
+ {
+ }
+
+AlfAnimationCancelOutput::~AlfAnimationCancelOutput()
+ {
+ }
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void AlfAnimationCancelOutput::execute(
+ CAlfWidgetControl& aControl, int aDataID )
+ {
+ CAlfEnv& env = aControl.Env();
+ CAlfVisual* visual=NULL;
+
+ visual = mVisualRef->resolve( aControl, aDataID );
+
+ if ( visual )
+ {
+ if ( mCancelAll )
+ {
+ env.CancelCommands( visual );
+ }
+ else
+ {
+ env.CancelCommands( visual, mOperation );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Class AlfWidgetAttributeOuptut
+// ---------------------------------------------------------------------------
+//
+AlfWidgetAttributeOutput::AlfWidgetAttributeOutput( AlfAttribute& aAttribute,
+ const char* aWidgetId )
+ {
+ mAttr = &aAttribute;
+ mWidgetId = "";
+ if (aWidgetId)
+ {
+ mWidgetId = aWidgetId;
+ }
+ }
+
+AlfWidgetAttributeOutput::AlfWidgetAttributeOutput()
+ {
+ }
+
+AlfWidgetAttributeOutput::~AlfWidgetAttributeOutput()
+ {
+ delete mAttr;
+ }
+
+void AlfWidgetAttributeOutput::execute( CAlfWidgetControl& aControl )
+ {
+ AlfWidget* widget = aControl.widget();
+
+ IAlfAttributeOwner* owner = 0;
+ if (mWidgetId.isEmpty())
+ {
+ owner = IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(widget);
+ }
+ else
+ {
+ IAlfWidget* widget1 = AlfWidgetEnvExtension::widgetFactory(aControl.Env()).findWidget(mWidgetId.getUtf8());
+ owner = IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(widget1);
+ }
+
+ if ( owner )
+ {
+ owner->setAttribute( *mAttr );
+ UString target;
+ TAlfWidgetAttributeCommand command( mAttr, target, widget );
+ CAlfEnv& env = aControl.Env();
+ env.Send( command, 0);
+ command.mOwnedAttribute = NULL;
+ }
+ }
+
+
+#ifdef RD_TACTILE_FEEDBACK
+// ---------------------------------------------------------------------------
+// Class AlfWidgetTactileOutput
+// ---------------------------------------------------------------------------
+//
+AlfTactileOutput::AlfTactileOutput( TTouchLogicalFeedback aFeedbackType )
+ {
+ mFeedbackType = aFeedbackType;
+ }
+
+AlfTactileOutput::AlfTactileOutput()
+ {
+ }
+
+AlfTactileOutput::~AlfTactileOutput()
+ {
+ }
+
+void AlfTactileOutput::execute()
+ {
+ MTouchFeedback* feedback = MTouchFeedback::Instance();
+ if ( feedback )
+ {
+ feedback->InstantFeedback( mFeedbackType );
+ }
+ }
+
+#endif // RD_TACTILE_FEEDBACK
+
+
+// ---------------------------------------------------------------------------
+// Class AlfEventOutputSignal
+// ---------------------------------------------------------------------------
+//
+AlfEventOutputSignal::AlfEventOutputSignal(
+ IAlfEventOutputSignalSubscriber& aSubscriber )
+ : mSubscriber(&aSubscriber)
+ {}
+
+AlfEventOutputSignal::~AlfEventOutputSignal()
+ {
+ delete mSubscriber;
+ }
+
+void AlfEventOutputSignal::execute()
+ {
+ mSubscriber->receiveSignal();
+ }
+
+// ---------------------------------------------------------------------------
+// Class AlfStateChangeOutput
+// ---------------------------------------------------------------------------
+//
+AlfStateChangeOutput::AlfStateChangeOutput(
+ const char* aTargetWidget, uint aEnableStates, uint aDisableStates ):
+ mTargetWidget(aTargetWidget),
+ mEnableStates(aEnableStates),
+ mDisableStates(aDisableStates)
+ {
+
+ // State change events output must have a target widget.
+ if ( !aTargetWidget || aTargetWidget[0] == 0 )
+ {
+ ALF_THROW(AlfWidgetException,EInvalidWidget,"AlfStateChangeOutput")
+ }
+
+ // State change events must not have ambiguous overlapping bits
+ if ( mEnableStates & mDisableStates )
+ {
+ ALF_THROW(AlfWidgetException,EInvalidArgument,"AlfStateChangeOutput")
+ }
+
+ }
+
+AlfStateChangeOutput::~AlfStateChangeOutput()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void AlfStateChangeOutput::execute( const CAlfWidgetControl& aControl)
+ {
+ CAlfEnv& env = aControl.Env();
+
+ if ( mTargetWidget.compare( UString("") ) )
+ {
+ IAlfWidget* widget = AlfWidgetEnvExtension::widgetFactory(env).findWidget( mTargetWidget.getUtf8() );
+
+ if ( !widget )
+ {
+ ALF_THROW(AlfWidgetException,EInvalidWidget,"AlfStateChangeOutput")
+ }
+ CAlfWidgetControl* target = widget->control();
+ target->enableState( mEnableStates);
+ target->disableState(mDisableStates);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Class AlfEventPasserOutput
+// ---------------------------------------------------------------------------
+//
+AlfEventPasserOutput::AlfEventPasserOutput( const char* aSourceWidget, const char* aTargetWidget ):
+ mSourceWidget(aSourceWidget),
+ mTargetWidget(aTargetWidget)
+ {
+
+ mEventMappingData = false;
+
+ // Event passer events output must have a target widget.
+ if ( !mTargetWidget )
+ {
+ ALF_THROW(AlfWidgetException,EInvalidWidget,"AlfEventPasserOutput")
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Class AlfEventPasserOutput
+// ---------------------------------------------------------------------------
+//
+AlfEventPasserOutput::AlfEventPasserOutput( const char* aSourceWidget , const char* aTargetWidget,
+ int aNewEventId , int aNewEventCustomData ):
+ mSourceWidget(aSourceWidget),
+ mTargetWidget(aTargetWidget),
+ mNewEventId(aNewEventId),
+ mNewEventCustomData(aNewEventCustomData)
+ {
+
+ mEventMappingData = true;
+ // Event passer events output must have a target widget.
+ if ( !mTargetWidget )
+ {
+ ALF_THROW(AlfWidgetException,EInvalidWidget,"AlfEventPasserOutput")
+ }
+ }
+
+AlfEventPasserOutput::AlfEventPasserOutput()
+ {
+ }
+
+AlfEventPasserOutput::~AlfEventPasserOutput()
+ {
+ }
+
+void AlfEventPasserOutput::execute( const CAlfWidgetControl* aControl , const TAlfEvent& aEvent )
+ {
+ if(mTargetWidget)
+ {
+ IAlfWidget* wdgt = AlfWidgetEnvExtension::widgetFactory(aControl->Env()).findWidget(mTargetWidget);
+ //const char* wname = wdgt->widgetName(); //for debugging purposes
+ // if widget is not found, ignore...
+ if( wdgt )
+ {
+ if(!mEventMappingData)
+ {
+ //pass to widgets control. The event handler that handles the event
+ //is found from the target widgets controls event handler list.
+ wdgt->control()->processEvent(aEvent);
+ }
+ else
+ {
+ //map event to other type of event. Use user set event ids and custom data.
+ wdgt->control()->processEvent(TAlfEvent(mNewEventId , mNewEventCustomData));
+ }
+ }
+
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Class AlfAppEventOutput
+// ---------------------------------------------------------------------------
+//
+AlfAppEventOutput::AlfAppEventOutput( const UString& aCmd, IAlfAppEventListener& aAppEvent ):
+ mAppEvent(&aAppEvent),
+ mCmd(aCmd)
+ {
+ }
+
+AlfAppEventOutput::~AlfAppEventOutput()
+ {
+ }
+
+void AlfAppEventOutput::execute(const TAlfEvent& aEvent)
+ {
+ mAppEvent->handleApplicationEvent(mCmd, aEvent);
+ }
+
+
+ } // namespace Alf
+
+// End of File.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfflowlayoutattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,267 @@
+/*
+* Copyright (c) 2007 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: File implements the atrributesetters for the flowlayout.
+*
+*/
+
+
+
+//includes
+
+//widget model includes
+#include "alf/alfattributecontainer.h"
+#include "alf/alfattribute.h"
+#include "alf/alfflowlayoutattributesetter.h"
+#include <alf/alfvisualexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfattributeexception.h>
+
+//osn includes
+#include <osn/ustring.h>
+
+//alf includes
+#include <alf/alfvisual.h>
+#include <alf/alfflowlayout.h>
+
+//dui includes
+#include "alf/attrproperty.h"
+
+//other includes
+#include <libc/string.h>
+
+
+
+//namespaces
+using namespace osncore;
+using namespace duiuimodel::layoutattributes;
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfFlowLayoutAttributeSetter::AlfFlowLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfFlowLayoutAttributeSetter::~AlfFlowLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Sets Attribute Value. Delegates based on attribute Category.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfFlowLayoutAttributeSetter::setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData )
+ {
+ // Ensure that the visual is a flow layout
+ CAlfFlowLayout* flowLayout = dynamic_cast<CAlfFlowLayout*>(&aVisual);
+ if (!flowLayout)
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfFlowLayoutAttributeSetter");
+ }
+ AlfCommonLayoutAttributeSetter::setAttributeValue(aVisual,
+ aContainer, aData);
+ }
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfFlowLayoutAttributeSetter::createCommand(
+ CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/, int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/)
+ {
+ TAlfCommand* cmd = 0;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfFlowLayoutAttributeSetter::createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ // Flow layout does not have any specific API which takes timed value.
+ // So, call the base class implementation. It goes through its loop and
+ // checks if there are attributes that it handles.
+ AlfCommonLayoutAttributeSetter::createAndSendCommands(aVisual,aContainer,
+ aRefVisual);
+ }
+
+void AlfFlowLayoutAttributeSetter::handleDynamicDataAttribute (
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ // Flow Layout does not have any specific dynamic attribute, so call the
+ // base class implementation. It goes through its loop and checks if there
+ // are attributes that it handles.
+ AlfCommonLayoutAttributeSetter::handleDynamicDataAttribute(aVisual, aAttr,
+ aContainer, aData);
+ }
+
+void AlfFlowLayoutAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ if (!aData) ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfFlowLayoutAttributeSetter" )
+
+ const char* dataField = aAttr.getDataField();
+ if ( !dataField ) ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfFlowLayoutAttributeSetter" )
+
+ IAlfVariantType* data = aData->item ( UString(dataField));
+ if (data)
+ {
+ const char* attrName = aAttr.name();
+ CAlfFlowLayout* flowLayout = dynamic_cast<CAlfFlowLayout*>(&aVisual);
+ if (!flowLayout)
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfFlowLayoutAttributeSetter");
+ }
+
+ if (!strcmp(attrName,flow::KFlowDirection))
+ {
+ if (data->type() == IAlfVariantType::EInt)
+ {
+ int direction = data->integer();
+ flowLayout->SetFlowDirection(
+ (CAlfFlowLayout::TFlowDirection)direction);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfFlowLayoutAttributeSetter");
+ }
+ }
+ else if (!strcmp(attrName,flow::KLayoutMode))
+ {
+ if (data->type() == IAlfVariantType::EInt)
+ {
+ int layoutMode = data->integer();
+ flowLayout->SetMode(layoutMode);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfFlowLayoutAttributeSetter");
+ }
+ }
+ else if (!strcmp(attrName,flow::KLayoutCentering))
+ {
+ if (data->type() == IAlfVariantType::EBool)
+ {
+ TBool layoutCentering = data->boolean();
+ flowLayout->SetCentering(layoutCentering);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfFlowLayoutAttributeSetter");
+ }
+ }
+ else
+ {
+ // Call the base class implementation .
+ // It goes through its loop and checks if there are attributes
+ // that it handles.
+ AlfCommonLayoutAttributeSetter::handleStaticDataAttribute(aVisual,
+ aAttr, aContainer, aData);
+ }
+ }
+ return;
+ }
+
+void AlfFlowLayoutAttributeSetter::handleDynamicAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ // Flow Layout does not have any specific dynamic attribute, so call the
+ // base class implementation also. It goes through its loop and checks if
+ // there are attributes that it handles.
+ AlfCommonLayoutAttributeSetter::handleDynamicAttribute(aVisual, aAttr,
+ aContainer);
+ }
+
+void AlfFlowLayoutAttributeSetter::handleStaticAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ CAlfFlowLayout* flowLayout = dynamic_cast<CAlfFlowLayout*>(&aVisual);
+ if (!flowLayout)
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfFlowLayoutAttributeSetter");
+ }
+
+ const char* attrName = aAttr.name();
+
+ if (!strcmp(attrName, flow::KFlowDirection))
+ {
+ if(aAttr.type() == AlfAttributeValueType::EInt)
+ {
+ int direction = aAttr.intValue();
+ flowLayout->SetFlowDirection(
+ (CAlfFlowLayout::TFlowDirection)direction);
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttributeValue, "AlfFlowLayoutAttributeSetter");
+ }
+ }
+ else if (!strcmp(attrName, flow::KLayoutMode))
+ {
+ if (aAttr.type() == AlfAttributeValueType::EInt)
+ {
+ int layoutMode = aAttr.intValue();
+ flowLayout->SetMode(layoutMode);
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttributeValue, "AlfFlowLayoutAttributeSetter");
+ }
+ }
+ else if (!strcmp(attrName, flow::KLayoutCentering))
+ {
+ if (aAttr.type() == AlfAttributeValueType::EInt)
+ {
+ int layoutCentering = aAttr.intValue();
+ TBool flag=ETrue; //Assume true for any non-zero value.
+ if (0==layoutCentering) flag=EFalse;
+ flowLayout->SetCentering(flag);
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttributeValue, "AlfFlowLayoutAttributeSetter");
+ }
+ }
+ else // Call the base class implementation also.
+ // It goes through the same loop again and checks if there are
+ // attributes that it handles.
+ {
+ AlfCommonLayoutAttributeSetter::handleStaticAttribute(aVisual, aAttr,
+ aContainer);
+ }
+ return;
+ }
+
+ } // Alf
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfflowlayoutmanager.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,128 @@
+/*
+* Copyright (c) 2007 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: flowlayoutmanager implementation
+*
+*/
+
+
+#include <alf/alfexceptions.h>
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfflowlayoutmanager.h>
+#include <osn/ustring.h>
+#include <osn/osnnew.h>
+
+#include "alfflowlayoutpolicyimpl.h"
+#include "alfflowlayoutpreferencesimpl.h"
+
+using osncore::UString;
+
+using namespace Alf;
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// layout manager constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfFlowLayoutManager::AlfFlowLayoutManager()
+ : AlfLayoutManager(EAlfLayoutTypeFlow)
+ {
+ mData.reset(new (EMM) AlfFlowLayoutPolicyImpl(*this));
+ mPrefImpl.reset(new (EMM) AlfFlowLayoutPreferencesImpl(*this));
+ }
+
+// ---------------------------------------------------------------------------
+// virtual destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfFlowLayoutManager::~AlfFlowLayoutManager()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// from AlfLayoutManager
+// notifies the layout manager, that the child control's layout
+// must be updated.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfFlowLayoutManager::updateChildLayout(
+ CAlfWidgetControl* aControl)
+ {
+ CAlfLayout& layout = getLayout();
+ doUpdateChildLayout(aControl);
+ layout.UpdateChildrenLayout();
+
+ //doUpdateChildLayout changes the visual size and position.
+ //need to notify the widget that size and position has changed.
+ //for aControl both the size and position might have changes.
+ //Only the position changes for all the controls after aControl.
+
+ //set the size and postion for aControl
+ TAlfRealRect rect;
+ if (controlRect(*aControl, rect)) //returns the real rect (of the root visual)
+ {
+ setControlRect(*aControl, rect);
+ }
+
+ //update the position for controls after aControl in layout.
+ const int childrenCount = count();
+ bool childControlFound = false;
+
+ for (int i = 0; i < childrenCount; i++)
+ {
+ CAlfWidgetControl* child = getControl(i);
+
+ if (childControlFound && controlRect(*child, rect))
+ {
+ setControlPosition(*child, rect.iTl);
+ }
+ else if (child == aControl)
+ {
+ childControlFound = true;
+ }
+ }
+
+ // Inform parent layout manager about the changed presentation size
+ owner().updateParentLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfFlowLayoutManager::makeInterface(
+ const IfId& aType )
+ {
+ UString param(aType.mImplementationId);
+ IAlfInterfaceBase* ret = 0;
+
+ ret = mData->makeInterface(aType);
+ if (!ret)
+ {
+ ret = mPrefImpl->makeInterface(aType);
+ }
+ if (!ret)
+ {
+ ret = AlfLayoutManager::makeInterface(aType);
+ }
+
+ return ret;
+ }
+
+ } // Alf
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfflowlayoutpolicyimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2007 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 for flowlayoutpolicy
+*
+*/
+
+
+#include <assert.h>
+#include <alf/alfflowlayout.h>
+#include <alf/alfflowlayoutmanager.h>
+#include <osn/ustring.h>
+#include <osn/osnnew.h>
+
+#include "alfflowlayoutpolicyimpl.h"
+
+using osncore::UString;
+
+using namespace Alf;
+
+namespace Alf
+ {
+
+typedef enum IAlfFlowLayoutPolicy::flowDirection flowDirection;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// flowlayoutpolicyimpl constructor
+// ---------------------------------------------------------------------------
+//
+AlfFlowLayoutPolicyImpl::AlfFlowLayoutPolicyImpl(
+ AlfFlowLayoutManager& aFlowLayoutManager) :
+ mFlowLayoutManager(aFlowLayoutManager), mDirection(EFlowVertical)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// creates the layout used by the layoutmanager.
+// ---------------------------------------------------------------------------
+//
+AlfFlowLayoutPolicyImpl::~AlfFlowLayoutPolicyImpl()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the direction of the flow.
+// ---------------------------------------------------------------------------
+//
+void AlfFlowLayoutPolicyImpl::setFlowDirection(enum flowDirection aDirection)
+ {
+ mDirection = aDirection;
+
+ CAlfFlowLayout::TFlowDirection flowdir(CAlfFlowLayout::EFlowHorizontal);
+ if (aDirection == EFlowVertical)
+ {
+ flowdir = CAlfFlowLayout::EFlowVertical;
+ }
+
+ layout().SetFlowDirection(flowdir);
+ }
+
+// ---------------------------------------------------------------------------
+// returns the flow direction
+// ---------------------------------------------------------------------------
+//
+flowDirection AlfFlowLayoutPolicyImpl::flowDirection() const
+ {
+ return mDirection;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the mode of the flow. The mode flags determine how the flow layout
+// behaves.
+// ---------------------------------------------------------------------------
+//
+void AlfFlowLayoutPolicyImpl::setMode(int aMode)
+ {
+ layout().SetMode(aMode);
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the mode flags of the flow.
+// ---------------------------------------------------------------------------
+//
+int AlfFlowLayoutPolicyImpl::mode() const
+ {
+ return layout().Mode();
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfFlowLayoutPolicyImpl::makeInterface(const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ IAlfInterfaceBase* ret = 0;
+ if (param == IAlfFlowLayoutPolicy::type().mImplementationId)
+ {
+ ret = static_cast<IAlfFlowLayoutPolicy*>(this);
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// returns the flow layout used by the layoutmanager
+// ---------------------------------------------------------------------------
+//
+CAlfFlowLayout& AlfFlowLayoutPolicyImpl::layout() const
+ {
+ return dynamic_cast<CAlfFlowLayout&>(mFlowLayoutManager.getLayout());
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfflowlayoutpreferencesimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2007 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: layoutpreferences implementation for flowlayoutmanager.
+*
+*/
+
+
+#include <assert.h>
+#include <alf/ialfwidgetcontrol.h>
+#include "alf/alfwidget.h"
+#include <alf/alfexceptions.h>
+#include <alf/ialflayoutpreferences.h>
+#include <alf/alfflowlayoutmanager.h>
+#include <alf/ialfflowlayoutpolicy.h>
+#include <osn/osnnew.h>
+
+//stl
+#include <algorithm> //for min & max
+#include "alfflowlayoutpreferencesimpl.h"
+
+using namespace Alf;
+
+namespace Alf
+ {
+// ======== MEMBER FUNCTIONS ========
+
+AlfFlowLayoutPreferencesImpl::AlfFlowLayoutPreferencesImpl(
+ AlfFlowLayoutManager& aFlowLayoutManager) :
+ mFlowLayoutManager(aFlowLayoutManager), mPreferredSize(TAlfMetric(0))
+ {
+ }
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// Returns the minimum area that this layout manager can occupy by observing
+// the minimum sizes of the child UI elements in the layout
+// ---------------------------------------------------------------------------
+//
+bool AlfFlowLayoutPreferencesImpl::getMinimumSize(TAlfXYMetric& aMinSize) const
+ {
+ return calculateChildSizes(aMinSize,
+ flowLayoutPolicy().flowDirection(), ESizeMin);
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// Returns the maximum area that this layout manager can occupy by observing
+// the maximum sizes of the child UI elements in the layout
+// ---------------------------------------------------------------------------
+//
+bool AlfFlowLayoutPreferencesImpl::getMaximumSize(TAlfXYMetric& aMaxSize) const
+ {
+ return calculateChildSizes(aMaxSize,
+ flowLayoutPolicy().flowDirection(), ESizeMax);
+ }
+
+// ---------------------------------------------------------------------------
+// Combines and returns the preferred sizes of all child UI elements according
+// to the layouting rules.
+// ---------------------------------------------------------------------------
+//
+bool AlfFlowLayoutPreferencesImpl::getPreferredSize(TAlfXYMetric& aPreferredSize) const
+ {
+ bool b = false;
+ bool manualSet = (mPreferredSize.iX.iMagnitude > 0 &&
+ mPreferredSize.iY.iMagnitude > 0);
+
+ if (manualSet)
+ {
+ aPreferredSize = mPreferredSize;
+ b = true;
+ }
+ else
+ {
+ b = calculateChildSizes(aPreferredSize,
+ flowLayoutPolicy().flowDirection(), ESizePreferred);
+ }
+ return b;
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// At the moment doesn't do anything since preferred size is being queried
+// from the child UI elements added to this layout manager.
+// ---------------------------------------------------------------------------
+//
+void AlfFlowLayoutPreferencesImpl::setPreferredSize(
+ const TAlfXYMetric& aPreferredSize )
+ {
+ mPreferredSize = aPreferredSize;
+ mFlowLayoutManager.owner().updateParentLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfFlowLayoutPreferencesImpl::makeInterface(
+ const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ IAlfInterfaceBase* ret = 0;
+ if (param == IAlfLayoutPreferences::type().mImplementationId)
+ {
+ ret = static_cast<IAlfLayoutPreferences*>(this);
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// calculate the min-, preferred-, or max- sizes from the children.
+// ---------------------------------------------------------------------------
+//
+bool AlfFlowLayoutPreferencesImpl::calculateChildSizes(
+ TAlfXYMetric& aSize,
+ enum IAlfFlowLayoutPolicy::flowDirection aFlowDirection,
+ enum AlfFlowLayoutPreferencesImpl::sizeType aSizeType) const
+ {
+ bool ret = false;
+ TAlfXYMetric resultSize(TAlfMetric(0), TAlfMetric(0));
+
+ // Iterate through all the child controls, and get their
+ // preferred sizes.
+ int childCount = mFlowLayoutManager.count();
+ for (int i = 0; i < childCount; i++)
+ {
+ CAlfWidgetControl* childWidgetControl = mFlowLayoutManager.getControl(i);
+
+ TAlfXYMetric size;
+ if (getSize(childWidgetControl, size, aSizeType))
+ {
+ TAlfRealSize pixelSize = sizeInPixels(size);
+
+ if (aFlowDirection == IAlfFlowLayoutPolicy::EFlowVertical)
+ {
+ //total width = max preferred width of child widgets.
+ //total height = sum of the preferred heights of child widgets.
+ if(pixelSize.iWidth > resultSize.iX.iMagnitude)
+ {
+ resultSize.iX.iMagnitude = pixelSize.iWidth;
+ }
+ resultSize.iY.iMagnitude += pixelSize.iHeight;
+ ret = true;
+ }
+ else
+ {
+ //horizontal flow direction
+ //total height = max preferred height of child widgets.
+ //total width = sum of the preferred widths of child widgets.
+ if(pixelSize.iHeight > resultSize.iY.iMagnitude)
+ {
+ resultSize.iY.iMagnitude = pixelSize.iHeight;
+ }
+ resultSize.iX.iMagnitude += pixelSize.iWidth;
+ ret = true;
+ }
+ }
+ }
+
+ aSize = resultSize;
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// fetches the size from the IAlfLayoutPreferences-interface of the aControl.
+// ---------------------------------------------------------------------------
+//
+bool AlfFlowLayoutPreferencesImpl::getSize(
+ CAlfWidgetControl* aControl,
+ TAlfXYMetric& aSize,
+ enum AlfFlowLayoutPreferencesImpl::sizeType aSizeType) const
+ {
+ bool ret = false;
+
+ if (aControl)
+ {
+ const IAlfLayoutPreferences* layoutPrefs =
+ mFlowLayoutManager.getLayoutPreferences(aControl);
+
+ if (layoutPrefs)
+ {
+ switch(aSizeType)
+ {
+ case AlfFlowLayoutPreferencesImpl::ESizePreferred:
+ ret = layoutPrefs->getPreferredSize(aSize);
+ break;
+ case AlfFlowLayoutPreferencesImpl::ESizeMin:
+ ret = layoutPrefs->getMinimumSize(aSize);
+ break;
+ case AlfFlowLayoutPreferencesImpl::ESizeMax:
+ ret = layoutPrefs->getMaximumSize(aSize);
+ break;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// get the flowlayoutpolicy-interface.
+// ---------------------------------------------------------------------------
+//
+const IAlfFlowLayoutPolicy& AlfFlowLayoutPreferencesImpl::flowLayoutPolicy() const
+ {
+ AlfFlowLayoutManager* man =
+ const_cast<AlfFlowLayoutManager*>(&mFlowLayoutManager);
+ IAlfFlowLayoutPolicy* policy =
+ IAlfInterfaceBase::makeInterface<IAlfFlowLayoutPolicy>(man);
+ assert(policy);
+ return *policy;
+ }
+// ---------------------------------------------------------------------------
+// converts size in metrics to size in pixels.
+// implementation missing!
+// ---------------------------------------------------------------------------
+//
+TAlfRealSize AlfFlowLayoutPreferencesImpl::sizeInPixels(
+ const TAlfXYMetric& aSize)
+ {
+ TAlfRealSize s;
+
+ if(aSize.iX.iUnit == EAlfUnitPixel)
+ {
+ s.iWidth = aSize.iX.iMagnitude;
+ }
+ if(aSize.iY.iUnit == EAlfUnitPixel)
+ {
+ s.iHeight = aSize.iY.iMagnitude;
+ }
+
+ return s;
+ }
+} // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfgridlayoutattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,428 @@
+/*
+* Copyright (c) 2007 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: Implements attributesetters for grid layout..
+*
+*/
+
+
+//widget model includes
+#include "alf/alfattributecontainer.h"
+#include "alf/alfattributevaluetype.h"
+#include "alf/alfattribute.h"
+#include "alf/alfgridlayoutattributesetter.h"
+#include <alf/alfvisualexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfattributeexception.h>
+
+//osn includes
+#include <osn/ustring.h>
+
+//alf includes
+#include <alf/alfenv.h>
+#include <alf/alfgridlayout.h>
+
+//dui includes
+#include "alf/attrproperty.h"
+
+//other includes
+#include <libc/string.h>
+
+using osncore::UString;
+
+using namespace duiuimodel::commonvisualattributes;
+
+using namespace duiuimodel::layoutattributes;
+
+//variable inside ifdef to prevent compiler warning.
+#ifdef ALF_DEBUG_EXCEPTIONS
+static const char* const ClassName = "AlfGridLayoutAttributeSetter";
+#endif
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// returns int or realvalue as float.
+// ---------------------------------------------------------------------------
+//
+float realOrInt(const AlfAttribute& aAttr, int aIndex)
+ {
+ switch(aAttr.type(aIndex))
+ {
+ case AlfAttributeValueType::EInt:
+ return aAttr.intValue(aIndex);
+ case AlfAttributeValueType::EFloat:
+ return aAttr.realValue(aIndex);
+ default:
+ ALF_THROW ( AlfDataException, ECommonError, ClassName);
+ }
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfGridLayoutAttributeSetter::AlfGridLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfGridLayoutAttributeSetter::~AlfGridLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Sets Attribute Value. Delegates based on attribute Category.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfGridLayoutAttributeSetter::setAttributeValue(
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData )
+ {
+ CAlfGridLayout* gridlayout = dynamic_cast<CAlfGridLayout*>(&aVisual);
+
+ if (!gridlayout)
+ {
+ ALF_THROW(AlfVisualException, EInvalidVisual, ClassName)
+ }
+
+ AlfCommonLayoutAttributeSetter::setAttributeValue(aVisual,
+ aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// Deprecated
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfGridLayoutAttributeSetter::createCommand(
+ CAlfVisual& /*aVisual*/,
+ AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/,
+ int /*aTransitionTime*/,
+ CAlfVisual* /*aRefVisual*/ )
+ {
+ //deprecated
+ TAlfCommand* cmd = 0;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// Sends a command to Env
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfGridLayoutAttributeSetter::createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ //no animatable attributes in grid layout.
+ AlfCommonLayoutAttributeSetter::createAndSendCommands(
+ aVisual, aContainer, aRefVisual);
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfGridLayoutAttributeSetter::handleDynamicAttribute(
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ //no dynamic attributes in grid layout.
+ AlfCommonLayoutAttributeSetter::handleDynamicAttribute(
+ aVisual, aAttr, aContainer);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfGridLayoutAttributeSetter::handleStaticAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ const char* attrName = aAttr.name();
+ CAlfGridLayout* gridlayout = dynamic_cast<CAlfGridLayout*>(&aVisual);
+ if (!gridlayout)
+ {
+ return;
+ }
+
+ if (!strcmp(attrName, grid::KRows))
+ {
+ int rows = realOrInt(aAttr, 0); //this can throw
+ TRAPD(err1, gridlayout->SetRowsL(rows));
+ if (err1 != KErrNone)
+ {
+ ALF_THROW(AlfException, err1, ClassName)
+ }
+ }
+ else if (!strcmp(attrName, grid::KColumns))
+ {
+ int columns = realOrInt(aAttr, 0); //this can throw
+ TRAPD(err1, gridlayout->SetColumnsL(columns));
+ if (err1 != KErrNone)
+ {
+ ALF_THROW(AlfException, err1, ClassName)
+ }
+ }
+ else if (!strcmp( attrName, grid::KColumnWeight))
+ {
+ unsigned int valueCount = aAttr.getTargetValueCount();
+
+ for (int i = 0; i < valueCount; ++i)
+ {
+ TAlfUnit unitType = aAttr.unit(i);
+
+ float val = realOrInt(aAttr, i);
+ TAlfMetric metric( val, unitType );
+
+ TRAPD(err, gridlayout->ReplaceWeightL(EAlfGridColumn, metric, i));
+
+ int err2 = KErrNone;
+ if (err == KErrArgument)
+ {
+ TRAP(err2, gridlayout->AppendWeightL(EAlfGridColumn, metric));
+ if (err2 != KErrNone)
+ {
+ ALF_THROW(AlfException, err2, ClassName)
+ }
+ }
+ else if (err != KErrNone)
+ {
+ ALF_THROW(AlfException, ECommonError, ClassName)
+ }
+ }
+ }
+ else if ( !strcmp ( attrName, grid::KRowWeight ) )
+ {
+ unsigned int valueCount = aAttr.getTargetValueCount();
+
+ for ( int i = 0; i < valueCount; ++i )
+ {
+
+ TAlfUnit unitType = aAttr.unit(i);
+ float val = realOrInt(aAttr, i);
+ TAlfMetric metric ( val, unitType );
+
+ TRAPD ( err, gridlayout->ReplaceWeightL ( EAlfGridRow, metric, i ) );
+
+ int err2 = KErrNone;
+ if ( err == KErrArgument )
+ {
+ TRAP ( err2, gridlayout->AppendWeightL ( EAlfGridRow, metric ) );
+ if (err2 != KErrNone)
+ {
+ ALF_THROW(AlfException, err2, ClassName)
+ }
+ }
+ else if (err != KErrNone)
+ {
+ ALF_THROW(AlfException, ECommonError, ClassName)
+ }
+ }
+ }
+ else if (!strcmp( attrName, KExpansionFlag ))
+ {
+ gridlayout->SetExpanding ( aAttr.intValue() );
+ }
+ else if (!strcmp( attrName, grid::KSetLayoutModeFlag ))
+ {
+ if (aAttr.getTargetValueCount() == 2 &&
+ aAttr.type(0) == AlfAttributeValueType::EInt &&
+ aAttr.type(1) == AlfAttributeValueType::EInt)
+ {
+ gridlayout->SetLayoutModeFlags(TAlfGridDimension(
+ aAttr.intValue(0)), uint(aAttr.intValue(1)));
+ }
+ else
+ {
+ ALF_THROW(AlfAttributeException, EInvalidAttribute, ClassName)
+ }
+ }
+ else if (!strcmp( attrName, grid::KClearLayoutModeFlag ))
+ {
+ if ( aAttr.getTargetValueCount() == 2 &&
+ aAttr.type(0) == AlfAttributeValueType::EInt &&
+ aAttr.type(1) == AlfAttributeValueType::EInt)
+ {
+ gridlayout->ClearLayoutModeFlags(TAlfGridDimension(
+ aAttr.intValue(0)), uint(aAttr.intValue(1)));
+ }
+ else
+ {
+ ALF_THROW( AlfAttributeException, EInvalidAttribute, ClassName)
+ }
+ }
+ else
+ {
+ AlfCommonLayoutAttributeSetter::handleStaticAttribute(
+ aVisual, aAttr, aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfGridLayoutAttributeSetter::handleDynamicDataAttribute(
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData )
+ {
+ //no dynamic attributes in grid layout.
+ AlfCommonLayoutAttributeSetter::handleDynamicDataAttribute(aVisual,
+ aAttr, aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfGridLayoutAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData)
+ {
+ CAlfGridLayout* gridlayout = dynamic_cast<CAlfGridLayout*> ( &aVisual );
+ if (!gridlayout)
+ {
+ ALF_THROW(AlfDataException, ECommonError, ClassName)
+ }
+
+ const char* attrName = aAttr.name();
+ const char* dataField = aAttr.getDataField();
+
+ if (!dataField)
+ {
+ ALF_THROW(AlfDataException, ECommonError, ClassName)
+ }
+
+ if (!aData)
+ {
+ ALF_THROW(AlfDataException, ECommonError, ClassName)
+ }
+
+ IAlfVariantType* data = aData->item(UString(dataField));
+
+ if (data)
+ {
+ if (!strcmp(attrName, grid::KRows))
+ {
+ if (data->type() == IAlfVariantType::EInt)
+ {
+ int rows = data->integer() ;
+ TRAPD(err1, gridlayout->SetRowsL ( rows ));
+ if (err1 != KErrNone)
+ {
+ ALF_THROW(AlfException, err1, ClassName)
+ }
+ }
+ }
+ else if (!strcmp( attrName, grid::KColumns))
+ {
+ if (data->type() == IAlfVariantType::EInt)
+ {
+ int columns = data->integer();
+ TRAPD(err1, gridlayout->SetColumnsL (columns));
+ if (err1 != KErrNone)
+ {
+ ALF_THROW ( AlfException, ECommonError, ClassName )
+ }
+ }
+ }
+ else if (!strcmp(attrName, KExpansionFlag))
+ {
+ if (data->type() == IAlfVariantType::EInt)
+ {
+ gridlayout->SetExpanding(data->integer());
+ }
+ }
+ else if (!strcmp(attrName, grid::KSetLayoutModeFlag))
+ {
+ if (data->type() == IAlfVariantType::EContainer)
+ {
+ IAlfContainer* dataContainer = data->container();
+
+ if ( dataContainer->count() != 2)
+ {
+ ALF_THROW(AlfDataException, EInvalidContainerOperation,
+ ClassName)
+ }
+
+ IAlfVariantType* dimensionData = dataContainer->item(0);
+ IAlfVariantType* flags = dataContainer->item(1);
+
+ if (dimensionData && flags &&
+ dimensionData->type() == IAlfVariantType::EInt &&
+ flags->type() == IAlfVariantType::EInt)
+ {
+ gridlayout->SetLayoutModeFlags(TAlfGridDimension(
+ dimensionData->integer()) , uint(flags->integer()));
+ }
+ }
+ }
+ else if (!strcmp(attrName, grid::KClearLayoutModeFlag))
+ {
+ if (data->type() == IAlfVariantType::EContainer)
+ {
+ IAlfContainer* dataContainer = data->container();
+
+ if (dataContainer->count() != 2)
+ {
+ ALF_THROW(AlfDataException, EInvalidContainerOperation,
+ ClassName)
+ }
+
+ IAlfVariantType* dimensionData = dataContainer->item(0);
+ IAlfVariantType* flags = dataContainer->item(1);
+
+ if (dimensionData && flags &&
+ dimensionData->type() == IAlfVariantType::EInt &&
+ flags->type() == IAlfVariantType::EInt)
+ {
+ gridlayout->ClearLayoutModeFlags(TAlfGridDimension(
+ dimensionData->integer()), uint(flags->integer()));
+ }
+ }
+ }
+ else if ( !strcmp ( attrName, grid::KColumnWeight ) )
+ {
+ }
+ else if ( !strcmp ( attrName, grid::KRowWeight ) )
+ {
+ }
+ else
+ {
+ AlfCommonAttributeSetter::handleStaticDataAttribute(aVisual,
+ aAttr, aContainer, aData);
+ }
+ }
+ }
+
+ } // namespace Alf
+// End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfgridlayoutmanager.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,128 @@
+/*
+* Copyright (c) 2007 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: gridlayoutmanager with focus handling in 1D (next/previous)
+*
+*/
+
+
+#include <alf/alfgridlayoutmanager.h>
+#include <alf/alfexceptions.h>
+#include <alf/alfwidgetcontrol.h>
+#include <osn/ustring.h>
+#include <osn/osnnew.h>
+
+#include "alfgridlayoutmanagerimpl.h"
+#include "alfgridlayoutpolicyimpl.h"
+
+using osncore::UString;
+
+using namespace Alf;
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// layout manager constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfGridLayoutManager::AlfGridLayoutManager()
+ : AlfLayoutManager(EAlfLayoutTypeGrid)
+ {
+ mData.reset(new (EMM) AlfGridLayoutManagerImpl(*this));
+ mDataPolicy.reset(new (EMM) AlfGridLayoutPolicyImpl(*this));
+ }
+
+// ---------------------------------------------------------------------------
+// virtual destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfGridLayoutManager::~AlfGridLayoutManager()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// from AlfLayoutManager
+// notifies the layout manager, that the child control's layout
+// must be updated.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfGridLayoutManager::updateChildLayout(
+ CAlfWidgetControl* aControl)
+ {
+ CAlfLayout& layout = getLayout();
+ doUpdateChildLayout(aControl);
+ layout.UpdateChildrenLayout();
+
+ //doUpdateChildLayout changes the visual size and position.
+ //need to notify the widget that size and position has changed.
+
+ //set the size and postion for aControl
+ TAlfRealRect rect;
+ if (controlRect(*aControl, rect)) //returns the real rect (of the root visual)
+ {
+ setControlRect(*aControl, rect);
+ }
+
+ // Inform parent layout manager about the changed presentation size
+ owner().updateParentLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutManager
+// notifies the layout manager, that the control's has been
+// removed from the layout.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfGridLayoutManager::childRemoved(CAlfWidgetControl* aControl)
+ {
+ //when control is removed from layout, no change to other widget rects,
+ // just call the base class
+ AlfLayoutManager::childRemoved(aControl);
+ }
+
+// ---------------------------------------------------------------------------
+// from AlfLayoutManager
+// notifies the layout manager, that the child control's layout
+// must be updated.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfGridLayoutManager::doUpdateChildLayout(
+ CAlfWidgetControl* /*aControl*/)
+ {
+ //gridlayout changes the position and size, nothing to do here.
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfGridLayoutManager::makeInterface(
+ const IfId& aType )
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfLayoutManager::type().mImplementationId)
+ {
+ return this;
+ }
+
+ // Let the implementation class try the interface creation
+ IAlfInterfaceBase* pInterface = mData->makeInterface(aType);
+ if(!pInterface)
+ pInterface = mDataPolicy->makeInterface(aType);
+ return pInterface;
+ }
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfgridlayoutmanagerimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 2007 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: layoutmanager implementation class with focus handling in 1D (next/previous)
+*
+*/
+
+
+#include <alf/ialfwidgetcontrol.h>
+#include <alf/alfvisual.h>
+#include <alf/alfgridlayout.h>
+#include "alf/alfwidget.h"
+#include <alf/alfvisualfactory.h>
+#include <alf/alfexceptions.h>
+#include <alf/ialflayoutpreferences.h>
+#include <osn/osnnew.h>
+
+//stl
+#include <algorithm> //for min & max
+
+#include "alfgridlayoutmanagerimpl.h"
+
+using namespace Alf;
+
+namespace Alf
+ {
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// layoutmanagerimpl constructor
+// ---------------------------------------------------------------------------
+//
+AlfGridLayoutManagerImpl::AlfGridLayoutManagerImpl(
+ AlfGridLayoutManager& aGridLayoutManager) :
+ mGridLayoutManager(aGridLayoutManager)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// creates the layout used by the layoutmanager.
+// ---------------------------------------------------------------------------
+//
+AlfGridLayoutManagerImpl::~AlfGridLayoutManagerImpl()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// Returns the minimum area that this layout manager can occupy by observing
+// the minimum sizes of the child UI elements in the layout
+// ---------------------------------------------------------------------------
+//
+bool AlfGridLayoutManagerImpl::getMinimumSize( TAlfXYMetric& /*aMinSize*/ ) const
+ {
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// Returns the maximum area that this layout manager can occupy by observing
+// the maximum sizes of the child UI elements in the layout
+// ---------------------------------------------------------------------------
+//
+bool AlfGridLayoutManagerImpl::getMaximumSize( TAlfXYMetric& /*aMaxSize*/ ) const
+ {
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// Combines and returns the preferred sizes of all child UI elements according
+// to the layouting rules.
+// ---------------------------------------------------------------------------
+//
+bool AlfGridLayoutManagerImpl::getPreferredSize(TAlfXYMetric& aPreferredSize) const
+ {
+ bool hasPreferredSize = false;
+ TAlfXYMetric resultSize = TAlfXYMetric(TAlfMetric(0), TAlfMetric(0));
+
+ const CAlfGridLayout& gridlayout = layout();
+ const int childCount = mGridLayoutManager.count();
+ const int gridColCount = gridlayout.ColumnCount();
+
+ //iterate the columns to calculate the preferred width.
+ const int colCount = std::min<int>(gridColCount, childCount);
+ for (int i = 0; i < colCount; i++)
+ {
+ CAlfWidgetControl* childWidgetControl = mGridLayoutManager.getControl(i);
+ //getControl may return null, but getLayoutPreferences checks that.
+ const IAlfLayoutPreferences* layoutPrefs =
+ mGridLayoutManager.getLayoutPreferences(childWidgetControl);
+
+ if (layoutPrefs)
+ {
+ TAlfXYMetric prefSize;
+ if (layoutPrefs->getPreferredSize(prefSize))
+ {
+ if(prefSize.iX.iUnit == EAlfUnitPixel)
+ {
+ resultSize.iX.iMagnitude += prefSize.iX.iMagnitude;
+ hasPreferredSize = true;
+ }
+ }
+ }
+ }
+
+ //iterate the rows to calculate the preferred height
+ if (hasPreferredSize)
+ {
+ //count rows, that have at least one visual.
+ int usedRows = childCount / gridColCount;
+ if (childCount % gridColCount)
+ {
+ //last wor not filled completely, but still valid to get preferred height
+ //for this row also.
+ usedRows++;
+ }
+
+ const int rowCount = std::min<int>(gridlayout.RowCount(), usedRows);
+ for (int i = 0; i < rowCount; i+= gridColCount)
+ {
+ CAlfWidgetControl* childWidgetControl = mGridLayoutManager.getControl(i);
+ //getControl may return null, but getLayoutPreferences checks that.
+ const IAlfLayoutPreferences* layoutPrefs =
+ mGridLayoutManager.getLayoutPreferences(childWidgetControl);
+
+ if (layoutPrefs)
+ {
+ TAlfXYMetric prefSize;
+ if (layoutPrefs->getPreferredSize(prefSize))
+ {
+ if(prefSize.iY.iUnit == EAlfUnitPixel)
+ {
+ resultSize.iY.iMagnitude += prefSize.iY.iMagnitude;
+ hasPreferredSize = true;
+ }
+ }
+ }
+ }
+ }
+
+ aPreferredSize = resultSize;
+ return hasPreferredSize;
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// At the moment doesn't do anything since preferred size is being queried
+// from the child UI elements added to this layout manager.
+// ---------------------------------------------------------------------------
+//
+void AlfGridLayoutManagerImpl::setPreferredSize( const TAlfXYMetric& aPreferredSize)
+ {
+ TAlfTimedPoint size((float)aPreferredSize.iX.iMagnitude,(float)aPreferredSize.iY.iMagnitude);
+ layout().SetSize(size);
+ mGridLayoutManager.owner().updateParentLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfGridLayoutManagerImpl::makeInterface(const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfLayoutPreferences::type().mImplementationId)
+ {
+ return this;
+ }
+
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// returns the gridlayout used by the layoutmanager
+// ---------------------------------------------------------------------------
+//
+CAlfGridLayout& AlfGridLayoutManagerImpl::layout() const
+ {
+ return dynamic_cast<CAlfGridLayout&>(mGridLayoutManager.getLayout());
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfgridlayoutpolicyimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,206 @@
+/*
+* Copyright (c) 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: layoutmanager implementation class with focus handling in 1D (next/previous)
+*
+*/
+
+
+#include <alf/ialfwidgetcontrol.h>
+#include <alf/alfvisual.h>
+#include <alf/alfgridlayout.h>
+#include "alf/alfwidget.h"
+#include <alf/alfvisualfactory.h>
+#include <alf/alfexceptions.h>
+#include <alf/ialflayoutpreferences.h>
+#include <osn/osnnew.h>
+
+//stl
+#include <algorithm> //for min & max
+
+#include "alfgridlayoutpolicyimpl.h"
+
+using namespace Alf;
+
+namespace Alf
+ {
+//ifdef to prevent compiler warning: className not used.
+#ifdef ALF_DEBUG_EXCEPTIONS
+static const char* const className = "AlfGridLayoutPolicyImpl";
+#endif
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// layoutmanagerimpl constructor
+// ---------------------------------------------------------------------------
+//
+AlfGridLayoutPolicyImpl::AlfGridLayoutPolicyImpl(
+ AlfGridLayoutManager& aGridLayoutManager) :
+ mGridLayoutManager(aGridLayoutManager)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// creates the layout used by the layoutmanager.
+// ---------------------------------------------------------------------------
+//
+AlfGridLayoutPolicyImpl::~AlfGridLayoutPolicyImpl()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfGridLayoutPolicy
+// Sets the number and weights of blocks in this grid layout in the direction of the specified
+// dimension.
+// ---------------------------------------------------------------------------
+void AlfGridLayoutPolicyImpl::fillWeights(gridLayoutDimension aDim, int aCount, const TAlfMetric& aWeight)
+ {
+ CAlfGridLayout& gridLayout = layout();
+ TAlfGridDimension dim = (TAlfGridDimension)aDim;
+ TRAPD(err, gridLayout.FillWeightsL(dim, aCount, aWeight));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfVisualException, err, className);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfGridLayoutPolicy
+// Add a new line of blocks to this grid layout at the last position in the direction of the
+// specified dimension.
+// ---------------------------------------------------------------------------
+void AlfGridLayoutPolicyImpl::appendWeight(gridLayoutDimension aDim, const TAlfMetric& aWeight)
+ {
+ CAlfGridLayout& gridLayout = layout();
+ TAlfGridDimension dim = (TAlfGridDimension)aDim;
+ TRAPD(err, gridLayout.AppendWeightL(dim, aWeight));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfVisualException, err, className);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfGridLayoutPolicy
+// Add a new line of blocks to this grid layout at the specified position in the direciton of
+// the specified dimension.
+// ---------------------------------------------------------------------------
+void AlfGridLayoutPolicyImpl::insertWeight(gridLayoutDimension aDim, const TAlfMetric& aWeight, int aPos)
+ {
+ CAlfGridLayout& gridLayout = layout();
+ TAlfGridDimension dim = (TAlfGridDimension)aDim;
+ TRAPD(err, gridLayout.InsertWeightL(dim, aWeight, aPos));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfVisualException, err, className);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfGridLayoutPolicy
+// Sets the weight of a specific line of blocks in this grid layout, in the direction of the supplied dimension.
+// ---------------------------------------------------------------------------
+void AlfGridLayoutPolicyImpl::replaceWeight(gridLayoutDimension aDim, const TAlfMetric& aWeight, int aPos)
+ {
+ CAlfGridLayout& gridLayout = layout();
+ TAlfGridDimension dim = (TAlfGridDimension)aDim;
+ TRAPD(err, gridLayout.ReplaceWeightL(dim, aWeight, aPos));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfVisualException, err, className);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfGridLayoutPolicy
+// Remove a line of blocks from this grid layout at the specified position in the
+// specified dimension.
+// ---------------------------------------------------------------------------
+void AlfGridLayoutPolicyImpl::removeWeight(gridLayoutDimension aDim, int aPos)
+ {
+ CAlfGridLayout& gridLayout = layout();
+ TAlfGridDimension dim = (TAlfGridDimension)aDim;
+ TRAPD(err, gridLayout.RemoveWeightL(dim, aPos));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfVisualException, err, className);
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// from IAlfGridLayoutPolicy
+// Returns the weight of a specific line of blocks in this grid layout, in the
+// specified dimension.
+// ---------------------------------------------------------------------------
+TAlfMetric AlfGridLayoutPolicyImpl::weight(gridLayoutDimension aDim, int aPos) const
+ {
+ CAlfGridLayout& gridLayout = layout();
+ TAlfGridDimension dim = (TAlfGridDimension)aDim;
+ TAlfMetric result;
+ TRAPD(err, result = gridLayout.Weight(dim, aPos));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfVisualException, err, className);
+ }
+ return result;
+ }
+
+
+// ---------------------------------------------------------------------------
+// from IAlfGridLayoutPolicy
+// Return the number of lines of blocks in this grid, along the specified dimension
+// ---------------------------------------------------------------------------
+int AlfGridLayoutPolicyImpl::count(gridLayoutDimension aDim) const
+ {
+ CAlfGridLayout& gridLayout = layout();
+ TAlfGridDimension dim = (TAlfGridDimension)aDim;
+ int result(0);
+ TRAPD(err, result = gridLayout.DimensionCount(dim));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfVisualException, err, className);
+ }
+ return result;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfGridLayoutPolicyImpl::makeInterface(const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfGridLayoutPolicy::type().mImplementationId)
+ {
+ return this;
+ }
+
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// returns the gridlayout used by the layoutmanager
+// ---------------------------------------------------------------------------
+//
+CAlfGridLayout& AlfGridLayoutPolicyImpl::layout() const
+ {
+ return dynamic_cast<CAlfGridLayout&>(mGridLayoutManager.getLayout());
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfhostapiimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2007 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: The private implementation of AlfHostAPI.
+*
+*/
+
+
+#include "alfhostapiimpl.h"
+#include <alf/alfwidgetcontrol.h>
+#include <alf/ialflayoutmanager.h>
+#include <alf/alfexceptions.h>
+
+namespace Alf
+ {
+
+AlfHostAPIImpl::AlfHostAPIImpl(): mBaseLayout(NULL), mHostControl(NULL)
+ {
+ }
+
+
+AlfHostAPIImpl::~AlfHostAPIImpl()
+ {
+ }
+
+OSN_EXPORT IAlfInterfaceBase* AlfHostAPIImpl::makeInterface(
+ const IfId& aType )
+ {
+ UString param(aType.mImplementationId);
+ if ( param == IAlfHostAPI::type().mImplementationId )
+ {
+ return static_cast<IAlfHostAPI*>( this );
+ }
+ return 0;
+ }
+
+void AlfHostAPIImpl::setHostControl(CAlfWidgetControl& aControl)
+ {
+ mHostControl = &aControl;
+ }
+
+void AlfHostAPIImpl::setConnection(CAlfWidgetControl& aControl, AlfRole aRole)
+ {
+ if (mHostControl)
+ {
+ // Remove previous host connection from connected control
+ if(aControl.Host())
+ {
+ CAlfWidgetControl* parentControl = dynamic_cast<CAlfWidgetControl*>(aControl.Host());
+ if(parentControl)
+ {
+ parentControl->hostAPI().removeConnection(aControl);
+ }
+ }
+
+ // Add connection from host control to connected control
+ TRAPD(err, mHostControl->AddConnectionL(&aControl,aRole));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfException, err, "AlfHostAPIImpl::setConnection() - AddConnectionL() failed.");
+ }
+
+ // Update layout of host control if a child control was connected
+ if (aRole == EChild && mBaseLayout.get())
+ {
+ mBaseLayout->updateChildLayout(&aControl);
+ }
+ }
+ }
+
+CAlfWidgetControl* AlfHostAPIImpl::getConnection(int aIndex) const
+ {
+ if (mHostControl)
+ {
+ //AlfControl doesn't perform bound checks.
+ if (aIndex >=0 && aIndex < mHostControl->ConnectionCount())
+ {
+ return (static_cast<CAlfWidgetControl*>(&(mHostControl->Connection(aIndex))));
+ }
+ }
+ return 0; //NULL is not defined in osncore
+ }
+
+int AlfHostAPIImpl::getConnectionCount() const
+ {
+ int connectionCount = 0;
+ if (mHostControl)
+ {
+ connectionCount = mHostControl->ConnectionCount();
+ }
+ return connectionCount;
+ }
+
+int AlfHostAPIImpl::getConnectionIndex(CAlfWidgetControl& aControl) const
+ {
+ return mHostControl->FindConnection(&aControl);
+ }
+
+void AlfHostAPIImpl::removeConnection(CAlfWidgetControl& aControl)
+ {
+ if (mHostControl)
+ {
+ mHostControl->RemoveConnection(&aControl);
+ if (getBaseLayout())
+ {
+ getBaseLayout()->childRemoved(&aControl);
+ }
+ }
+ }
+
+void AlfHostAPIImpl::setBaseLayout(IAlfLayoutManager& aLayout)
+ {
+ if(mHostControl)
+ {
+ mBaseLayout.reset(&aLayout);
+ mBaseLayout->createLayout(*mHostControl, 0, 0);
+ }
+ }
+
+IAlfLayoutManager* AlfHostAPIImpl::getBaseLayout() const
+ {
+ return mBaseLayout.get();
+ }
+
+ } //namespace alf
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfimagevisualattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,821 @@
+/*
+* Copyright (c) 2007 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: Implements attributesetters for image.
+*
+*/
+
+
+#include "alf/alfattribute.h"
+#include "alf/alfimagevisualattributesetter.h"
+#include "alf/alfattributevaluetype.h"
+#include <alf/alfvisual.h>
+#include <alf/alfattributeexception.h>
+#include <alf/alfvisualexception.h>
+#include "alf/alfattributecontainer.h"
+#include <libc/string.h>
+
+#include <uiacceltk/HuiRealPoint.h>
+
+#include <alf/alfimagevisual.h>
+#include <alf/alftexture.h>
+#include <utf.h>
+#include <alf/alfenv.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfutil.h>
+
+#include <alf/alfbrusharray.h>
+#include <alf/alfframebrush.h>
+
+
+#include <alf/alfeventhandler.h>
+#include <alf/alfevent.h>
+#include <osn/alfptrvector.h>
+#include <alf/alfresourcepool.h>
+#include <alf/alfmetric.h>
+#include <alf/alfwidgetenvextension.h>
+
+#include <osn/osnnew.h>
+#include <osn/ustring.h>
+#include <alf/attrproperty.h>
+
+using namespace osncore;
+
+using namespace duiuimodel::imagevisualattributes;
+using namespace duiuimodel::commonvisualattributes;
+using namespace duiuimodel::layoutattributes;
+
+namespace Alf
+{
+
+class AlfImageVisualAttributeSetterImpl
+ {
+public:
+ AlfImageVisualAttributeSetterImpl();
+ ~AlfImageVisualAttributeSetterImpl();
+public:
+ //Keep track of loaded texture for imagevisuals.
+ //Texture manager doesn't unload the texture from memory untill Env is deleted.
+ //Hence need to unload them once attribute setter is deleted.
+ AlfPtrVector<CAlfTexture> mLoadedTextures;
+ //Env needed to access TextureManager while unloading textures.
+ CAlfEnv* mEnv;
+
+ // Utility functions. Keep them static so whole class can become static in future
+ TAlfImage createImageFromImagePath( const CAlfImageVisual& aImageVisual, const TPtrC8& aPath );
+ TAlfImage createNonPoolImageFromSkinLogicalID(CAlfEnv& aEnv, const Utf8* aResourceRef, AlfAttributeContainer& aContainer);
+ };
+
+AlfImageVisualAttributeSetterImpl::AlfImageVisualAttributeSetterImpl()
+ {
+ //Do not delete textures here as they may be in use by the visuals that have not been deleted.
+ mEnv = CAlfEnv::Static();
+ mLoadedTextures.setAutoDelete(false);
+ }
+
+AlfImageVisualAttributeSetterImpl::~AlfImageVisualAttributeSetterImpl()
+ {
+ //Unload all loaded textures created by this attributesetter to free up the memory.
+ for (int i =0;i<mLoadedTextures.count();i++)
+ {
+ CAlfTexture* texture = mLoadedTextures[i];
+ mEnv->TextureManager().UnloadTexture(texture->Id());
+ }
+ mLoadedTextures.clear();
+
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfImageVisualAttributeSetter::AlfImageVisualAttributeSetter()
+ {
+ mImpl.reset(new (EMM) AlfImageVisualAttributeSetterImpl());
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfImageVisualAttributeSetter::~AlfImageVisualAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Sets Attribute Value. Delegates based on attribute Category.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfImageVisualAttributeSetter::setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData )
+ {
+ CAlfImageVisual* imageVisual = dynamic_cast<CAlfImageVisual*>(&aVisual);
+ if (!imageVisual)
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfImageVisualAttributeSetter")
+ }
+
+ AlfCommonVisualAttributeSetter::setAttributeValue(aVisual,
+ aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfImageVisualAttributeSetter::handleDynamicDataAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ AlfCommonVisualAttributeSetter::handleDynamicDataAttribute( aVisual, aAttr,
+ aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfImageVisualAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ if (!aData) ALF_THROW ( AlfDataException, EInvalidVariantDataType, "CAlfTextVisualAttributeSetter" )
+
+ const char* dataField = aAttr.getDataField();
+ if (!dataField) ALF_THROW ( AlfDataException, EInvalidAttribute, "CAlfTextVisualAttributeSetter" )
+
+ IAlfVariantType* data = aData->item ( UString(dataField));
+
+ const char* attrName = aAttr.name();
+
+ if (data)
+ {
+ CAlfImageVisual* imageVisual = dynamic_cast<CAlfImageVisual*>(&aVisual);
+ if(!imageVisual)
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "CAlfTextVisualAttributeSetter" )
+ }
+
+ if (!strcmp(attrName,KImageScaleMode))
+ {
+ if (data->type() == IAlfVariantType::EInt)
+ {
+ int val = data->integer();
+ imageVisual->SetScaleMode(CAlfImageVisual::TScaleMode(val));
+ }
+ }
+ else if (!strcmp(attrName,KImageColorMode))
+ {
+ if (data->type() == IAlfVariantType::EInt)
+ {
+ int val = data->integer();
+ imageVisual->SetColorMode(CAlfImageVisual::TColorMode(val));
+ }
+ }
+ else if (!strcmp(attrName,KDropShadow))
+ {
+
+ // needs to have discussion about how to store unit in the data
+
+ }
+
+ else if (!strcmp(attrName, KImagePath))
+ {
+ if (data->type() == IAlfVariantType::EString)
+ {
+ TPtrC8 src;
+ src.Set((TUint8*)data->string().getUtf8());
+ HandleImagePathAttribute( src, imageVisual, true );
+ }
+ }
+
+ else if (!strcmp(attrName,KImageResourceRef))
+ {
+ if (data->type() == IAlfVariantType::EString)
+ {
+ TAlfImage image;
+ try
+ {
+ image = AlfWidgetEnvExtension::resourcePool(aVisual.Env()).getImageResource(data->string().getUtf8());
+ }
+ catch(invalid_argument &)
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter:: Image does not exist");
+ }
+
+ if(image.HasTexture())
+ {
+ imageVisual->SetImage(image);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter:: Image does not exist");
+ }
+ }
+ }
+
+ else if (!strcmp(attrName,KSecondaryImagePath))
+ {
+ if (data->type() == IAlfVariantType::EString)
+ {
+ TPtrC8 src;
+ src.Set((TUint8*)data->string().getUtf8());
+
+ HandleImagePathAttribute( src, imageVisual, false );
+ }
+ }
+
+ else if (!strcmp(attrName,KSecondaryImageResourceRef))
+ {
+ if (data->type() == IAlfVariantType::EString)
+ {
+ TAlfImage image;
+ try
+ {
+ image = AlfWidgetEnvExtension::resourcePool(aVisual.Env()).getImageResource(data->string().getUtf8());
+ }
+ catch(invalid_argument &)
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter:: Image does not exist");
+ }
+ if(image.HasTexture())
+ {
+ imageVisual->SetSecondaryImage(image);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter:: Image does not exist");
+ }
+ }
+ }
+
+ else if (!strcmp(attrName,KSkinImagePath))
+ {
+ if (data->type() == IAlfVariantType::EString)
+ {
+ TAlfImage image;
+ try
+ {
+ image = AlfWidgetEnvExtension::resourcePool(aVisual.Env()).getImageResource(data->string().getUtf8());
+ }
+ catch(invalid_argument &)
+ {
+ // This image is not present in currently active Theme,
+ // hence Resource Pool throws an exception
+ // which can be ignored and we will try to load it for first time.
+ }
+ if(!image.HasTexture())
+ {
+ image = mImpl->createNonPoolImageFromSkinLogicalID( imageVisual->Env(), data->string().getUtf8(), aContainer);
+ }
+ imageVisual->SetImage(image);
+ }
+
+ }
+ else if (!strcmp(attrName,KAnimatedSkinImage))
+ {
+
+ // Retrieve animation skin id
+
+ auto_ptr< HBufC> skinAnimId;
+ if (data->type() == IAlfVariantType::EString)
+ {
+ TPtrC8 src( (TUint8*) data->string().getUtf8() );
+ TRAPD(err,skinAnimId.reset(CnvUtfConverter::ConvertToUnicodeFromUtf8L(src)));
+
+ if(err != KErrNone)
+ {
+ ALF_THROW ( AlfDataException, err, "AlfImageVisualAttributeSetter")
+ }
+
+ // loading the texture from animation id.
+ TAlfImage skinAnimImage(imageVisual->Env().TextureManager().
+ LoadAnimatedTextureL(*(skinAnimId.get()),
+ imageVisual->Env().PrimaryDisplay().VisibleArea().Size(),
+ EAlfTextureFlagDefault,
+ KAlfAutoGeneratedTextureId));
+
+ // setting the texture to imagevisual only if it exists.
+ if(skinAnimImage.HasTexture())
+ {
+ imageVisual->SetImage(skinAnimImage);
+ }
+ }
+
+ }
+ else if (!strcmp(attrName,KSecondarySkinImagePath))
+ {
+ if (data->type() == IAlfVariantType::EString)
+ {
+ TAlfImage image;
+ try
+ {
+ image = AlfWidgetEnvExtension::resourcePool(aVisual.Env()).getImageResource(data->string().getUtf8());
+ }
+ catch(invalid_argument &)
+ {
+ // This image is not present in currently active Theme,
+ // hence Resource Pool throws an exception
+ // which can be ignored and we will try to load it for first time.
+ }
+ if(!image.HasTexture())
+ {
+ image = mImpl->createNonPoolImageFromSkinLogicalID( imageVisual->Env(), data->string().getUtf8(), aContainer);
+ }
+ imageVisual->SetSecondaryImage(image);
+ }
+ }
+ else if(!strcmp(attrName,KSkinFrameImage))
+ {
+
+ if (data->type() == IAlfVariantType::EString)
+ {
+
+ setFrameImage(aVisual,data->string().getUtf8(), aContainer,aData);
+ }
+ }
+ else if (!strcmp(attrName,KStretchMode))
+ {
+ if (data->type() == IAlfVariantType::EInt)
+ {
+ int val = data->integer();
+ imageVisual->SetStretchMode(CAlfGc::TStretchMode(val));
+ }
+ }
+ else if (!strcmp(attrName,KColor))
+ {
+ if (data->type() == IAlfVariantType::EContainer )
+ {
+ IAlfContainer* dataContainer = data->container();
+
+ if ( 4 != dataContainer -> count() ) ALF_THROW ( AlfDataException, EIncompleteAttributeValues, "AlfImageVisualAttributeSetter")
+
+ IAlfVariantType* red = dataContainer->item ( 0 ); //red
+
+ IAlfVariantType* green = dataContainer->item ( 1 ); //green
+
+ IAlfVariantType* blue = dataContainer->item ( 2 ); //blue
+
+ IAlfVariantType* alpha = dataContainer->item ( 3 ); //alpha
+
+ if ( red && IAlfVariantType::EInt == red->type() && green && IAlfVariantType::EInt == green->type() && blue && IAlfVariantType::EInt == blue->type() && alpha && IAlfVariantType::EInt == alpha->type() )
+ {
+ TRgb color ( red->integer(), green->integer(), blue->integer(), alpha->integer() );
+ imageVisual->SetColor ( color );
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter" )
+ }
+ }
+
+ }
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleStaticDataAttribute(aVisual, aAttr, aContainer, aData);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfImageVisualAttributeSetter::handleDynamicAttribute(CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer)
+ {
+ CAlfImageVisual* imageVisual = dynamic_cast<CAlfImageVisual*>(&aVisual);
+ if(!imageVisual)
+ {
+ return;
+ }
+
+ const char* attrName = aAttr.name();
+
+ //KScale
+ if (!strcmp(attrName,KScale))
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(), (TInt)aAttr.getTime());
+ tVal.SetStyle( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId());
+ imageVisual->SetScale( tVal );
+ }
+ // KSecondaryAlpha
+ else if (!strcmp(attrName, KSecondaryAlpha))
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(), (TInt)aAttr.getTime());
+ tVal.SetStyle( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
+ imageVisual->SetSecondaryAlpha( tVal );
+ }
+ //KTurnAngle
+ else if (!strcmp(attrName, KTurnAngle))
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(), (TInt)aAttr.getTime());
+ tVal.SetStyle( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
+ imageVisual->SetTurnAngle( tVal );
+ }
+ else if (!strcmp(attrName,KOffsetX)||!strcmp(attrName,KOffsetY))
+ {
+ AlfAttribute& attrX = aContainer.getAttributeByName( KOffsetX );
+ AlfAttribute& attrY = aContainer.getAttributeByName( KOffsetY );
+
+ TAlfTimedPoint timedpoint((TReal32)attrX.getSourceValue()->realValue(),
+ (TReal32)attrY.getSourceValue()->realValue());
+
+ timedpoint.iX.SetTarget((TReal32)attrX.getTargetValue()->realValue(), (TInt)attrX.getTime());
+ timedpoint.iY.SetTarget((TReal32)attrY.getTargetValue()->realValue(), (TInt)attrY.getTime());
+
+ timedpoint.iX.SetStyle(attrX.getInterpolationStyle());
+ timedpoint.iY.SetStyle(attrY.getInterpolationStyle() );
+
+ timedpoint.iX.SetMappingFunctionIdentifier(attrX.getMappingFunctionId());
+ timedpoint.iY.SetMappingFunctionIdentifier(attrY.getMappingFunctionId());
+
+ imageVisual->SetOffset(timedpoint);
+ attrX.setDirty(false);
+ attrY.setDirty(false);
+
+ }
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleDynamicAttribute(
+ aVisual, aAttr, aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfImageVisualAttributeSetter::handleStaticAttribute(CAlfVisual& aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer)
+ {
+ CAlfImageVisual* imageVisual = dynamic_cast<CAlfImageVisual*>(&aVisual);
+ if(!imageVisual)
+ {
+ return;
+ }
+
+ const char* attrName = aAttr.name();
+
+ // imagevisual attributes
+ if (!strcmp(attrName,KImageScaleMode))
+ {
+ int val = aAttr.intValue();
+ imageVisual->SetScaleMode(CAlfImageVisual::TScaleMode(val));
+ }
+ else if (!strcmp(attrName,KImageColorMode))
+ {
+ int val = aAttr.intValue();
+ imageVisual->SetColorMode( CAlfImageVisual::TColorMode(val));
+ }
+ else if (!strcmp(attrName,KDropShadow))
+ {
+ int count = aAttr.getTargetValueCount();
+
+ //user has added one value to the attribute,so this value will be used for both x and y directions.
+ if (1==count)
+ {
+ AlfAttributeValueType* attrType = aAttr.getTargetValue(0);
+ imageVisual->SetDropShadow( TAlfMetric(attrType->unit(),attrType->realValue()) );
+ }
+ //user has not added two values to the attribute,so the first and second values
+ // will be used for x and y directions respectively.
+ else if (2==count)
+ {
+ const AlfAttributeValueType* attrType1 = aAttr.getTargetValue(0);
+ const AlfAttributeValueType* attrType2 = aAttr.getTargetValue(1);
+ imageVisual->SetDropShadow(TAlfXYMetric(TAlfMetric(attrType1->unit(),attrType1->realValue()),TAlfMetric(attrType2->unit(),attrType2->realValue())));
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter")
+ }
+
+ }
+ else if (!strcmp(attrName,KImagePath))
+ {
+ TPtrC8 src((TUint8*)aAttr.stringValue().getUtf8());
+ HandleImagePathAttribute( src, imageVisual, true );
+ }
+ else if (!strcmp(attrName,KImageResourceRef))
+ {
+
+ TAlfImage image;
+ try
+ {
+ image = AlfWidgetEnvExtension::resourcePool(aVisual.Env()).getImageResource(aAttr.stringValue().getUtf8());
+ }
+ catch(invalid_argument &)
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter:: Image does not exist");
+ }
+ if(image.HasTexture())
+ imageVisual->SetImage(image);
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter:: Image does not exist");
+ }
+
+ }
+ else if (!strcmp(attrName,KSecondaryImagePath))
+ {
+ TPtrC8 src((TUint8*)aAttr.stringValue().getUtf8());
+ HandleImagePathAttribute( src, imageVisual, false );
+ }
+ else if (!strcmp(attrName,KSecondaryImageResourceRef))
+ {
+
+ TAlfImage image;
+ try
+ {
+ image = AlfWidgetEnvExtension::resourcePool(aVisual.Env()).getImageResource(aAttr.stringValue().getUtf8());
+ }
+ catch(invalid_argument &)
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter:: Image does not exist");
+ }
+ if(image.HasTexture())
+ imageVisual->SetSecondaryImage(image);
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter:: Image does not exist");
+ }
+
+ }
+ else if (!strcmp(attrName,KSkinImagePath))
+ {
+ TAlfImage image;
+ try
+ {
+ image = AlfWidgetEnvExtension::resourcePool(aVisual.Env()).getImageResource(aAttr.stringValue().getUtf8());
+ }
+ catch(invalid_argument &)
+ {
+ // This image is not present in currently active Theme,
+ // hence Resource Pool throws an exception
+ // which can be ignored and we will try to load it for first time.
+ }
+ if(!image.HasTexture())
+ {
+ image = mImpl->createNonPoolImageFromSkinLogicalID(
+ imageVisual->Env() ,aAttr.stringValue().getUtf8(), aContainer);
+ }
+ imageVisual->SetImage(image);
+ }
+ else if (!strcmp(attrName,KAnimatedSkinImage))
+ {
+
+ // Retrieve animation skin id
+ auto_ptr< HBufC> skinAnimId;
+ TPtrC8 src( (TUint8*) aAttr.stringValue().getUtf8() );
+ TRAPD(err,skinAnimId.reset(CnvUtfConverter::ConvertToUnicodeFromUtf8L(src)));
+
+ if(err != KErrNone)
+ {
+ ALF_THROW ( AlfDataException, err, "AlfImageVisualAttributeSetter")
+ }
+
+ // loading the texture from animation id.
+ TAlfImage skinAnimImage(imageVisual->Env().TextureManager().
+ LoadAnimatedTextureL(*(skinAnimId.get()),
+ imageVisual->Env().PrimaryDisplay().VisibleArea().Size(),
+ EAlfTextureFlagDefault,
+ KAlfAutoGeneratedTextureId));
+
+ // setting the texture to imagevisual only if it exists.
+ if(skinAnimImage.HasTexture())
+ {
+ imageVisual->SetImage(skinAnimImage);
+ }
+
+ }
+ else if (!strcmp(attrName,KSecondarySkinImagePath))
+ {
+ TAlfImage image;
+ try
+ {
+ image = AlfWidgetEnvExtension::resourcePool(aVisual.Env()).getImageResource(aAttr.stringValue().getUtf8());
+ }
+ catch(invalid_argument &)
+ {
+ // This image is not present in currently active Theme,
+ // hence Resource Pool throws an exception
+ // which can be ignored and we will try to load it for first time.
+ }
+ if(!image.HasTexture())
+ {
+ image = mImpl->createNonPoolImageFromSkinLogicalID( imageVisual->Env(), aAttr.stringValue().getUtf8(), aContainer);
+ }
+ imageVisual->SetSecondaryImage(image);
+ }
+ else if(!strcmp(attrName,KSkinFrameImage))
+ {
+ setFrameImage(aVisual, aAttr.stringValue().getUtf8(), aContainer);
+ }
+ else if (!strcmp(attrName,KStretchMode))
+ {
+ int val = aAttr.intValue();
+ imageVisual->SetStretchMode(CAlfGc::TStretchMode(val));
+ }
+ else if (!strcmp(attrName, KSecondaryAlpha))
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(), (TInt)aAttr.getTime());
+ tVal.SetStyle( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId());
+ imageVisual->SetSecondaryAlpha( tVal );
+ }
+ else if (!strcmp(attrName, KTurnAngle))
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(), (TInt)aAttr.getTime());
+ tVal.SetStyle( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
+ imageVisual->SetTurnAngle( tVal );
+ }
+ else if (!strcmp(attrName, KColor))
+ {
+ if ( 4 == aAttr.getTargetValueCount() && AlfAttributeValueType::EInt == aAttr.type(0) && AlfAttributeValueType::EInt == aAttr.type(1) && AlfAttributeValueType::EInt == aAttr.type(2) && AlfAttributeValueType::EInt == aAttr.type(3))
+ {
+ TRgb color ( aAttr.intValue(0), aAttr.intValue(1), aAttr.intValue(2), aAttr.intValue(3) );
+ imageVisual->SetColor ( color );
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter")
+ }
+ }
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleStaticAttribute(aVisual, aAttr, aContainer);
+ }
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// Helper method to set the frame image to the image visual.
+// ---------------------------------------------------------------------------
+//
+void AlfImageVisualAttributeSetter::setFrameImage(CAlfVisual& /*aVisual*/, const Utf8* /*aSkinFrameID*/,
+ const AlfAttributeContainer& /*aContainer*/,IAlfMap* /*aData*/)
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// This method gets the value of the attribute based on whether the attribute is static
+// or staticData.
+// Currently handled only for static or staticdata.
+// ---------------------------------------------------------------------------
+
+int AlfImageVisualAttributeSetter::getValueFromAttribute(const AlfAttribute& aAttr,IAlfMap* aData) const
+ {
+ int attrValue=0;
+
+ // Check whether attribute is from Static type.
+
+ if(AlfAttribute::EStatic==aAttr.category())
+ {
+ attrValue=aAttr.intValue();
+ }
+ else
+ {
+
+ // static data case.
+ try
+ {
+ if(aData)
+ {
+
+ const char* dataValue = aAttr.getDataField();
+ IAlfVariantType* dataVariant = aData->item ( UString(dataValue) );
+
+ if (dataVariant && dataVariant->type() == IAlfVariantType::EInt )
+ {
+
+ attrValue=dataVariant->integer();
+
+ }
+ }
+ }
+ catch(AlfDataException& e)
+ {
+ // Error in getting the value.
+ // default is already set to 0,dont do anything here.
+ }
+ }
+
+ return attrValue;
+
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfImageVisualAttributeSetter::createCommand(
+ CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/, int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/)
+ {
+ TAlfCommand* cmd = 0;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfImageVisualAttributeSetter::createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+
+ // Call the base class implementation.It goes through its loop and checks if there are attributes
+ // that it handles.
+ AlfCommonVisualAttributeSetter::createAndSendCommands(
+ aVisual,
+ aContainer,
+ aRefVisual );
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfImageVisualAttributeSetter::HandleImagePathAttribute(
+ const TPtrC8& aStringValue,
+ CAlfImageVisual* aImageVisual,
+ bool aPrimary )
+ {
+ TAlfImage image = mImpl->createImageFromImagePath( *aImageVisual, aStringValue);
+ if ( aPrimary )
+ {
+ aImageVisual->SetImage(image);
+ }
+ else
+ {
+ aImageVisual->SetSecondaryImage(image);
+ }
+ }
+
+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+TAlfImage AlfImageVisualAttributeSetterImpl::createNonPoolImageFromSkinLogicalID(CAlfEnv& /*aEnv*/, const Utf8* /*aLogicalId*/, AlfAttributeContainer& /*aContainer*/)
+ {
+
+ // Depricated
+ return TAlfImage();
+
+ }
+
+TAlfImage AlfImageVisualAttributeSetterImpl::createImageFromImagePath( const CAlfImageVisual& aImageVisual, const TPtrC8& aPath )
+ {
+ TAlfImage image; // return value
+
+ auto_ptr<HBufC> textureId;
+ TRAPD(err,textureId.reset(CnvUtfConverter::ConvertToUnicodeFromUtf8L(aPath)));
+ if ( err != KErrNone )
+ {
+ ALF_THROW ( AlfDataException, err, "AlfImageVisualAttributeSetter")
+ }
+
+ // check if the texture is already loaded
+ CAlfTextureManager& textureMgr = aImageVisual.Env().TextureManager();
+ const TInt existingTextureId = textureMgr.TextureId(*(textureId.get()));
+ if (existingTextureId != KErrNotFound)
+ {
+ const CAlfTexture* texture = textureMgr.Texture( existingTextureId );
+ image = TAlfImage(*texture);
+ }
+ else
+ {
+ CAlfTexture* mutableTexture = 0;
+ TRAP(err, mutableTexture = &(textureMgr.LoadTextureL(*(textureId.get()), EAlfTextureFlagDefault, KAlfAutoGeneratedTextureId)));
+ if ( err != KErrNone )
+ {
+ ALF_THROW ( AlfDataException, err, "AlfImageVisualAttributeSetter")
+ }
+ mutableTexture->EnableRefCounting(ETrue);
+ image = TAlfImage(*mutableTexture);
+ mLoadedTextures.resize(mLoadedTextures.count()+1);
+ mLoadedTextures.insert(mLoadedTextures.count(),mutableTexture);
+ }
+
+ return image;
+ }
+
+}// Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alflayoutmanager.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,266 @@
+/*
+* Copyright (c) 2007 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: layoutmanager with focus handling in 1D (next/previous)
+*
+*/
+
+
+#include <alf/alfenv.h>
+#include <alf/alflayout.h>
+#include <alf/alflayoutmanager.h>
+#include <alf/alfexceptions.h>
+#include <alf/alfwidgetcontrol.h>
+#include <alf/ialfwidgetfactory.h>
+#include <alf/alfwidgetenvextension.h>
+#include <osn/ustring.h>
+#include <osn/osnnew.h>
+#include "alf/alfwidget.h"
+#include "alflayoutmanagerimpl.h"
+
+using osncore::UString;
+
+using namespace Alf;
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// layout manager constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfLayoutManager::AlfLayoutManager(TAlfLayoutType aLayoutType)
+ {
+ mData.reset(new (EMM) AlfLayoutManagerImpl(aLayoutType));
+ }
+
+// ---------------------------------------------------------------------------
+// virtual destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfLayoutManager::~AlfLayoutManager()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// returns the owner of the layoutmanager
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT CAlfWidgetControl& AlfLayoutManager::owner() const
+ {
+ return mData->owner();
+ }
+
+// ---------------------------------------------------------------------------
+// returns the widget at index aIndex.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT CAlfWidgetControl* AlfLayoutManager::getControl(int aIndex) const
+ {
+ return mData->getControl(aIndex);
+ }
+
+// ---------------------------------------------------------------------------
+// returns the count of controls in the layoutmanager.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfLayoutManager::count() const
+ {
+ return mData->count();
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutManager
+// creates the layout used by this layoutmanager.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLayoutManager::createLayout(CAlfWidgetControl& aOwner,
+ CAlfLayout* aParentLayout, int aLayoutIndex)
+ {
+ mData->createLayout(aOwner, aParentLayout, aLayoutIndex);
+ updateChildrenLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutManager
+// returns the layout used by this layoutmanager.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT CAlfLayout& AlfLayoutManager::getLayout() const
+ {
+ return mData->getLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutManager
+// notifies the layout manager, that the child control's layout
+// must be updated.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLayoutManager::updateChildLayout(
+ CAlfWidgetControl* aControl)
+ {
+ mData->getLayout(); //checks, that the layout exists, throws exception if not.
+ doUpdateChildLayout( aControl );
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutManager
+// notifies the layout manager, that all the child controls' layouts
+// must be updated.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLayoutManager::updateChildrenLayout()
+ {
+ CAlfLayout& layout = mData->getLayout();
+ mData->updateMainLayout();
+
+ // CAlfWidgetControl& container = mData->owner();
+ const int childrenCount = count();
+
+ // go through all the child controls, and update the layout
+ for (int i = 0; i < childrenCount; i++)
+ {
+ doUpdateChildLayout(getControl(i));
+ }
+
+ layout.UpdateChildrenLayout();
+
+ //doUpdateChildLayout changes the visual size and position.
+ //need to notify all the widgets that size and position might have changed.
+ mData->updateAllWidgetRects();
+
+ // Inform parent layout manager about the changed presentation size
+ owner().updateParentLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutManager
+// notifies the layout manager, that the control's has been
+// removed from the layout.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLayoutManager::childRemoved(CAlfWidgetControl* aControl)
+ {
+ mData->childRemoved(aControl);
+ }
+
+// ---------------------------------------------------------------------------
+// notifies the layout manager, that the child control's layout
+// must be updated.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLayoutManager::doUpdateChildLayout(
+ CAlfWidgetControl* aControl)
+ {
+ mData->doUpdateChildLayout(aControl);
+ }
+
+// ---------------------------------------------------------------------------
+// returns the size of the widget.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfLayoutManager::controlRect(
+ CAlfWidgetControl& aControl, TAlfRealRect& aRect)
+ {
+ return mData->controlRect(aControl, aRect);
+ }
+
+// ---------------------------------------------------------------------------
+// sets the size and position of the widget.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLayoutManager::setControlRect(
+ CAlfWidgetControl& aControl, const TAlfRealRect &aRect)
+ {
+ AlfWidget* widget = aControl.widget();
+ if (widget)
+ {
+ const char* name = widget->widgetName();
+ IAlfWidget* ownerwidget = AlfWidgetEnvExtension::widgetFactory(aControl.Env()).findWidget(name);
+ if (ownerwidget)
+ {
+ mData->setWidgetRect(*ownerwidget, aRect);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// sets the position of the widget.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLayoutManager::setControlPosition(
+ CAlfWidgetControl& aControl, const TAlfRealPoint& aPos)
+ {
+ AlfWidget* widget = aControl.widget();
+ if (widget)
+ {
+ const char* name = widget->widgetName();
+ IAlfWidget* ownerwidget = AlfWidgetEnvExtension::widgetFactory(aControl.Env()).findWidget(name);
+ if (ownerwidget)
+ {
+ mData->setWidgetPosition(*ownerwidget, aPos);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// sets the size of the widget.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLayoutManager::setControlSize(
+ CAlfWidgetControl& aControl, const TAlfRealPoint &aSize)
+ {
+ AlfWidget* widget = aControl.widget();
+ if (widget)
+ {
+ const char* name = widget->widgetName();
+ IAlfWidget* ownerwidget = AlfWidgetEnvExtension::widgetFactory(aControl.Env()).findWidget(name);
+ if (ownerwidget)
+ {
+ mData->setWidgetSize(*ownerwidget, aSize);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// returns layout preferences for aControl
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const IAlfLayoutPreferences* AlfLayoutManager::getLayoutPreferences(
+ CAlfWidgetControl* aControl) const
+ {
+ return mData->getLayoutPreferences(aControl);
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfLayoutManager::makeInterface(
+ const IfId& aType )
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfLayoutManager::type().mImplementationId)
+ {
+ return static_cast<IAlfLayoutManager*>(this);
+ }
+
+
+ // Let the implementation class try the interface creation
+ return mData->makeInterface(aType);
+ }
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alflayoutmanagerimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,460 @@
+/*
+* Copyright (c) 2007 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: layoutmanager implementation class with focus handling in 1D (next/previous)
+*
+*/
+
+
+#include <alf/ialfwidgetcontrol.h>
+#include "alf/ialfattributeowner.h"
+#include "alf/alfattribute.h"
+#include <alf/alfvisual.h>
+#include <alf/alfenv.h>
+#include "alf/alfwidget.h"
+#include <alf/alfvisualfactory.h>
+#include <alf/alfexceptions.h>
+#include <alf/ialflayoutpreferences.h>
+#include <alf/alfwidgetenvextension.h>
+#include <alf/ialfwidgetfactory.h>
+#include <osn/osnnew.h>
+#include <libc/assert.h>
+#include <alf/attrproperty.h>
+#include "alflayoutmanagerimpl.h"
+
+
+
+namespace Alf
+ {
+
+//ifdef to prevent compiler warning: className not used.
+#ifdef ALF_DEBUG_EXCEPTIONS
+static const char* const className = "AlfLayoutManagerImpl";
+#endif
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// layoutmanagerimpl constructor
+// ---------------------------------------------------------------------------
+//
+AlfLayoutManagerImpl::AlfLayoutManagerImpl(
+ TAlfLayoutType aLayoutType)
+ {
+ mLayoutType = aLayoutType;
+ }
+
+// ---------------------------------------------------------------------------
+// creates the layout used by the layoutmanager.
+// ---------------------------------------------------------------------------
+//
+AlfLayoutManagerImpl::~AlfLayoutManagerImpl()
+ {
+ if (mLayout.get())
+ {
+ CAlfLayout* layout = mLayout.release();
+ layout->RemoveAndDestroyAllD();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// creates the layout used by the layoutmanager.
+// ---------------------------------------------------------------------------
+//
+void AlfLayoutManagerImpl::createLayout(CAlfWidgetControl& aOwner,
+ CAlfLayout* aParentLayout, int aLayoutIndex)
+ {
+
+ //check parameter validity.
+ if (aParentLayout &&
+ (aLayoutIndex < 0 ||aLayoutIndex > aParentLayout->Count()))
+ {
+ ALF_THROW(AlfException, EInvalidArrayIndex, className);
+ }
+
+ //create layout
+ CAlfLayout* layout = 0;
+ TRAPD(err, layout = aOwner.AppendLayoutL(mLayoutType, aParentLayout));
+
+ if(!layout || err != KErrNone)
+ {
+ ALF_THROW(AlfVisualException, ECanNotCreateVisual, className);
+ }
+
+ //reorder, if needed.
+ if (aParentLayout && aLayoutIndex != aParentLayout->Count() - 1)
+ {
+ aParentLayout->Reorder(*layout, aLayoutIndex);
+ }
+
+ mLayout.reset(layout);
+ }
+
+// ---------------------------------------------------------------------------
+// returns the layout used by the layoutmanager.
+// ---------------------------------------------------------------------------
+//
+CAlfLayout& AlfLayoutManagerImpl::getLayout() const
+ {
+ checkLayout();
+ return *mLayout.get();
+ }
+
+// ---------------------------------------------------------------------------
+// updates the main layout
+// ---------------------------------------------------------------------------
+//
+void AlfLayoutManagerImpl::updateMainLayout()
+ {
+ checkLayout();
+
+ const IAlfLayoutPreferences* layoutPrefs =
+ getLayoutPreferences(getControl(*mLayout.get()));
+ if (layoutPrefs)
+ {
+ TAlfXYMetric prefSize;
+ if (layoutPrefs->getPreferredSize(prefSize))
+ {
+ TAlfRealPoint p(prefSize.iX.iMagnitude,
+ prefSize.iY.iMagnitude);
+ mLayout->SetSize(p);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// notifies the layout manager, that the control's has been
+// removed from the layout.
+// ---------------------------------------------------------------------------
+//
+void AlfLayoutManagerImpl::childRemoved(CAlfWidgetControl* /*aControl*/)
+ {
+ checkLayout();
+ mLayout->UpdateChildrenLayout();
+ }
+
+// ---------------------------------------------------------------------------
+// returns the owner control of the layoutmanager.
+// ---------------------------------------------------------------------------
+//
+CAlfWidgetControl& AlfLayoutManagerImpl::owner() const
+ {
+ checkLayout();
+ CAlfWidgetControl* widgetControl = 0;
+
+ /* The owner is always a AlfWidgetControl.
+ So a static_cast is safe. see AlfLayoutManagerImpl::createLayout() */
+ widgetControl = static_cast<CAlfWidgetControl*>(
+ &mLayout->Owner());
+
+ return *widgetControl;
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// Returns the minimum area that this layout manager can occupy by observing
+// the minimum sizes of the child UI elements in the layout
+// ---------------------------------------------------------------------------
+//
+bool AlfLayoutManagerImpl::getMinimumSize( TAlfXYMetric& /*aMinSize*/ ) const
+ {
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// Returns the maximum area that this layout manager can occupy by observing
+// the maximum sizes of the child UI elements in the layout
+// ---------------------------------------------------------------------------
+//
+bool AlfLayoutManagerImpl::getMaximumSize( TAlfXYMetric& /*aMaxSize*/ ) const
+ {
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// Combines and returns the preferred sizes of all child UI elements according
+// to the layouting rules.
+// ---------------------------------------------------------------------------
+//
+bool AlfLayoutManagerImpl::getPreferredSize(TAlfXYMetric& /*aPreferredSize*/) const
+ {
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// from IAlfLayoutPreferences
+// At the moment doesn't do anything since preferred size is being queried
+// from the child UI elements added to this layout manager.
+// ---------------------------------------------------------------------------
+//
+void AlfLayoutManagerImpl::setPreferredSize( const TAlfXYMetric& /*aPreferredSize*/ )
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the element.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfLayoutManagerImpl::makeInterface(const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfLayoutPreferences::type().mImplementationId)
+ {
+ return static_cast<IAlfLayoutPreferences*>(this);
+ }
+
+ return 0;
+ }
+
+// ---------------------------------------------------------------------------
+// gets control at aIndex position in the layout.
+// ---------------------------------------------------------------------------
+//
+CAlfWidgetControl* AlfLayoutManagerImpl::getControl(int aIndex) const
+ {
+ CAlfWidgetControl* control = 0;
+ CAlfLayout* layout = mLayout.get();
+ if (layout)
+ {
+ CAlfVisual& visual = layout->Visual(aIndex);
+ control = getControl(visual);
+ }
+ return control;
+ }
+
+// ---------------------------------------------------------------------------
+// returns the control, which owns the visual
+// ---------------------------------------------------------------------------
+//
+void AlfLayoutManagerImpl::doUpdateChildLayout(CAlfWidgetControl* aControl)
+ {
+ const IAlfLayoutPreferences* layoutPrefs =
+ getLayoutPreferences(aControl);
+
+ if (layoutPrefs)
+ {
+ TAlfXYMetric prefSize;
+ if (layoutPrefs->getPreferredSize(prefSize))
+ {
+ CAlfVisual* v = findRootVisual(aControl);
+ if (v)
+ {
+ v->SetSize(TAlfRealPoint(prefSize.iX.iMagnitude,
+ prefSize.iY.iMagnitude));
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// returns the size of the widget.
+// ---------------------------------------------------------------------------
+//
+bool AlfLayoutManagerImpl::controlRect(CAlfWidgetControl& aControl,
+ TAlfRealRect& aRect)
+ {
+ CAlfVisual* v = findRootVisual(&aControl);
+ if (v != 0)
+ {
+ TAlfRealPoint size(v->Size().Target());
+ TAlfRealPoint pos(v->Pos().Target());
+ aRect.iTl = pos;
+ aRect.iBr.iX = pos.iX + size.iX;
+ aRect.iBr.iY = pos.iY + size.iY;
+ return true;
+ }
+
+ return false;
+ }
+
+// ---------------------------------------------------------------------------
+// set the size and position to the widget.
+// ---------------------------------------------------------------------------
+//
+void AlfLayoutManagerImpl::setWidgetRect(IAlfWidget& aWidget, const TAlfRealRect &aRect)
+ {
+ const UString widthName(layoutattributes::KWidth);
+ const UString heightName(layoutattributes::KHeight);
+ const UString posX(layoutattributes::KPositionX);
+ const UString posY(layoutattributes::KPositionY);
+
+ IAlfAttributeOwner* attrOwner =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(&aWidget);
+ if (attrOwner)
+ {
+ auto_ptr<AlfAttributeValueType> w(
+ new (EMM) AlfAttributeValueType(aRect.Width()));
+ auto_ptr<AlfAttributeValueType> h(
+ new (EMM) AlfAttributeValueType(aRect.Height()));
+ auto_ptr<AlfAttributeValueType> x(
+ new (EMM) AlfAttributeValueType(aRect.iTl.iX));
+ auto_ptr<AlfAttributeValueType> y(
+ new (EMM) AlfAttributeValueType(aRect.iTl.iY));
+ attrOwner->setAttribute(heightName, h.get());
+ attrOwner->setAttribute(widthName, w.get());
+ attrOwner->setAttribute(posX, x.get());
+ attrOwner->setAttribute(posY, y.get());
+
+ h.release();
+ w.release();
+ x.release();
+ y.release();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// set the position for the widget.
+// ---------------------------------------------------------------------------
+//
+void AlfLayoutManagerImpl::setWidgetPosition(IAlfWidget& aWidget,
+ const TAlfRealPoint &aPos)
+ {
+ const UString posX(layoutattributes::KPositionX);
+ const UString posY(layoutattributes::KPositionY);
+
+ IAlfAttributeOwner* attrOwner =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(&aWidget);
+ if (attrOwner)
+ {
+ auto_ptr<AlfAttributeValueType> x(
+ new (EMM) AlfAttributeValueType(aPos.iX));
+ auto_ptr<AlfAttributeValueType> y(
+ new (EMM) AlfAttributeValueType(aPos.iY));
+ attrOwner->setAttribute(posX, x.get());
+ attrOwner->setAttribute(posY, y.get());
+ x.release();
+ y.release();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// set the size for the widget.
+// ---------------------------------------------------------------------------
+//
+void AlfLayoutManagerImpl::setWidgetSize(IAlfWidget& aWidget, const TAlfRealPoint &aSize)
+ {
+ const UString widthName(layoutattributes::KWidth);
+ const UString heightName(layoutattributes::KHeight);
+ IAlfAttributeOwner* attrOwner =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(&aWidget);
+ if (attrOwner)
+ {
+ auto_ptr<AlfAttributeValueType> w(
+ new (EMM) AlfAttributeValueType(aSize.iX));
+ auto_ptr<AlfAttributeValueType> h(
+ new (EMM) AlfAttributeValueType(aSize.iY));
+ attrOwner->setAttribute(heightName, h.get());
+ attrOwner->setAttribute(widthName, w.get());
+ h.release();
+ w.release();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// updates widget size and position properties for all the children
+// to correct sizes and positions of the root visuals.
+// ---------------------------------------------------------------------------
+//
+void AlfLayoutManagerImpl::updateAllWidgetRects()
+ {
+ const int childCount = mLayout->Count();
+ TAlfRealRect rect;
+ for (int i = 0; i < childCount; i++)
+ {
+ CAlfWidgetControl* control = getControl(i);
+ controlRect(*control, rect); //returns the real rect(of the root visual)
+ AlfWidget* widget = control->widget();
+ if(widget)
+ {
+ const char* name = widget->widgetName();
+ IAlfWidget* ownerwidget = AlfWidgetEnvExtension::widgetFactory(control->Env()).findWidget(name);
+ if (ownerwidget)
+ {
+ setWidgetRect(*ownerwidget, rect); //sets the rect using widget properties.
+ }
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// returns the child visual count
+// ---------------------------------------------------------------------------
+//
+int AlfLayoutManagerImpl::count() const
+ {
+ return getLayout().Count();
+ }
+
+// ---------------------------------------------------------------------------
+// returns the control, which owns the visual
+// ---------------------------------------------------------------------------
+//
+CAlfWidgetControl* AlfLayoutManagerImpl::getControl(CAlfVisual& aVisual) const
+ {
+ CAlfWidgetControl* temp = 0;
+ temp = dynamic_cast<CAlfWidgetControl*>(&aVisual.Owner());
+ return temp;
+ }
+
+// ---------------------------------------------------------------------------
+// returns the control, which owns the visual
+// ---------------------------------------------------------------------------
+//
+const IAlfLayoutPreferences* AlfLayoutManagerImpl::getLayoutPreferences(
+ CAlfWidgetControl* aControl) const
+ {
+ IAlfLayoutPreferences* layoutPrefs = 0;
+ if (aControl)
+ {
+ layoutPrefs =
+ CAlfWidgetControl::makeInterface<IAlfLayoutPreferences>(aControl);
+ }
+
+ return layoutPrefs;
+ }
+
+// ---------------------------------------------------------------------------
+// finds the root visual for a control.
+// ---------------------------------------------------------------------------
+//
+CAlfVisual* AlfLayoutManagerImpl::findRootVisual(CAlfWidgetControl* aControl) const
+ {
+ CAlfVisual* root = 0;
+ if (aControl->VisualCount() > 0)
+ {
+ //take first visual,
+ //go up in layout hierarchy until the control is not owner anymore.
+ for (root = &aControl->Visual(0);
+ root && root->Layout() && &root->Layout()->Owner() == aControl;
+ root = root->Layout()){}
+ }
+ return root;
+ }
+
+// ---------------------------------------------------------------------------
+// throws an exception, if layout is not created.
+// ---------------------------------------------------------------------------
+//
+void AlfLayoutManagerImpl::checkLayout() const
+ {
+ if (!mLayout.get())
+ {
+ ALF_THROW(AlfVisualException, EInvalidVisual, className);
+ }
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alflctanchorlayoutattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,281 @@
+/*
+* Copyright (c) 2007 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: attributesetter for lct anchor layout.
+*
+*/
+
+
+//includes
+
+//widget model includes
+#include "alf/alfattributecontainer.h"
+#include "alf/alfattributevaluetype.h"
+#include "alf/alfattribute.h"
+#include "alf/alflctanchorlayoutattributesetter.h"
+#include <alf/alfvisualexception.h>
+#include <alf/alfdataexception.h>
+
+//osn includes
+#include <osn/ustring.h>
+
+//alf includes
+#include <alf/alfenv.h>
+#include <alf/alfdisplay.h>
+#include <alf/alflctanchorlayout.h>
+
+//dui includes
+#include "alf/attrproperty.h"
+#include <alf/alftimedvalue.h>
+//other includes
+#include <libc/string.h>
+#ifdef RD_ALF_IN_PLATFORM
+#include <aknlayout2hierarchy.h>
+#endif
+
+#include "AlfLctAttributeSetterUtils.h"
+
+using osncore::UString;
+
+using namespace duiuimodel::layoutattributes::grid;
+
+using namespace duiuimodel::lctvisualattributes;
+
+using namespace duiuimodel::anchorlayoutinput;
+
+namespace Alf
+ {
+
+//variable inside ifdef to prevent compiler warning.
+#ifdef ALF_DEBUG_EXCEPTIONS
+static const char* const ClassName = "AlfLCTAnchorLayoutAttributeSetter";
+#endif
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfLCTAnchorLayoutAttributeSetter::AlfLCTAnchorLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfLCTAnchorLayoutAttributeSetter::~AlfLCTAnchorLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Sets Attribute Value. Delegates based on attribute Category.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLCTAnchorLayoutAttributeSetter::setAttributeValue(
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData )
+ {
+ CAlfLCTAnchorLayout* anchorlayout =
+ dynamic_cast<CAlfLCTAnchorLayout*>(&aVisual);
+
+ if ( !anchorlayout )
+ {
+ ALF_THROW(AlfVisualException, EInvalidVisual, ClassName)
+ }
+
+ AlfAnchorLayoutAttributeSetter::setAttributeValue(
+ aVisual, aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// Deprecated
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfLCTAnchorLayoutAttributeSetter::createCommand(
+ CAlfVisual& /*aVisual*/,
+ AlfAttributeContainer* /*aContainer*/, IAlfMap* /*aData*/,
+ int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/ )
+ {
+ //deprecated
+ TAlfCommand* cmd = 0;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// Sends a command to Env
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLCTAnchorLayoutAttributeSetter::createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ AlfAnchorLayoutAttributeSetter::createAndSendCommands(
+ aVisual, aContainer, aRefVisual);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfLCTAnchorLayoutAttributeSetter::handleDynamicAttribute(
+ CAlfVisual& aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ const char* attrName = aAttr.name();
+
+#ifdef RD_ALF_IN_PLATFORM
+ if ( !strcmp ( attrName, KLCT ) )
+ {
+ TAknLayoutHierarchyComponentHandle componentHandle =
+ AlfLctAttributeSetterUtils::getCommonLctAttributes(&aContainer);
+
+ int width(0);
+ int height(0);
+ if (AlfLctAttributeSetterUtils::itemSize(componentHandle,
+ width, height))
+ {
+ TInt displayWidth =
+ aVisual.Env().PrimaryDisplay().VisibleArea().Width();
+ if (width > displayWidth)
+ {
+ width = displayWidth;
+ }
+
+ TAlfTimedPoint size(width, height);
+ aVisual.SetSize(size);
+ }
+ }
+ else
+#endif
+ if (strcmp(attrName,KRows) &&
+ strcmp(attrName,KColumns) &&
+ strcmp(attrName,KChildOrdinal))
+ {
+ AlfAnchorLayoutAttributeSetter::handleDynamicAttribute(
+ aVisual, aAttr, aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfLCTAnchorLayoutAttributeSetter::handleStaticAttribute(
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ CAlfLCTAnchorLayout* anchorlayout =
+ dynamic_cast<CAlfLCTAnchorLayout*>(&aVisual);
+
+ const char* attrName = aAttr.name();
+
+#ifdef RD_ALF_IN_PLATFORM
+ if ( !strcmp ( attrName, KLCT ) )
+ {
+ TAknLayoutHierarchyComponentHandle componentHandle =
+ AlfLctAttributeSetterUtils::getCommonLctAttributes(&aContainer);
+
+ int width(0);
+ int height(0);
+ if (AlfLctAttributeSetterUtils::itemSize(componentHandle,
+ width, height))
+ {
+ // Some cases returns wrong width, so check that width is reasonable
+ TInt displayWidth =
+ aVisual.Env().PrimaryDisplay().VisibleArea().Width();
+ if (width > displayWidth)
+ {
+ width = displayWidth;
+ }
+ TAlfTimedPoint size(width, height);
+ aVisual.SetSize(size);
+ }
+ }
+ else if ( !strcmp(attrName, KRows)||
+ !strcmp (attrName,KColumns) || !strcmp(attrName,KChildOrdinal) )
+ {
+ TAknLayoutHierarchyComponentHandle componentHandle =
+ AlfLctAttributeSetterUtils::getCommonLctAttributes(&aContainer);
+ AlfAttribute& attrRows = aContainer.getAttributeByName(KRows);
+ AlfAttribute& attrCols = aContainer.getAttributeByName(KColumns);
+ AlfAttribute& attrOrdinal =
+ aContainer.getAttributeByName(KChildOrdinal);
+ componentHandle.SetColumn(attrCols.realValue());
+ componentHandle.SetRow(attrRows.realValue());
+ TAlfTimedPoint timedpoint(attrCols.getSourceValue()->realValue(),
+ attrRows.getSourceValue()->realValue());
+
+ //since static, effect will be immediate
+ timedpoint.iX.SetTarget(attrCols.getTargetValue()->realValue(), 0);
+ timedpoint.iY.SetTarget(attrRows.getTargetValue()->realValue(), 0);
+
+ timedpoint.iX.SetStyle(attrCols.getInterpolationStyle());
+ timedpoint.iY.SetStyle(attrRows.getInterpolationStyle());
+
+ //TO ADD: Mapping Function Identifiers
+ anchorlayout->SetAnchors(attrOrdinal.intValue(),
+ componentHandle, timedpoint);
+ attrRows.setDirty(false);
+ attrCols.setDirty(false);
+ attrOrdinal.setDirty(false);
+ }
+ else
+#endif
+ {
+ AlfAnchorLayoutAttributeSetter::handleStaticAttribute(aVisual, aAttr,
+ aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfLCTAnchorLayoutAttributeSetter::handleDynamicDataAttribute(
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData )
+ {
+ AlfAnchorLayoutAttributeSetter::handleDynamicDataAttribute(aVisual, aAttr,
+ aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfLCTAnchorLayoutAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData )
+ {
+ AlfAnchorLayoutAttributeSetter::handleStaticDataAttribute(aVisual, aAttr,
+ aContainer, aData);
+ }
+
+ } // namespace Alf
+
+// End of file
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alflinevisualattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1409 @@
+/*
+* Copyright (c) 2007 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: Implements attributesetters for linevisual.
+*
+*/
+
+
+//includes
+
+//widget model includes
+#include "alf/alfattributecontainer.h"
+#include "alf/alfattributevaluetype.h"
+#include "alf/alfattribute.h"
+#include "alf/alflinevisualattributesetter.h"
+#include <alf/alfvisualexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfattributeexception.h>
+
+//osn includes
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+
+//alf includes
+#include <alf/alfenv.h>
+#include <alf/alflinevisual.h>
+#include <alf/alftexture.h>
+#include <alf/alfcurvepath.h>
+
+//dui includes
+#include "alf/attrproperty.h"
+
+//other includes
+#include <libc/string.h>
+#include <utf.h>
+
+
+
+//namespaces
+
+using namespace osncore;
+
+using namespace duiuimodel::commonvisualattributes;
+using namespace duiuimodel::linevisualattributes;
+using namespace duiuimodel::curvepathattributes;
+
+namespace Alf
+ {
+
+static void throwIfErr ( int aErr )
+ {
+ if (aErr!=KErrNone)
+ {
+ ALF_THROW ( AlfAttributeException, aErr,
+ "AlfLineVisualAttributeSetter")
+ }
+ }
+
+
+class AlfLineVisualAttributeSetterImpl
+ {
+public:
+ AlfLineVisualAttributeSetterImpl();
+ ~AlfLineVisualAttributeSetterImpl();
+public:
+
+ // Texture manager doesn't unload the texture from memory untill Env
+ // is deleted. Hence need to unload them once attribute setter is deleted.
+ AlfPtrVector<CAlfTexture> mLoadedTextures;
+ // Env needed to access TextureManager while unloading textures.
+ CAlfEnv* mEnv;
+ };
+
+AlfLineVisualAttributeSetterImpl::AlfLineVisualAttributeSetterImpl()
+ {
+ // Do not delete textures here as they may be in use by the visuals
+ // that have not been deleted.
+ mLoadedTextures.setAutoDelete(false);
+ }
+
+AlfLineVisualAttributeSetterImpl::~AlfLineVisualAttributeSetterImpl()
+ {
+ // Unload all loaded textures created by this attributesetter to free
+ // up the memory.
+ for (int i =0;i<mLoadedTextures.count();i++)
+ {
+ CAlfTexture* Texture = mLoadedTextures[i];
+ mEnv->TextureManager().UnloadTexture(Texture->Id());
+ }
+ mLoadedTextures.clear();
+ }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfLineVisualAttributeSetter::AlfLineVisualAttributeSetter()
+ {
+ mImpl.reset(new (EMM) AlfLineVisualAttributeSetterImpl());
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfLineVisualAttributeSetter::~AlfLineVisualAttributeSetter()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets Attribute Value. Delegates based on attribute Category.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLineVisualAttributeSetter::setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData )
+ {
+ CAlfLineVisual* lineVisual = dynamic_cast<CAlfLineVisual*>( &aVisual);
+
+ if ( !lineVisual )
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfLineVisualAttributeSetter" )
+ }
+
+ CAlfCurvePath* curve = lineVisual->Path();
+ if (curve)
+ {
+ curve->Reset();
+ }
+
+ AlfCommonVisualAttributeSetter::setAttributeValue(aVisual,
+ aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// Deprecated
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfLineVisualAttributeSetter::createCommand (
+ CAlfVisual& /*aVisual*/,
+ AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/,
+ int /*aTransitionTime*/,
+ CAlfVisual* /*aRefVisual*/ )
+ {
+ //deprecated
+ TAlfCommand* cmd = 0;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// Sends a command to Env
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfLineVisualAttributeSetter::createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ // SetOffset in CAlfCurvePath,
+ // SetThickness,SetShadowThickness SetStartPos & SetEndPos
+ // in Line Visual can be sent as a TAlfCustomEventCommand
+ AlfCommonVisualAttributeSetter::createAndSendCommands (
+ aVisual, aContainer, aRefVisual );
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfLineVisualAttributeSetter::handleDynamicAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+
+ CAlfLineVisual* lineVisual = dynamic_cast<CAlfLineVisual*>( &aVisual);
+ if ( !lineVisual )
+ {
+ return;
+ }
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp ( attrName, KThickness ) )
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget ((TReal32)aAttr.getTargetValue()->realValue(),
+ (TInt) aAttr.getTime());
+ tVal.SetStyle ( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier (aAttr.getMappingFunctionId());
+
+ lineVisual->SetThickness(tVal);
+ }
+
+ else if ( !strcmp ( attrName, KShadowThickness ) )
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget ((TReal32)aAttr.getTargetValue()->realValue(),
+ (TInt) aAttr.getTime());
+ tVal.SetStyle ( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier (aAttr.getMappingFunctionId());
+
+ lineVisual->SetShadowThickness(tVal);
+ }
+
+ else if ( !strcmp ( attrName, KStartPos ) )
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget ((TReal32)aAttr.getTargetValue()->realValue(),
+ (TInt) aAttr.getTime());
+ tVal.SetStyle ( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier (aAttr.getMappingFunctionId());
+
+ lineVisual->SetStartPos(tVal);
+ }
+
+ else if ( !strcmp ( attrName, KEndPos ) )
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget ((TReal32)aAttr.getTargetValue()->realValue(),
+ (TInt) aAttr.getTime());
+ tVal.SetStyle ( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier (aAttr.getMappingFunctionId());
+
+ lineVisual->SetEndPos(tVal);
+ }
+
+ else if ( !strcmp ( attrName, KOffsetX )||!strcmp ( attrName, KOffsetY ) )
+ {
+ AlfAttribute& offsety = aContainer.getAttributeByName (
+ KOffsetY );
+ AlfAttribute& offsetx = aContainer.getAttributeByName (
+ KOffsetX );
+ //will throw if attribute is not found
+
+ TAlfTimedPoint offset((TReal32)offsetx.getSourceValue()->realValue(),
+ (TReal32)offsety.getSourceValue()->realValue());
+
+ offset.iX.SetTarget((TReal32)offsetx.getTargetValue()->realValue(),
+ offsetx.getTime());
+
+ offset.iY.SetTarget((TReal32)offsety.getTargetValue()->realValue(),
+ offsety.getTime());
+
+ offset.iX.SetStyle ( offsetx.getInterpolationStyle() );
+ offset.iY.SetStyle ( offsety.getInterpolationStyle() );
+
+ offset.iX.SetMappingFunctionIdentifier (
+ offsetx.getMappingFunctionId());
+ offset.iY.SetMappingFunctionIdentifier (
+ offsety.getMappingFunctionId());
+
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+ curve->SetOffset ( offset );
+ offsetx.setDirty(false);
+ offsety.setDirty(false);
+ }
+
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleDynamicAttribute(
+ aVisual, aAttr, aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfLineVisualAttributeSetter::handleStaticAttribute (
+ CAlfVisual& aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+
+ CAlfLineVisual* lineVisual = dynamic_cast<CAlfLineVisual*>( &aVisual);
+ if ( !lineVisual )
+ {
+ return;
+ }
+
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp ( attrName, KImagePath ) )
+ {
+ TPtrC8 src;
+ src.Set((TUint8*)aAttr.stringValue().getUtf8());
+ auto_ptr<HBufC> DesC;
+ TRAPD(err1,
+ DesC.reset(CnvUtfConverter::ConvertToUnicodeFromUtf8L(src)));
+ throwIfErr(err1);
+
+ if (DesC.get())
+ {
+ CAlfTexture* texture = NULL;
+ TRAPD(err2,texture = &(aVisual.Env().TextureManager().
+ LoadTextureL( *(DesC.get()),
+ EAlfTextureFlagDefault,
+ KAlfAutoGeneratedTextureId)));
+ throwIfErr(err2);
+ lineVisual->SetImage(TAlfImage(*texture));
+ mImpl->mEnv = &aVisual.Env();
+ mImpl->mLoadedTextures.resize(mImpl->mLoadedTextures.count()+1);
+ mImpl->mLoadedTextures.insert(mImpl->mLoadedTextures.count(),
+ texture);
+ }
+ }
+
+ else if ( !strcmp ( attrName, KThickness ) )
+ {
+ TAlfTimedValue val(aAttr.realValue(),0);
+ //static attribute,apply with immidiate effect
+
+ lineVisual->SetThickness(val);
+ }
+
+ else if ( !strcmp ( attrName, KShadowThickness ) )
+ {
+ TAlfTimedValue val(aAttr.realValue(),0);
+ //static attribute,apply with immidiate effect
+
+ lineVisual->SetShadowThickness(val);
+ }
+
+ else if ( !strcmp ( attrName, KStartPos ) )
+ {
+ TAlfTimedValue val(aAttr.realValue(),0);
+ //static attribute,apply with immidiate effect
+
+ lineVisual->SetStartPos(val);
+ }
+
+ else if ( !strcmp ( attrName, KEndPos ) )
+ {
+ TAlfTimedValue val(aAttr.realValue(),0);
+ //static attribute,apply with immidiate effect
+
+ lineVisual->SetEndPos(val);
+ }
+
+ else if ( !strcmp ( attrName, KAlphaMappingFunction ) )
+ {
+ // assumption:
+ // The int value-mapping function mapping is the following:
+ // 0 - KConstMappingFunction
+ // 1 - duiuimodel::nodetypes::KLinearMappingFunction
+ // 2 - KSineMappingFunction
+ // 3 - KCosineMappingFunction
+
+ MAlfMappingFunction* func = this->getMappingFunction(aAttr,
+ lineVisual->Env());
+ if (!func)
+ {
+ ALF_THROW ( AlfAttributeException,
+ EInvalidAttribute, "AlfLineVisualAttributeSetter")
+ }
+
+ lineVisual->SetAlphaFunction(func);
+ }
+
+ else if ( !strcmp ( attrName, KWidthMappingFunction ) )
+ {
+ //assumption:
+ //The int value-mapping function mapping is the following:
+ //0 - KConstMappingFunction
+ //1 - duiuimodel::nodetypes::KLinearMappingFunction
+ //2 - KSineMappingFunction
+ //3 - KCosineMappingFunction
+
+ MAlfMappingFunction* func = this->getMappingFunction(aAttr,
+ lineVisual->Env());
+ if (!func)
+ {
+ ALF_THROW ( AlfAttributeException,
+ EInvalidAttribute, "AlfLineVisualAttributeSetter")
+ }
+ lineVisual->SetWidthFunction(func);
+ }
+
+ else if ( !strcmp ( attrName, KColor ) )
+ {
+ if ( 4 == aAttr.getTargetValueCount() &&
+ AlfAttributeValueType::EFloat == aAttr.type(0) &&
+ AlfAttributeValueType::EFloat == aAttr.type(1) &&
+ AlfAttributeValueType::EFloat == aAttr.type(2) &&
+ AlfAttributeValueType::EFloat == aAttr.type(3))
+ {
+ TRgb color ( aAttr.realValue(0),
+ aAttr.realValue(1),
+ aAttr.realValue(2),
+ aAttr.realValue(3) );
+ lineVisual->SetColor ( color );
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "AlfLineVisualAttributeSetter")
+ }
+ }
+
+ else if ( !strcmp ( attrName, KEnableLoop ) )
+ {
+
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+
+ // if value is not int, then use default parameter of EnableLoop
+ if ( AlfAttributeValueType::EInt != aAttr.type() )
+ {
+ curve->EnableLoop ();
+ }
+ else
+ {
+ int enableLoop = aAttr.intValue();
+
+ TBool flag = ETrue;
+ //Assume true for any non-zero value.
+
+ if ( 0 == enableLoop )
+ {
+ flag = EFalse;
+ }
+ curve->EnableLoop ( flag );
+ }
+ }
+
+ else if ( !strcmp ( attrName, KOrigin ) )
+ {
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+ curve->SetOrigin ( aAttr.realValue() );
+ }
+
+ else if ( !strcmp ( attrName, KOffsetX )||!strcmp ( attrName, KOffsetY ) )
+ {
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+ AlfAttribute& offsety = aContainer.getAttributeByName (
+ KOffsetY );
+ AlfAttribute& offsetx = aContainer.getAttributeByName (
+ KOffsetX );
+ //will throw if attribute is not found
+
+ TAlfTimedPoint offset( offsetx.realValue(), offsety.realValue());
+ curve->SetOffset ( offset );
+ offsetx.setDirty(false);
+ offsety.setDirty(false);
+ }
+
+ else if ( !strcmp ( attrName, KLine ) )
+ {
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+
+ // This multi-value attribute has to be filled in this order:
+ // startx,starty,endx,endy,linelength
+
+ if ( 5 != aAttr.getTargetValueCount())
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "CAlfLineVisualLayoutAttributeSetter" );
+ }
+ float startx = this->floatOrInt( aAttr, 0 );
+ float starty = this->floatOrInt( aAttr, 1 );
+ float endx = this->floatOrInt( aAttr, 2 );
+ float endy = this->floatOrInt( aAttr, 3 );
+ float len = aAttr.realValue(4);
+
+ TRAPD(err1,
+ curve->AppendLineL ( TAlfRealPoint(startx,starty),
+ TAlfRealPoint(endx,endy),len ))
+ throwIfErr(err1);
+ }
+
+ else if ( !strcmp ( attrName, KArc ) )
+ {
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+
+ // This multi-value attribute has to be filled in this order:
+ // arcoriginx,arcoriginy,archorzradius,arcvertradius,
+ // arcstartangle,arcendangle,arclength
+
+ if ( 7 != aAttr.getTargetValueCount())
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "CAlfLineVisualLayoutAttributeSetter" );
+ }
+
+ float originx = this->floatOrInt( aAttr, 0 );
+ float originy = this->floatOrInt( aAttr, 1 );
+ float horzradius = this->floatOrInt( aAttr, 2 );
+ float vertradius = this->floatOrInt( aAttr, 3 );
+ float startangle = aAttr.realValue(4);
+ float endangle = aAttr.realValue(5);
+ float len = aAttr.realValue(6);
+ TRAPD(err1,
+ curve->AppendArcL(TAlfRealPoint(originx,originy),
+ TAlfRealSize(horzradius,vertradius),
+ startangle, endangle, len))
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleStaticAttribute (
+ aVisual, aAttr, aContainer);
+ }
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfLineVisualAttributeSetter::handleDynamicDataAttribute (
+ CAlfVisual& aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData )
+ {
+ CAlfLineVisual* lineVisual = dynamic_cast<CAlfLineVisual*>( &aVisual);
+ if ( !lineVisual )
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfLineVisualAttributeSetter" )
+ }
+
+ const char* attrName = aAttr.name();
+
+ const char* dataField = aAttr.getDataField();
+
+ if ( !dataField )
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfLineVisualAttributeSetter")
+ }
+
+ if (!aData)
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfLineVisualAttributeSetter" )
+ }
+
+ IAlfVariantType* data = aData->item ( UString(dataField) );
+
+ if (data)
+ {
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp ( attrName, KOffsetX ) )
+ {
+ AlfAttribute& offsety = aContainer.getAttributeByName (
+ KOffsetY );
+ //will throw if attribute is not found
+
+ const char* offsetyDataField = offsety.getDataField();
+ if ( !offsetyDataField )
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfLineVisualAttributeSetter" )
+ }
+ IAlfVariantType* offsetyData =
+ aData->item ( UString(offsetyDataField) );
+
+ if ( data->type() == IAlfVariantType::EReal &&
+ offsetyData &&
+ offsetyData->type() == IAlfVariantType::EReal)
+ {
+ // The time value is in the attribute?
+ //Is it not part of data as well?
+ TAlfTimedPoint offset;
+ offset.iX.SetTarget(data->real(), aAttr.getTime());
+ offset.iX.SetStyle ( aAttr.getInterpolationStyle() );
+ offset.iX.SetMappingFunctionIdentifier (
+ aAttr.getMappingFunctionId());
+ offset.iY.SetTarget(offsetyData->real(), offsety.getTime());
+ offset.iY.SetStyle ( offsety.getInterpolationStyle() );
+ offset.iY.SetMappingFunctionIdentifier (
+ offsety.getMappingFunctionId());
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+ curve->SetOffset ( offset );
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KOffsetY ) )
+ {
+ //Make sure X Attribute also exists, but do nothing. Actual values
+ //will be set in the iteration that checks for KOffsetX
+ aContainer.getAttributeByName ( KOffsetX );
+ //will throw if attribute is not found
+ }
+
+ else if ( !strcmp ( attrName, KThickness ) )
+ {
+ if ( data->type() == IAlfVariantType::EReal)
+ {
+ // The time value is in the attribute?
+ // Is it not part of data as well?
+ // how is the source value stored in data? policy not clear
+ TAlfTimedValue tVal;
+ tVal.SetTarget(data->real(),(TInt) aAttr.getTime());
+ tVal.SetStyle ( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier (
+ aAttr.getMappingFunctionId());
+ lineVisual->SetThickness(tVal);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KShadowThickness ) )
+ {
+ if ( data->type() == IAlfVariantType::EReal)
+ {
+ // The time value is in the attribute?
+ // Is it not part of data as well?
+ // how is the source value stored in data? policy not clear
+ TAlfTimedValue tVal;
+ tVal.SetTarget(data->real(),(TInt) aAttr.getTime());
+ tVal.SetStyle ( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier (
+ aAttr.getMappingFunctionId());
+ lineVisual->SetShadowThickness(tVal);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KStartPos ) )
+ {
+ if ( data->type() == IAlfVariantType::EReal)
+ {
+ // The time value is in the attribute?
+ // Is it not part of data as well?
+ // how is the source value stored in data? policy not clear
+ TAlfTimedValue tVal;
+ tVal.SetTarget(data->real(),(TInt) aAttr.getTime());
+ tVal.SetStyle ( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier (
+ aAttr.getMappingFunctionId());
+ lineVisual->SetStartPos(tVal);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KEndPos ) )
+ {
+ if ( data->type() == IAlfVariantType::EReal)
+ {
+ // The time value is in the attribute?
+ // Is it not part of data as well?
+ // how is the source value stored in data? policy not clear
+ TAlfTimedValue tVal;
+ tVal.SetTarget(data->real(),(TInt) aAttr.getTime());
+ tVal.SetStyle ( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier (
+ aAttr.getMappingFunctionId());
+ lineVisual->SetEndPos(tVal);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleDynamicDataAttribute(
+ aVisual, aAttr, aContainer, aData);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfLineVisualAttributeSetter::handleStaticDataAttribute (
+ CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer,
+ IAlfMap* aData )
+ {
+
+ CAlfLineVisual* lineVisual = dynamic_cast<CAlfLineVisual*>( &aVisual);
+ if ( !lineVisual )
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfLineVisualAttributeSetter" )
+ }
+
+ const char* dataField = aAttr.getDataField();
+
+ if ( !dataField )
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfLineVisualAttributeSetter" );
+ }
+
+ if (!aData)
+ {
+ ALF_THROW ( AlfDataException, ECommonError,
+ "AlfLineVisualAttributeSetter" );
+ }
+
+ IAlfVariantType* data = aData->item (UString( dataField) );
+
+ const char* attrName = aAttr.name();
+
+ if ( data )
+ {
+ if ( !strcmp ( attrName, KImagePath ) )
+ {
+ if (data->type() == IAlfVariantType::EString)
+ {
+
+ TPtrC8 src;
+ src.Set((TUint8*)data->string().getUtf8());
+ auto_ptr<HBufC> DesC;
+ TRAPD(err1,
+ DesC.reset(CnvUtfConverter::ConvertToUnicodeFromUtf8L(src)));
+ throwIfErr(err1);
+
+ if (DesC.get())
+ {
+ CAlfTexture* texture = NULL;
+ TRAPD(err2,texture = &(aVisual.Env().TextureManager().
+ LoadTextureL(*(DesC.get()),
+ EAlfTextureFlagDefault,
+ KAlfAutoGeneratedTextureId)));
+ throwIfErr(err2);
+ lineVisual->SetImage(TAlfImage(*texture));
+ mImpl->mEnv = &aVisual.Env();
+ mImpl->mLoadedTextures.resize(
+ mImpl->mLoadedTextures.count()+1);
+ mImpl->mLoadedTextures.insert(
+ mImpl->mLoadedTextures.count(), texture);
+ }
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KThickness ) )
+ {
+ if (data->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedValue val(data->real(),0);
+ //static attribute,apply with immidiate effect
+
+ lineVisual->SetThickness(val);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KShadowThickness ) )
+ {
+ if (data->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedValue val(data->real(),0);
+ //static attribute,apply with immidiate effect
+
+ lineVisual->SetShadowThickness(val);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KStartPos ) )
+ {
+ if (data->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedValue val(data->real(),0);
+ //static attribute,apply with immidiate effect
+
+ lineVisual->SetStartPos(val);
+ }
+ }
+
+ else if ( !strcmp ( attrName, KEndPos ) )
+ {
+ if (data->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedValue val(data->real(),0);
+ //static attribute,apply with immidiate effect
+
+ lineVisual->SetEndPos(val);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KAlphaMappingFunction ) )
+ {
+ //assumption:
+ //The int value-mapping function mapping is the following:
+ //0 - KConstMappingFunction
+ //1 - duiuimodel::nodetypes::KLinearMappingFunction
+ //2 - KSineMappingFunction
+ //3 - KCosineMappingFunction
+ if (data->type() == IAlfVariantType::EContainer )
+ {
+ IAlfContainer* dataContainer = data->container();
+ MAlfMappingFunction* func =
+ this->getMappingFunctionFromContainer(dataContainer,
+ lineVisual->Env());
+
+ if (!func)
+ {
+ ALF_THROW ( AlfAttributeException,
+ EInvalidAttribute, "AlfLineVisualAttributeSetter")
+ }
+
+ lineVisual->SetAlphaFunction(func);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KWidthMappingFunction ) )
+ {
+ //assumption:
+ //The int value-mapping function mapping is the following:
+ //0 - KConstMappingFunction
+ //1 - duiuimodel::nodetypes::KLinearMappingFunction
+ //2 - KSineMappingFunction
+ //3 - KCosineMappingFunction
+
+ if (data->type() == IAlfVariantType::EContainer )
+ {
+ IAlfContainer* dataContainer = data->container();
+ MAlfMappingFunction* func =
+ this->getMappingFunctionFromContainer(dataContainer,
+ lineVisual->Env());
+
+ if (!func)
+ {
+ ALF_THROW ( AlfAttributeException,
+ EInvalidAttribute, "AlfLineVisualAttributeSetter")
+ }
+
+ lineVisual->SetWidthFunction(func);
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KColor ) )
+ {
+ if (data->type() == IAlfVariantType::EContainer )
+ {
+ IAlfContainer* dataContainer = data->container();
+
+ if ( 4 != dataContainer -> count() )
+ {
+ ALF_THROW ( AlfAttributeException,EIncompleteAttributeValues, "AlfLineVisualAttributeSetter")
+ }
+
+ IAlfVariantType* red = dataContainer->item ( 0 );//red
+
+ IAlfVariantType* green = dataContainer->item ( 1 );//green
+
+ IAlfVariantType* blue = dataContainer->item ( 2 );//blue
+
+ IAlfVariantType* alpha = dataContainer->item ( 3 );//alpha
+
+ if ( red && IAlfVariantType::EReal == red->type() &&
+ green && IAlfVariantType::EReal == green->type() &&
+ blue && IAlfVariantType::EReal == blue->type() &&
+ alpha && IAlfVariantType::EReal == alpha->type() )
+ {
+ TRgb color ( red->real(),
+ green->real(),
+ blue->real(),
+ alpha->real() );
+
+ lineVisual->SetColor ( color );
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "AlfLineVisualAttributeSetter" )
+ }
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KEnableLoop ) )
+ {
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+
+ // if value is not bool, then use default parameter of EnableLoop
+ if ( data->type() != IAlfVariantType::EBool )
+ {
+ curve->EnableLoop ();
+ }
+
+ else
+ {
+ curve->EnableLoop ( data->boolean() );
+ }
+ }
+
+ else if ( !strcmp ( attrName, KOrigin ) )
+ {
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+
+ if ( data->type() == IAlfVariantType::EReal )
+ {
+ float origin = data->real() ;
+ curve->SetOrigin ( origin );
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KOffsetX ) )
+ {
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+
+ AlfAttribute& offsety = aContainer.getAttributeByName (
+ KOffsetY );
+
+ //will throw if attribute is not found
+ const char* offsetyDataField = offsety.getDataField();
+ if ( !offsetyDataField )
+ {
+ ALF_THROW ( AlfDataException,
+ ECommonError, "AlfLineVisualAttributeSetter" )
+ }
+
+ IAlfVariantType* offsetyData =
+ aData->item (UString( offsetyDataField ) );
+
+ if ( data->type() == IAlfVariantType::EReal &&
+ offsetyData &&
+ offsetyData->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedPoint offset( data->real(), offsetyData->real());
+ curve->SetOffset ( offset );
+ }
+ else
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfLineVisualtAttributeSetter");
+ }
+ }
+
+ else if ( !strcmp ( attrName, KOffsetY ) )
+ {
+ //Make sure X Attribute also exists, but do nothing.
+ //Actual values will be set in the iteration that checks for
+ //KOffsetX
+
+ aContainer.getAttributeByName ( KOffsetX );
+ //will throw if attribute is not found
+ }
+
+ else if ( !strcmp ( attrName, KLine ) )
+ {
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+
+ //if not a container, dont proceed
+ if (!(data->type() == IAlfVariantType::EContainer))
+ {
+ return;
+ }
+
+ IAlfContainer* container = data->container();
+ //if all item are not present, throw
+ if (container->count() != 5)
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "AlfLineVisualAttributeSetter" );
+ }
+
+ IAlfVariantType* lineStartXvalue = container->item(0);
+ IAlfVariantType* lineStartYvalue = container->item(1);
+ IAlfVariantType* lineEndXvalue = container->item(2);
+ IAlfVariantType* lineEndYvalue = container->item(3);
+ IAlfVariantType* lineLengthvalue = container->item(4);
+
+ float startx = this->floatOrIntFromData( lineStartXvalue);
+ float starty = this->floatOrIntFromData( lineStartYvalue);
+ float endx = this->floatOrIntFromData( lineEndXvalue );
+ float endy = this->floatOrIntFromData( lineEndYvalue );
+ float len = float(lineLengthvalue->real());
+ TRAPD(err1,
+ curve->AppendLineL ( TAlfRealPoint(startx,starty),
+ TAlfRealPoint(endx,endy),len ))
+ throwIfErr(err1);
+ }
+
+ else if ( !strcmp ( attrName, KArc ) )
+ {
+ CAlfCurvePath* curve = this->getCurvePath(lineVisual);
+
+ //if not a container, dont proceed
+ if (!(data->type() == IAlfVariantType::EContainer))
+ {
+ return;
+ }
+
+ IAlfContainer* container = data->container();
+
+ //if all item are not present, throw
+ if (container->count() != 7)
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute,
+ "AlfLineVisualAttributeSetter" );
+ }
+
+ IAlfVariantType* arcOriginXValue = container->item(0);
+ IAlfVariantType* arcOriginYValue = container->item(1);
+ IAlfVariantType* archorzradiusValue = container->item(2);
+ IAlfVariantType* arcvertradiusValue = container->item(3);
+ IAlfVariantType* arcstartangleValue = container->item(4);
+ IAlfVariantType* arcendangleValue = container->item(5);
+ IAlfVariantType* arclengthValue = container->item(6);
+
+ float originx = this->floatOrIntFromData( arcOriginXValue);
+ float originy = this->floatOrIntFromData( arcOriginYValue);
+ float horzradius = this->floatOrIntFromData( archorzradiusValue);
+ float vertradius = this->floatOrIntFromData( arcvertradiusValue);
+ float startangle = float(arcstartangleValue->real());
+ float endangle = float(arcendangleValue->real());
+ float len = float(arclengthValue->real());
+ TRAPD(err1,
+ curve->AppendArcL(TAlfRealPoint(originx,originy),
+ TAlfRealSize(horzradius,vertradius),
+ startangle,endangle,len))
+
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleStaticDataAttribute(
+ aVisual, aAttr, aContainer, aData );
+ }
+ }
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// Creates and returns a toolkit defined mappping function based on the
+// attribute contents
+// assumption:
+// The int value-mapping function mapping is the following:
+// 0 - KConstMappingFunction
+// 1 - duiuimodel::nodetypes::KLinearMappingFunction
+// 2 - KSineMappingFunction
+// 3 - KCosineMappingFunction
+// ---------------------------------------------------------------------------
+//
+MAlfMappingFunction* AlfLineVisualAttributeSetter::getMappingFunction(
+ AlfAttribute& aAttribute,
+ CAlfEnv& aEnv)
+ {
+ MAlfMappingFunction* func=0;
+ int intValue = aAttribute.realValue(0);
+
+ switch (intValue)
+ {
+ case 0:
+ {
+ if (aAttribute.getTargetValueCount() == 2)
+ {
+ TRAPD(err1,func = CAlfConstantMappingFunction::NewL(aEnv,
+ aAttribute.realValue(1)))
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ TRAPD(err1,func = CAlfConstantMappingFunction::NewL(aEnv))
+ throwIfErr(err1);
+ }
+ }
+ break;
+
+ case 1:
+ {
+ if (aAttribute.getTargetValueCount() == 3)
+ {
+ TRAPD(err1,func = CAlfLinearMappingFunction::NewL(aEnv,
+ aAttribute.realValue(1),
+ aAttribute.realValue(2)))
+ throwIfErr(err1);
+ }
+
+ else if (aAttribute.getTargetValueCount() == 2)
+ {
+ TRAPD(err1,func = CAlfLinearMappingFunction::NewL(aEnv,
+ aAttribute.realValue(1)))
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ TRAPD(err1,func = CAlfLinearMappingFunction::NewL(aEnv))
+ throwIfErr(err1);
+ }
+ }
+ break;
+
+ case 2:
+ {
+ if (aAttribute.getTargetValueCount() == 3)
+ {
+ TRAPD(err1,func = CAlfSineMappingFunction::NewL(aEnv,
+ aAttribute.realValue(1),
+ aAttribute.realValue(2)))
+ throwIfErr(err1);
+ }
+
+ else if (aAttribute.getTargetValueCount() == 2)
+ {
+ TRAPD(err1,func = CAlfSineMappingFunction::NewL(aEnv,
+ aAttribute.realValue(1)))
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ TRAPD(err1,func = CAlfSineMappingFunction::NewL(aEnv))
+ throwIfErr(err1);
+ }
+ }
+ break;
+
+ case 3:
+ {
+ if (aAttribute.getTargetValueCount() == 3)
+ {
+ TRAPD(err1,func = CAlfCosineMappingFunction::NewL(aEnv,
+ aAttribute.realValue(1),
+ aAttribute.realValue(2)))
+ throwIfErr(err1);
+ }
+
+ else if (aAttribute.getTargetValueCount() == 2)
+ {
+ TRAPD(err1,func = CAlfCosineMappingFunction::NewL(aEnv,
+ aAttribute.realValue(1)))
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ TRAPD(err1,func = CAlfCosineMappingFunction::NewL(aEnv))
+ throwIfErr(err1);
+ }
+ }
+ break;
+
+ default:
+ break;
+
+ }
+
+ return func;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Creates and returns a toolkit defined mappping function based on the
+// container contents
+// assumption:
+// The int value-mapping function mapping is the following:
+// 0 - KConstMappingFunction
+// 1 - duiuimodel::nodetypes::KLinearMappingFunction
+// 2 - KSineMappingFunction
+// 3 - KCosineMappingFunction
+// ---------------------------------------------------------------------------
+//
+MAlfMappingFunction* AlfLineVisualAttributeSetter::
+ getMappingFunctionFromContainer(IAlfContainer* aContainer, CAlfEnv& aEnv)
+ {
+ MAlfMappingFunction* func=0;
+
+ if (IAlfVariantType::EInt != aContainer->item(0)->type())
+ {
+ return func;
+ }
+
+ switch (aContainer->item(0)->integer())
+ {
+ case 0:
+ {
+ if (aContainer -> count() == 2)
+ {
+ TRAPD(err1,func = CAlfConstantMappingFunction::NewL(aEnv,
+ aContainer->item(1)->real()))
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ TRAPD(err1,func = CAlfConstantMappingFunction::NewL(aEnv))
+ throwIfErr(err1);
+ }
+ }
+ break;
+
+ case 1:
+ {
+ if (aContainer -> count() == 3)
+ {
+ TRAPD(err1,func = CAlfLinearMappingFunction::NewL(aEnv,
+ aContainer->item(1)->real(),
+ aContainer->item(2)->real()))
+ throwIfErr(err1);
+ }
+
+ else if (aContainer -> count() == 2)
+ {
+ TRAPD(err1,func = CAlfLinearMappingFunction::NewL(aEnv,
+ aContainer->item(1)->real()))
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ TRAPD(err1,func = CAlfLinearMappingFunction::NewL(aEnv))
+ throwIfErr(err1);
+ }
+ }
+ break;
+
+ case 2:
+ {
+ if (aContainer -> count() == 3)
+ {
+ TRAPD(err1,func = CAlfSineMappingFunction::NewL(aEnv,
+ aContainer->item(1)->real(),
+ aContainer->item(2)->real()))
+ throwIfErr(err1);
+ }
+
+ else if (aContainer -> count() == 2)
+ {
+ TRAPD(err1,func = CAlfSineMappingFunction::NewL(aEnv,
+ aContainer->item(1)->real()))
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ TRAPD(err1,func = CAlfSineMappingFunction::NewL(aEnv))
+ throwIfErr(err1);
+ }
+ }
+ break;
+
+ case 3:
+ {
+ if (aContainer -> count() == 3)
+ {
+ TRAPD(err1,func = CAlfCosineMappingFunction::NewL(aEnv,
+ aContainer->item(1)->real(),
+ aContainer->item(2)->real()))
+ throwIfErr(err1);
+ }
+
+ else if (aContainer -> count() == 2)
+ {
+ TRAPD(err1,func = CAlfCosineMappingFunction::NewL(aEnv,
+ aContainer->item(1)->real()))
+ throwIfErr(err1);
+ }
+
+ else
+ {
+ TRAPD(err1,func = CAlfCosineMappingFunction::NewL(aEnv))
+ throwIfErr(err1);
+ }
+ }
+ break;
+
+ default:
+ break;
+
+ }
+
+ return func;
+ }
+
+
+// ---------------------------------------------------------------------------
+// If the line visual already has a path set to it, it is retrived.
+// Else a new instance is created
+// ---------------------------------------------------------------------------
+//
+CAlfCurvePath* AlfLineVisualAttributeSetter::getCurvePath(
+ CAlfLineVisual* aLineVisual)
+ {
+ CAlfCurvePath* curve = 0;
+ if(aLineVisual)
+ {
+ curve = aLineVisual->Path();
+
+ if (!curve)
+ {
+ TRAPD(err1,curve = CAlfCurvePath::NewL(aLineVisual->Env()))
+ throwIfErr(err1);
+
+ aLineVisual->SetPath( curve, EAlfHasOwnership);
+ }
+ }
+ return curve;
+ }
+
+// ---------------------------------------------------------------------------
+// Check if data in the attribute is int or float.
+// Return the value as a float value
+// ---------------------------------------------------------------------------
+//
+float AlfLineVisualAttributeSetter::floatOrInt(
+ const AlfAttribute& aAttr,
+ int aIndex)
+ {
+ if (aAttr.type(aIndex) == AlfAttributeValueType::EInt)
+ {
+ return float(aAttr.intValue(aIndex));
+ }
+ else if (aAttr.type(aIndex) == AlfAttributeValueType::EFloat)
+ {
+ return aAttr.realValue(aIndex); //will throw an exception i
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, ECommonError,
+ "AlfLineVisualAttributeSetter" );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Check if data in the variant type is int or float.
+// Return the value as a float value
+// ---------------------------------------------------------------------------
+//
+float AlfLineVisualAttributeSetter::floatOrIntFromData(IAlfVariantType* aData)
+ {
+ if (IAlfVariantType::EInt == aData->type())
+ {
+ return float(aData->integer());
+ }
+ else if (IAlfVariantType::EReal == aData->type())
+ {
+ return aData->real();; //will throw an exception i
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, ECommonError,
+ "AlfLineVisualAttributeSetter" );
+ }
+ }
+
+ }// namespace Alf
+// End of file
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfmeshvisualattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,537 @@
+/*
+* Copyright (c) 2007 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: Implements attributesetters for MeshVisual.
+*
+*/
+
+
+
+#include "alf/alfattribute.h"
+#include "alf/alfmeshvisualattributesetter.h"
+#include "alf/alfattributevaluetype.h"
+#include <alf/alfvisual.h>
+#include <alf/alfattributeexception.h>
+#include <alf/alfvisualexception.h>
+#include "alf/alfattributecontainer.h"
+#include <libc/string.h>
+#include <osn/ustring.h>
+#include "alf/attrproperty.h"
+#include <uiacceltk/HuiRealPoint.h>
+
+#include <alf/alfmeshvisual.h>
+#include <alf/alftexture.h>
+#include <utf.h>
+#include <alf/alfenv.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfdisplay.h>
+
+#include <alf/alfbrusharray.h>
+#include <alf/alfframebrush.h>
+
+
+#include <alf/alfeventhandler.h>
+#include <alf/alfevent.h>
+#include <osn/alfptrvector.h>
+
+
+using namespace osncore;
+
+using namespace duiuimodel::meshvisualattributes;
+using namespace duiuimodel::commonvisualattributes;
+
+namespace Alf
+ {
+
+class AlfMeshVisualAttributeSetterImpl
+ {
+public:
+ AlfMeshVisualAttributeSetterImpl();
+ ~AlfMeshVisualAttributeSetterImpl();
+public:
+ //Keep track of loaded texture for imagevisuals.
+ //Texture manager doesn't unload the texture from memory untill Env is deleted.
+ //Hence need to unload them once attribute setter is deleted.
+ AlfPtrVector<CAlfTexture> mLoadedTextures;
+ //Env needed to access TextureManager while unloading textures.
+ CAlfEnv* mEnv;
+ };
+
+AlfMeshVisualAttributeSetterImpl::AlfMeshVisualAttributeSetterImpl()
+ {
+ //Do not delete textures here as they may be in use by the visuals that have not been deleted.
+ mEnv = CAlfEnv::Static();
+ mLoadedTextures.setAutoDelete(false);
+ }
+
+AlfMeshVisualAttributeSetterImpl::~AlfMeshVisualAttributeSetterImpl()
+ {
+ //Unload all loaded textures created by this attributesetter to free up the memory.
+ for (int i =0;i<mLoadedTextures.count();i++)
+ {
+ CAlfTexture* Texture = mLoadedTextures[i];
+ mEnv->TextureManager().UnloadTexture(Texture->Id());
+ }
+ mLoadedTextures.clear();
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfMeshVisualAttributeSetter::AlfMeshVisualAttributeSetter()
+ {
+ mImpl.reset(new (EMM) AlfMeshVisualAttributeSetterImpl());
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfMeshVisualAttributeSetter::~AlfMeshVisualAttributeSetter()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+IAlfVariantType* AlfMeshVisualAttributeSetter::getData(AlfAttribute& aAttr, IAlfMap* aData)
+ {
+ IAlfVariantType* data = 0;
+ const char* dataField = aAttr.getDataField();
+ if (dataField)
+ {
+ data = aData->item(UString(dataField));
+ }
+ return data;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+int AlfMeshVisualAttributeSetter::getTime(const AlfAttribute& aAttr, bool aImmediate)
+ {
+ int time = 0;
+ if (!aImmediate)
+ {
+ time = aAttr.getTime();
+ }
+
+ return time;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+
+void AlfMeshVisualAttributeSetter::handleDynamicDataAttribute(CAlfVisual & aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ if (!doHandleDynamicDataAttribute(aVisual, aAttr, aContainer, aData))
+ {
+ AlfCommonVisualAttributeSetter::handleDynamicDataAttribute(
+ aVisual, aAttr, aContainer, aData);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfMeshVisualAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ CAlfMeshVisual* meshVisual = dynamic_cast<CAlfMeshVisual*>(&aVisual);
+ if (!meshVisual)
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfMeshVisualAttributeSetter" )
+ }
+ if (!aData) ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfMeshVisualAttributeSetter" )
+
+ const char* dataField = aAttr.getDataField();
+ if ( !dataField ) ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfMeshVisualAttributeSetter" )
+
+ IAlfVariantType* data = aData->item ( UString(dataField));
+
+ const char* attrName = aAttr.name();
+
+ if (data)
+ {
+ if (!strcmp(attrName,KMeshType))
+ {
+ if (data->type() == IAlfVariantType::EInt)
+ {
+ int val = data->integer();
+ TRAPD(err,meshVisual->CreateMeshL(val));
+ if (err!=KErrNone)
+ {
+ ALF_THROW ( AlfDataException, err, "AlfMeshVisualAttributeSetter")
+ }
+ }
+ }
+ else if (!strcmp(attrName, KImagePath))
+ {
+ if (data->type() == IAlfVariantType::EString)
+ {
+ TPtrC8 src;
+ src.Set((TUint8*)data->string().getUtf8());
+
+ HandleImagePathAttribute( src, meshVisual, primary );
+ }
+ }
+ else if (!strcmp(attrName,KSecondaryImagePath))
+ {
+ if (data->type() == IAlfVariantType::EString)
+ {
+ TPtrC8 src;
+ src.Set((TUint8*)data->string().getUtf8());
+
+ HandleImagePathAttribute( src, meshVisual, secondary );
+ }
+ }
+ else if (!strcmp(attrName,KSpecularImagePath))
+ {
+ if (data->type() == IAlfVariantType::EString)
+ {
+ TPtrC8 src;
+ src.Set((TUint8*)data->string().getUtf8());
+
+ HandleImagePathAttribute( src, meshVisual, specular );
+ }
+ }
+ else
+ {
+ //check, if dynamic attribute(but set by user as static), if so, set attributes immediately.
+ //If not, the function will call baseclass SetAttributeValue.
+ if (!doHandleDynamicDataAttribute(aVisual, aAttr, aContainer, aData, true))
+ {
+ AlfCommonVisualAttributeSetter::handleStaticDataAttribute(
+ aVisual, aAttr, aContainer, aData);
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfMeshVisualAttributeSetter::handleDynamicAttribute(CAlfVisual &aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& aContainer)
+ {
+ if (!doHandleDynamicAttribute(aVisual, aAttr, aContainer))
+ {
+ AlfCommonVisualAttributeSetter::handleDynamicAttribute(
+ aVisual, aAttr, aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfMeshVisualAttributeSetter::handleStaticAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer)
+ {
+ CAlfMeshVisual* meshVisual = dynamic_cast<CAlfMeshVisual*>(&aVisual);
+ if(!meshVisual)
+ {
+ return;
+ }
+ const char* attrName = aAttr.name();
+
+ // meshVisual attributes
+ if (!strcmp(attrName,KMeshType))
+ {
+ int val = aAttr.intValue();
+ TRAPD(err,meshVisual->CreateMeshL(val));
+ if (err!=KErrNone)
+ {
+ ALF_THROW(AlfDataException, err, "AlfMeshVisualAttributeSetter");
+ }
+ }
+ else if (!strcmp(attrName,KImagePath))
+ {
+ TPtrC8 src((TUint8*)aAttr.stringValue().getUtf8());
+ HandleImagePathAttribute( src, meshVisual, primary );
+ }
+ else if (!strcmp(attrName,KSecondaryImagePath))
+ {
+ TPtrC8 src((TUint8*)aAttr.stringValue().getUtf8());
+ HandleImagePathAttribute( src, meshVisual, secondary );
+ }
+ else if (!strcmp(attrName,KSpecularImagePath))
+ {
+ TPtrC8 src((TUint8*)aAttr.stringValue().getUtf8());
+ HandleImagePathAttribute( src, meshVisual, specular );
+ }
+ else
+ {
+ if (!doHandleDynamicAttribute(aVisual, aAttr, aContainer, true))
+ {
+ AlfCommonVisualAttributeSetter::handleStaticAttribute(aVisual, aAttr, aContainer);
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfMeshVisualAttributeSetter::setAttributeValue(
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData)
+ {
+ CAlfMeshVisual* meshVisual = dynamic_cast<CAlfMeshVisual*>(&aVisual);
+ if (!meshVisual)
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfMeshVisualAttributeSetter")
+ }
+
+ AlfCommonVisualAttributeSetter::setAttributeValue(
+ aVisual, aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfMeshVisualAttributeSetter::createCommand(
+ CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/, int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/)
+ {
+ TAlfCommand* cmd = 0;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfMeshVisualAttributeSetter::createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+
+ // Call the base class implementation.It goes through its loop and checks if there are attributes
+ // that it handles.
+ AlfCommonVisualAttributeSetter::createAndSendCommands(
+ aVisual,
+ aContainer,
+ aRefVisual );
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+
+bool AlfMeshVisualAttributeSetter::doHandleDynamicDataAttribute(CAlfVisual & aVisual,
+ AlfAttribute& aAttr, AlfAttributeContainer& /*aContainer*/, IAlfMap* aData, bool aImmediate)
+ {
+ bool handled = true;
+
+ if (!aData)
+ {
+ ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfMeshVisualAttributeSetter" )
+ }
+ else
+ {
+ CAlfMeshVisual* meshVisual = dynamic_cast<CAlfMeshVisual*>(&aVisual);
+ if(!meshVisual)
+ {
+ return false;
+ }
+ const char* attrName = aAttr.name();
+
+ if ( !strcmp( attrName, KSecondaryAlpha ) )
+ {
+ const IAlfVariantType* data = getData(aAttr, aData);
+ if (data && data->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedValue tVal(data->real(), getTime(aAttr, aImmediate));
+ tVal.SetStyle(aAttr.getInterpolationStyle());
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
+ meshVisual->SetSecondaryAlpha( tVal );
+ }
+ }
+ else if ( !strcmp( attrName, KYawAngle ) )
+ {
+ const IAlfVariantType* data = getData(aAttr, aData);
+ if (data && data->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedValue tVal(data->real(), getTime(aAttr, aImmediate));
+ tVal.SetStyle(aAttr.getInterpolationStyle());
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
+ meshVisual->SetYawAngle( tVal );
+ }
+ }
+ else if ( !strcmp( attrName, KPitchAngle ) )
+ {
+ const IAlfVariantType* data = getData(aAttr, aData);
+ if (data && data->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedValue tVal(data->real(), getTime(aAttr, aImmediate));
+ tVal.SetStyle(aAttr.getInterpolationStyle());
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
+ meshVisual->SetPitchAngle( tVal );
+ }
+ }
+ else if ( !strcmp( attrName, KScale ) )
+ {
+ const IAlfVariantType* data = getData(aAttr, aData);
+ if (data && data->type() == IAlfVariantType::EReal)
+ {
+ TAlfTimedValue tVal(data->real(), getTime(aAttr, aImmediate));
+ tVal.SetStyle(aAttr.getInterpolationStyle());
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
+ meshVisual->SetScale( tVal );
+ }
+ }
+ else
+ {
+ handled = false;
+ }
+ }
+
+ return handled;
+ }
+
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+//
+bool AlfMeshVisualAttributeSetter::doHandleDynamicAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& /*aContainer*/, bool aImmediate)
+ {
+ CAlfMeshVisual* meshVisual = dynamic_cast<CAlfMeshVisual*>(&aVisual);
+ if(!meshVisual)
+ {
+ return false;
+ }
+
+ const char* attrName = aAttr.name();
+ bool handled = true;
+
+ // KSecondaryAlpha
+ if (!strcmp(attrName, KSecondaryAlpha))
+ {
+ TAlfTimedValue tVal(aAttr.getSourceValue()->realValue());
+ tVal.SetTarget(aAttr.getTargetValue()->realValue(),getTime(aAttr, aImmediate));
+ tVal.SetStyle( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
+ meshVisual->SetSecondaryAlpha( tVal );
+ }
+ //KYawAngle
+ else if (!strcmp(attrName, KYawAngle))
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(),getTime(aAttr, aImmediate));
+ tVal.SetStyle( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
+ meshVisual->SetYawAngle( tVal );
+ }
+ //KPitchAngle
+ else if (!strcmp(attrName, KPitchAngle))
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(),getTime(aAttr, aImmediate));
+ tVal.SetStyle( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
+ meshVisual->SetPitchAngle( tVal );
+ }
+ //KScale
+ else if (!strcmp(attrName,KScale))
+ {
+ TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
+ tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(),getTime(aAttr, aImmediate));
+ tVal.SetStyle( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId());
+ meshVisual->SetScale( tVal );
+ }
+ else // Call the base class implementation also.
+ //It goes through the same loop again and checks if there are attributes that it handles.
+ {
+ handled = false;
+ }
+
+ return handled;
+ }
+
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+//
+void AlfMeshVisualAttributeSetter::HandleImagePathAttribute(
+ const TPtrC8& aStringValue,
+ CAlfMeshVisual* aVisual,
+ imageCategory aImageCategory )
+ {
+ auto_ptr<HBufC> DesC;
+ TRAPD( err, DesC.reset(CnvUtfConverter::ConvertToUnicodeFromUtf8L(aStringValue)));
+ if ( err != KErrNone )
+ {
+ ALF_THROW( AlfDataException, err, "AlfMeshVisualAttributeSetter" );
+ }
+
+ // check if the texture is already loaded
+ const TInt existingTextureId = aVisual->Env().TextureManager().TextureId(*(DesC.get()));
+ if ( existingTextureId != KErrNotFound )
+ {
+ const CAlfTexture* texture = aVisual->Env().TextureManager().Texture( existingTextureId );
+
+ if ( aImageCategory == primary )
+ {
+ aVisual->SetImage(TAlfImage(*texture));
+ }
+ else if ( aImageCategory == secondary )
+ {
+ aVisual->SetSecondaryImage(TAlfImage(*texture));
+ }
+ else // specular image
+ {
+ aVisual->SetSpecularImage(TAlfImage(*texture));
+ }
+ }
+ else
+ {
+ mImpl->mLoadedTextures.resize(mImpl->mLoadedTextures.count()+1);
+
+ CAlfTexture* texture = NULL;
+ TRAP( err, texture = &(aVisual->Env().TextureManager().LoadTextureL(
+ *(DesC.get()), EAlfTextureFlagDefault, KAlfAutoGeneratedTextureId)));
+
+ if ( err != KErrNone )
+ {
+ ALF_THROW( AlfDataException, err, "AlfMeshVisualAttributeSetter" );
+ }
+
+ // This cannot fail because the array has already been resized
+ mImpl->mLoadedTextures.insert(mImpl->mLoadedTextures.count(),texture);
+
+ if ( aImageCategory == primary )
+ {
+ aVisual->SetImage(TAlfImage(*texture));
+ }
+ else if ( aImageCategory == secondary )
+ {
+ aVisual->SetSecondaryImage(TAlfImage(*texture));
+ }
+ else // specular image
+ {
+ aVisual->SetSpecularImage(TAlfImage(*texture));
+ }
+ }
+ }
+
+
+ }// Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfmodel.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,487 @@
+/*
+* Copyright (c) 2006 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: Model Class used by widgets.
+*
+*/
+
+
+
+
+//INCLUDES
+#include <alf/ialfmodelchangeobserver.h>
+#include <osn/alfptrvector.h>
+#include <memory>
+
+#include <alf/alfmodel.h>
+#include "alf/alfmodeloperation.h"
+#include <alf/alfvarianttype.h>
+#include <alf/alfexceptions.h>
+//#include "alf/alfperf.h"
+#include <osn/osnnew.h>
+
+using osncore::AlfPtrVector;
+using std::auto_ptr;
+
+// Forward declared inside the Alf namespace
+namespace Alf
+ {
+
+
+class AlfModelImpl
+ {
+public :
+ AlfModelImpl():mDataSource(0)
+ {
+ }
+
+ ~AlfModelImpl()
+ {
+ delete mDataSource;
+ mObserverArray.clear();
+ }
+
+ /**
+ * Array of Observers for the Model individual observers not owned
+ */
+ AlfPtrVector<IAlfModelChangeObserver> mObserverArray;
+
+ /**
+ * Data Source for the Model owned
+ */
+ IAlfVariantType* mDataSource;
+ };
+
+
+////////////////////// AlfModel //////////////////////
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+
+// ---------------------------------------------------------------------------
+// Description : Constructor -
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfModel::AlfModel()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Constructor -
+// Data Source for the model is passed
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfModel::AlfModel( IAlfVariantType* aDataSource )
+ {
+ mData.reset( new(EMM) AlfModelImpl() );
+ mData->mDataSource = aDataSource;
+ mData->mObserverArray.setAutoDelete(false);
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Class Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfModel::~AlfModel()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Adds model change observers
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfModel::addModelChangeObserver(
+ IAlfModelChangeObserver& aObserver)
+ {
+ if(mData->mObserverArray.findRef(&aObserver)<0)
+ {
+ mData->mObserverArray.resize(mData->mObserverArray.count()+1);
+ mData->mObserverArray.insert(mData->mObserverArray.count(),
+ &aObserver);
+ aObserver.modelChanged( *this );
+ }
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// Description : Removes model change observers
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfModel::removeModelChangeObserver(
+ IAlfModelChangeObserver& aObserver)
+ {
+ for ( int i = 0; i < mData->mObserverArray.count(); ++i )
+ {
+ if(mData->mObserverArray[i]==&aObserver)
+ {
+ mData->mObserverArray.remove( i );
+ return;
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Sets the data for the model
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfModel::setData(IAlfVariantType* aData)
+ {
+ if( mData->mDataSource != 0 )
+ {
+ delete mData->mDataSource;
+ mData->mDataSource=0;
+ }
+ mData->mDataSource = aData;
+
+ for ( int i = 0; i < mData->mObserverArray.count(); ++i )
+ {
+ mData->mObserverArray[i]->modelChanged( *this );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Data Source
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType* AlfModel::data() const
+ {
+ return mData->mDataSource;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : notifies, that the model is changed.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfModel::notifyModelChanged()
+ {
+ //Notify all the observers
+ for ( int i = 0; i < mData->mObserverArray.count(); ++i )
+ {
+ mData->mObserverArray[i]->modelChanged(*this);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Clears the Data Source
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfModel::clearModel()
+ {
+ //Delete the Model
+ if( mData->mDataSource != 0 )
+ {
+ delete mData->mDataSource;
+ mData->mDataSource=0;
+ }
+ //Notify all the observers
+ for ( int i = 0; i < mData->mObserverArray.count(); ++i )
+ {
+ mData->mObserverArray[i]->modelChanged(*this);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Static getter for interfaces provided by the widget,
+// the control, or the model.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfModel::makeInterface( const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ if ( param == IAlfModel::type().mImplementationId )
+ {
+ return this;
+ }
+ return 0;
+ }
+
+//----------------------------------------------------------------------------
+//Add a number of data fields in the model data. All model change
+//observers are notified about the change. Internal API not exported
+//-----------------------------------------------------------------------------
+void AlfModel::addData(AlfModelOperation* aAddOperation)
+ {
+ IAlfVariantType* newData = 0;
+ IAlfVariantType* parentData = 0;
+ try
+ {
+ //ALF_PERF_START( perfdata, "AlfModel-AddData-Adding")
+ newData = aAddOperation->getNewData();
+ parentData = aAddOperation->parentData(*data());
+ int index = aAddOperation->index();
+
+ if(parentData->type()== IAlfVariantType::EBranch &&
+ newData->type() == IAlfVariantType::EMap )
+ {
+ // This is actually the same as updating the data,
+ // since we can not have multiple branch or child data maps
+ if ( index == 0 )
+ {
+ // Set data for the branch
+ parentData->branch()->setData( newData->map() );
+ }
+ else if ( index == 1 )
+ {
+ // Set data for the branch children
+ parentData->branch()->setChildData( newData->map() );
+ }
+ }
+ else if(parentData->type()== IAlfVariantType::EMap)
+ {
+ parentData->map()->addItem( newData,
+ aAddOperation->newDataName() );
+ }
+ else if(parentData->type()== IAlfVariantType::EContainer )
+ {
+ parentData->container()->addItem(index, newData);
+ }
+ //ALF_PERF_STOP( perfdata, "AlfModel-AddData-Adding")
+ }
+ catch(AlfDataException& e)
+ {
+ newData = 0;
+ parentData = 0;
+ ALF_THROW(AlfDataException,EInvalidModelOperation,"AlfModel")
+ // Note the aAddOperation is not deleted. In case of exception the user
+ // should delete this object
+ }
+ }
+
+//-----------------------------------------------------------------------------
+//Remove a number of data fields in the model data. All model change
+//observers are notified about the change.
+//-----------------------------------------------------------------------------
+void AlfModel::removeData(AlfModelOperation* aRemoveOperation)
+ {
+ IAlfVariantType* parentData = 0;
+
+ try
+ {
+ //ALF_PERF_START( perfdata, "AlfModel-RemoveData-Removing")
+ parentData = aRemoveOperation->parentData(*data());
+ int index = aRemoveOperation->index();
+
+ if(parentData->type()== IAlfVariantType::EBranch )
+ {
+ if ( index == 0 )
+ {
+ // Remove the branch data
+ parentData->branch()->setData( 0 );
+ }
+ else if ( index == 1 )
+ {
+ // Remove the branch children data
+ parentData->branch()->setChildData( 0 );
+ }
+ }
+ else if(parentData->type()== IAlfVariantType::EMap)
+ {
+ parentData->map()->removeItem(index);
+ }
+ else if(parentData->type()== IAlfVariantType::EContainer )
+ {
+ parentData->container()->removeItem(index);
+ }
+ //ALF_PERF_STOP( perfdata, "AlfModel-RemoveData-Removing")
+ }
+ catch(AlfDataException& e)
+ {
+ parentData = 0;
+ ALF_THROW(AlfDataException,EInvalidModelOperation,"AlfModel")
+ // Note the aRemoveOperation is not deleted. In case of exception the
+ // user should delete this object
+ }
+ }
+
+
+void AlfModel::updateData(AlfModelOperation* aUpdateOperation)
+ {
+ IAlfVariantType* newData = 0;
+ IAlfVariantType* parentData = 0;
+
+ try
+ {
+ //ALF_PERF_START( perfdata, "AlfModel-UpdateData-Updating")
+ newData= aUpdateOperation->getNewData();
+
+ parentData = aUpdateOperation->parentData(*data());
+ int index = aUpdateOperation->index();
+
+ if(parentData->type()== IAlfVariantType::EBranch &&
+ newData->type() == IAlfVariantType::EMap )
+ {
+ if ( index == 0 )
+ {
+ // Update the branch data
+ parentData->branch()->setData( newData->map() );
+ }
+ else if ( index == 1 )
+ {
+ // Update the data for the branch children
+ parentData->branch()->setChildData( newData->map() );
+ }
+ }
+ else if(parentData->type()== IAlfVariantType::EMap)
+ {
+ parentData->map()->replaceItem(index, newData);
+ }
+ else if(parentData->type()== IAlfVariantType::EContainer )
+ {
+ parentData->container()->replaceItem(index,newData);
+ }
+ //ALF_PERF_STOP( perfdata, "AlfModel-UpdateData-Updating")
+ }
+ catch(AlfDataException& e)
+ {
+ parentData=0;
+ newData=0;
+ ALF_THROW(AlfDataException,EInvalidModelOperation,"AlfModel")
+ //Note the aUpdateOperation is not deleted. In case of exception the user should delete this object
+ }
+ }
+
+//----------------------------------------------------------------------------
+//Add a number of data fields in the model data. All model change
+//observers are notified about the change.
+//-----------------------------------------------------------------------------
+OSN_EXPORT void AlfModel::addData(
+ int aNumContainerIndices, int* aContainerIndices, IAlfVariantType* aData)
+ {
+ auto_ptr<AlfModelOperation> op( AlfModelOperation::create(
+ AlfModelOperation::EOperationAdd,
+ aNumContainerIndices,
+ aContainerIndices,
+ aData ) );
+
+ executeOperation( op.get() );
+ }
+
+//-----------------------------------------------------------------------------
+//Remove a number of data fields in the model data. All model change
+//observers are notified about the change.
+//-----------------------------------------------------------------------------
+OSN_EXPORT void AlfModel::removeData(
+ int aNumContainerIndices, int* aContainerIndices)
+ {
+ auto_ptr<AlfModelOperation> op( AlfModelOperation::create(
+ AlfModelOperation::EOperationRemove,
+ aNumContainerIndices,
+ aContainerIndices ) );
+
+ executeOperation( op.get() );
+ }
+
+//-----------------------------------------------------------------------------
+//Remove a number of data fields in the model data. All model change
+//observers are notified about the change.
+//-----------------------------------------------------------------------------
+OSN_EXPORT void AlfModel::updateData(
+ int aNumContainerIndices, int* aContainerIndices, IAlfVariantType* aData)
+ {
+ auto_ptr<AlfModelOperation> op( AlfModelOperation::create(
+ AlfModelOperation::EOperationUpdate,
+ aNumContainerIndices,
+ aContainerIndices,
+ aData ) );
+
+ executeOperation( op.get() );
+ }
+
+//-----------------------------------------------------------------------------
+ /**
+ * Api for executing batch operations
+ *
+ * @param aOperationsArray - An RPOinterArray containing the list of
+ * operations to be executed in batch.
+ * @since S60 ?S60_version
+ */
+//-----------------------------------------------------------------------------
+OSN_EXPORT void AlfModel::executeOperations(
+ AlfPtrVector<AlfModelOperation>& aOperationsArray)
+ {
+ int index = 0;
+ int count = aOperationsArray.count();
+ int obsvrCount = mData->mObserverArray.count();
+ AlfModelOperation* tempOperation=0;
+
+ for ( index = 0; index < obsvrCount; index++ )
+ {
+ mData->mObserverArray[index]->dataChanging( aOperationsArray );
+ }
+
+ for ( index = 0; index < count; index++ )
+ {
+ tempOperation = aOperationsArray[index];
+ switch( tempOperation->operation() )
+ {
+ case AlfModelOperation::EOperationAdd:
+ this->addData( tempOperation );
+ break;
+ case AlfModelOperation::EOperationRemove:
+ this->removeData( tempOperation );
+ break;
+ case AlfModelOperation::EOperationUpdate:
+ this->updateData( tempOperation );
+ default:
+ break;
+
+ }
+ }
+
+ for ( index = 0; index < obsvrCount; index++ )
+ {
+ mData->mObserverArray[index]->dataChanged();
+ }
+ }
+
+//-----------------------------------------------------------------------------
+ /**
+ * Api for executing one operation at a Time
+ *
+ * @param aOperation - An Operation to be executed on the model.
+ * @since S60 ?S60_version
+ */
+//-----------------------------------------------------------------------------
+OSN_EXPORT void AlfModel::executeOperation(AlfModelOperation* aOperation)
+ {
+ int index = 0;
+ int obsvrCount = mData->mObserverArray.count();
+
+ for ( index = 0; index < obsvrCount; index++ )
+ {
+ mData->mObserverArray[index]->dataChanging( *aOperation );
+ }
+
+ switch(aOperation->operation())
+ {
+ case AlfModelOperation::EOperationAdd:
+ this->addData(aOperation);
+ break;
+ case AlfModelOperation::EOperationRemove:
+ this->removeData(aOperation);
+ break;
+ case AlfModelOperation::EOperationUpdate:
+ this->updateData(aOperation);
+ default:
+ break;
+ }
+
+ for ( index = 0; index < obsvrCount; index++ )
+ {
+ mData->mObserverArray[index]->dataChanged();
+ }
+ }
+} // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfmodeloperation.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2006 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 file implements the various types of operations to be performed on model.
+*
+*/
+
+
+
+
+//INCLUDES
+#include "alf/alfmodeloperation.h"
+#include <alf/alfvarianttype.h>
+#include <alf/alfexceptions.h>
+#include <osn/osnnew.h>
+
+using namespace Alf;
+
+
+OSN_EXPORT AlfModelOperation* AlfModelOperation::create(
+ OperationType aOperation, int aNumContainerIndices,
+ int* aContainerIndices, IAlfVariantType* aData )
+ {
+ return new( EMM ) AlfModelOperation(
+ aOperation, aNumContainerIndices, aContainerIndices, aData );
+ }
+
+
+OSN_EXPORT AlfModelOperation* AlfModelOperation::create( OperationType aOperation, int aNumContainerIndices,
+ int* aContainerIndices, IAlfVariantType* aData,
+ const UString& aDataName )
+ {
+ return new( EMM ) AlfModelOperation(
+ aOperation, aNumContainerIndices, aContainerIndices, aData, aDataName );
+ }
+
+AlfModelOperation::AlfModelOperation(
+ OperationType aOperation, int aNumContainerIndices,
+ int* aContainerIndices, IAlfVariantType* aData )
+ {
+ mOperation = aOperation ;
+ mNumContainerIndices = aNumContainerIndices;
+ mContainerIndices = aContainerIndices ;
+ mData = aData;
+ }
+
+
+AlfModelOperation::AlfModelOperation( OperationType aOperation, int aNumContainerIndices,
+ int* aContainerIndices, IAlfVariantType* aData,
+ const UString& aDataName )
+ {
+ mOperation = aOperation ;
+ mNumContainerIndices = aNumContainerIndices;
+ mContainerIndices = aContainerIndices ;
+ mDataName = aDataName;
+ mData = aData;
+ }
+
+
+OSN_EXPORT AlfModelOperation::~AlfModelOperation()
+ {
+ delete mData;
+ delete [] mContainerIndices;
+ }
+
+OSN_EXPORT IAlfVariantType& AlfModelOperation::newData() const
+ {
+ if(mOperation == EOperationRemove)
+ {
+ ALF_THROW(AlfDataException,EInvalidModelOperation,"AlfModelOperation")
+ }
+ return *mData;
+ }
+
+OSN_EXPORT const UString& AlfModelOperation::newDataName() const
+ {
+ if(mOperation == EOperationRemove)
+ {
+ ALF_THROW(AlfDataException,EInvalidModelOperation,"AlfModelOperation")
+ }
+ return mDataName;
+ }
+
+OSN_EXPORT IAlfVariantType* AlfModelOperation::getNewData()
+ {
+ if(mOperation == EOperationRemove)
+ {
+ ALF_THROW(AlfDataException,EInvalidModelOperation,"AlfModelOperation")
+ }
+ IAlfVariantType* data = mData;
+ mData = NULL;
+ return data;
+ }
+
+OSN_EXPORT AlfModelOperation::OperationType AlfModelOperation::operation() const
+ {
+ return mOperation;
+ }
+
+
+OSN_EXPORT IAlfVariantType* AlfModelOperation::parentData( IAlfVariantType& aRoot ) const
+ {
+ try
+ {
+ if ( mNumContainerIndices == 0 )
+ {
+ return NULL;
+ }
+ IAlfVariantType* current = &aRoot;
+ for ( int i = 0; current && i < mNumContainerIndices - 1; ++i )
+ {
+ if ( current->type() == IAlfVariantType::EContainer &&
+ mContainerIndices[i] < current->container()->count() )
+ {
+ current = current->container()->item( mContainerIndices[i] );
+ }
+ else if ( current->type() == IAlfVariantType::EMap &&
+ mContainerIndices[i] < current->map()->count() )
+ {
+ current = current->map()->item( mContainerIndices[i] );
+ }
+ else if ( current->type() == IAlfVariantType::EBranch )
+ {
+ if ( mContainerIndices[i] == 0 )
+ {
+ // Index 0 is for the parent data
+ current = current->branch()->data();
+ }
+ else if ( mContainerIndices[i] == 1 )
+ {
+ // Index 1 is for the child data
+ current = current->branch()->childData();
+ }
+ }
+ else
+ {
+ // Not found
+ return NULL;
+ }
+ }
+ return current;
+ }
+ catch(AlfDataException& aException)
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfModelOperation")
+ }
+ }
+
+OSN_EXPORT int AlfModelOperation::index() const
+ {
+ return mContainerIndices[mNumContainerIndices - 1];
+ }
+
+OSN_EXPORT int AlfModelOperation::numContainerIndices() const
+ {
+ return mNumContainerIndices;
+ }
+
+OSN_EXPORT int AlfModelOperation::containerIndex( int aIndex ) const
+ {
+ return mContainerIndices[aIndex];
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfrealvalue.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2007 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: Real Value for attribute Value type.
+*
+*/
+
+
+#include <osn/osnnew.h>
+#include "alfrealvalue.h"
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+AlfRealValue::AlfRealValue(float aValue, TAlfUnit aUnit)
+ {
+ mReal = aValue;
+ mUnit = aUnit;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+AlfRealValue::~AlfRealValue()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the real value.
+// ---------------------------------------------------------------------------
+//
+float AlfRealValue::realValue() const
+ {
+ return mReal;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the type of the atrribute value.
+// ---------------------------------------------------------------------------
+//
+AlfAttributeValueType::Type AlfRealValue::type() const
+ {
+ return EFloat;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the unit.
+// ---------------------------------------------------------------------------
+//
+TAlfUnit AlfRealValue::unit() const
+ {
+ return mUnit;
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfrecyclinggridelement.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2007 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: The implementation for grid element with recycling of visuals supported.
+*
+*/
+
+#include "alf/alfrecyclinggridelement.h"
+#include "alfrecyclinggridelementimpl.h"
+
+#include <alf/alfenv.h>
+#include <alf/alfconstants.h>
+#include <alf/alfcommand.h>
+
+#include <alf/alfgridlayout.h>
+#include <alf/alflayout.h>
+#include <alf/alfcontrol.h>
+#include <alf/alfevent.h>
+
+#include "alf/ialfvisualtemplate.h"
+#include <alf/alfvarianttype.h>
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfwidgetevents.h>
+#include <osn/ustring.h>
+#include <memory>
+#include <osn/osnnew.h>
+
+using namespace osncore;
+
+namespace Alf
+ {
+
+//----------------------------------------------------------------
+// 1st phase Constructor. Leaves the newly created object
+// on the cleanup stack
+//----------------------------------------------------------------
+OSN_EXPORT AlfRecyclingGridElement::AlfRecyclingGridElement(
+ CAlfWidgetControl& aControl,
+ const char* aName,
+ int aNumColumns,
+ int aNumRows)
+ {
+ construct(aControl,aName);
+
+ mImpl.reset( new( EMM ) AlfRecyclingGridElementImpl(
+ *this, aNumColumns, aNumRows ) );
+
+ control().addEventHandler(this);
+ }
+
+//----------------------------------------------------------------
+// Class Destructor
+//----------------------------------------------------------------
+OSN_EXPORT AlfRecyclingGridElement::~AlfRecyclingGridElement()
+ {
+ control().removeEventHandler(*this);
+ }
+
+//----------------------------------------------------------------
+// Sets the fill style for the Recycle grid element
+//----------------------------------------------------------------
+OSN_EXPORT void AlfRecyclingGridElement::setFillStyle(FillStyle aFillStyle, int aFillStyleParam)
+ {
+ mImpl->setFillStyle( aFillStyle, aFillStyleParam );
+ }
+
+
+OSN_EXPORT void AlfRecyclingGridElement::setAnimationTimes(
+ int aScrollingTime, int aFadeInTime, int aFadeInDelay,
+ int aFadeOutTime, int aFadeOutDelay )
+ {
+ mImpl->setAnimationTimes(
+ aScrollingTime, aFadeInTime, aFadeInDelay,
+ aFadeOutTime, aFadeOutDelay );
+ }
+
+
+OSN_EXPORT CAlfVisual* AlfRecyclingGridElement::createVisualTree(
+ IAlfVariantType& aData, uint aDataID, CAlfLayout* aParentLayout, int aLayoutIndex )
+ {
+ return mImpl->createVisualTree(
+ aData, aDataID, aParentLayout, aLayoutIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// OfferEventL - Handle the Event.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+OSN_EXPORT AlfEventStatus AlfRecyclingGridElement::offerEvent( CAlfWidgetControl& aControl, const TAlfEvent& aEvent )
+ {
+ return mImpl->offerEvent( aControl, aEvent )
+ ?EEventHandled:EEventNotHandled;
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfRecyclingGridElement::setActiveStates( unsigned int aStates )
+ {
+ mImpl->setActiveStates( aStates );
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// sets event handler data.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfRecyclingGridElement::setEventHandlerData( const AlfWidgetEventHandlerInitData& aData )
+ {
+ mImpl->setEventHandlerData(aData);
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// returns the eventhandlertype .
+// ---------------------------------------------------------------------------
+//
+IAlfWidgetEventHandler::AlfEventHandlerType AlfRecyclingGridElement::eventHandlerType()
+ {
+ return IAlfWidgetEventHandler::EPresentationEventHandler;
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// returns eventhandler excecutionphase.
+// ---------------------------------------------------------------------------
+//
+IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase AlfRecyclingGridElement::eventExecutionPhase()
+ {
+ return IAlfWidgetEventHandler::ETunnellingPhaseEventHandler;
+ }
+// returns event handler data.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfWidgetEventHandlerInitData* AlfRecyclingGridElement::eventHandlerData()
+ {
+ return mImpl->eventHandlerData();
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfRecyclingGridElement::makeInterface( const IfId& aType )
+ {
+ IAlfInterfaceBase* ret(0);
+ UString param(aType.mImplementationId);
+
+ if (param == AlfRecyclingGridElement::type().mImplementationId )
+ {
+ ret = static_cast<IAlfElement*>(this);
+ }
+ else if (param == IAlfWidgetEventHandler::type().mImplementationId )
+ {
+ ret = static_cast<IAlfWidgetEventHandler*>(this);
+ }
+ else
+ {
+ ret = AlfElement::makeInterface(aType);
+ }
+ return ret;
+ }
+
+
+OSN_EXPORT bool AlfRecyclingGridElement::accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const
+ {
+ return mImpl->accept( aControl, aEvent );
+ }
+
+OSN_EXPORT void AlfRecyclingGridElement::createChildVisualTree(
+ IAlfElement* aElement, IAlfVariantType& aChildData,
+ IAlfBranch& aData, int aIndex, uint aDataID )
+ {
+ mImpl->createChildVisualTree( aElement, aChildData, aData, aIndex, aDataID );
+ }
+
+OSN_EXPORT void AlfRecyclingGridElement::removeChildVisualTree(
+ IAlfElement* aElement, IAlfBranch& aData, int aIndex, uint aDataID )
+ {
+ mImpl->removeChildVisualTree( aElement, aData, aIndex, aDataID );
+ }
+
+// ---------------------------------------------------------------------------
+// Description: Do not destroy visuals, because it's done elsewhere.
+// ---------------------------------------------------------------------------
+void AlfRecyclingGridElement::removeAndDestroyVisuals( int aTimeMilliseconds )
+ {
+ mImpl->removeAndDestroyVisuals( aTimeMilliseconds );
+ }
+
+ } //Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfrecyclinggridelementimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,755 @@
+/*
+* Copyright (c) 2009 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: Private Implementation file for AlfRecyclingGridElement.
+*
+*/
+
+
+#include "alfrecyclinggridelementimpl.h"
+#include "autoarrayptr.h"
+#include <uiacceltk/HuiLayout.h> // Just for CHuiLayout::EExpandVertically
+#include <alf/alfenv.h>
+#include <alf/alfconstants.h>
+#include <alf/alfcommand.h>
+
+#include <alf/alfgridlayout.h>
+#include <alf/alflayout.h>
+#include <alf/alfcontrol.h>
+#include <alf/alfevent.h>
+
+#include "alf/ialfvisualtemplate.h"
+#include <alf/alfvarianttype.h>
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfvisualexception.h>
+#include <alf/alfwidgetevents.h>
+#include <osn/ustring.h>
+#include <memory>
+#include <osn/osnnew.h>
+
+using namespace osncore;
+
+_LIT8(KMainLayoutName, "MainLayout");
+_LIT8(KScrollLayoutName, "ScrollLayout");
+
+const int KDefaultScrollingTime = 400;
+
+using namespace Alf;
+
+AlfRecyclingGridElementImpl::AlfRecyclingGridElementImpl(
+ AlfRecyclingGridElement& aOwner,
+ int aNumColumns,
+ int aNumRows) : mOwner( aOwner )
+ {
+ mNumVisibleColumns = aNumColumns;
+ mNumVisibleRows = aNumRows;
+ mNumColumns = 0;
+ mNumRows = 0;
+ mFillStyle = AlfRecyclingGridElement::AlfRecyclingGridElement::EColumnsFirst;
+ mFillStyleParam = 0;
+ mScrollingTime = KDefaultScrollingTime;
+ mFadeInTime = KDefaultScrollingTime / 2.f;
+ mFadeInDelay = KDefaultScrollingTime / 2.f;
+ mFadeOutTime = KDefaultScrollingTime / 2.f;
+ mFadeOutDelay = 0;
+ mScrollOffset.iX = 0;
+ mScrollOffset.iY = 0;
+ mHorizontalOffset = false;
+ mVerticalOffset = false;
+
+ setFillStyle(AlfRecyclingGridElement::AlfRecyclingGridElement::EColumnsFirst, aNumColumns);
+ }
+
+//----------------------------------------------------------------
+// Class Destructor
+//----------------------------------------------------------------
+AlfRecyclingGridElementImpl::~AlfRecyclingGridElementImpl()
+ {
+ }
+
+//----------------------------------------------------------------
+// Sets the fill style for the Recycle grid element
+//----------------------------------------------------------------
+void AlfRecyclingGridElementImpl::setFillStyle(AlfRecyclingGridElement::FillStyle aFillStyle, int aFillStyleParam)
+ {
+ mFillStyle = aFillStyle;
+ mFillStyleParam = aFillStyleParam;
+ mNumRows = mNumVisibleRows;
+ mNumColumns = mNumVisibleColumns;
+ if (mFillStyle == AlfRecyclingGridElement::EColumnsFirst ||
+ (mFillStyle == AlfRecyclingGridElement::ERowsFirst && mFillStyleParam > mNumRows))
+ {
+ mNumRows++; // 1 extra row for scrolling
+ }
+ if (mFillStyle == AlfRecyclingGridElement::ERowsFirst ||
+ (mFillStyle == AlfRecyclingGridElement::EColumnsFirst && mFillStyleParam > mNumColumns))
+ {
+ mNumColumns++; // 1 extra column for scrolling
+ }
+ }
+
+
+void AlfRecyclingGridElementImpl::setAnimationTimes(
+ int aScrollingTime, int aFadeInTime, int aFadeInDelay,
+ int aFadeOutTime, int aFadeOutDelay )
+ {
+ mScrollingTime = aScrollingTime;
+ mFadeInTime = aFadeInTime;
+ mFadeInDelay = aFadeInDelay;
+ mFadeOutTime = aFadeOutTime;
+ mFadeOutDelay = aFadeOutDelay;
+ }
+
+
+CAlfVisual* AlfRecyclingGridElementImpl::createVisualTree(
+ IAlfVariantType& aData, uint aDataID, CAlfLayout* aParentLayout, int aLayoutIndex )
+ {
+ CAlfLayout *main = NULL;
+ CAlfGridLayout *grid = NULL;
+ CAlfVisual* visualTree = mOwner.findVisual(aDataID);
+
+ if ( visualTree )
+ {
+ main = (CAlfLayout *)visualTree;
+ grid = (CAlfGridLayout *)&main->Visual( 0 );
+ }
+ else
+ {
+ main = CAlfLayout::AddNewL((CAlfControl &)mOwner.control());
+ main->SetTagL(KMainLayoutName);
+
+ // Create grid layout
+ grid = CAlfGridLayout::AddNewL((CAlfControl&)mOwner.control(),mNumColumns, mNumRows, main);
+
+ // Scroll layout for additional content,
+ // created by the visual template or other elements.
+ CAlfLayout *scroll = CAlfLayout::AddNewL((CAlfControl&)mOwner.control(), main);
+ scroll->SetTagL(KScrollLayoutName);
+
+ if (mOwner.getVisualTemplate())
+ {
+ mOwner.getVisualTemplate()->createVisualTree(
+ mOwner.control(), aData.branch()->data(), scroll, scroll->Count());
+ }
+ if (aParentLayout)
+ {
+ aParentLayout->Insert(main, aLayoutIndex );
+ }
+ }
+
+ TAlfRealPoint size = main->Size().ValueNow();
+ TAlfRealPoint itemSize(size.iX / (TReal)mNumVisibleColumns,size.iY / (TReal)mNumVisibleRows);
+ TAlfRealPoint gridSize(itemSize.iX * mNumColumns, itemSize.iY * mNumRows);
+ grid->SetSize(gridSize);
+
+ mOwner.addVisualTree(main, aDataID);
+
+ CAlfLayout *parent = NULL;
+ if (mFillStyle == AlfRecyclingGridElement::EColumnsFirst)
+ {
+ // No reordering needed, add directly to the grid layout
+ parent = grid;
+ }
+ CAlfVisual** array = new( EMM ) CAlfVisual*[mNumColumns * mNumRows];
+
+ // Ownership transferred to the autoptr.
+ auto_arrayptr<CAlfVisual*> arrayCleanup( array );
+
+ int childIndex = 0;
+ // Create the children visual trees
+ if ( aData.type() == IAlfVariantType::EBranch &&
+ aData.branch()->childrenCount())
+ {
+ IAlfBranch* branch = aData.branch();
+ TPoint childPos = calculateChildPos(0);
+ int maxColumn = mScrollOffset.iX + mNumColumns;
+ int maxRow = mScrollOffset.iY + mNumRows;
+ for (int i = 0; i < branch->childrenCount() &&
+ ( childPos.iX < maxColumn || childPos.iY < maxRow); ++i)
+ {
+ childPos = calculateChildPos(i);
+ if (childPos.iX >= mScrollOffset.iX && childPos.iX < maxColumn &&
+ childPos.iY >= mScrollOffset.iY && childPos.iY < maxRow)
+ {
+ IAlfElement* child = mOwner.control().findElement( aData.branch()->childName(i).getUtf8());
+ uint childID = mOwner.control().elementDataId(*child, i, aDataID);
+ array[childIndex] = child->createVisualTree(
+ *branch->childData( i ), *branch, i, aDataID, parent, childIndex );
+ childIndex++;
+ }
+
+ }
+ }
+
+ // Reorder and insert to the grid layout
+ if (mFillStyle == AlfRecyclingGridElement::ERowsFirst)
+ {
+ for (int i = 0; i < mNumRows && childIndex >= 0; ++i)
+ {
+ for (int j = 0; j < mNumColumns && childIndex >= 0; ++j)
+ {
+ int err=grid->Append(array[j * mNumRows + i]);
+ if(err!=KErrNone)
+ {
+ ALF_THROW ( AlfVisualException, err, "Grid Append Failed" )
+ }
+ childIndex--;
+ }
+ }
+ }
+
+ return main;
+ }
+
+
+//----------------------------------------------------------------
+// Gets the Point of a child at a given index
+//----------------------------------------------------------------
+TPoint AlfRecyclingGridElementImpl::calculateChildPos(int aInd) const
+ {
+ if (mFillStyle == AlfRecyclingGridElement::EColumnsFirst)
+ {
+ return TPoint(aInd % mFillStyleParam, aInd / mFillStyleParam);
+ }
+ else if (mFillStyle == AlfRecyclingGridElement::ERowsFirst)
+ {
+ return TPoint(aInd / mFillStyleParam, aInd % mFillStyleParam);
+ }
+ return TPoint(0, 0);
+ }
+
+//----------------------------------------------------------------
+// Gets the Index of a child at a given point
+//----------------------------------------------------------------
+int AlfRecyclingGridElementImpl::calculateChildInd(TPoint aPos) const
+ {
+ if (aPos.iX < 0 || aPos.iY < 0)
+ {
+ return -1; // Does not exist
+ }
+ if (mFillStyle == AlfRecyclingGridElement::EColumnsFirst)
+ {
+ if (aPos.iX >= mFillStyleParam)
+ {
+ return -1; // Does not exist
+ }
+ return aPos.iY * mFillStyleParam + aPos.iX;
+ }
+ else if (mFillStyle == AlfRecyclingGridElement::ERowsFirst)
+ {
+ if (aPos.iY >= mFillStyleParam)
+ {
+ return -1; // Does not exist
+ }
+ return aPos.iX * mFillStyleParam + aPos.iY;
+ }
+ return 0;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// OfferEventL - Handle the Event.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+bool AlfRecyclingGridElementImpl::offerEvent( CAlfWidgetControl& aControl, const TAlfEvent& aEvent )
+ {
+
+ if ( !accept( aControl, aEvent ) )
+ {
+ return false;
+ }
+ uint aEventID = aEvent.CustomParameter();
+
+ if ( aEventID == EEventScrollPrimaryNext )
+ {
+ aEventID = ( mFillStyle == AlfRecyclingGridElement::EColumnsFirst ? EEventScrollDown : EEventScrollRight );
+ }
+ else if ( aEventID == EEventScrollPrimaryPrev )
+ {
+ aEventID = ( mFillStyle == AlfRecyclingGridElement::EColumnsFirst ? EEventScrollUp : EEventScrollLeft );
+ }
+ else if ( aEventID == EEventScrollSecondaryNext )
+ {
+ aEventID = ( mFillStyle == AlfRecyclingGridElement::EColumnsFirst ? EEventScrollRight : EEventScrollDown );
+ }
+ else if ( aEventID == EEventScrollSecondaryPrev )
+ {
+ aEventID = ( mFillStyle == AlfRecyclingGridElement::EColumnsFirst ? EEventScrollLeft : EEventScrollUp );
+ }
+
+ if ((int)aEventID == (int)EEventScrollPageDown )
+ {
+ int iter=0;
+ if ((int)mFillStyle == (int)AlfRecyclingGridElement::EColumnsFirst )
+ {
+ iter = mNumRows-1 ;
+ }
+ else
+ {
+ iter = mNumColumns-1 ;
+ }
+
+ for (int i=0;i<iter;i++)
+ {
+ moveSingleRowOrColumn(aControl , false);
+ }
+ return true;
+ }
+ else if ((int)aEventID == (int)EEventScrollPageUp )
+ {
+ int iter=0;
+ if ((int)mFillStyle == (int)AlfRecyclingGridElement::EColumnsFirst )
+ {
+ iter = mNumRows-1 ;
+ }
+ else
+ {
+ iter = mNumColumns-1 ;
+ }
+
+ for (int i=0;i<iter;i++)
+ {
+ moveSingleRowOrColumn(aControl , true);
+ }
+ return true;
+
+ }
+ else
+ {
+ doPositioningAndScrolling(aControl,aEventID);
+ }
+ return true;
+
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void AlfRecyclingGridElementImpl::setActiveStates( unsigned int aStates )
+ {
+ mActiveStates = aStates;
+ }
+
+
+void AlfRecyclingGridElementImpl::doPositioningAndScrolling( CAlfWidgetControl& aControl,uint aEventID)
+ {
+ //unsigned int16 id = aEvent.CustomEventData();//Index of the focus element
+
+ CAlfLayout *main = (CAlfLayout *)mOwner.findVisual(0); //(CAlfLayout *)VisualTreeArray()[0];//root element
+ CAlfGridLayout *grid = (CAlfGridLayout *)&main->Visual(0);
+ CAlfLayout *scroll = (CAlfGridLayout *)&main->Visual(1);
+
+
+ TSize size;
+
+ // Grid/scroll layout movement
+ TPoint layoutMovement(0, 0);
+
+ // New number of the new items to reveal (and old items to hide)
+ int numNewItems = 0;
+
+ // Starting indices and increment step for recycling visuals
+ int recycleSrcInd = 0, recycleDstInd = 0;
+ int recycleIndStep = 0;
+
+ // Starting indices and increment step for fading in/out visuals
+ int fadeInInd = 0, fadeOutInd = 0;
+ int fadeIndStep = 0;
+
+ // Is recycling required?
+ bool recycle = false;
+
+ // Index of the first new child visual
+ TPoint firstNewChildPos(0, 0);
+
+ // Increment step for the new child indices
+ TPoint childPosStep(0, 0);
+
+ if (aEventID == EEventScrollUp) // Up
+ {
+ firstNewChildPos = mScrollOffset + TPoint(mHorizontalOffset ? -1 : 0, -1);
+ childPosStep = TPoint(1, 0);
+ mScrollOffset.iY--;
+ numNewItems = mNumColumns;
+ fadeInInd = mNumColumns - 1;
+ fadeOutInd = grid->Count() - 1;
+ recycleSrcInd = grid->Count() - mNumColumns;
+ recycleIndStep = 1;
+ fadeIndStep = -1;
+ grid->ChildSize(recycleDstInd, size);
+ layoutMovement.iY = -size.iHeight;
+ recycle = !mVerticalOffset;
+ mVerticalOffset = false;
+
+ }
+ else if (aEventID == EEventScrollDown) // Down
+ {
+ firstNewChildPos = mScrollOffset + TPoint(mHorizontalOffset ? -1 : 0, mNumRows - 1);
+ childPosStep = TPoint(1, 0);
+ mScrollOffset.iY++;
+ numNewItems = mNumColumns;
+ recycleDstInd = grid->Count()- 1;
+ fadeInInd = grid->Count() - mNumColumns;
+ fadeIndStep = 1;
+ grid->ChildSize(recycleDstInd, size);
+ layoutMovement.iY = size.iHeight;
+
+ recycle = mVerticalOffset;
+ mVerticalOffset = true;
+
+
+ }
+ else if (aEventID == EEventScrollLeft) // Left
+ {
+ firstNewChildPos = mScrollOffset + TPoint(-1, mVerticalOffset ? -1 : 0);
+ childPosStep = TPoint(0, 1);
+ mScrollOffset.iX--;
+ numNewItems = mNumRows;
+ fadeOutInd = recycleSrcInd = mNumColumns - 1;
+ fadeIndStep = recycleIndStep = mNumColumns;
+ grid->ChildSize(recycleDstInd, size);
+ layoutMovement.iX = -size.iWidth;
+ recycle = !mHorizontalOffset;
+ mHorizontalOffset = false;
+
+ }
+
+ else if (aEventID == EEventScrollRight) // Right
+ {
+ firstNewChildPos = mScrollOffset + TPoint(mNumColumns - 1, mVerticalOffset ? -1 : 0);
+ childPosStep = TPoint(0, 1);
+ mScrollOffset.iX++;
+ numNewItems = mNumRows;
+ fadeInInd = recycleDstInd = mNumColumns - 1;
+ fadeIndStep = recycleIndStep = mNumColumns;
+ grid->ChildSize(recycleDstInd, size);
+ layoutMovement.iX = size.iWidth;
+ recycle = mHorizontalOffset;
+ mHorizontalOffset = true;
+ }
+
+ IAlfVariantType *recyclingGridData = aControl.elementData(mOwner, 0);
+ if ( recyclingGridData->type()!= IAlfVariantType::EBranch)
+ {
+ return ;
+ }
+
+ aControl.Env().PauseRefresh();
+
+ // Perform scrolling
+ if (aEventID == EEventScrollPageDown || aEventID == EEventScrollPageUp || aEventID == EEventScrollUp || aEventID == EEventScrollDown ||aEventID == EEventScrollLeft || aEventID == EEventScrollRight)
+ {
+ if (recycle)
+ {
+ // Move the layout
+ grid->SetPos(grid->Pos().Target() + layoutMovement);
+ // Recycle visual trees
+ for (int i = 0; i < numNewItems; ++i)
+ {
+ CAlfVisual &visual = grid->Visual(recycleSrcInd + i * recycleIndStep);
+ grid->Reorder(visual, recycleDstInd + i * recycleIndStep);
+ TPoint childPos = firstNewChildPos + TPoint(i * childPosStep.iX, i * childPosStep.iY);
+ int childInd = calculateChildInd(childPos);
+ if (childInd >= 0 && childInd < recyclingGridData->branch()->childrenCount())
+ {
+ IAlfVariantType *recyclingGridChildData = recyclingGridData->branch()->childData(childInd);
+
+ const UString& childName = recyclingGridData->branch()->childName(childInd);
+ IAlfElement *childElement = mOwner.control().findElement(childName.getUtf8());
+ if (childElement!=NULL)
+ {
+ int newDataID= mOwner.control().elementDataId(*childElement,childInd, 0);
+ childElement->replaceVisualTree(
+ *recyclingGridChildData,newDataID ,childElement->dataID(visual));
+ }
+ }
+ }
+ }
+ else
+ {
+ scroll->SetPos(scroll->Pos().Target() - layoutMovement, mScrollingTime);
+ }
+ // Fade in / out
+ for (int i = 0; i < numNewItems; ++i)
+ {
+ // Fade out the old items
+ CAlfVisual &oldItem = grid->Visual(fadeOutInd + i * fadeIndStep);
+ if ( mFadeOutDelay == 0 )
+ {
+ TAlfTimedValue zero;
+ zero.SetValueNow(1.f);
+ zero.SetTarget(0.f, mFadeOutTime);
+ oldItem.SetOpacity(zero);
+ }
+ else
+ {
+ TAlfValueCommand cmd((void*)&oldItem, EAlfValueCommandVisualSetOpacity, 0.f, mFadeOutTime);
+ aControl.Env().Send(cmd, mFadeOutDelay);
+ }
+ // Fade in the new items
+ CAlfVisual &newItem = grid->Visual(fadeInInd + i * fadeIndStep);
+ TAlfTimedValue zero2;
+ zero2.SetValueNow(0.f);
+ zero2.SetTarget(0.f, 0);
+ newItem.SetOpacity(zero2);
+ TPoint childPos = firstNewChildPos + TPoint(i * childPosStep.iX, i * childPosStep.iY);
+ int childInd = calculateChildInd(childPos);
+ IAlfVariantType *recyclingGridChildData = recyclingGridData->branch()->childData(childInd);
+ if (childInd >= 0 && recyclingGridChildData!=NULL)
+ {
+ if ( mFadeInDelay == 0 )
+ {
+ TAlfTimedValue one;
+ one.SetValueNow(0.f);
+ one.SetTarget(1.f, mFadeInTime);
+ newItem.SetOpacity(one);
+ }
+ else
+ {
+ TAlfValueCommand cmd((void*)&newItem, EAlfValueCommandVisualSetOpacity, 1.f, mFadeInTime);
+ aControl.Env().Send(cmd, mFadeInDelay);
+ }
+ }
+ else
+ {
+ newItem.SetOpacity( TAlfTimedValue(0) );
+ }
+ }
+ // Animate layout scrolling
+ grid->SetPos(grid->Pos().Target() - layoutMovement, mScrollingTime);
+ }
+
+ aControl.Env().ContinueRefresh();
+ }
+
+// ---------------------------------------------------------------------------
+// OfferEventL - Handle the Event.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+bool AlfRecyclingGridElementImpl::moveSingleRowOrColumn( CAlfWidgetControl& aControl, bool aPageUp)
+ {
+ uint aEventID;
+
+ if (!aPageUp)
+ {
+ aEventID = (mFillStyle == AlfRecyclingGridElement::EColumnsFirst ? EEventScrollDown : EEventScrollRight);
+ }
+ else
+ {
+ aEventID = (mFillStyle == AlfRecyclingGridElement::EColumnsFirst ? EEventScrollUp : EEventScrollLeft);
+ }
+
+ doPositioningAndScrolling(aControl,aEventID);
+ return true;
+ }
+
+
+bool AlfRecyclingGridElementImpl::accept( CAlfWidgetControl& /*aControl*/, const TAlfEvent& aEvent ) const
+ {
+
+ uint aEventID;
+ if (!aEvent.IsCustomEvent())
+ {
+ return false;
+ }
+ aEventID = aEvent.CustomParameter();
+ if ( aEventID == EEventScrollPrimaryNext || aEventID == EEventScrollPrimaryPrev ||
+ aEventID == EEventScrollSecondaryNext || aEventID == EEventScrollSecondaryPrev ||
+ aEventID == EEventScrollToFirst || aEventID == EEventScrollToLast ||
+ aEventID == EEventScrollUp || aEventID == EEventScrollDown ||
+ aEventID == EEventScrollLeft || aEventID == EEventScrollRight ||
+ aEventID == EEventScrollPageDown || aEventID == EEventScrollPageUp)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+
+void AlfRecyclingGridElementImpl::createChildVisualTree(
+ IAlfElement* aElement, IAlfVariantType& aChildData,
+ IAlfBranch& aData, int aIndex, uint aDataID )
+ {
+ int firstVisibleInd=0, lastVisibleInd=0;
+ int firstVisibleDataId=0, lastVisibleDataId=0;
+ CAlfLayout *main = (CAlfLayout *)mOwner.findVisual(0);
+ CAlfGridLayout *grid = (CAlfGridLayout *)&main->Visual(0);
+
+ if (grid->Count() > 0)
+ {
+ CAlfVisual &first = grid->Visual( 0 );
+ CAlfVisual &last = grid->Visual( grid->Count() - 1 );
+
+ firstVisibleDataId= aElement->dataID(first);
+ lastVisibleDataId= aElement->dataID(last);
+
+ firstVisibleInd= mOwner.control().dataIdToIndex(*aElement, firstVisibleDataId);
+ lastVisibleInd= mOwner.control().dataIdToIndex(*aElement, lastVisibleDataId);
+
+ // Replace the visual tree
+ IAlfElement* child = mOwner.control().findElement( aData.branch()->childName(0).getUtf8());
+
+
+ if (aData.childrenCount()>= mNumColumns*mNumRows)
+ {
+ // Check that the child index is in the visible area
+ if ( aIndex >= firstVisibleInd && aIndex <= lastVisibleInd )
+ {
+ CAlfVisual &last = grid->Visual( grid->Count()-1 );
+
+ // Move the last visual to the right position
+ grid->Reorder( last, aIndex - firstVisibleInd);
+
+
+ // Update data IDs
+ child->updateDataIDs( aData, aIndex, 1, aDataID, aDataID );
+
+ int oldElementDataID = aElement->dataID( last );
+ int newElementDataID = mOwner.control().elementDataId( *aElement, aIndex - firstVisibleInd, aDataID );
+
+ child->replaceVisualTree( aChildData, newElementDataID ,oldElementDataID );
+ }
+ }
+ else
+ {
+ int newElementDataID = mOwner.control().elementDataId( *aElement, aIndex - firstVisibleInd, aDataID );
+
+ //Update data IDs
+ child->updateDataIDs( aData, aIndex, 1, aDataID, aDataID );
+
+ //CAlfVisual* newItem = child->createVisualTree(aChildData, aData,aData.childrenCount(), aDataID, static_cast<CAlfLayout*>(grid ));
+ CAlfVisual* newItem = child->createVisualTree(aChildData, newElementDataID,static_cast<CAlfLayout*>(grid ),grid->Count()-1);
+
+ // Move the last visual to the right position
+ grid->Reorder( *newItem, aIndex - firstVisibleInd);
+ }
+ }
+ else
+ {
+ aElement->createVisualTree( aChildData, aData, aIndex, aDataID, grid, aIndex );
+ }
+ }
+
+void AlfRecyclingGridElementImpl::removeChildVisualTree(
+ IAlfElement* aElement, IAlfBranch& aData, int aIndex, uint aDataID )
+ {
+ int firstVisibleInd=0, lastVisibleInd=0;
+ int firstVisibleDataId=0, lastVisibleDataId=0;
+ CAlfLayout *main = (CAlfLayout *)mOwner.findVisual(0);
+ CAlfGridLayout *grid = (CAlfGridLayout *)&main->Visual(0);
+
+ CAlfVisual &first = grid->Visual( 0 );
+
+ if (aData.childrenCount()-1 > (grid->Count() - 1) )
+ {
+ CAlfVisual &last = grid->Visual( grid->Count() - 1 );
+ firstVisibleDataId= aElement->dataID(first);
+ lastVisibleDataId= aElement->dataID(last);
+
+ firstVisibleInd= mOwner.control().dataIdToIndex(*aElement, firstVisibleDataId);
+ lastVisibleInd= mOwner.control().dataIdToIndex(*aElement, lastVisibleDataId);
+
+ /*Check that the child index is in the visible area*/
+ if ( aIndex >= firstVisibleInd && aIndex <= lastVisibleInd )
+ {
+ // Find the visual to be removed - it's used to show the next visual tree below the visible area
+ CAlfVisual &removed = grid->Visual( aIndex - firstVisibleInd );
+
+ // Move it to the end of the grid
+ grid->Reorder( removed, grid->Count() - 1 );
+
+
+ // Replace the visual tree
+ IAlfElement* child = mOwner.control().findElement( aData.branch()->childName(0).getUtf8());
+
+ IAlfVariantType* data =NULL;
+ data = aData.childData( lastVisibleInd + 1 );
+
+ int oldElementDataID = aElement->dataID( removed );
+
+ int newElementDataID ;
+ newElementDataID = mOwner.control().elementDataId( *aElement, lastVisibleInd + 1, aDataID );
+
+ if (data!=NULL)
+ {
+ child->replaceVisualTree(*data, newElementDataID, oldElementDataID);
+ }
+
+ if (aData.childrenCount()-1 <= (grid->Count() - 1 ))
+ {
+ child->removeVisualTree(aData, aData.childrenCount()-1,aDataID);
+ }
+
+ // Update data IDs
+ child->updateDataIDs( aData, aIndex, -1, aDataID, aDataID );
+ }
+ }
+ else
+ {
+ CAlfVisual &last = grid->Visual(aData.childrenCount()-1);
+ firstVisibleDataId= aElement->dataID(first);
+ lastVisibleDataId= aElement->dataID(last);
+
+ firstVisibleInd= mOwner.control().dataIdToIndex(*aElement, firstVisibleDataId);
+ lastVisibleInd= mOwner.control().dataIdToIndex(*aElement, lastVisibleDataId);
+
+
+ /*Check that the child index is in the visible area*/
+ if ( aIndex >= firstVisibleInd && aIndex <= lastVisibleInd )
+ {
+ // Find the visual to be removed - it's used to show the next visual tree below the visible area
+ CAlfVisual &removed = grid->Visual( aIndex - firstVisibleInd );
+
+ grid->Reorder( removed, aData.childrenCount()-1);
+
+ // Replace the visual tree
+ IAlfElement* child = mOwner.control().findElement( aData.branch()->childName(0).getUtf8());
+
+ IAlfVariantType* data =NULL;
+ data = aData.childData( aData.childrenCount() -1 );
+
+ // Replace the visual tree
+
+ CAlfVisual &last = grid->Visual( aData.childrenCount()-1 );
+
+ int oldElementDataID = aElement->dataID( removed );
+
+ int newElementDataID ;
+ newElementDataID = mOwner.control().elementDataId( *aElement, aData.childrenCount()-1, aDataID );
+
+ if (data!=NULL)
+ {
+ child->replaceVisualTree(*data, newElementDataID, oldElementDataID);
+ }
+
+ if (aData.childrenCount()-1 <= (grid->Count() - 1 ))
+ {
+ child->removeVisualTree(aData, aData.childrenCount()-1,aDataID);
+ }
+
+ // Update data IDs
+ child->updateDataIDs( aData, aIndex, -1, aDataID, aDataID );
+ }
+ }
+ }
+// ---------------------------------------------------------------------------
+// Description: Do not destroy visuals, because it's done elsewhere.
+// ---------------------------------------------------------------------------
+void AlfRecyclingGridElementImpl::removeAndDestroyVisuals( int /*aTimeMilliseconds*/ )
+ {
+ }
+
+// End of File.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfreferencetovisual.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2007 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: Visual class for alfred widget model.
+ This class queries the visual by name and ID.
+*
+*/
+
+
+
+
+//INCLUDES
+
+#include "alf/alfreferencetovisual.h"
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfvisual.h>
+#include "alf/alfelement.h"
+#include <osn/ustring.h>
+#include <osn/osnnew.h>
+#include <alf/alfexceptions.h>
+
+//using namespace osncore;
+
+namespace Alf
+ {
+////////////////////// CAlfReferenceToVisual //////////////////////
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+OSN_EXPORT AlfReferenceToVisual* AlfReferenceToVisual::create(
+ const char *aElementName,
+ const char *aVisualName,
+ bool aUseDataID)
+ {
+ return new( EMM ) AlfReferenceToVisual( aElementName, aVisualName, aUseDataID );
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Constructor
+// ---------------------------------------------------------------------------
+//
+AlfReferenceToVisual::AlfReferenceToVisual(const char *aElementName,
+ const char *aVisualName, bool aUseDataID)
+ {
+ mUseDataID = aUseDataID;
+ mElementName = UString(aElementName);
+ mVisualName = UString(aVisualName);
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Class Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfReferenceToVisual::~AlfReferenceToVisual()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Description :Find the referenced visual according to the given data ID.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT CAlfVisual *AlfReferenceToVisual::resolve(CAlfWidgetControl &aControl, unsigned int aDataID)
+ {
+ // Find the element.
+ CAlfVisual* visual = NULL;
+ IAlfElement *element = aControl.findElement(mElementName.getUtf8());
+ if (element)
+ {
+ unsigned int dataID = aDataID;
+
+ // Find the visual.
+ visual = element->findVisual(mVisualName.getUtf8(), dataID);
+ if (!visual)
+ {
+ // maybe global visual.
+ visual = element->findVisual(mVisualName.getUtf8(), 0);
+ }
+ }
+ return visual;
+ }
+
+// ---------------------------------------------------------------------------
+// Description :Finds the referenced visual according to the given pointer.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT CAlfVisual *AlfReferenceToVisual::resolve(CAlfWidgetControl &aControl, CAlfVisual* aSourceVisual)
+ {
+ // Find the element.
+ CAlfVisual* visual = NULL;
+ //Get the element with the name stored herein
+ IAlfElement *element = aControl.findElement(mElementName.getUtf8());
+ if (element)
+ {
+ //is passed visual part of the element
+ if (element->contains(*aSourceVisual))
+ {
+ HBufC8 *buf8 = NULL;
+ TRAPD(error,buf8 = aSourceVisual->Tag().AllocL());
+ if (error != KErrNone)
+ {
+ ALF_THROW(AlfVisualException,ECommonError,"AlfReferenceToVisual")
+ }
+
+ UString sourceTag((const char*)buf8->Des().PtrZ());
+ if (mVisualName.compare(sourceTag)==0) //Is this visual same as what was stored herein?
+ {
+ visual = aSourceVisual;
+ }
+ delete buf8;
+ }
+ }
+ return visual;
+ }
+
+ } // namespace Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfsort.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2006 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: sorting routine. uses Symbian services: User::QuickSort
+*
+*/
+
+
+//INCLUDES
+#include <e32std.h>
+#include <alf/ialfmap.h>
+#include <alf/alfvarianttype.h>
+#include <alf/ialfsortfunction.h>
+//#include "alf/alfperf.h"
+#include "alfsort.h"
+
+using namespace Alf;
+
+/**
+* Defines the characteristics of a key used
+* to access the elements of an array. Used for sort.
+* @since S60 ?S60_version
+*/
+NONSHARABLE_CLASS(AlfSortKey) : public TKey
+ {
+public:
+
+ /**
+ * constructor
+ *
+ * @since S60 ?S60_version
+ * @param aSortFunction callback interface for sort.
+ * @param aArr array to sort.
+ * @param aCount. count of items in the array.
+ */
+ AlfSortKey( const IAlfSortFunction& aSortFunction,
+ IAlfVariantType** aArr, uint aCount );
+
+ /**
+ * returns data from array
+ *
+ * @since S60 ?S60_version
+ * @param anIndex index to element to return
+ * @return element at index anIndex.
+ */
+ TAny *At(TInt anIndex) const;
+
+ /**
+ * compares two items.
+ *
+ * @since S60 ?S60_version
+ * @param aLeft index to the array for left parameter.
+ * @return the value returned from sort function:
+ * < 0, if aFirst is less than aSecond,
+ * > 0 if aFirst is more than aSecond,
+ * 0, if aFirst equals aSecond.
+ */
+ TInt Compare(TInt aLeft, TInt aRight) const;
+private:
+
+ //sort function not owned.
+ const IAlfSortFunction& iSortFunction;
+
+ //array to sort. not owned
+ IAlfVariantType** iArr;
+
+ //count of items in array.
+ uint iCount;
+ };
+
+/**
+* Defines the basic behaviour for swapping two elements of an array.
+* Used for sort
+* @since S60 ?S60_version
+*/
+NONSHARABLE_CLASS(AlfSortSwap) : public TSwap
+ {
+public:
+
+ /**
+ * constructor
+ *
+ * @since S60 ?S60_version
+ * @param aArr array, which elements are to be swapped.
+ * @param aCount. count of items in the array.
+ */
+ AlfSortSwap( IAlfVariantType** aArr, uint aCount );
+
+ /**
+ * swaps two items in the array.
+ *
+ * @since S60 ?S60_version
+ * @param aLeft left index
+ * @param aRight right index.
+ */
+ void Swap(TInt aLeft, TInt aRight) const;
+private:
+
+ //array, which elements are to be swapped. Not owned.
+ IAlfVariantType** iArr;
+
+ //count of items in the array.
+ uint iCount;
+ };
+
+// ---------------------------------------------------------------------------
+// Description : constructor
+// ---------------------------------------------------------------------------
+//
+AlfSortKey::AlfSortKey( const IAlfSortFunction& aSortFunction,
+ IAlfVariantType** aArr, uint aCount ) :
+ iSortFunction(aSortFunction), iArr(aArr), iCount(aCount)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Description : return element from index anIndex.
+// ---------------------------------------------------------------------------
+//
+TAny *AlfSortKey::At(TInt anIndex) const
+ {
+ return iArr[anIndex];
+ }
+
+// ---------------------------------------------------------------------------
+// Description : compares two items.
+// ---------------------------------------------------------------------------
+//
+TInt AlfSortKey::Compare(TInt aLeft, TInt aRight) const
+ {
+ const IAlfMap* leftMap = iArr[aLeft]->map();
+ const IAlfMap* rightMap = iArr[aRight]->map();
+ return iSortFunction.compareLeafs( leftMap, rightMap );
+ }
+
+// ---------------------------------------------------------------------------
+// Description : constructor
+// ---------------------------------------------------------------------------
+//
+AlfSortSwap::AlfSortSwap( IAlfVariantType** aArr, uint aCount ) :
+ iArr(aArr), iCount(aCount)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Description : swaps two items
+// ---------------------------------------------------------------------------
+//
+void AlfSortSwap::Swap(TInt aLeft, TInt aRight) const
+ {
+ IAlfVariantType* tmp = iArr[aLeft];
+ iArr[aLeft] = iArr[aRight];
+ iArr[aRight] = tmp;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : The sorting routine.
+// ---------------------------------------------------------------------------
+//
+void AlfSort::sort(IAlfVariantType** aArr, uint aCount,
+ const IAlfSortFunction& aSortFunction )
+ {
+ //ALF_PERF_START( perfdata, "AlfSort-Sort-Sorting")
+ AlfSortKey key(aSortFunction, aArr, aCount);
+ AlfSortSwap swap(aArr, aCount);
+ User::QuickSort( aCount, key, swap );
+ //ALF_PERF_STOP( perfdata, "AlfSort-Sort-Sorting")
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfstringvalue.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2007 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: StringType attribute Value.
+*
+*/
+
+
+#include <osn/osnnew.h>
+#include <alf/alfdataexception.h>
+
+#include "alfstringvalue.h"
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+AlfStringValue::AlfStringValue(const UString& aValue)
+ {
+ mString = aValue;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+AlfStringValue::~AlfStringValue()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the string value.
+// ---------------------------------------------------------------------------
+//
+const UString& AlfStringValue::stringValue() const
+ {
+ return mString;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the type of the atrribute value.
+// ---------------------------------------------------------------------------
+//
+AlfAttributeValueType::Type AlfStringValue::type() const
+ {
+ return EString;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the unit.
+// ---------------------------------------------------------------------------
+//
+TAlfUnit AlfStringValue::unit() const
+ {
+ ALF_THROW(AlfDataException,EInvalidAttributeValue,"AlfStringValue")
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alftextvisualattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,661 @@
+/*
+* Copyright (c) 2007 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: Implements attributesetters for text.
+*
+*/
+
+
+//widget model includes
+#include "alf/alfattributecontainer.h"
+#include "alf/alfattributevaluetype.h"
+#include "alf/alfattribute.h"
+#include "alf/alftextvisualattributesetter.h"
+#include <alf/alfvisualexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfattributeexception.h>
+#include <alf/alfwidgetenvextension.h>
+
+
+//osn includes
+#include <osn/ustring.h>
+
+//alf includes
+#include <alf/alfenv.h>
+#include <alf/alftextvisual.h>
+#include <alf/alftexture.h>
+#include <alf/alfeventhandler.h>
+#include <alf/alfevent.h>
+
+//dui includes
+#include "alf/attrproperty.h"
+
+//other includes
+#include <libc/string.h>
+#include <utf.h>
+
+
+//namespaces
+using namespace osncore;
+using namespace duiuimodel::textvisualattributes;
+using namespace duiuimodel::commonvisualattributes;
+using namespace duiuimodel::layoutattributes;
+
+namespace Alf
+ {
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfTextVisualAttributeSetter::AlfTextVisualAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfTextVisualAttributeSetter::~AlfTextVisualAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Sets Attribute Value. Delegates based on attribute Category.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfTextVisualAttributeSetter::setAttributeValue (
+ CAlfVisual &aVisual,
+ AlfAttributeContainer* aContainer,
+ IAlfMap* aData )
+ {
+ CAlfTextVisual* textVisual = dynamic_cast<CAlfTextVisual*> ( &aVisual );
+
+ if ( !textVisual )
+ {
+ ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfTextVisualAttributeSetter" )
+ }
+
+ AlfCommonVisualAttributeSetter::setAttributeValue(aVisual,
+ aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// Deprecated
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfTextVisualAttributeSetter::createCommand (
+ CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/, int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/ )
+ {
+ //deprecated
+ TAlfCommand* cmd = NULL;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// Sends a command to Env
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfTextVisualAttributeSetter::createAndSendCommands (
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ //ShadowOpacity command can be sent as a TAlfCustomEventCommand
+
+ AlfCommonVisualAttributeSetter::createAndSendCommands (
+ aVisual, aContainer, aRefVisual );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfTextVisualAttributeSetter::handleDynamicAttribute ( CAlfVisual &aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ const char* attrName = aAttr.name();
+ CAlfTextVisual* textVisual = dynamic_cast<CAlfTextVisual*> ( &aVisual );
+ if(textVisual == 0)
+ {
+ return;
+ }
+
+ if ( !strcmp ( attrName, KShadowOpacity ) )
+ {
+ TAlfTimedValue tVal ( ( TReal32 ) aAttr.getSourceValue()->realValue() );
+ tVal.SetTarget ( ( TReal32 ) aAttr.getTargetValue()->realValue(), ( TInt ) aAttr.getTime() );
+ tVal.SetStyle ( aAttr.getInterpolationStyle() );
+ tVal.SetMappingFunctionIdentifier ( aAttr.getMappingFunctionId());
+ textVisual->SetShadowOpacity ( tVal );
+ }
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleDynamicAttribute( aVisual, aAttr, aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual
+// ---------------------------------------------------------------------------
+//
+void AlfTextVisualAttributeSetter::handleStaticAttribute( CAlfVisual& aVisual,
+ AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ const char* attrName = aAttr.name();
+ CAlfTextVisual* textVisual = dynamic_cast<CAlfTextVisual*> ( &aVisual );
+ if (!textVisual)
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfTextVisualAttributeSetter" )
+ }
+
+ if ( !strcmp ( attrName, KLineWrap ) )
+ {
+ textVisual->SetWrapping ( (CAlfTextVisual::TLineWrap)aAttr.intValue() );
+ }
+
+ else if ( !strcmp ( attrName, KLineSpacing ) )
+ {
+ try
+ {
+ AlfAttribute* linespacingunitsAttr = &aContainer.getAttributeByName ( KLineSpacingUnits );
+
+ //a line spacing units attribute was found
+ textVisual->SetLineSpacing ( aAttr.intValue(),
+ (CAlfTextVisual::TLineSpacingUnits)linespacingunitsAttr->intValue() );
+ }
+
+ catch ( AlfDataException& e )
+ {
+ //a line spacing units attribute was not found or it was of invalid data type... Use default...
+ textVisual->SetLineSpacing ( aAttr.intValue() );
+ }
+ }
+
+ else if ( !strcmp ( attrName, KPreconfiguredStyle ) )
+ {
+ try
+ {
+ AlfAttribute* backgroundtypeAttr = &aContainer.getAttributeByName ( KBackgroundType );
+
+ //a background type attribute was found
+ textVisual->SetStyle ( ( TAlfPreconfiguredTextStyle ) aAttr.intValue(),
+ (TAlfBackgroundType)backgroundtypeAttr->intValue() );
+ }
+ catch ( AlfDataException& e )
+ {
+ //no background type attribute found or it was of invalid data type... Use default...
+ textVisual->SetStyle ( ( TAlfPreconfiguredTextStyle ) aAttr.intValue() );
+ }
+ }
+ else if ( !strcmp ( attrName, KText ) )
+ {
+ TPtrC8 src;
+ src.Set ( ( TUint8* ) aAttr.stringValue().getUtf8() );
+ HBufC* desC = NULL;
+
+ TRAPD(err1, desC = CnvUtfConverter::ConvertToUnicodeFromUtf8L ( src ));
+ if (err1 != KErrNone)
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfTextVisualAttributeSetter" )
+ }
+
+ if ( desC )
+ {
+ TRAPD(err2, textVisual->SetTextL ( *desC ));
+ delete desC;
+ if (err2 != KErrNone)
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfTextVisualAttributeSetter" )
+ }
+ }
+ }
+ else if ( !strcmp ( attrName, KTextSkinColorId ) )
+ {
+
+
+ // Retrieve Skin Color Table index
+ try
+ {
+ // colorIndex will not be null. Throws if attribute not found.
+ AlfAttribute* colorIndex = &aContainer.getAttributeByName ( KTextColorSkinIndex );
+ setTextSkinColor(*textVisual, aAttr.stringValue().getUtf8(), colorIndex->stringValue().getUtf8());
+ }
+ catch(AlfDataException& e)
+ {
+ // Error in getting the color index. use default value.
+ setTextSkinColor(*textVisual, aAttr.stringValue().getUtf8());
+ }
+
+ }
+ else if (!strcmp (attrName, KLocalisationText) ) // Support for Localised text
+ {
+
+ AlfAttribute* langAttr=NULL;
+ AlfAttribute* varArgsAttr=NULL;
+
+ // Get the language attribute
+ try
+ {
+ // Retrieve the language attribute.
+ langAttr = &aContainer.getAttributeByName ( KLang );
+ }
+ catch(AlfDataException& e)
+ {
+ // Nothing to do here. just continue.
+ }
+
+ // Get the varargs attribute.
+ try
+ {
+ varArgsAttr = &aContainer.getAttributeByName ( KVarArgs );
+ }
+ catch(AlfDataException& e)
+ {
+ // Nothing to do here. just continue.
+ }
+ setLocalisedText(*textVisual,aAttr.stringValue().getUtf8(),langAttr,varArgsAttr);
+
+ }
+ else if ( !strcmp ( attrName, KTextColor ) )
+ {
+ if ( 4 == aAttr.getTargetValueCount() && AlfAttributeValueType::EInt == aAttr.type(0) &&
+ AlfAttributeValueType::EInt == aAttr.type(1) && AlfAttributeValueType::EInt == aAttr.type(2) &&
+ AlfAttributeValueType::EInt == aAttr.type(3))
+ {
+ TRgb color ( aAttr.intValue(0), aAttr.intValue(1), aAttr.intValue(2), aAttr.intValue(3) );
+ textVisual->SetColor( color );
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute, "AlfTextVisualAttributeSetter" );
+ }
+ }
+ else if ( !strcmp ( attrName, KTextColorSkinIndex ) )
+ {
+ // Do nothing.
+ // This attribute will be used in some other iteration in the
+ // else-if block that uses KTextSkinColorId
+ }
+ else if ( !strcmp ( attrName, KBackgroundType ) )
+ {
+ // Can not do anything with background type alone.
+ // Do nothing.
+ // This attribute will be used in some other iteration in the
+ // else-if block that uses KPreconfiguredStyle
+ }
+ else if ( !strcmp ( attrName, KLineSpacingUnits ) )
+ {
+ // Can not do anything with line spacing units alone.
+ // Do nothing.
+ // This attribute will be used in some other iteration in the
+ // else-if block that uses KLineSpacing
+ }
+ else if ( !strcmp ( attrName, KStyle ) )
+ {
+ textVisual->SetTextStyle ( aAttr.intValue() );
+ }
+ else if ( !strcmp ( attrName, KFont ) )
+ {
+ //not supported, no API in textvisual
+ }
+ else if ( !strcmp ( attrName, KVerticalAlign ) )
+ {
+ AlfAttribute* horzalignAttr = &aContainer.getAttributeByName ( KHorizontalAlign );
+ //will throw if attribute is not found
+
+ textVisual->SetAlign ( ( TAlfAlignHorizontal ) horzalignAttr->intValue(),
+ ( TAlfAlignVertical ) aAttr.intValue() );
+ }
+ else if ( !strcmp ( attrName, KHorizontalAlign ) )
+ {
+ // Do nothing.
+ // This attribute will be used in some other iteration in the
+ // else-if block that uses KVerticalAlign
+ }
+ else if ( !strcmp ( attrName, KMaxLineCount ) )
+ {
+ if (aAttr.type(0) == AlfAttributeValueType::EInt)
+ {
+ textVisual->SetMaxLineCount ( aAttr.intValue() );
+ }
+ else if (aAttr.type(0) == AlfAttributeValueType::EFloat)
+ {
+ textVisual->SetMaxLineCount ( aAttr.realValue() );
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttribute, "AlfTextVisualAttributeSetter" );
+ }
+
+ }
+ else if ( !strcmp ( attrName, KEnableShadow ) )
+ {
+ int enableShadow = aAttr.intValue();
+ TBool flag = ETrue; //Assume true for any non-zero value.
+ if ( 0 == enableShadow )
+ {
+ flag = EFalse;
+ }
+ textVisual->EnableShadow ( flag );
+ }
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleStaticAttribute(
+ aVisual, aAttr, aContainer);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Sets dynamic attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfTextVisualAttributeSetter::handleDynamicDataAttribute (
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData )
+ {
+ //Shadow opacity can be supported
+ AlfCommonVisualAttributeSetter::handleDynamicDataAttribute(aVisual, aAttr,
+ aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// Sets static attributes to visual from data
+// ---------------------------------------------------------------------------
+//
+void AlfTextVisualAttributeSetter::handleStaticDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData )
+ {
+ const char* dataField = aAttr.getDataField();
+
+ // throw if datafield name or data is not set
+ if ( !dataField )
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfTextVisualAttributeSetter" )
+ }
+
+ if (!aData)
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfTextVisualAttributeSetter" )
+ }
+
+ IAlfVariantType* data = aData->item ( UString(dataField));
+ const char* attrName = aAttr.name();
+
+ CAlfTextVisual* textVisual = dynamic_cast<CAlfTextVisual*> ( &aVisual );
+ if(textVisual == 0)
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfTextVisualAttributeSetter" )
+ }
+
+ if ( !strcmp ( attrName, KLineWrap ) )
+ {
+ if ( data && data->type() == IAlfVariantType::EInt )
+ {
+ textVisual->SetWrapping ( ( CAlfTextVisual::TLineWrap ) data->integer() );
+ }
+ }
+ else if ( !strcmp ( attrName, KText ) )
+ {
+ if ( data && data->type() == IAlfVariantType::EString )
+ {
+ TPtrC8 src;
+ src.Set ( ( TUint8* ) data->string().getUtf8() );
+ HBufC* desC = NULL;
+ TRAPD(err1, desC = CnvUtfConverter::ConvertToUnicodeFromUtf8L ( src ));
+ if (err1 != KErrNone)
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfTextVisualAttributeSetter" )
+ }
+
+ if ( desC )
+ {
+ TRAPD(err2, textVisual->SetTextL ( *desC ));
+ delete desC;
+ if (err2 != KErrNone)
+ {
+ ALF_THROW ( AlfDataException, ECommonError, "AlfTextVisualAttributeSetter" )
+ }
+ }
+ }
+ }
+ else if (!strcmp (attrName, KLocalisationText) ) // Support for Localised text
+ {
+
+ AlfAttribute* langAttr=NULL;
+ AlfAttribute* varArgsAttr=NULL;
+
+ // Retrieve the language attribute.
+ if ( data && data->type() == IAlfVariantType::EString )
+ {
+
+ try
+ {
+ langAttr = &aContainer.getAttributeByName ( KLang );
+ }
+ catch(AlfDataException& e)
+ {
+ // Nothing to do here .Just continue.
+ }
+ try
+ {
+ varArgsAttr = &aContainer.getAttributeByName ( KVarArgs );
+ }
+ catch(AlfDataException& e)
+ {
+ // Nothing to do here .Just continue.
+ }
+ setLocalisedText(*textVisual, data->string().getUtf8(),langAttr,varArgsAttr);
+ }
+
+ }
+
+ else if ( !strcmp ( attrName, KTextColor ) )
+ {
+ if ( data && data->type() == IAlfVariantType::EContainer )
+ {
+ IAlfContainer* dataContainer = data->container();
+
+ if ( 4 != dataContainer -> count() )
+ {
+ ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfTextVisualAttributeSetter" )
+ }
+
+ IAlfVariantType* red = dataContainer->item ( 0 ); //red
+ IAlfVariantType* green = dataContainer->item ( 1 ); //green
+ IAlfVariantType* blue = dataContainer->item ( 2 ); //blue
+ IAlfVariantType* alpha = dataContainer->item ( 3 ); //alpha
+
+ if ( red && IAlfVariantType::EInt == red->type() &&
+ green && IAlfVariantType::EInt == green->type() &&
+ blue && IAlfVariantType::EInt == blue->type() &&
+ alpha && IAlfVariantType::EInt == alpha->type() )
+ {
+ TRgb color ( red->integer(), green->integer(), blue->integer(), alpha->integer() );
+ textVisual->SetColor ( color );
+ }
+ }
+ }
+ else if ( !strcmp ( attrName, KTextSkinColorId ) )
+ {
+ if ( data && data->type() == IAlfVariantType::EString )
+ {
+
+ try
+ {
+ // Retrieve skin color table index
+ AlfAttribute* colorIndex = &aContainer.getAttributeByName(
+ KTextColorSkinIndex); // colorIndex will not be null. Throws if not found.
+
+ const char* colorIndexDataField = colorIndex->getDataField();
+ IAlfVariantType* colorIndexData =
+ aData->item(UString(colorIndexDataField));
+ if(colorIndexData && colorIndexData->type() == IAlfVariantType::EString)
+ {
+ setTextSkinColor(*textVisual, data->string().getUtf8(),
+ colorIndexData->string().getUtf8());
+ }
+ }
+ catch(AlfDataException& e)
+ {
+ // No color index found. Use default value.
+ setTextSkinColor(*textVisual, data->string().getUtf8());
+ }
+
+ }
+ }
+ else if ( !strcmp ( attrName, KTextColorSkinIndex ) )
+ {
+ // Handled in KTextSkinColorId case above.
+ }
+ else if ( !strcmp ( attrName, KPreconfiguredStyle ) )
+ {
+ try
+ {
+ AlfAttribute* backgroundtypeAttribute = &aContainer.getAttributeByName ( KBackgroundType );
+ const char* backgroundDataField = backgroundtypeAttribute->getDataField();
+ IAlfVariantType* backgroundData = aData->item ( UString(backgroundDataField) );
+
+ if ( data && data->type() == IAlfVariantType::EInt && backgroundData && backgroundData->type() == IAlfVariantType::EInt )
+ {
+ //a valid background type attribute was found
+ textVisual->SetStyle ( ( TAlfPreconfiguredTextStyle ) data->integer(), ( TAlfBackgroundType ) data->integer() );
+ }
+ }
+ catch ( AlfDataException& e )
+ {
+ if ( data && data->type() == IAlfVariantType::EInt )
+ {
+ //no valid background type attribute found... Use default...
+ textVisual->SetStyle ( ( TAlfPreconfiguredTextStyle ) data->integer() );
+ }
+ }
+ }
+ else if ( !strcmp ( attrName, KBackgroundType ) )
+ {
+ // Can not do anything with background type alone.
+ // Do nothing.
+ // This attribute will be used in some other iteration in the
+ // else-if block that uses KPreconfiguredStyle
+ }
+ else if ( !strcmp ( attrName, KLineSpacing ) )
+ {
+ try
+ {
+ AlfAttribute* linespacingunitsAttribute = &aContainer.getAttributeByName ( KBackgroundType );
+ const char* linespacingunitsDataField = linespacingunitsAttribute->getDataField();
+ IAlfVariantType* linespacingunitsData = aData->item ( UString(linespacingunitsDataField) );
+
+ if ( data && data->type() == IAlfVariantType::EInt && linespacingunitsData && linespacingunitsData->type() == IAlfVariantType::EInt )
+ {
+ //a valid line spacing units attribute was found
+ textVisual->SetLineSpacing ( data->integer(), ( CAlfTextVisual::TLineSpacingUnits ) linespacingunitsData->integer() );
+ }
+ }
+ catch ( AlfDataException& e )
+ {
+ if ( data && data->type() == IAlfVariantType::EInt )
+ {
+ //a valid line spacing units attribute was not found... Use default...
+ textVisual->SetLineSpacing ( data->integer() );
+ }
+ }
+ }
+ else if ( !strcmp ( attrName, KLineSpacingUnits ) )
+ {
+ // Can not do anything with line spacing units alone.
+ // Do nothing.
+ // This attribute will be used in some other iteration in the
+ // else-if block that uses KLineSpacing
+ }
+ else if ( !strcmp ( attrName, KStyle ) )
+ {
+ if ( data && data->type() == IAlfVariantType::EInt )
+ {
+ textVisual->SetTextStyle ( data->integer() );
+ }
+ }
+ else if ( !strcmp ( attrName, KFont ) )
+ {
+ //not supported, no API in textvisual
+ }
+ else if ( !strcmp ( attrName, KVerticalAlign ) )
+ {
+ //will throw if horizontal align is not found
+ AlfAttribute* horzAlignAttribute = &aContainer.getAttributeByName ( KHorizontalAlign );
+ const char* horzAlignDataField = horzAlignAttribute->getDataField();
+ IAlfVariantType* horzAlignData = aData->item ( UString(horzAlignDataField) );
+
+ if ( data && data->type() == IAlfVariantType::EInt && horzAlignData && horzAlignData->type() == IAlfVariantType::EInt )
+ {
+ textVisual->SetAlign ( ( TAlfAlignHorizontal ) horzAlignData->integer(),
+ ( TAlfAlignVertical ) data->integer() );
+ }
+ }
+ else if ( !strcmp ( attrName, KHorizontalAlign ) )
+ {
+ // Do nothing.
+ // This attribute will be used in some other iteration in the
+ // else-if block that uses KVerticalAlign
+ }
+ else if ( !strcmp ( attrName, KMaxLineCount ) )
+ {
+ if ( data && data->type() == IAlfVariantType::EInt )
+ {
+ textVisual->SetMaxLineCount ( data->integer() );
+ }
+
+ }
+ else if ( !strcmp ( attrName, KEnableShadow ) )
+ {
+ if ( data && data->type() == IAlfVariantType::EBool )
+ {
+ textVisual->EnableShadow ( data->boolean() );
+ }
+ }
+ else
+ {
+ AlfCommonVisualAttributeSetter::handleStaticDataAttribute (
+ aVisual, aAttr, aContainer, aData );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Localisation attribute setter helper method. Helper Method.
+// ---------------------------------------------------------------------------
+//
+void AlfTextVisualAttributeSetter::setLocalisedText(CAlfVisual& /*aVisual*/,const char* /*aLocId*/,AlfAttribute* /*aLangAttr*/,AlfAttribute* /*aVarArgsAttr*/)
+ {
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// Helper Method for setting skin color.
+// ---------------------------------------------------------------------------
+//
+void AlfTextVisualAttributeSetter::setTextSkinColor(CAlfTextVisual& /*aTextVisual*/, const Utf8* /*aColorTable*/,
+ const char* /*aColorIndex*/)
+ {
+ }
+
+ } // namespace Alf
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfthememanagerutil.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2006-2007 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 AlfThemeManagerUtil class, the class
+* which is an interface to the ThemeManager component
+*
+*/
+
+#include "alf/alfthememanagerutil.h"
+
+
+#include "tm/themeitemmapper.h"
+#include "tm/thememanager.h"
+#include "tm/themeexception.h"
+using namespace Alf;
+
+#include <UTF.h>
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfThemeManagerUtil::AlfThemeManagerUtil()
+ {
+ mThemeManager=NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfThemeManagerUtil::~AlfThemeManagerUtil()
+ {
+ if(mThemeManager)
+ {
+ ThemeManager::deleteThemeManager();
+ mThemeManager = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Get Skin Image parameters. Given the logical name this method returns the skinid.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAknsItemID AlfThemeManagerUtil::getSkinId(const Utf8* aSkinLogicalName)
+ {
+
+ TAknsItemID skinid;
+ skinid.Set(0,0);
+
+ // Create ThemeManager instance
+ if(!mThemeManager)
+ {
+ mThemeManager = ThemeManager::createThemeManager();
+ }
+
+ // Query ThemeManager for an ItemMapper interface
+ IThemeItemMapper* itemMapper=NULL;
+ // Get Image data
+ ThemeItemDef item;
+
+ try
+ {
+ mThemeManager->getItemMapperInterface(&itemMapper);
+ UString alfSkinLogicalname(aSkinLogicalName);
+ if(itemMapper)
+ {
+ item= itemMapper->findItem(alfSkinLogicalname);
+ }
+ }
+ catch(ThemeException& ex)
+ {
+ if(itemMapper)
+ mThemeManager->releaseItemMapperInterface();
+ throw ex;
+ }
+
+ skinid.iMajor= item.getMajorId();
+ skinid.iMinor= item.getMinorId();
+
+ // Done with ItemMapper interface, release it
+ if(itemMapper)
+ mThemeManager->releaseItemMapperInterface();
+ return skinid;
+ }
+
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfvarianttype.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1646 @@
+/*
+* Copyright (c) 2006 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: Impelements Variants for widgetmodel data.
+*
+*/
+
+
+
+//INCLUDES
+
+
+#include <alf/ialfmodelbase.h>
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+#include <alf/alfvarianttype.h>
+#include <osn/osncommon.h>
+#include <osn/ustring.h>
+#include <alf/alfexceptions.h>
+//#include "alf/alfperf.h"
+#include <osn/osnnew.h>
+#include "alfsort.h"
+
+using osncore::UString;
+using osncore::AlfPtrVector;
+
+using std::auto_ptr;
+
+
+// Forward declared inside the Alf namespace
+namespace Alf
+ {
+
+ union UData
+ {
+ bool mBool; // Boolean
+ int mInt; // 32-bit integer
+ uint mUint; // 32-bit unsigned integer
+ double mReal; // 64-bit real
+ UString* mString;
+ Alf::IAlfModelBase* mBasePtr;
+ };
+
+
+
+//Internal class used to store the VariantData type
+//These classes are not exposed.
+class AlfVariantDataImpl
+{
+public:
+ //Default Constructor
+ AlfVariantDataImpl()
+ {
+ mData.mString = NULL;
+ }
+ //Destructor
+ ~AlfVariantDataImpl()
+ {
+ if(mType == IAlfVariantType::EString)
+ {
+ if(mData.mString)
+ {
+ delete mData.mString;
+ mData.mString = NULL;
+ }
+ }
+ if(mType == IAlfVariantType::ECustomData)
+ {
+ if(mData.mBasePtr)
+ {
+ delete mData.mBasePtr;
+ mData.mBasePtr = NULL;
+ }
+ }
+
+ }
+ //Union that actually stores the variant Data
+ uint8 mType;
+ UData mData;
+};
+
+
+//Internal class used to store the Conatiner Data type
+//These classes are not exposed.
+class AlfContainerDataImpl
+{
+public:
+ //Default Constructor
+ AlfContainerDataImpl()
+ {
+ mArray.setAutoDelete();
+ }
+ //Destructor
+ ~AlfContainerDataImpl()
+ {
+ mArray.clear();
+ }
+ AlfPtrVector<IAlfVariantType> mArray;
+
+};
+
+
+
+//Internal class used to store the Conatiner Data type
+//These classes are not exposed.
+class MapItem
+{
+public:
+ //Default Constructor
+ MapItem():mData(0),mName(0)
+ {
+
+ }
+ //Destructor
+ ~MapItem()
+ {
+ if(mData)
+ {
+ delete mData;
+ mData = NULL;
+ }
+ if(mName)
+ {
+ delete mName;
+ mName = NULL;
+ }
+ }
+ IAlfVariantType* mData;
+ UString* mName;
+};
+
+//Internal class used to store the Branch Data type
+//These classes are not exposed.
+class AlfMapDataImpl
+{
+public:
+ AlfMapDataImpl()
+ {
+
+ }
+ ~AlfMapDataImpl()
+ {
+
+ mArray.clear();
+ }
+ //Array to hold the Map Item
+ AlfPtrVector<MapItem> mArray;
+};
+
+//owned
+class AlfBranchDataImpl
+{
+public:
+ AlfBranchDataImpl():mCurrentData(0),mChildData(0)
+ {
+
+ }
+ ~AlfBranchDataImpl()
+ {
+ if(mCurrentData)
+ {
+ delete mCurrentData;
+ mCurrentData=NULL;
+ }
+
+ if(mChildData)
+ {
+ delete mChildData;
+ mChildData=NULL;
+ }
+ }
+ IAlfMap* mCurrentData;
+ IAlfMap* mChildData;
+};
+
+
+////////////////////// AlfVariantType //////////////////////
+
+// ---------------------------------------------------------------------------
+// Description :Initialize the VarianType with an Unsigned 8 bit Integer Value
+// ---------------------------------------------------------------------------
+//
+
+void AlfVariantType::construct(Type aType)
+ {
+ mVarData.reset( new (EMM) AlfVariantDataImpl() );
+ mVarData->mType = aType;
+ }
+
+OSN_EXPORT AlfVariantType::AlfVariantType()
+ {
+ mVarData.reset( new (EMM) AlfVariantDataImpl() );
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Parameterized Constructor for an Integer
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfVariantType::AlfVariantType(IAlfModelBase* aValue)
+ {
+ construct(ECustomData);
+ mVarData->mData.mBasePtr = aValue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Parameterized Constructor for an Integer
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfVariantType::AlfVariantType(const UString& aValue)
+ {
+ construct(EString);
+ mVarData->mData.mString = new(EMM) UString(aValue);
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// Description : Parameterized Constructor for an Integer value
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfVariantType::AlfVariantType(const int& aValue)
+ {
+ construct(EInt);
+ mVarData->mData.mInt = aValue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Parameterized Constructor for an Unsigned Int value
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfVariantType::AlfVariantType(const uint& aValue)
+ {
+ construct(EUint);
+ mVarData->mData.mUint = aValue;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Parameterized Constructor for an Double value
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfVariantType::AlfVariantType(const double& aValue)
+ {
+ construct(EReal);
+ mVarData->mData.mReal = aValue;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Parameterized Constructor for an Bool value
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfVariantType::AlfVariantType(const bool& aValue)
+ {
+ construct(EBool);
+ mVarData->mData.mBool = aValue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Class Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfVariantType::~AlfVariantType()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Sets Data to be stored in the Variant Data Type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfVariantType::set(IAlfVariantType& aValue)
+ {
+ if( mVarData->mType == EString)
+ {
+ delete mVarData->mData.mString;
+ mVarData->mData.mString = 0;
+ }
+
+ // Set the type
+ mVarData->mType = aValue.type();
+
+ // Copy/create the new data
+ if (aValue.type() == EBool)
+ {
+ mVarData->mData.mBool = aValue.boolean();
+ }
+ else if (aValue.type() <= EInt)
+ {
+ mVarData->mData.mInt = aValue.integer();
+ }
+ else if (aValue.type() <= EUint)
+ {
+ mVarData->mData.mUint = aValue.uinteger();
+ }
+ else if (aValue.type() <= EReal)
+ {
+ mVarData->mData.mReal = aValue.real();
+ }
+ else if (aValue.type() == EString)
+ {
+ mVarData->mData.mString = new (EMM) UString(aValue.string());
+ }
+ else if (aValue.type() == ECustomData)
+ {
+ mVarData->mData.mBasePtr = aValue.customData();
+ }
+ else
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Gets the Type of the Variant Data Type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType::Type AlfVariantType::type() const
+ {
+ return (Type)mVarData->mType;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Boolean value if the data type in the variant
+// structure is a bool
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfVariantType::boolean() const
+ {
+ if (type() != EBool)
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+ }
+ return mVarData->mData.mBool;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Returns the int value if the data type in the variant
+// structure is a int
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfVariantType::integer() const
+ {
+ if (type() != EInt && type() != EUint) // Signed-unsigned conversion allowed
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+ }
+ return mVarData->mData.mInt;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Unsigned value if the data type in the variant
+// structure is a unsigned int
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT uint AlfVariantType::uinteger() const
+ {
+ if (type() != EInt && type() != EUint) // Signed-unsigned conversion allowed
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+ }
+ return mVarData->mData.mUint;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Real value if the data type in the variant
+// structure is a Real data
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT double AlfVariantType::real() const
+ {
+ if (type() != EReal)
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+ }
+ return mVarData->mData.mReal;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Descriptor value if the data type in the variant
+// structure is a string data
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const UString& AlfVariantType::string() const
+ {
+ if (type() != EString)
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+ }
+ return *mVarData->mData.mString;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Container if the data type in the variant
+// structure is a collection
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfContainer* AlfVariantType::container()
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Map if the data type in the variant
+// structure is a map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfMap* AlfVariantType::map()
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Branch if the data type in the variant
+// structure is a map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfBranch* AlfVariantType::branch()
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the User Defined Data Pointer if the data type in the variant
+// structure is IAlfModelBase
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfModelBase* AlfVariantType::customData()
+ {
+ if (type() != ECustomData)
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+ }
+ return mVarData->mData.mBasePtr;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns true, if objects are equal, false otherwise.
+// ---------------------------------------------------------------------------
+//
+
+OSN_EXPORT bool AlfVariantType::operator==(const IAlfVariantType &aOther) const
+ {
+ // Set the type
+ bool equals = false;
+ if (type() == aOther.type() )
+ {
+ switch( type() )
+ {
+ case EBool:
+ equals = ( bool() == aOther.boolean() );
+ break;
+ case EInt:
+ equals = ( int() == aOther.integer() );
+ break;
+ case EUint:
+ equals = ( uint() == aOther.uinteger() );
+ break;
+ case EReal:
+ equals = ( real() == aOther.real() );
+ break;
+ case EString:
+ equals = ( string() == aOther.string() );
+ break;
+ case ECustomData: //not known how to compare.
+ break;
+ default:
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfVariantType")
+
+ }
+ }
+
+ return equals;
+ }
+
+////////////////////// AlfContainer //////////////////////
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// ---------------------------------------------------------------------------
+// Description : Default Constructor for the Container Data Type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfContainer::AlfContainer()
+ {
+ construct();
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Default Construtor
+// ---------------------------------------------------------------------------
+//
+void AlfContainer::construct()
+ {
+ mContainerData.reset( new( EMM ) AlfContainerDataImpl() );
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Class Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfContainer::~AlfContainer()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Adds an AlfVariantType into the container
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfContainer::addItem(IAlfVariantType* aData)
+ {
+ mContainerData->mArray.resize(mContainerData->mArray.count()+1);
+ mContainerData->mArray.insert(mContainerData->mArray.count(),aData);
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Adds an AlfVariantType into the container
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfContainer::addItem(uint aIndex, IAlfVariantType* aData)
+ {
+ if( aIndex > mContainerData->mArray.count() )
+ {
+ ALF_THROW(AlfDataException,EInvalidArrayIndex,"AlfContainer")
+ }
+ else
+ {
+ mContainerData->mArray.resize(mContainerData->mArray.count()+1);
+ mContainerData->mArray.insert(aIndex, aData);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Gets the Size of the container
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfContainer::count()
+ {
+ return mContainerData->mArray.count();
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Gets the Item at a given index in the container
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType* AlfContainer::item(uint aIndex)
+ {
+ uint cmpIndex =0; //To remove RVCT compiler warning
+ if(aIndex < mContainerData->mArray.count() && aIndex >= cmpIndex )
+ {
+ return mContainerData->mArray[aIndex];
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Clones the existing conatiner and returns a new COntainer
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfContainer* AlfContainer::clone()
+ {
+ try
+ {
+ //ALF_PERF_START( perfdata, "AlfContainer-Clone-Cloning Container")
+ auto_ptr<AlfContainer> clone( new( EMM ) AlfContainer() );
+ auto_ptr<IAlfVariantType> childData;
+
+ for ( int i = 0; i < mContainerData->mArray.count(); ++i )
+ {
+ if( mContainerData->mArray[i]->type()== IAlfVariantType::EInt )
+ {
+ childData.reset( new(EMM) AlfVariantType(mContainerData->mArray[i]->integer()) );
+ }
+ else if( mContainerData->mArray[i]->type()== IAlfVariantType::EUint )
+ {
+ childData.reset( new(EMM) AlfVariantType(mContainerData->mArray[i]->uinteger()) );
+ }
+ else if(mContainerData->mArray[i]->type()== IAlfVariantType::EBool)
+ {
+ childData.reset( new (EMM) AlfVariantType(mContainerData->mArray[i]->boolean()) );
+ }
+ else if( mContainerData->mArray[i]->type()== IAlfVariantType::EReal )
+ {
+ childData.reset( new(EMM) AlfVariantType(mContainerData->mArray[i]->real()) );
+ }
+ else if( mContainerData->mArray[i]->type()== IAlfVariantType::EString )
+ {
+ childData.reset( new(EMM) AlfVariantType(mContainerData->mArray[i]->string()) );
+ }
+ else if( mContainerData->mArray[i]->type()== IAlfVariantType::EMap )
+ {
+ childData.reset( (IAlfMap*)(mContainerData->mArray[i]->map())->clone() );
+ }
+ else if( mContainerData->mArray[i]->type()== IAlfVariantType::EContainer )
+ {
+ childData.reset( (IAlfContainer*)(mContainerData->mArray[i]->container())->clone() );
+ }
+ else if ( mContainerData->mArray[i]->type()== IAlfVariantType::EBranch )
+ {
+ childData.reset( mContainerData->mArray[i]->branch()->clone() );
+ }
+ else
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfContainer")
+ }
+ clone->mContainerData->mArray.resize( clone->mContainerData->mArray.count() + 1 );
+ clone->mContainerData->mArray.insert( clone->mContainerData->mArray.count(), childData.get() );
+ childData.release(); // ownership was transferred.
+ }
+ //ALF_PERF_STOP( perfdata, "AlfContainer-Clone-Cloning Container")
+ return clone.release();
+ }
+ catch(...)
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Sorts the container using user defined callback method
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfContainer::sort( const IAlfSortFunction& aSortFunction )
+ {
+ IAlfVariantType** d = mContainerData->mArray.data();
+ AlfSort::sort( d, mContainerData->mArray.count(), aSortFunction );
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Sets Data to be stored in the Variant Data Type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfContainer::set(IAlfVariantType& /*aValue*/)
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Gets the Type of the Variant Data Type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType::Type AlfContainer::type() const
+ {
+ return IAlfVariantType::EContainer;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Boolean value if the data type in the variant
+// structure is a bool
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfContainer::boolean() const
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the int value if the data type in the variant
+// structure is a int
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfContainer::integer() const
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Unsigned value if the data type in the variant
+// structure is a unsigned int
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT uint AlfContainer::uinteger() const
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Real value if the data type in the variant
+// structure is a Real data
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT double AlfContainer::real() const
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Descriptor value if the data type in the variant
+// structure is a string data
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const UString& AlfContainer::string() const
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer");
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Container if the data type in the variant
+// structure is a collection
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfContainer* AlfContainer::container()
+ {
+ return this;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Map if the data type in the variant
+// structure is a map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfMap* AlfContainer::map()
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Branch if the data type in the variant
+// structure is a map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfBranch* AlfContainer::branch()
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Returns the User Defined Data Pointer if the data type in the variant
+// structure is IAlfModelBase
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfModelBase* AlfContainer::customData()
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+////////////////////// AlfContainer //////////////////////
+
+
+
+
+// ---------------------------------------------------------------------------
+// Description : Remove a item from the Container
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfContainer::removeItem(uint aIndex)
+ {
+ uint cmpIndex=0;
+ if(aIndex >= mContainerData->mArray.count() || (aIndex < cmpIndex))
+ {
+ ALF_THROW(AlfDataException,EInvalidArrayIndex,"AlfContainer")
+ }
+
+ mContainerData->mArray.remove(aIndex);
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Clears the contents of the Container
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfContainer::clear()
+{
+ mContainerData->mArray.clear();
+}
+
+
+// ---------------------------------------------------------------------------
+// Description : Replaces the items of the container at a given index with the new data
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfContainer::replaceItem(uint aIndex, IAlfVariantType* aNewData )
+ {
+ if((aIndex < mContainerData->mArray.count()) && aNewData)
+ {
+ try
+ {
+ mContainerData->mArray.remove(aIndex);
+ mContainerData->mArray.insert(aIndex,aNewData);
+ }
+ catch(...)
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+ }
+ else
+ ALF_THROW(AlfDataException,EInvalidArrayIndex,"AlfContainer")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns true, if objects are equal, false otherwise.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfContainer::operator==(const IAlfVariantType &/*aOther*/) const
+ {
+ ALF_THROW(AlfDataException,EInvalidContainerOperation,"AlfContainer")
+ }
+
+
+////////////////////// AlfMap //////////////////////
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+
+// ---------------------------------------------------------------------------
+// Description : 1st Phase Constructor. Leaves the object onto the cleanup stack
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfMap::AlfMap()
+ {
+ construct();
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Map Constructor
+// ---------------------------------------------------------------------------
+//
+void AlfMap::construct()
+ {
+ mMapDataImpl.reset( new (EMM) AlfMapDataImpl() );
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Sets Data to be stored in the Variant Data Type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfMap::set(IAlfVariantType& aValue)
+ {
+ (void)aValue;
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Gets the Type of the Variant Data Type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType::Type AlfMap::type() const
+ {
+ return IAlfVariantType::EMap;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Boolean value if the data type in the variant
+// structure is a bool
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfMap::boolean() const
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Returns the int value if the data type in the variant
+// structure is a int
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfMap::integer() const
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Unsigned value if the data type in the variant
+// structure is a unsigned int
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT uint AlfMap::uinteger() const
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Real value if the data type in the variant
+// structure is a Real data
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT double AlfMap::real() const
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Descriptor value if the data type in the variant
+// structure is a string data
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const UString& AlfMap::string() const
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Container if the data type in the variant
+// structure is a collection
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfContainer* AlfMap::container()
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Map if the data type in the variant
+// structure is a map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfMap* AlfMap::map()
+ {
+ return this;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Branch if the data type in the variant
+// structure is a map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfBranch* AlfMap::branch()
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the User Defined Data Pointer if the data type in the variant
+// structure is IAlfModelBase
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfModelBase* AlfMap::customData()
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+
+////////////////////// AlfContainer //////////////////////
+
+
+
+
+
+// ---------------------------------------------------------------------------
+// Description : Map Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfMap::~AlfMap()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : APi to get the name of the data item in the map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const UString& AlfMap::name(uint aIndex) const
+ {
+ uint cmpIndex=0;
+ if( aIndex >= mMapDataImpl->mArray.count() || (aIndex < cmpIndex))
+ {
+ ALF_THROW(AlfDataException,EInvalidArrayIndex,"AlfMap")
+ }
+ return *mMapDataImpl->mArray[aIndex]->mName;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : APi to add an VariantData into the map
+// ---------------------------------------------------------------------------
+//
+void AlfMap::addItem(IAlfVariantType* aData, const UString &aName)
+ {
+ auto_ptr<MapItem> item( new( EMM ) MapItem() );
+
+ item->mName = new( EMM ) UString( aName );
+
+ mMapDataImpl->mArray.resize( mMapDataImpl->mArray.count() + 1 );
+ mMapDataImpl->mArray.insert( mMapDataImpl->mArray.count(), item.get() );
+
+ // Take the ownership only if there was no exception.
+ // Otherwise the client is resp. of cleaning up the object.
+ item->mData = aData;
+ item.release();
+ }
+
+// ---------------------------------------------------------------------------
+// Description : APi to add an VariantData into the map
+// ---------------------------------------------------------------------------
+//
+void AlfMap::addItem(uint aIndex, IAlfVariantType* aData, const UString& aName)
+ {
+ if( aIndex > mMapDataImpl->mArray.count() )
+ {
+ ALF_THROW(AlfDataException,EInvalidArrayIndex,"AlfMap")
+ }
+ else
+ {
+ auto_ptr<MapItem> item( new( EMM ) MapItem() );
+
+ item->mName = new( EMM ) UString( aName );
+
+ mMapDataImpl->mArray.resize( mMapDataImpl->mArray.count() + 1 );
+ mMapDataImpl->mArray.insert( aIndex, item.get() );
+
+ // Take the ownership only if there was no exception.
+ // Otherwise the client is resp. of cleaning up the object.
+ item->mData = aData;
+ item.release();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Gets the size of the map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfMap::count() const
+ {
+ return mMapDataImpl->mArray.count();
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Gets the Element at a given index
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType* AlfMap::item(uint aIndex)
+ {
+ uint cmpIndex=0;
+ if( aIndex >= mMapDataImpl->mArray.count() || aIndex <cmpIndex )
+ {
+ return NULL;
+ }
+ else
+ {
+ return mMapDataImpl->mArray[aIndex]->mData;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Clones the map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfMap* AlfMap::clone()
+ {
+ try
+ {
+ //ALF_PERF_START( perfdata, "AlfContainer-Clone-Cloning Map")
+ auto_ptr<AlfMap> clone( new(EMM) AlfMap() );
+ auto_ptr<MapItem> cloneItem;
+
+ for (int i = 0; i < mMapDataImpl->mArray.count(); ++i)
+ {
+ cloneItem.reset( new(EMM) MapItem() );
+ if( !(mMapDataImpl->mArray[i]->mName->getUtf8() == ""))
+ {
+ cloneItem->mName = new(EMM) UString(*(mMapDataImpl->mArray[i]->mName));
+ }
+ if(mMapDataImpl->mArray[i]->mData->type()== IAlfVariantType::EInt)
+ {
+ cloneItem->mData = new(EMM) AlfVariantType(mMapDataImpl->mArray[i]->mData->integer());
+ }
+ else if(mMapDataImpl->mArray[i]->mData->type()== IAlfVariantType::EUint)
+ {
+ cloneItem->mData = new(EMM) AlfVariantType(mMapDataImpl->mArray[i]->mData->uinteger());
+ }
+ else if(mMapDataImpl->mArray[i]->mData->type()== IAlfVariantType::EBool)
+ {
+ cloneItem->mData = new (EMM)AlfVariantType(mMapDataImpl->mArray[i]->mData->boolean());
+ }
+ else if(mMapDataImpl->mArray[i]->mData->type()== IAlfVariantType::EReal)
+ {
+ cloneItem->mData = new(EMM) AlfVariantType(mMapDataImpl->mArray[i]->mData->real());
+ }
+ else if(mMapDataImpl->mArray[i]->mData->type()== IAlfVariantType::EString)
+ {
+ cloneItem->mData = new(EMM) AlfVariantType(mMapDataImpl->mArray[i]->mData->string());
+ }
+ else if(mMapDataImpl->mArray[i]->mData->type()== IAlfVariantType::EMap)
+ {
+ cloneItem->mData = (IAlfMap*)(mMapDataImpl->mArray[i]->mData->map())->clone();
+ }
+ else if(mMapDataImpl->mArray[i]->mData->type()== IAlfVariantType::EContainer)
+ {
+ cloneItem->mData = (IAlfContainer*)(mMapDataImpl->mArray[i]->mData->container())->clone();
+ }
+ else if (mMapDataImpl->mArray[i]->mData->type()== IAlfVariantType::EBranch)
+ {
+ cloneItem->mData = mMapDataImpl->mArray[i]->mData->branch()->clone();
+ }
+ else
+ {
+ ALF_THROW(AlfDataException,EInvalidVariantDataType,"AlfMap")
+ }
+
+ clone->mMapDataImpl->mArray.resize(clone->mMapDataImpl->mArray.count()+1);
+ clone->mMapDataImpl->mArray.insert(clone->mMapDataImpl->mArray.count(),cloneItem.get() );
+ cloneItem.release();
+ }
+ //ALF_PERF_STOP( perfdata, "AlfContainer-Clone-Cloning Map")
+
+ return clone.release();
+ }
+ catch(...)
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Gets the map item with the given name
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType* AlfMap::item(const UString &aName)
+ {
+ for (int i = 0; i < mMapDataImpl->mArray.count(); ++i)
+ {
+ if ( *mMapDataImpl->mArray[i]->mName == aName)
+ {
+ return mMapDataImpl->mArray[i]->mData;
+ }
+ }
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Gets the index of the map item with the given name
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfMap::itemIndex(const UString &aName)
+ {
+ for (int i = 0; i < mMapDataImpl->mArray.count(); ++i)
+ {
+ if ( *mMapDataImpl->mArray[i]->mName == aName)
+ {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Remove a item from the Map at a given index
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfMap::removeItem(uint aIndex)
+ {
+ try
+ {
+ uint cmpIndex =0;
+ if(aIndex < mMapDataImpl->mArray.count() && aIndex>= cmpIndex )
+ {
+ mMapDataImpl->mArray.remove(aIndex);
+ }
+ }
+ catch(...)
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Clears the contents of the Map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfMap::clear()
+ {
+ mMapDataImpl->mArray.clear();
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Replaces the items of the container at a given index with the new data
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfMap::replaceItem(uint aIndex, IAlfVariantType* aNewData )
+ {
+ try
+ {
+ uint cmpIndex =0;
+ if ( aIndex < mMapDataImpl->mArray.count()&& aIndex >= cmpIndex )
+ {
+ auto_ptr<MapItem> newData( new( EMM ) MapItem() );
+ newData.get()->mData = aNewData;
+ newData.get()->mName = new( EMM ) UString(
+ *( mMapDataImpl->mArray[aIndex]->mName ) );
+
+ mMapDataImpl->mArray.remove(aIndex);
+ mMapDataImpl->mArray.insert(aIndex,newData.get());
+
+ newData.release(); // ownership transferred away
+ }
+ }
+ catch(...)
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Replaces the items of the container at a given index with the Given name
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfMap::replaceItem(const UString &aName,IAlfVariantType* aNewData)
+ {
+
+ try
+ {
+ for (int i = 0; i < mMapDataImpl->mArray.count(); ++i)
+ {
+ if ( *mMapDataImpl->mArray[i]->mName == aName)
+ {
+ auto_ptr<MapItem> newData( new( EMM ) MapItem() );
+
+ newData.get()->mData = aNewData;
+ newData.get()->mName = new( EMM ) UString(*(mMapDataImpl->mArray[i]->mName));
+
+ mMapDataImpl->mArray.remove(i);
+ mMapDataImpl->mArray.insert(i,newData.get());
+
+ newData.release(); // ownership transferred away
+ break;
+ }
+ }
+ }
+ catch(...)
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ //aNewData might not have been deleted. In case of this exception the user should delete the variant data passed
+ }
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Remove a item from the Map with a given name
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfMap::removeItem(const UString &aName)
+ {
+ try
+ {
+ for(int i=0; i< mMapDataImpl->mArray.count();i++)
+ {
+ if ( *mMapDataImpl->mArray[i]->mName == aName)
+ {
+ mMapDataImpl->mArray.remove(i);
+ break;
+ }
+ }
+ }
+ catch(...)
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+
+ }
+
+////////////////////// AlfBranch //////////////////////
+
+// ---------------------------------------------------------------------------
+// Description : 2nd Phase Constructor
+// ---------------------------------------------------------------------------
+//
+void AlfBranch::construct( IAlfMap* aData, IAlfMap* aChildData)
+ {
+ mBranchData.reset( new( EMM ) AlfBranchDataImpl() );
+
+ // Take the ownership of the parameter objects
+ mBranchData->mCurrentData = aData;
+ mBranchData->mChildData = aChildData;
+ // No throwing code after the ownership has been transferred,
+ // it would result to double deletion crash.
+
+ }
+
+// ---------------------------------------------------------------------------
+// Description : 1st Phase Constructor. Leaves the object onto the cleanup stack
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfBranch::AlfBranch(IAlfMap* aData, IAlfMap* aChildData)
+ {
+ construct( aData, aChildData );
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Default Construtor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfBranch::AlfBranch()
+ {
+ mBranchData.reset( new(EMM) AlfBranchDataImpl() );
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Map Destructor
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfBranch::~AlfBranch()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Sorts the branch using user defined callback method
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfBranch::sort( const IAlfSortFunction& aSortFunction )
+ {
+ try
+ {
+ for (int i = 0; i < mBranchData->mChildData->count(); ++i)
+ {
+ if (mBranchData->mChildData->item(i)->type() == EContainer)
+ {
+ IAlfContainer* container =
+ mBranchData->mChildData->item(i)->container();
+ container->sort(aSortFunction);
+ }
+ }
+ }
+ catch(...)
+ {
+ ALF_THROW(AlfDataException,EInvalidMapOperation,"AlfMap")
+ }
+ }
+// ---------------------------------------------------------------------------
+// Description : returns the data for this branch as a IAlfMap interface
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfMap* AlfBranch::data()
+ {
+ return mBranchData->mCurrentData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Set the data for this branch
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfBranch::setData( IAlfMap* aData )
+ {
+ delete mBranchData->mCurrentData;
+ mBranchData->mCurrentData = aData;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : returns the child data at the given index
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType* AlfBranch::childData(int aIndex)
+ {
+ if(aIndex <0 || mBranchData->mChildData->count() <=0)
+ return NULL;
+
+ int count = 0;
+
+ // Start counting from the first child (item number 1)
+ for (int i = 0; i < mBranchData->mChildData->count(); ++i)
+ {
+
+ if ( mBranchData->mChildData->item(i)->type() == IAlfVariantType::EMap || mBranchData->mChildData->item(i)->type() == IAlfVariantType::EBranch )
+ {
+ // Map contains the data for a single child
+
+ if(count == aIndex)
+ {
+ return mBranchData->mChildData->item(aIndex);
+ }
+ count++;
+ }
+
+ if (mBranchData->mChildData->item(i)->type() == IAlfVariantType::EContainer)
+ {
+ IAlfContainer* container = mBranchData->mChildData->item(i)->container();
+ for ( int j = 0; j < container->count(); ++j )
+ {
+ // Container contains data for multiple children
+
+ if(count == aIndex)
+ {
+ return mBranchData->mChildData->item(i)->container()->item(aIndex);
+ }
+ count ++;
+ }
+ }
+ }
+
+ return NULL;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// Description : returns the child name at the given index
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const UString& AlfBranch::childName(int aIndex)
+ {
+
+ int count = 0;
+
+ // Start counting from the first child (item number 1)
+ for (int i = 0; i < mBranchData->mChildData->count(); ++i)
+ {
+
+ if ( mBranchData->mChildData->item(i)->type() == IAlfVariantType::EMap || mBranchData->mChildData->item(i)->type() == IAlfVariantType::EBranch )
+ {
+ // Map contains the data for a single child
+
+ if(count == aIndex)
+ {
+ return mBranchData->mChildData->name(i);
+ }
+ count++;
+ }
+ if (mBranchData->mChildData->item(i)->type() == IAlfVariantType::EContainer)
+ {
+ IAlfContainer* container = mBranchData->mChildData->item(i)->container();
+
+ if(aIndex >= count && aIndex < (count + container->count()) )
+ {
+ return mBranchData->mChildData->name(i);
+ }
+ count+= container->count();
+
+ }
+ }
+ UString* ret(0);
+ return *ret;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// Description : returns the Data for all childs
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfMap* AlfBranch::childData()
+ {
+ return mBranchData->mChildData;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Set the data for children of this branch
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfBranch::setChildData( IAlfMap* aChildData )
+ {
+ delete mBranchData->mChildData;
+ mBranchData->mChildData = aChildData;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Api to get the Number of children of a branch
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT uint AlfBranch::childrenCount()
+ {
+
+ uint count = 0;
+
+ // Start counting from the first child (item number 1)
+ for (int i = 0; i < mBranchData->mChildData->count(); ++i)
+ {
+ if ( mBranchData->mChildData->item(i)->type() == IAlfVariantType::EMap ||
+ mBranchData->mChildData->item(i)->type() == IAlfVariantType::EBranch )
+ {
+ // Map contains the data for a single child
+ count++;
+ }
+ if (mBranchData->mChildData->item(i)->type() == IAlfVariantType::EContainer)
+ {
+ // Container contains data for multiple children
+ count += mBranchData->mChildData->item(i)->container()->count();
+ }
+ }
+
+ return count;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Sets Data to be stored in the Variant Data Type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfBranch::set(IAlfVariantType& aValue)
+ {
+ (void)aValue;
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Gets the Type of the Variant Data Type
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfVariantType::Type AlfBranch::type() const
+ {
+ return IAlfVariantType::EBranch;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Boolean value if the data type in the variant
+// structure is a bool
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfBranch::boolean() const
+ {
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the int value if the data type in the variant
+// structure is a int
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfBranch::integer() const
+ {
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Unsigned value if the data type in the variant
+// structure is a unsigned int
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT uint AlfBranch::uinteger() const
+ {
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Real value if the data type in the variant
+// structure is a Real data
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT double AlfBranch::real() const
+ {
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Descriptor value if the data type in the variant
+// structure is a string data
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const UString& AlfBranch::string() const
+ {
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Container if the data type in the variant
+// structure is a collection
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfContainer* AlfBranch::container()
+ {
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Map if the data type in the variant
+// structure is a map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfMap* AlfBranch::map()
+ {
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns the Branch if the data type in the variant
+// structure is a map
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfBranch* AlfBranch::branch()
+ {
+ return this;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Description : Returns the User Defined Data Pointer if the data type in the variant
+// structure is IAlfModelBase
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfModelBase* AlfBranch::customData()
+ {
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+// ---------------------------------------------------------------------------
+// Description : Clones the branch
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfBranch* AlfBranch::clone()
+ {
+ try
+ {
+ auto_ptr<IAlfMap> currentData( mBranchData->mCurrentData->clone() );
+ auto_ptr<IAlfMap> childData( mBranchData->mChildData->clone() );
+ IAlfBranch* clone = new(EMM) AlfBranch( currentData.get(), childData.get() );
+ currentData.release(); // ownership transferred away
+ childData.release(); // ownership transferred away
+
+ return clone;
+ }
+ catch(...)
+ {
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Returns true, if objects are equal, false otherwise.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfBranch::operator==(const IAlfVariantType &/*aOther*/) const
+ {
+ ALF_THROW(AlfDataException,EInvalidBranchOperation,"AlfBranch")
+ }
+
+} // namespace Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfviewportlayoutattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,432 @@
+/*
+* Copyright (c) 2007 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: Implements attributesetters for ViewPortLayout.
+*
+*/
+
+
+
+//includes
+
+//widget model includes
+#include "alf/alfattributecontainer.h"
+#include "alf/alfattribute.h"
+#include "alf/alfviewportlayoutattributesetter.h"
+#include <alf/alfvisualexception.h>
+#include <alf/alfdataexception.h>
+#include <alf/alfattributeexception.h>
+
+//osn includes
+#include <osn/ustring.h>
+
+//alf includes
+#include <alf/alfvisual.h>
+#include <alf/alfviewportlayout.h>
+
+//dui includes
+#include "alf/attrproperty.h"
+
+//other includes
+#include <libc/string.h>
+
+
+
+//namespaces
+using namespace osncore;
+using namespace duiuimodel::layoutattributes::viewport;
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfViewportLayoutAttributeSetter::AlfViewportLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfViewportLayoutAttributeSetter::
+ ~AlfViewportLayoutAttributeSetter()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+IAlfVariantType* AlfViewportLayoutAttributeSetter::getData(
+ AlfAttribute& aAttr, IAlfMap* aData)
+ {
+ IAlfVariantType* data = 0;
+ const char* dataField = aAttr.getDataField();
+ if (dataField)
+ {
+ data = aData->item(UString(dataField));
+ }
+ return data;
+ }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+int AlfViewportLayoutAttributeSetter::getTime(
+ const AlfAttribute& aAttr, bool aImmediate)
+ {
+ int time = 0;
+ if (!aImmediate)
+ {
+ time = aAttr.getTime();
+ }
+ return time;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfViewportLayoutAttributeSetter::setAttributeValue(
+ CAlfVisual &aVisual, AlfAttributeContainer* aContainer, IAlfMap* aData)
+ {
+ CAlfViewportLayout* viewportLayout =
+ dynamic_cast<CAlfViewportLayout*>(&aVisual);
+ if (!viewportLayout)
+ {
+ ALF_THROW (AlfVisualException, EInvalidVisual, "AlfViewportLayoutAttributeSetter")
+ }
+ AlfCommonLayoutAttributeSetter::setAttributeValue(aVisual,
+ aContainer, aData);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfCommand* AlfViewportLayoutAttributeSetter::createCommand(
+ CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
+ IAlfMap* /*aData*/, int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/)
+ {
+ TAlfCommand* cmd = 0;
+ return cmd;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfViewportLayoutAttributeSetter::createAndSendCommands(
+ CAlfVisual& aVisual,
+ AlfAttributeContainer* aContainer,
+ CAlfVisual* aRefVisual )
+ {
+ // Call the base class implementation.
+ // It goes through its loop and checks if there are attributes that it
+ // handles.
+ AlfCommonLayoutAttributeSetter::createAndSendCommands(aVisual,
+ aContainer,aRefVisual);
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfViewportLayoutAttributeSetter::handleDynamicDataAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ if (!doHandleDynamicDataAttribute(aVisual, aAttr, aContainer, aData))
+ {
+ AlfCommonLayoutAttributeSetter::handleDynamicDataAttribute(aVisual,
+ aAttr, aContainer, aData);
+ }
+ }
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+bool AlfViewportLayoutAttributeSetter::doHandleDynamicDataAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData, bool aImmediate)
+ {
+ CAlfViewportLayout* viewportLayout =
+ dynamic_cast<CAlfViewportLayout*>(&aVisual);
+ if (!viewportLayout)
+ {
+ ALF_THROW (AlfVisualException, EInvalidVisual, "AlfViewportLayoutAttributeSetter")
+ }
+ bool handled = true;
+ if (!aData)
+ {
+ ALF_THROW (AlfDataException, EInvalidVariantDataType, "AlfViewportLayoutAttributeSetter" )
+ }
+ else
+ {
+ const char* attrName = aAttr.name();
+ if (!strcmp( attrName, KVirtualHeight)) //also handles: KVirtualWidth
+ {
+ // item for both virtual height and virtual width should be there.
+ const IAlfVariantType* virtualHeight = getData(aAttr, aData);
+ const IAlfVariantType* virtualWidth =
+ getData(aContainer.getAttributeByName(KVirtualWidth), aData);
+
+ if (virtualHeight &&
+ virtualHeight->type() == IAlfVariantType::EReal &&
+ virtualWidth && virtualWidth->type() == IAlfVariantType::EReal)
+ {
+ viewportLayout->SetVirtualSize(
+ TAlfRealSize(virtualWidth->real(),virtualHeight->real()),
+ getTime(aAttr, aImmediate));
+ }
+ else
+ {
+ ALF_THROW(AlfDataException, EInvalidVariantDataType, "AlfViewportLayoutAttributeSetter")
+ }
+
+ }
+ else if (!strcmp( attrName, KVirtualWidth))
+ {
+ // both virtual height and virtual width should be there
+ // if attribute for virtual height exists,don't do anything as this
+ // will be taken care while looking for attribute for virtual
+ // height, else throw exception
+ try
+ {
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName (KVirtualHeight );
+ }
+
+ catch (...)
+ {
+ ALF_THROW(AlfDataException, EIncompleteAttributeValues, "AlfViewportLayoutAttributeSetter")
+ }
+ }
+ //also handles: KViewportWidth
+ else if (!strcmp( attrName, KViewportHeight))
+ {
+ // item for both viewport window height and viewport window width
+ // should be there.
+ const IAlfVariantType* viewportHeight = getData(aAttr, aData);
+ const IAlfVariantType* viewportWidth =
+ getData(aContainer.getAttributeByName(KViewportWidth), aData);
+
+ if (viewportHeight &&
+ viewportHeight->type() == IAlfVariantType::EReal &&
+ viewportWidth &&
+ viewportWidth->type() == IAlfVariantType::EReal)
+ {
+ viewportLayout->SetViewportSize(
+ TAlfRealSize(viewportWidth->real(),viewportHeight->real()),
+ getTime(aAttr, aImmediate));
+ }
+ else
+ {
+ ALF_THROW(AlfDataException, EInvalidVariantDataType, "AlfViewportLayoutAttributeSetter")
+ }
+ }
+ else if (!strcmp( attrName, KViewportWidth))
+ {
+ // both viewport height and viewport width should be there
+ // if attribute for viewport height exists,don't do anything as
+ // this will be taken care while looking for attribute for
+ // virtual height, else throw exception
+ try
+ {
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName (KViewportHeight );
+ }
+
+ catch (...)
+ {
+ ALF_THROW(AlfDataException, EIncompleteAttributeValues, "AlfViewportLayoutAttributeSetter")
+ }
+ }
+ //also handles: KViewportPositionY
+ else if (!strcmp( attrName, KViewportPositionX))
+ {
+ // item for both viewport window X-position and Y-position
+ // should be there.
+ const IAlfVariantType* viewportPosX = getData(aAttr, aData);
+ const IAlfVariantType* viewportPosY =
+ getData(aContainer.getAttributeByName(KViewportPositionY),
+ aData);
+
+ if (viewportPosX &&
+ viewportPosX->type() == IAlfVariantType::EReal &&
+ viewportPosY && viewportPosY->type() == IAlfVariantType::EReal)
+ {
+ viewportLayout->SetViewportPos(
+ TAlfRealPoint(viewportPosX->real(),viewportPosY->real()),
+ getTime(aAttr, aImmediate));
+ }
+ else
+ {
+ ALF_THROW(AlfDataException, EInvalidVariantDataType, "AlfViewportLayoutAttributeSetter")
+ }
+ }
+ else if (!strcmp( attrName, KViewportPositionY))
+ {
+ // both viewport window X-position and Y-position should be there
+ // if attribute for viewport window X-position exists,don't do
+ // anything as this will be taken care while looking for attribute
+ // for viewport window X-position, else throw exception
+ try
+ {
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName (KViewportPositionX );
+ }
+
+ catch (...)
+ {
+ ALF_THROW(AlfDataException, EIncompleteAttributeValues, "AlfViewportLayoutAttributeSetter")
+ }
+ }
+ else
+ {
+ handled = false;
+ }
+ }
+ return handled;
+ }
+
+void AlfViewportLayoutAttributeSetter::handleStaticDataAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, IAlfMap* aData)
+ {
+ // viewport layout does not have any static attribute of its own
+ // check, if dynamic attribute(but set by user as static), if so,
+ // set attributes immediately.
+ if (!doHandleDynamicDataAttribute(aVisual, aAttr,aContainer, aData, true))
+ {
+ AlfCommonLayoutAttributeSetter::handleStaticDataAttribute(
+ aVisual, aAttr, aContainer, aData);
+ }
+ }
+
+void AlfViewportLayoutAttributeSetter::handleDynamicAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ if (!doHandleDynamicAttribute(aVisual, aAttr, aContainer))
+ {
+ AlfCommonLayoutAttributeSetter::handleDynamicAttribute(
+ aVisual, aAttr, aContainer);
+ }
+ }
+
+bool AlfViewportLayoutAttributeSetter::doHandleDynamicAttribute(
+ CAlfVisual &aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer, bool aImmediate)
+ {
+ CAlfViewportLayout* viewportLayout =
+ dynamic_cast<CAlfViewportLayout*>(&aVisual);
+ if (!viewportLayout)
+ {
+ ALF_THROW (AlfVisualException, EInvalidVisual, "AlfViewportLayoutAttributeSetter")
+ }
+
+ bool handled = true;
+ const char* attrName = aAttr.name();
+ if (!strcmp(attrName, KVirtualHeight)||!strcmp(attrName, KVirtualWidth))
+ {
+ // both virtual height and virtual width should be there.
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName (KVirtualWidth );
+ AlfAttribute& attrHt = aContainer.getAttributeByName (KVirtualHeight );
+ if(attrWidth.type() == AlfAttributeValueType::EFloat &&
+ attrHt.type() == AlfAttributeValueType::EFloat )
+ {
+ float height = attrHt.realValue();
+ float width = attrWidth.realValue();
+ viewportLayout->SetVirtualSize(
+ TAlfRealSize(width,height),getTime(attrHt, aImmediate));
+ attrHt.setDirty(false);
+ attrWidth.setDirty(false);
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttributeValue, "AlfViewportLayoutAttributeSetter");
+ }
+ }
+ else if (!strcmp(attrName, KViewportHeight)||
+ !strcmp(attrName, KViewportWidth))
+ {
+ // both viewport window height and width should be there.
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName (KViewportWidth );
+ AlfAttribute& attrHt =
+ aContainer.getAttributeByName (KViewportHeight );
+ if(attrWidth.type() == AlfAttributeValueType::EFloat &&
+ attrHt.type() == AlfAttributeValueType::EFloat )
+ {
+ float height = attrHt.realValue();
+ float width = attrWidth.realValue();
+ viewportLayout->SetViewportSize(
+ TAlfRealSize(width,height),getTime(attrHt, aImmediate));
+ attrHt.setDirty(false);
+ attrWidth.setDirty(false);
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttributeValue, "AlfViewportLayoutAttributeSetter");
+ }
+ }
+ else if (!strcmp(attrName, KViewportPositionX)||
+ !strcmp(attrName, KViewportPositionY))
+ {
+ // both viewport window X-position and Y-position should be there.
+ AlfAttribute& attrWidth =
+ aContainer.getAttributeByName (KViewportPositionY );
+ AlfAttribute& attrHt =
+ aContainer.getAttributeByName (KViewportPositionX );
+ if(attrWidth.type() == AlfAttributeValueType::EFloat &&
+ attrHt.type() == AlfAttributeValueType::EFloat )
+ {
+ float xPosition = attrHt.realValue();
+ float yPosition = attrWidth.realValue();
+ viewportLayout->SetViewportPos(
+ TAlfRealPoint(xPosition,yPosition),getTime(attrHt, aImmediate));
+ attrHt.setDirty(false);
+ attrWidth.setDirty(false);
+ }
+ else
+ {
+ ALF_THROW ( AlfAttributeException, EInvalidAttributeValue, "AlfViewportLayoutAttributeSetter");
+ }
+ }
+ else
+ {
+ handled = false;
+ }
+
+ return handled;
+ }
+
+void AlfViewportLayoutAttributeSetter::handleStaticAttribute(
+ CAlfVisual& aVisual, AlfAttribute& aAttr,
+ AlfAttributeContainer& aContainer)
+ {
+ // viewport layout does not have any static attribute of its own
+ // check, if dynamic attribute(but set as static by the user),
+ // if so, set attributes immediately.
+ if (!doHandleDynamicAttribute(aVisual, aAttr, aContainer, true))
+ {
+ AlfCommonLayoutAttributeSetter::handleStaticAttribute(aVisual, aAttr,
+ aContainer);
+ }
+ }
+
+ } // Alf
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfvisualtemplate.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,671 @@
+/*
+* Copyright (c) 2007 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: Visual template class for alfred widget model.
+* This class creates and updates visual tree.
+*
+*/
+
+
+
+
+//INCLUDES
+#include <algorithm>
+#include <assert.h>
+#include <alf/alfcontrol.h>
+#include <alf/alfbrush.h>
+#include <alf/alfvisualfactory.h>
+#include <alf/alfbrusharray.h>
+#include <utf.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alftexture.h>
+#include <alf/alfenv.h>
+#include <alf/alfexceptions.h>
+//#include "alf/alfperf.h"
+#include <osn/osnnew.h>
+#include <alf/ialfelement.h>
+#include "alf/alfvisualtemplate.h"
+#include "alf/alfvarianttype.h"
+#include "alf/ialfattributesetter.h"
+#include "alf/alfattributecontainer.h"
+#include "alf/alfattribute.h"
+
+// The number of attribute setters is usually between 1 and 5
+static const int KAttributeArrayGranularity = 4;
+static const int KContainerArrayGranularity = 4;
+
+namespace Alf
+ {
+
+struct DeleteTemplate
+{
+ void operator()(const IAlfVisualTemplate* aTemplate) const
+ {
+ delete aTemplate;
+ }
+};
+
+// -----------------------------------------------------------------------------
+// Helper function to iterate through a visual template hierarchy and
+// investigate whether a given visual template exists in it.
+// -----------------------------------------------------------------------------
+bool existsInHierarchy(IAlfVisualTemplate& aRoot, const IAlfVisualTemplate& aTemplate)
+ {
+ // Check the template against the root node.
+ if(&aTemplate == &aRoot)
+ {
+ return true;
+ }
+
+ // Iterate through all the root's children
+ for(int i = 0; i < aRoot.numChildTemplates(); ++i)
+ {
+ if(existsInHierarchy(aRoot.childTemplate(i), aTemplate))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// Description : Constructor
+// ---------------------------------------------------------------------------
+OSN_EXPORT AlfVisualTemplate* AlfVisualTemplate::create()
+ {
+ return new( EMM ) AlfVisualTemplate;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Constructor
+// ---------------------------------------------------------------------------
+OSN_EXPORT AlfVisualTemplate* AlfVisualTemplate::create(TAlfVisualType aType)
+ {
+ return new( EMM ) AlfVisualTemplate( aType );
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Constructor
+// ---------------------------------------------------------------------------
+OSN_EXPORT AlfVisualTemplate* AlfVisualTemplate::create(TAlfLayoutType aType)
+ {
+ return new( EMM ) AlfVisualTemplate( aType );
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// Description : Constructor
+// ---------------------------------------------------------------------------
+OSN_EXPORT AlfVisualTemplate::AlfVisualTemplate():
+ mVisualType(EAlfVisualTypeVisual),
+ mAttributeArray(KAttributeArrayGranularity),
+ mContainerArray(KContainerArrayGranularity),
+ mSelectOneChild(false),
+ mOwner(0),
+ mParent(0)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Constructor
+// ---------------------------------------------------------------------------
+OSN_EXPORT AlfVisualTemplate::AlfVisualTemplate(TAlfVisualType aType):
+ mVisualType(aType),
+ mAttributeArray(KAttributeArrayGranularity),
+ mContainerArray(KContainerArrayGranularity),
+ mSelectOneChild(false),
+ mOwner(0),
+ mParent(0)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Constructor
+// ---------------------------------------------------------------------------
+OSN_EXPORT AlfVisualTemplate::AlfVisualTemplate(TAlfLayoutType aType):
+ mVisualType(-1 - aType),
+ mAttributeArray(KAttributeArrayGranularity),
+ mContainerArray(KContainerArrayGranularity),
+ mSelectOneChild(false),
+ mOwner(0),
+ mParent(0)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Destructor
+// ---------------------------------------------------------------------------
+OSN_EXPORT AlfVisualTemplate::~AlfVisualTemplate()
+ {
+ mBrushArray.clear();
+ mAttributeArray.clear();
+ mContainerArray.clear();
+
+ // Remove this visual template from it's parent or owner
+ if(parent())
+ {
+ parent()->removeChildTemplate(*this);
+ }
+ if(owner())
+ {
+ owner()->removeVisualTemplate();
+ }
+
+ // Destroy child visual templates in two passes, since destructor of a child
+ // visual template could affect the content of the this visual template's child vector.
+ vector<IAlfVisualTemplate*> children(mChildren);
+ mChildren.clear();
+ for_each(children.begin(), children.end(), DeleteTemplate());
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Set the owner element.
+// ---------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::setOwner(IAlfElement* aOwner) throw()
+ {
+ if(aOwner != mOwner)
+ {
+ // Remove this visual template from it's parent. Parent and owner are
+ // mutually exclusive properties on a visual template.
+ if(aOwner && (parent() != 0))
+ {
+ parent()->removeChildTemplate(*this);
+ }
+
+ // Set the owner of this visual template.
+ mOwner = aOwner;
+ }
+ }
+
+OSN_EXPORT IAlfElement* AlfVisualTemplate::owner() const throw()
+ {
+ return mOwner;
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Set the name of the visual, i.e., the tag.
+// ---------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::setName(const char* aName)
+ {
+ mVisualName = UString(aName);
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Get the name of the visual, i.e., the tag.
+// ---------------------------------------------------------------------------
+OSN_EXPORT const char* AlfVisualTemplate::name() const throw()
+ {
+ return mVisualName.getUtf8();
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Add a child visual template.
+// ---------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::addChildTemplate(IAlfVisualTemplate& aChild)
+ {
+ insertChildTemplate(aChild, mChildren.size());
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Inserts a child visual template at given index
+// ---------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::insertChildTemplate(IAlfVisualTemplate& aChild, int aIndex)
+ {
+ if(!(aIndex >=0 && aIndex <= mChildren.size()))
+ ALF_THROW(AlfException, EInvalidArrayIndex, "AlfVisualTemplate::insertChildTemplate() - Index out of bounds.");
+
+ // Verify that the given argument is valid
+ if(existsInHierarchy(*this, aChild))
+ {
+ ALF_THROW(AlfException, EInvalidHierarchy, "AlfVisualTemplate::insertChildTemplate() - Adding a child visual template that is already in the hierarchy.");
+ }
+ if(existsInHierarchy(aChild, *this))
+ {
+ ALF_THROW(AlfException, EInvalidHierarchy, "AlfVisualTemplate::insertChildTemplate() - Attempt to create a recursive visual template tree.");
+ }
+ if(layoutType() < 0)
+ {
+ ALF_THROW(AlfException, EInvalidHierarchy, "AlfVisualTemplate::insertChildTemplate() - Attempt to add a child visual into a non-layout visual template.");
+ }
+
+ // Insert child visual template to the array
+ mChildren.insert(mChildren.begin() + aIndex, &aChild);
+
+ // Remove child from previous hierarchy and add it under this visual template.
+ if(aChild.parent())
+ {
+ // Visual template cannot have a parent and owner at the same time.
+ assert(aChild.owner() == 0);
+ aChild.parent()->removeChildTemplate(aChild);
+ }
+ if(aChild.owner())
+ {
+ // Visual template cannot have a parent and owner at the same time.
+ assert(aChild.parent() == 0);
+ aChild.owner()->removeVisualTemplate();
+ }
+
+ // Set a new parent for this visual template.
+ aChild.setParent(this);
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Destroyes a child visual template at given index
+// ---------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::destroyChildTemplate(int aIndex) throw()
+ {
+ // Remove and destroy a child template by the given index
+ if(aIndex >=0 && aIndex < mChildren.size())
+ {
+ IAlfVisualTemplate* child = mChildren[aIndex];
+ removeChildTemplate(*child);
+ delete child;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Destroyes a child visual template.with the given name
+// ---------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::destroyChildTemplate(const char* aName) throw()
+ {
+ // Search through the children for the given name.
+ for(int i = 0; i < mChildren.size() ;i++)
+ {
+ if(!strcmp(mChildren[i]->name(), aName))
+ {
+ // Remove and destroy the found child visual template
+ IAlfVisualTemplate* child = mChildren[i];
+ removeChildTemplate(*child);
+ delete child;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Get the number of child visual templates.
+// ---------------------------------------------------------------------------
+OSN_EXPORT int AlfVisualTemplate::numChildTemplates() const throw()
+ {
+ return mChildren.size();
+ }
+
+// ---------------------------------------------------------------------------
+// Description : Get a child visual template.
+// ---------------------------------------------------------------------------
+OSN_EXPORT IAlfVisualTemplate& AlfVisualTemplate::childTemplate(int aIndex) const
+ {
+ if((aIndex < 0) || (aIndex >= numChildTemplates()))
+ {
+ ALF_THROW(AlfException, EInvalidArrayIndex, "AlfVisualTemplate::childTemplate() - Index out of bounds.");
+ }
+ return *mChildren[aIndex];
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Add a new visual attribute setter. The ownership is not passed.
+// -----------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::addAttributeSetter(
+ IAlfAttributeSetter* aSetter, AlfAttributeContainer* aContainer )
+ {
+ mAttributeArray.resize(mAttributeArray.count()+1);
+ mContainerArray.resize(mContainerArray.count()+1);
+
+ mAttributeArray.insert(mAttributeArray.count(),aSetter);
+ mContainerArray.insert(mContainerArray.count(),aContainer);
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Get the number of visual attribute setters.
+// -----------------------------------------------------------------------------
+OSN_EXPORT int AlfVisualTemplate::numAttributeSetters() const throw()
+ {
+ return mAttributeArray.count();
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Get a visual attribute setter.
+// -----------------------------------------------------------------------------
+OSN_EXPORT IAlfAttributeSetter& AlfVisualTemplate::attributeSetter(int aIndex) const
+ {
+ if((aIndex < 0) || (aIndex >= mAttributeArray.count()))
+ {
+ ALF_THROW(AlfException, EInvalidArrayIndex, "AlfVisualTemplate::attributeSetter() - Index out of bounds.");
+ }
+ return *mAttributeArray[aIndex];
+ }
+
+// -----------------------------------------------------------------------------
+// Description :
+// -----------------------------------------------------------------------------
+OSN_EXPORT AlfAttributeContainer& AlfVisualTemplate::attributeContainer(int aIndex) const
+ {
+ if((aIndex < 0) || (aIndex >= mContainerArray.count()))
+ {
+ ALF_THROW(AlfException, EInvalidArrayIndex, "AlfVisualTemplate::attributeContainer() - Index out of bounds.");
+ }
+ return *mContainerArray[aIndex];
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Update an existing visual tree with new values
+// -----------------------------------------------------------------------------
+OSN_EXPORT CAlfVisual* AlfVisualTemplate::updateVisualTree(IAlfMap* aData, IAlfMap* aOldData, CAlfVisual& aVisual)
+ {
+
+ CAlfVisual* retVisual = &aVisual;
+ // Update the attributes.
+ for (int i = 0; i < mAttributeArray.count(); ++i)
+ {
+ try
+ {
+ //ALF_PERF_START( perfdata, "AlfVisualTemplate-updateVisualTree-SetAttributeValue")
+ mAttributeArray[i]->setAttributeValue(aVisual, mContainerArray[i], aData);
+ //ALF_PERF_STOP( perfdata, "AlfVisualTemplate-updateVisualTree-setAttributeValue")
+ }
+ catch (...)
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttributeValue,"AlfVisualTemplate")
+ }
+ }
+ // Pass to children
+ if (mChildren.size())
+ {
+ int ind = selectedChildInd( aData );
+ if (ind >= 0 && ind < mChildren.size())
+ {
+ CAlfLayout *layout = (CAlfLayout *)&aVisual;
+ int indOld = selectedChildInd( aOldData );
+ if ( ind == indOld )
+ {
+ mChildren[ind]->updateVisualTree( aData, aOldData, *layout );
+ }
+ else
+ {
+ CAlfControl& c(aVisual.Owner());
+
+ //new visual tree is created. Replaces the current (now old) layout,
+ //which is removed from its parent and destroyed.
+ //new layout is returned from the function.
+ CAlfLayout* parentLayout = layout->Layout();
+ TInt ind = parentLayout->FindVisual(layout);
+ parentLayout->Remove(layout);
+ layout->RemoveAndDestroyAllD();
+ CAlfLayout* newLayout = (CAlfLayout *) createVisualTree(c, aData, parentLayout, ind);
+ retVisual = newLayout;
+ }
+ }
+ else
+ {
+ CAlfLayout *layout = (CAlfLayout *)&aVisual;
+ for (int i = 0; i < mChildren.size(); ++i)
+ {
+ mChildren[i]->updateVisualTree(aData, aOldData, layout->Visual(i));
+ }
+ }
+ }
+ return retVisual;
+ }
+
+// -----------------------------------------------------------------------------
+// Description : create a new visual tree and initialize the visuals
+// -----------------------------------------------------------------------------
+OSN_EXPORT CAlfVisual* AlfVisualTemplate::createVisualTree(CAlfControl& aControl,
+ IAlfMap* aData, CAlfLayout* aParentLayout, int aLayoutIndex)
+ {
+ // create the visual
+ CAlfVisual *result = NULL;
+ CAlfLayout *layout = NULL;
+ if (!mSelectOneChild)
+ {
+ if (mVisualType < 0)
+ {
+ //ALF_PERF_START( perfdata, "AlfVisualTemplate-createVisualTree-NewLayout")
+ // create layout
+ result = layout = AlfVisualFactory::NewLayoutL(
+ (TAlfLayoutType)(-1 - mVisualType), aParentLayout, aControl, aControl.Env());
+ //ALF_PERF_STOP( perfdata, "AlfVisualTemplate-createVisualTree-NewLayout")
+ if (!result)
+ {
+ ALF_THROW(AlfVisualException,ECanNotCreateVisual,"AlfVisualTemplate")
+ }
+ }
+ else
+ {
+ // create visual
+ //ALF_PERF_START( perfdata, "AlfVisualTemplate-createVisualTree-NewVisual")
+ result = AlfVisualFactory::NewVisualL(
+ (TAlfVisualType)mVisualType, aParentLayout, aControl, aControl.Env());
+ //ALF_PERF_STOP( perfdata, "AlfVisualTemplate-createVisualTree-NewVisual")
+ if (!result)
+ {
+ ALF_THROW(AlfVisualException,ECanNotCreateVisual,"AlfVisualTemplate")
+ }
+
+ //Add the brushes to the visual
+ result->EnableBrushesL(true);
+ for (int i=0; i < mBrushArray.count(); i++)
+ {
+ result->Brushes()->AppendL(mBrushArray[i], EAlfDoesNotHaveOwnership);
+ }
+ }
+ if (aParentLayout &&
+ aLayoutIndex >= 0 && aLayoutIndex <= aParentLayout->Count())
+ {
+ //when aConstructedWithParentInformation- parameter is ETrue,
+ //no message sent to server
+ aParentLayout->Append(result, ETrue);
+
+ //reorder, if needed.
+ if (aLayoutIndex != aParentLayout->Count() - 1)
+ {
+ aParentLayout->Reorder(*result, aLayoutIndex);
+ }
+ }
+ aControl.Append(result);
+
+ if (mVisualName.isNull())
+ mVisualName = UString("");
+ result->SetTagL(TPtrC8((unsigned char*)mVisualName.getUtf8()));
+
+ // Set the attributes
+ for (int i = 0; i < mAttributeArray.count(); ++i)
+ {
+ try
+ {
+ //ALF_PERF_START( perfdata, "AlfVisualTemplate-createVisualTree-setAttributeValue")
+ // set dirtines of all attribute in createvisualtree
+ for(int j = 0; j < mContainerArray[i]->attributeCount() ;j++ )
+ {
+ mContainerArray[i]->getAttribute(j).setDirty(true);
+ }
+ mAttributeArray[i]->setAttributeValue(*result, mContainerArray[i], aData);
+ //ALF_PERF_STOP( perfdata, "AlfVisualTemplate-createVisualTree-setAttributeValue")
+ }
+ catch (...)
+ {
+ ALF_THROW(AlfAttributeException,EInvalidAttributeValue,"AlfVisualTemplate")
+ }
+ }
+ }
+
+ // Pass to children
+ int ind = selectedChildInd( aData );
+ if (ind >= 0 && ind < mChildren.size())
+ {
+ result = mChildren[ind]->createVisualTree(aControl, aData, aParentLayout, aLayoutIndex);
+ }
+ else if (!mSelectOneChild)
+ {
+ for (int i = 0; i < mChildren.size(); ++i)
+ {
+ mChildren[i]->createVisualTree(aControl, aData, layout, i);
+ }
+ }
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// reads and returns selected ind from data, if set. If not set returns -1.
+// -----------------------------------------------------------------------------
+int AlfVisualTemplate::selectedChildInd( IAlfMap* aData )
+ {
+ int ind = -1;
+ if (aData && mSelectOneChild)
+ {
+ IAlfVariantType* data = aData->item(mChildIndFieldName);
+
+ //field value contains index to child array.
+ //if field contains no data and template has only one
+ // child, assume it's the child wanted.
+ bool valueIsEmpty = false;
+ if (!data)
+ {
+ valueIsEmpty = true;
+ }
+ else
+ {
+ switch ( data->type() )
+ {
+ case IAlfVariantType::EInt:
+ ind = data->integer();
+ break;
+ default:
+ break;
+ }
+ }
+ if ( valueIsEmpty && mChildren.size() == 1 )
+ {
+ ind = 0;
+ }
+ }
+ return ind;
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Removes a visual template from the child array without
+// destroying the child template object.
+// -----------------------------------------------------------------------------
+void AlfVisualTemplate::removeChildTemplate(IAlfVisualTemplate& aChild) throw()
+ {
+ std::vector<IAlfVisualTemplate*>::iterator it = find(mChildren.begin(), mChildren.end(), &aChild);
+ if(it != mChildren.end())
+ {
+ mChildren.erase(it);
+ aChild.setParent(0);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Returns the parent visual template object
+// -----------------------------------------------------------------------------
+OSN_EXPORT IAlfVisualTemplate* AlfVisualTemplate::parent() const throw()
+ {
+ return mParent;
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Set the visual type
+// -----------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::setParent(IAlfVisualTemplate* aParent) throw()
+ {
+ mParent = aParent;
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Set the visual type
+// -----------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::setVisualType(TAlfVisualType aType)
+ {
+ mVisualType = aType;
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Get the visual type
+// -----------------------------------------------------------------------------
+OSN_EXPORT int AlfVisualTemplate::visualType() const throw()
+ {
+ return mVisualType;
+ }
+// -----------------------------------------------------------------------------
+// Description : Set the layout type
+// -----------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::setLayoutType(TAlfLayoutType aType)
+ {
+ mVisualType = -1 - aType;
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Get the layout type
+// -----------------------------------------------------------------------------
+OSN_EXPORT int AlfVisualTemplate::layoutType() const throw()
+ {
+ return -1 - mVisualType;
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Adds brush to the brush array.
+// -----------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::addBrush(CAlfBrush& aBrush)
+ {
+ mBrushArray.resize(mBrushArray.count()+1);
+ mBrushArray.insert(mBrushArray.count(),&aBrush);
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Get the munber of brushes
+// -----------------------------------------------------------------------------
+OSN_EXPORT int AlfVisualTemplate::numBrushes() const
+ {
+ return mBrushArray.count();
+ }
+
+// -----------------------------------------------------------------------------
+// Description : Get a Brush
+// -----------------------------------------------------------------------------
+OSN_EXPORT CAlfBrush& AlfVisualTemplate::brush(int aIndex) const
+ {
+ return *mBrushArray[aIndex];
+ }
+
+
+// -----------------------------------------------------------------------------
+// Description : puts the class in to selected child mode.
+// -----------------------------------------------------------------------------
+OSN_EXPORT void AlfVisualTemplate::setSelectChildMode(bool aSelectChild,
+ const UString& aChildIndFieldName )
+ {
+ mSelectOneChild = aSelectChild;
+ mChildIndFieldName = aChildIndFieldName;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the visual template.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfVisualTemplate::makeInterface( const IfId& aType )
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfVisualTemplate::type().mImplementationId)
+ {
+ return static_cast<IAlfVisualTemplate*>(this);
+ }
+ return NULL;
+ }
+
+ } //Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfwidget.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,498 @@
+/*
+* Copyright (c) 2007 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: The base class for all widgets.
+*
+*/
+
+
+#include <alf/alfenv.h>
+#include "alf/alfwidget.h"
+#include <alf/alfwidgetcontrol.h>
+#include <alf/ialfmodel.h>
+#include <alf/ialfviewwidget.h>
+#include <alf/alfcontrolgroup.h>
+#include <osn/ustring.h>
+#include <alf/alfvarianttype.h>
+#include <alf/alfexceptions.h>
+#include <alf/alflayout.h>
+#include "alf/alfattribute.h"
+#include "alf/alfattributevaluetype.h"
+#include "alf/ialfattributeowner.h"
+#include <alf/ialfwidgetfactory.h>
+#include <alf/alfevent.h>
+#include <alf/alfwidgetevents.h>
+#include <alf/alfwidgetenvextension.h>
+#include <osn/osnnew.h>
+#include <assert.h>
+
+#include "alfwidgetimpl.h"
+#include "alfwidgetattributeownerimpl.h"
+#include "ialfhostapi.h"
+
+namespace Alf
+ {
+
+// ======== MEMBER FUNCTIONS ========
+
+OSN_EXPORT AlfWidget::AlfWidget()
+ {
+ }
+
+OSN_EXPORT AlfWidget::AlfWidget(const char* aWidgetName)
+ {
+ mImpl.reset(new (EMM) AlfWidgetImpl());
+ mImpl->setWidgetName(UString(aWidgetName));
+ addCommonWidgetProperties();
+ }
+
+OSN_EXPORT AlfWidget::AlfWidget(const char* aWidgetName, IAlfContainerWidget& aContainer, CAlfEnv& aEnv)
+ {
+ mImpl.reset(new (EMM) AlfWidgetImpl());
+ mImpl->setWidgetName(UString(aWidgetName));
+ addCommonWidgetProperties();
+
+ // Create default control for the widget so that widget containment hierarchy can be
+ // created.
+ if(!control())
+ {
+ auto_ptr<CAlfWidgetControl> control(new (EMM) CAlfWidgetControl(aEnv));
+ setControl(control.get(), false);
+ control.release();
+ }
+
+ // Add this widget to the container widget
+ aContainer.addWidget(*this);
+ }
+
+void AlfWidget::addCommonWidgetProperties()
+ {
+ }
+
+void AlfWidget::removeReferenceFromControl()
+ {
+ // Make sure that the widget's control is not pointing to this widget anymore
+ if(control() && (control()->widget() == this))
+ {
+ control()->setOwnerWidget(0);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfWidget::~AlfWidget()
+ {
+
+ if( control() && control()->Host() )
+ {
+ CAlfWidgetControl* parentControl =
+ dynamic_cast<CAlfWidgetControl*>( control()->Host() );
+
+ if (control()->Focus())
+ {
+ control()->CAlfWidgetControl::RelinquishFocus();
+ }
+
+ // This widget is now deleted and it needs to be removed from the
+ // container to avoid double deletion.
+ if (parentControl)
+ {
+ AlfWidget* widget = parentControl->widget();
+ if (widget)
+ {
+ widget->removeWidget( *this );
+ }
+ }
+ }
+
+ // Delete and remove all the connected child widgets.
+ // AlfWidgetFactory::destroyWidget causes ~AlfWidget to be called for
+ // the child widget so this works recursively. Note that it also
+ // then removes the connection to the container widget in the beginning
+ // of ~AlfWidget destructor call.
+
+ IAlfWidgetFactory& factory = AlfWidgetEnvExtension::widgetFactory(*(CAlfEnv::Static()));
+
+ while ( widgetCount() )
+ {
+ // Destroy the child widget and also remove it from the child widget
+ // array to make sure that this loop terminates.
+ // Normally also ~AlfWidget of the child widget removes the destroyed widget
+ // from this widget's child array, but that might not be the case
+ // if the child widget has not been added in the CAlfEnv
+ // (all widgets should always be added there).
+ // If not added in the env, destroyWidget does not delete the widget!
+
+ IAlfWidget* child = mImpl->getWidget( 0 );
+
+ removeWidget( *child );
+ IAlfWidget* actual = factory.findWidget( child->widgetName() );
+ if( actual )
+ {
+ factory.destroyWidget(actual);
+ }
+ }
+
+ // Ensure that the control is not pointing back to this widget
+ removeReferenceFromControl();
+ }
+
+
+OSN_EXPORT CAlfWidgetControl* AlfWidget::control() const
+ {
+ return mImpl->control();
+ }
+
+// ---------------------------------------------------------------------------
+// return the parent container
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfContainerWidget* AlfWidget::parent() const
+ {
+ CAlfWidgetControl* ctrl = control();
+ assert(ctrl); //should always be set.
+
+ IAlfContainerWidget* containerWidget = 0;
+ CAlfWidgetControl* parentControl =
+ dynamic_cast<CAlfWidgetControl*>(ctrl->Host());
+ IAlfWidgetFactory& factory = AlfWidgetEnvExtension::widgetFactory(*(CAlfEnv::Static()));
+ if (parentControl)
+ {
+ IAlfWidget* widget = parentControl->widget();
+ if (widget)
+ {
+ //control->widget may return wrong instance, temporary fix,
+ // find widget from the CAlfEnv.
+ const char* name = widget->widgetName();
+ IAlfWidget* w = factory.findWidget(name);
+ containerWidget =
+ IAlfWidget::makeInterface<IAlfContainerWidget>(w);
+ assert(containerWidget);
+ }
+ }
+
+ return containerWidget;
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the new control for this widget. The control will be automatically
+// added as an observer for the model, and notified about any
+// model changes (e.g., modelChangedL()).
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidget::setControl(CAlfWidgetControl* aControl, bool aDeletePreviousControl)
+ {
+ CAlfWidgetControl* myControl = control();
+ if(aControl && (aControl != myControl))
+ {
+ // Throw exception if the set control is still a control of another widget
+ if(aControl->widget())
+ {
+ ALF_THROW(AlfException, EInvalidArgument, "AlfWidget::setControl() - Control is already set to another widget.");
+ }
+
+ // Append control to widget's control group
+ if(myControl)
+ {
+ assert(myControl->ControlGroup() != 0);
+ aControl->resetControlGroup(*myControl->ControlGroup());
+
+ // Move connections from old control to new control
+ IAlfHostAPI& oldHostApi = myControl->hostAPI();
+ IAlfHostAPI& newHostApi = aControl->hostAPI();
+
+ // Move old controls children under new control
+ int childCount = oldHostApi.getConnectionCount();
+ while(childCount > 0)
+ {
+ newHostApi.setConnection(*oldHostApi.getConnection(0), EChild);
+ childCount--;
+ }
+
+ //relinquishfocus or else pointer is left in roster, even though memory for it
+ //might be released. Must be called before connection removed.
+ if (myControl->Focus())
+ {
+ myControl->RelinquishFocus();
+ }
+
+ // Move new control under the old control's parent and remove old control from the parent.
+ if(myControl->Host())
+ {
+ CAlfWidgetControl* parent = dynamic_cast<CAlfWidgetControl*>(myControl->Host());
+ if(parent)
+ {
+ IAlfHostAPI& parentHostApi = parent->hostAPI();
+ parentHostApi.setConnection(*aControl, EChild);
+ parentHostApi.removeConnection(*myControl);
+ }
+ }
+ }
+
+ // Set the owner widget of the control to point to this widget
+ aControl->setOwnerWidget(this);
+
+ // Remove reference to this widget from the previous control
+ removeReferenceFromControl();
+ }
+ mImpl->setControl(aControl, aDeletePreviousControl);
+ }
+
+OSN_EXPORT IAlfModel* AlfWidget::model()
+ {
+ return mImpl->model();
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the new model for this widget. If a control exists, it is automatically
+// added as an observer for the model and notified for the model change.
+// The old model is released.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidget::setModel( IAlfModel* aModel,bool aTakeOwnerShip)
+ {
+ mImpl->setModel( aModel ,aTakeOwnerShip);
+ }
+
+
+OSN_EXPORT const char* AlfWidget::widgetName() const
+ {
+ return mImpl->widgetName().getUtf8();
+ }
+
+// ---------------------------------------------------------------------------
+// From class MAlfInterfaceBase.
+// Static getter for interfaces provided by the widget, the control, or the model.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfWidget::makeInterface( AlfWidget* aWidget, const IfId& aType )
+ {
+ if ( !aWidget )
+ {
+ return NULL;
+ }
+ else
+ {
+ return aWidget->makeInterface( aType );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the widget.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* AlfWidget::makeInterface( const IfId& aType )
+ {
+ UString param(aType.mImplementationId);
+ if ( param == IAlfWidget::type().mImplementationId )
+ {
+ return static_cast<IAlfWidget*>(this);
+ }
+ else if (param == IAlfAttributeOwner::type().mImplementationId )
+ {
+ return static_cast<IAlfAttributeOwner*>(mImpl->getAttributeOwner());
+ }
+ else if (param == IAlfContainerWidget::type().mImplementationId )
+ {
+ return static_cast<IAlfContainerWidget*>(this);
+ }
+ IAlfInterfaceBase* result = NULL;
+ if (control())
+ {
+ result = control()->makeInterface(aType);
+ }
+ if (!result && model())
+ {
+ result = model()->makeInterface(aType);
+ }
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfWidget::widgetCount() const
+ {
+ return mImpl->widgetCount();
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfContainerWidget
+// ---------------------------------------------------------------------------
+OSN_EXPORT void AlfWidget::addWidget(IAlfWidget& aWidget)
+ {
+ // There should never be a situation where add widget is called on a
+ // widget without a control.
+ assert(aWidget.control() != 0);
+ assert(control() != 0);
+ assert(control()->ControlGroup() != 0);
+
+ // Throw an exception if widget is added to itself.
+ IAlfWidget* self = static_cast<IAlfWidget*>(this);
+ if(self == &aWidget)
+ {
+ ALF_THROW(AlfException, EInvalidArgument, "Tried to add a widget to itself.");
+ }
+
+ // Throw an exception if added widget is a view widget.
+ IAlfViewWidget* view = aWidget.makeInterface<IAlfViewWidget>(&aWidget);
+ if(view != 0)
+ {
+ ALF_THROW(AlfException, EInvalidArgument, "Attempted to add a view widget into a container widget.");
+ }
+
+ // Bail out if the given widget is already added in this widget.
+ if(mImpl->findWidget(static_cast<AlfWidget*>(&aWidget)) != -1)
+ {
+ return;
+ }
+
+ // Append the added widget and its children to widget's control group.
+ aWidget.control()->resetHierarchyControlGroup(*control()->ControlGroup());
+
+ // Append widget to widget array and remove widget from previous container's widget array.
+ mImpl->addWidget(static_cast<AlfWidget*>(&aWidget));
+ CAlfWidgetControl* parentControl = dynamic_cast<CAlfWidgetControl*>(aWidget.control()->Host());
+ if( parentControl )
+ {
+ parentControl->widget()->removeWidget(aWidget);
+ }
+
+ // Set connection to added widget's control
+ CAlfWidgetControl* cntrl = control();
+ if (cntrl)
+ {
+ IAlfHostAPI& hostApi = cntrl->hostAPI();
+ try
+ {
+ hostApi.setConnection(*aWidget.control(), EChild);
+ }
+ catch (AlfException &e)
+ {
+ removeWidget(aWidget);
+ // Attempt to add it back to the old.
+ if(parentControl)
+ {
+ parentControl->widget()->mImpl->addWidget(static_cast<AlfWidget*>(&aWidget));
+ hostApi.setConnection(*parentControl, EChild);
+ }
+ throw(e);
+ }
+ }
+ }
+
+OSN_EXPORT IAlfWidget* AlfWidget::getWidget(int aIndex) const
+ {
+ return mImpl->getWidget(aIndex);
+ }
+
+OSN_EXPORT int AlfWidget::getWidgetIndex(IAlfWidget& aWidget) const
+ {
+ return mImpl->findWidget(static_cast<AlfWidget*>(&aWidget));
+ }
+
+OSN_EXPORT void AlfWidget::removeWidget(int aIndex)
+ {
+ IAlfWidget* widget = getWidget(aIndex); //get the widget
+ CAlfWidgetControl* cntrl = control();
+ if (widget && cntrl)
+ {
+ CAlfWidgetControl* childcontrol = widget->control();
+ if(childcontrol)
+ {
+ if (childcontrol->Focus())
+ {
+ try
+ {
+ childcontrol->RelinquishFocus();
+ }
+ catch(...)
+ {
+ // ignore any problems with getting rid of focus
+ }
+ }
+ else if(childcontrol->isContainer())
+ {
+ CAlfWidgetControl* focused =
+ dynamic_cast<CAlfWidgetControl*>(childcontrol->FocusedConnection());
+ if(focused)
+ {
+ try
+ {
+ control()->processEvent(TAlfEvent(EEventFocusNextWidget));
+ }
+ catch(...)
+ {
+ // cannot fail because of event processing to get rid of focus
+ }
+ }
+ }
+ IAlfHostAPI& hostApi = cntrl->hostAPI();
+ hostApi.removeConnection(*childcontrol); //remove from hierarchy
+ }
+ }
+ mImpl->removeWidget(aIndex); //remove it from array
+ }
+
+OSN_EXPORT void AlfWidget::applyLayout(IAlfLayoutManager& aLayout)
+ {
+ CAlfWidgetControl* cntrl = control();
+ if (cntrl)
+ {
+ IAlfHostAPI& hostApi = cntrl->hostAPI();
+
+ //remove connections first
+ for (int i=0 ; i< widgetCount() ; i++)
+ {
+ IAlfWidget* widget = getWidget(i);
+ hostApi.removeConnection(*widget->control());
+ }
+
+ hostApi.setBaseLayout(aLayout);
+
+ //add connections again, when new layout has been set.
+ for (int i=0 ; i< widgetCount() ; i++)
+ {
+ IAlfWidget* widget = getWidget(i);
+ hostApi.setConnection(*(widget->control()),EChild);
+ }
+ }
+ }
+
+OSN_EXPORT void AlfWidget::setChildFocus(bool /*aFocus*/)
+ {
+
+ }
+
+OSN_EXPORT void AlfWidget::setPresentation(const char* /*aFilePath*/)
+ {
+ }
+
+
+OSN_EXPORT void AlfWidget::removeWidget(IAlfWidget& aWidget)
+ {
+ for(int i = 0; i < mImpl->widgetCount(); ++i)
+ {
+ if(mImpl->getWidget(i) == &aWidget)
+ {
+ mImpl->removeWidget(i);
+ break;
+ }
+ }
+ }
+
+ }//namespace Alf
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfwidgetattributeownerimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,515 @@
+/*
+* Copyright (c) 2007 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 the IAlfAttributeOwner interface
+* for AlfWidget.
+*
+*/
+
+
+#include <alf/alfexceptions.h>
+#include "alf/alfattribute.h"
+#include <alf/alfwidgetcontrol.h>
+#include <alf/ialfelement.h>
+#include <osn/ustring.h>
+#include "alf/attrproperty.h"
+#include "alf/alfattributecontainer.h"
+#include <alf/alfwidgetcommand.h>
+
+
+#include "alfwidgetattributeownerimpl.h"
+
+using namespace duiuimodel;
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+AlfWidgetAttributeOwnerImpl::AlfWidgetAttributeOwnerImpl(
+ CAlfWidgetControl* aControl) :
+ mControl(aControl)
+ {
+ mAttributeList.setAutoDelete(true);
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+AlfWidgetAttributeOwnerImpl::~AlfWidgetAttributeOwnerImpl()
+ {
+ mAttributeList.clear();
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the widget.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfWidgetAttributeOwnerImpl::makeInterface(
+ const IfId& aType)
+ {
+ UString param(aType.mImplementationId);
+ if (param == IAlfAttributeOwner::type().mImplementationId)
+ {
+ return static_cast<IAlfAttributeOwner*>(this);
+ }
+ return 0;
+ }
+
+// ---------------------------------------------------------------------------
+// Get the number of available attributes.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+int AlfWidgetAttributeOwnerImpl::attributeCount() const
+ {
+ int count = mAttributeList.count();
+ // Add control attribute count.
+ IAlfAttributeOwner* control =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(mControl);
+ if (control)
+ {
+ count += control->attributeCount();
+ // Add root element attribute count
+ for (int i = 0; i < mControl->numElements(); i++)
+ {
+ IAlfElement& element = mControl->element(i);
+ if (element.parentElement() == 0)
+ {
+ // Get the attribute interface
+ IAlfAttributeOwner* attributeOwner =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(&element);
+
+ if (attributeOwner)
+ {
+ count += attributeOwner->attributeCount();
+ }
+ }
+ }
+ }
+
+ return count;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the attribute with the given name.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+const AlfAttribute* AlfWidgetAttributeOwnerImpl::getAttribute(
+ const UString& aAttribName) const
+ {
+ const AlfAttribute* attribute = 0;
+
+ // Try to find from widget
+ for (int i = 0; i < mAttributeList.count(); i++)
+ {
+ if (!strcmp(aAttribName.getUtf8(), mAttributeList[i]->name()))
+ {
+ attribute = mAttributeList[i];
+ break;
+ }
+ }
+
+ if (!attribute)
+ {
+ // Try to find from control
+ IAlfAttributeOwner* control =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(mControl);
+
+ if (control)
+ {
+ attribute = control->getAttribute(aAttribName);
+ }
+
+ if (!attribute)
+ {
+ // Try to find from root elements
+ for (int i = 0; i < mControl->numElements(); i++)
+ {
+ IAlfElement& element = mControl->element(i);
+ if (element.parentElement() == 0)
+ {
+ // Get the attribute interface
+ IAlfAttributeOwner* attributeOwner =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(&element);
+
+ if (attributeOwner)
+ {
+ attribute = attributeOwner->getAttribute(aAttribName);
+ if (attribute)
+ {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ return attribute;
+ }
+
+// ---------------------------------------------------------------------------
+// Set a value of an attribute.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfWidgetAttributeOwnerImpl::setAttribute(const AlfAttribute& aAttribute)
+ {
+ // The attribute must have at least one value set.
+ if (!aAttribute.getTargetValueCount())
+ {
+ ALF_THROW(
+ AlfAttributeException, EInvalidAttribute, "AlfWidgetAttributeOwnerImpl")
+ }
+
+ if (canHandleAttribute(aAttribute.name()))
+ {
+ // Check whether the attribute exists already.
+ int i = 0;
+ for (i = 0; i < mAttributeList.count() ; i++)
+ {
+ if (!strcmp(aAttribute.name(), mAttributeList[i]->name()))
+ {
+ // Attribute exists already, modify the contents.
+ *mAttributeList[i] = aAttribute;
+ handleAttribute(*mAttributeList[i]);
+ return true;
+ }
+ }
+
+ // Attribute with the given name does not exist,
+ // clone the given attribute and insert it in the list.
+ mAttributeList.resize(mAttributeList.count() + 1);
+ // Insert cannot fail because already resized.
+ mAttributeList.insert(mAttributeList.count(),
+ const_cast<AlfAttribute&>(aAttribute).clone());
+ handleAttribute(*mAttributeList[i]);
+ return true;
+ }
+
+ bool supported(false);
+ bool sendevent(true);
+
+ // Let the control try to handle attribute.
+ IAlfAttributeOwner* control =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(mControl);
+ if (control)
+ {
+ supported = control->setAttribute(aAttribute);
+ }
+
+ // Let the root elements try to handle attribute
+ if (!supported)
+ {
+ supported = handleElementAttribute(aAttribute);
+ sendevent = false; //event already sent
+ }
+
+ //inform env of attribute setting
+ if (supported && sendevent)
+ {
+ UString target;
+ auto_ptr<AlfAttribute> attribute(new (EMM) AlfAttribute());
+ *attribute.get() = aAttribute;
+ TAlfWidgetAttributeCommand command(attribute.get(), target, mControl->widget());
+ attribute.release();
+ command.ExecuteL(mControl->Env());
+ }
+
+ return (supported);
+ }
+
+// ---------------------------------------------------------------------------
+// Set a value of an attribute.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfWidgetAttributeOwnerImpl::setAttribute(
+ const UString& aAttribName, AlfAttributeValueType* aValue)
+ {
+ if (!aValue)
+ {
+ ALF_THROW(
+ AlfAttributeException, EInvalidAttribute, "AlfWidgetAttributeOwnerImpl")
+ }
+
+ // Create a new attribute.
+ auto_ptr<AlfAttribute> attribute(
+ new (EMM) AlfAttribute(aAttribName.getUtf8(), AlfAttribute::EStatic));
+ attribute->addTargetValue(aValue);
+
+ return setAttribute(*attribute.get());
+ }
+// ---------------------------------------------------------------------------
+// Set a value of an attribute.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfWidgetAttributeOwnerImpl::setAttribute( const UString& aTargetId ,
+ AlfAttribute& aAttribute )
+ {
+
+ bool supported(false);
+
+ // The attribute must have at least one value set.
+ if (!aAttribute.getTargetValueCount())
+ {
+ ALF_THROW(
+ AlfAttributeException, EInvalidAttribute, "AlfWidgetAttributeOwnerImpl")
+ }
+
+ if (!aTargetId.isEmpty()
+ && mControl)
+ {
+
+ // Try to find from control
+ IAlfAttributeOwner* control =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(mControl);
+ if (control)
+ {
+ supported = control->setAttribute(aTargetId, aAttribute);
+ }
+
+ if (!supported)
+ {
+ // Try finding element class using targetId
+ IAlfElement* elem = mControl->findElement(aTargetId.getUtf8());
+ if (elem)
+ {
+ IAlfAttributeOwner* elementOwner = IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(elem);
+ if (elementOwner)
+ {
+ supported = elementOwner->setAttribute(aTargetId, aAttribute);
+ }
+ }
+ }
+ }
+
+ //inform env of attribute change
+ if (supported)
+ {
+ UString target(aTargetId);
+ auto_ptr<AlfAttribute> attribute(new (EMM) AlfAttribute());
+ *attribute.get() = aAttribute;
+ TAlfWidgetAttributeCommand command(attribute.get(), target, mControl->widget());
+ attribute.release();
+ command.ExecuteL(mControl->Env());
+ }
+
+ return supported;
+
+ }
+
+// ---------------------------------------------------------------------------
+// Set a value of an attribute.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfWidgetAttributeOwnerImpl::setAttribute( const UString& aTargetId,
+ const UString& aAttribName,
+ AlfAttributeValueType* aValue )
+ {
+ bool ret(false);
+
+ if (!aValue)
+ {
+ ALF_THROW(
+ AlfAttributeException, EInvalidAttribute, "AlfWidgetAttributeOwnerImpl")
+ }
+
+ if (!aTargetId.isEmpty())
+ {
+ // Create a new static attribute.
+ auto_ptr<AlfAttribute> attribute(
+ new (EMM) AlfAttribute(aAttribName.getUtf8(), AlfAttribute::EStatic));
+ attribute->addTargetValue(aValue);
+ ret = setAttribute(aTargetId, *attribute.get());
+
+ }
+
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the attribute with the given name.
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+const AlfAttribute* AlfWidgetAttributeOwnerImpl::getAttribute( const UString& aTargetId,
+ const UString& aAttribName ) const
+ {
+ const AlfAttribute* attr(0);
+
+ if (!aTargetId.isEmpty()
+ && mControl)
+ {
+
+ // Try to find from control
+ IAlfAttributeOwner* control =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(mControl);
+ if (control)
+ {
+ attr = control->getAttribute(aTargetId, aAttribName);
+ }
+
+ if (!attr)
+ {
+ // Try finding element class from control
+ IAlfElement* element = mControl->findElement(aTargetId.getUtf8());
+
+ if (element)
+ {
+ // Get the attribute interface
+ IAlfAttributeOwner* attributeOwner =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(element);
+
+ if (attributeOwner)
+ {
+ attr = attributeOwner->getAttribute(aTargetId, aAttribName);
+ }
+ }
+ }
+ }
+
+ return attr;
+
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the attributes from container
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+bool AlfWidgetAttributeOwnerImpl::setAttributeContainer( AlfAttributeContainer& aAttributeContainer )
+ {
+
+ bool ret(true);
+
+ for (int i=0;i<aAttributeContainer.attributeCount();i++)
+ {
+ AlfAttribute& attr = aAttributeContainer.getAttribute(i);
+ bool supported = setAttribute(attr);
+ if (!supported)
+ {
+ ret = false;
+ }
+ }
+
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// Sets the attributes from container using targetId
+// From class IAlfAttributeOwner.
+// ---------------------------------------------------------------------------
+//
+
+bool AlfWidgetAttributeOwnerImpl::setAttributeContainer( const UString& aTargetId ,
+ AlfAttributeContainer& aAttributeContainer )
+ {
+ bool ret(true);
+
+ if (!aTargetId.isEmpty() )
+ {
+ for (int i=0;i<aAttributeContainer.attributeCount();i++)
+ {
+ AlfAttribute& attr = aAttributeContainer.getAttribute(i);
+ bool supported = setAttribute(aTargetId, attr);
+ if (!supported)
+ {
+ ret = false;
+ }
+ }
+ }
+
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// Handles the attribute, sets proper values.
+// ---------------------------------------------------------------------------
+//
+bool AlfWidgetAttributeOwnerImpl::handleElementAttribute(
+ const AlfAttribute& aAttribute)
+ {
+ bool supported(false);
+
+ // Let the root elements try to handle attribute
+ const char* attrName = aAttribute.name(); // for debuging
+ int elementCount = mControl->numElements();
+ for (int i = 0; i < elementCount; i++)
+ {
+ IAlfElement& element = mControl->element(i);
+ if (element.parentElement() == 0)
+ {
+ // Get the attribute interface
+ IAlfAttributeOwner* attributeOwner =
+ IAlfInterfaceBase::makeInterface<IAlfAttributeOwner>(&element);
+
+ if (attributeOwner)
+ {
+ // let all IAlfAttributeOwners set the attribute
+ if (attributeOwner->setAttribute(aAttribute))
+ {
+ UString target(element.name());
+ auto_ptr<AlfAttribute> attribute(new (EMM) AlfAttribute());
+ *attribute.get() = aAttribute;
+ TAlfWidgetAttributeCommand command(attribute.get(), target, mControl->widget());
+ attribute.release();
+ command.ExecuteL(mControl->Env());
+ supported = true;
+ }
+ }
+ }
+ }
+
+ return supported;
+ }
+
+// ---------------------------------------------------------------------------
+// Handles the attribute, sets proper values.
+// ---------------------------------------------------------------------------
+//
+void AlfWidgetAttributeOwnerImpl::handleAttribute(
+ const AlfAttribute& /*aAttribute*/)
+ {
+ // Add common widget specific attribute handling here
+ }
+
+// ---------------------------------------------------------------------------
+// Can attribute be handled with this widget.
+// ---------------------------------------------------------------------------
+//
+bool AlfWidgetAttributeOwnerImpl::canHandleAttribute(
+ const char* /*aAttributeName*/)
+ {
+ bool canHandle(false);
+ // Add common wigdet specific attribute checking here like:
+/* if (!strcmp(aAttributeName, commonvisualattributes::KOpacity))
+ {
+ canHandle = true;
+ }*/
+ return canHandle;
+ }
+
+ } // namespace Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfwidgetcommand.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2006 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: widget command implementation
+*
+*/
+
+
+
+//INCLUDES
+#include <alf/alfwidgetcommand.h>
+#include <alf/alfwidgetevents.h>
+#include <alf/alfevent.h>
+#include "alf/alfwidget.h"
+#include "alf/alfattribute.h"
+
+namespace Alf
+{
+TAlfWidgetAttributeCommand::TAlfWidgetAttributeCommand(
+ AlfAttribute* aAttribute,
+ UString& aTarget,
+ AlfWidget* aRecipient
+ ) : TAlfObjectCommand(EAlfCommandTypeNone, aRecipient, EAlfOpNone),
+ mOwnedAttribute( aAttribute ),
+ mTarget( aTarget )
+ {
+ }
+
+void TAlfWidgetAttributeCommand::ExecuteL(CAlfEnv& /*aEnv*/) const
+ {
+ TAlfEvent newEvent( EEventWidgetAttributeChanged, (TInt)this );
+ AlfWidget* widget = ((AlfWidget*) Object());
+ if (widget)
+ {
+ CAlfControl* control = widget->control(); // Widgets are guaranteed to have controls
+ control->OfferEventL(newEvent);
+ }
+ }
+
+TAlfWidgetAttributeCommand::~TAlfWidgetAttributeCommand()
+ {
+ delete mOwnedAttribute;
+ mOwnedAttribute = NULL;
+ }
+
+TInt TAlfWidgetAttributeCommand::Size() const
+ {
+ return sizeof(*this);
+ }
+
+}//namespace Alf;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfwidgetcontrol.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,1954 @@
+/*
+* Copyright (c) 2007 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: The base class for all widget controls.
+*
+*/
+
+
+#include <alf/alfevent.h>
+
+#include "alf/alfwidget.h"
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfmodel.h>
+#include <alf/alfwidgeteventhandler.h>
+#include "alf/alfelement.h"
+#include <alf/alfvarianttype.h>
+#include "alf/alfmodeloperation.h"
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+#include <alf/alfexceptions.h>
+#include <alf/alfenv.h>
+#include <alf/alfcontrolgroup.h>
+#include <alf/ialflayoutmanager.h>
+#include <alf/alfwidgetevents.h>
+#include "alf/ialfattributeowner.h"
+#include <osn/osnnew.h>
+#include <assert.h>
+
+#include "alfhostapiimpl.h"
+#include "alfwidgetcontroleventfilter.h"
+
+using namespace osncore;
+
+namespace Alf
+ {
+// ======== INTERNAL DATA TYPES ========
+
+// Forward declared inside the Alf namespace
+
+
+//Internal Class to Store the Element Data
+class ElementData
+ {
+public:
+ //Default constructor
+ ElementData():mElement(0)
+ {
+ }
+ //Destructor
+ ~ElementData()
+ {
+ delete mElement;
+ }
+ /**
+ * The element. Own.
+ */
+ IAlfElement* mElement;
+
+ /**
+ * The data id range for the element.
+ */
+ uint mDataIdRange;
+ };
+
+class AlfWidgetControlImpl
+ {
+
+public:
+ AlfWidgetControlImpl():mWidget(0),mEventFilter(0),mAlfHostAPIImpl(0)
+ {
+
+ }
+ ~AlfWidgetControlImpl()
+ {
+
+ }
+public:
+ /**
+ * The element data. Elements are owned by the control.
+ */
+ AlfPtrVector<ElementData> mElementArray;
+
+ /**
+ * The event handlers. Event handlers are owned by the control.
+ */
+ AlfPtrVector<IAlfWidgetEventHandler> mEventHandlerArray;
+
+ /**
+ * The owner widget.
+ */
+ AlfWidget* mWidget;
+
+ /**
+ * PointerUp Event Filter.
+ */
+ AlfWidgetControlEventFilter *mEventFilter;
+
+ /**
+ * The state of the control.
+ * The state is a combination of binary state flags.
+ */
+ uint mState;
+ /**
+ * AlfAPIImpl auto pointer.
+ * This will be used to provide container control's functionality by
+ * widget control.Owned.
+ */
+ auto_ptr<AlfHostAPIImpl> mAlfHostAPIImpl;
+ };
+
+// ======== MEMBER FUNCTIONS ========
+
+OSN_EXPORT CAlfWidgetControl::CAlfWidgetControl(CAlfEnv& aEnv)
+ {
+ construct(aEnv);
+ }
+
+OSN_EXPORT CAlfWidgetControl::CAlfWidgetControl()
+ {
+ }
+
+OSN_EXPORT void* CAlfWidgetControl::operator new(
+ size_t aSize, newarg /*aEnumVal*/) throw (std::bad_alloc)
+ {
+ void* ret = 0;
+ TRAPD(err, ret = CBase::operator new((TUint)aSize, ELeave));
+ if(err != KErrNone)
+ {
+ throw std::bad_alloc();
+ }
+ return ret;
+ }
+
+OSN_EXPORT void CAlfWidgetControl::construct(
+ CAlfEnv& aEnv)
+ {
+ mWdgtControlData.reset( new (EMM) AlfWidgetControlImpl() );
+ mWdgtControlData->mWidget = 0;
+ //by default control is focusable and enabled
+ mWdgtControlData->mState = IAlfWidgetControl::Focusable |
+ IAlfWidgetControl::Enabled;
+
+ // Call CAlfControl second phase constructor
+ TRAPD(err, CAlfControl::ConstructL( aEnv ));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfException, err, "CAlfWidgetControl::construction failed.");
+ }
+ mWdgtControlData->mElementArray.setAutoDelete(true);
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(true);
+ mWdgtControlData->mAlfHostAPIImpl.reset(0);
+
+ // Instatiate Event filter
+ mWdgtControlData->mEventFilter =
+ new (EMM) AlfWidgetControlEventFilter();
+ addEventHandler(mWdgtControlData->mEventFilter);
+ }
+
+OSN_EXPORT CAlfWidgetControl::~CAlfWidgetControl()
+ {
+ //release all connections
+ while (this->ConnectionCount())
+ {
+ this->RemoveConnection(&(this->Connection(0)));
+ }
+ mWdgtControlData->mElementArray.setAutoDelete(true);
+
+ for(int i = 0; i < mWdgtControlData->mElementArray.count(); ++i)
+ {
+ // Fetch the element
+ IAlfElement *element = mWdgtControlData->mElementArray[i]->mElement;
+
+ // If the element is also an event handler
+ IAlfWidgetEventHandler* eventHandler =
+ IAlfInterfaceBase::makeInterface<IAlfWidgetEventHandler>( element );
+ int eventHandlerIndex =
+ mWdgtControlData->mEventHandlerArray.findRef( eventHandler );
+ if ( eventHandler && eventHandlerIndex != KErrNotFound )
+ {
+ //cache auto delete state.
+ bool autoDeleteState =
+ mWdgtControlData->mEventHandlerArray.autoDelete();
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(false);
+ mWdgtControlData->mEventHandlerArray.remove( eventHandlerIndex );
+ //restore auto delete state.
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(
+ autoDeleteState);
+ }
+ }
+
+ mWdgtControlData->mElementArray.clear();
+
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(true);
+ mWdgtControlData->mEventHandlerArray.clear();
+
+ if(mWdgtControlData->mWidget)
+ {
+ // false: don't delete twice
+ mWdgtControlData->mWidget->setControl(0, false);
+ mWdgtControlData->mWidget = 0;
+ }
+ }
+
+OSN_EXPORT uint CAlfWidgetControl::state() const
+ {
+ // Verify that the internal state stored in the member variable
+ // is in sync with the CAlfWidget state. This might not be the case
+ // if someone has called CAlfWidget APIs, e.g. AcquireFocus(), directly.
+
+ if ( Focus() )
+ {
+ mWdgtControlData->mState |= IAlfWidgetControl::Focused;
+ }
+ else
+ {
+ mWdgtControlData->mState &= ~IAlfWidgetControl::Focused;
+ }
+
+ return mWdgtControlData->mState;
+ }
+
+OSN_EXPORT void CAlfWidgetControl::setState( uint aState )
+ {
+ // Checks the state invariants. Throws exceptions if not OK
+ checkStateInvariants(aState);
+
+ // Visible
+ if ( aState & IAlfWidgetControl::Visible )
+ {
+ enableStateVisible();
+ }
+ else
+ {
+ disableStateVisible();
+ }
+
+ // Enabled
+ if ( aState & IAlfWidgetControl::Enabled )
+ {
+ enableStateEnabled();
+ }
+ else
+ {
+ disableStateEnabled();
+ }
+
+ // Focused
+ if ( aState & IAlfWidgetControl::Focused )
+ {
+ enableStateFocused();
+ }
+ else
+ {
+ disableStateFocused();
+ }
+
+ // Focusable
+ if ( aState & IAlfWidgetControl::Focusable )
+ {
+ enableStateFocusable();
+ }
+ else
+ {
+ disableStateFocusable();
+ }
+ }
+
+OSN_EXPORT void CAlfWidgetControl::enableState( uint aState )
+ {
+ // Predicts the state and checks the state invariants.
+ // Throws exceptions if not OK
+ predictAndCheckStateInvariants(aState, true);
+
+ // Visible
+ if ( aState & IAlfWidgetControl::Visible )
+ {
+ enableStateVisible();
+ }
+
+ // Enabled
+ if ( aState & IAlfWidgetControl::Enabled )
+ {
+ enableStateEnabled();
+ }
+
+ // Set Focusable. This is done first, before putting on fucus
+ if ( aState & IAlfWidgetControl::Focusable )
+ {
+ enableStateFocusable();
+ }
+
+ // Focused
+ if ( aState & IAlfWidgetControl::Focused )
+ {
+ enableStateFocused();
+ }
+
+ }
+
+OSN_EXPORT void CAlfWidgetControl::disableState( uint aState )
+ {
+ // Predicts the state and checks the state invariants.
+ // Throws exceptions if not OK
+ predictAndCheckStateInvariants(aState, false);
+
+ // Visible
+ if ( aState & IAlfWidgetControl::Visible )
+ {
+ disableStateVisible();
+ }
+
+ // Enabled
+ if ( aState & IAlfWidgetControl::Enabled )
+ {
+ disableStateEnabled();
+ }
+
+ // Focused
+ if ( aState & IAlfWidgetControl::Focused )
+ {
+ disableStateFocused();
+ }
+
+ // Focusable
+ if ( aState & IAlfWidgetControl::Focusable )
+ {
+ disableStateFocusable();
+ }
+ }
+
+OSN_EXPORT bool CAlfWidgetControl::checkState( uint aState ) const
+ {
+ return ( state() & aState );
+ }
+
+OSN_EXPORT int CAlfWidgetControl::numEventHandlers() const
+ {
+ return mWdgtControlData->mEventHandlerArray.count();
+ }
+
+OSN_EXPORT IAlfWidgetEventHandler& CAlfWidgetControl::eventHandler(
+ int aIndex )
+ {
+ return *mWdgtControlData->mEventHandlerArray[aIndex];
+ }
+
+OSN_EXPORT int CAlfWidgetControl::eventHandlerIndex(
+ IAlfWidgetEventHandler& aEventHandler ) const
+ {
+ for ( int i = 0; i < mWdgtControlData->mEventHandlerArray.count(); ++i )
+ {
+ if ( mWdgtControlData->mEventHandlerArray[i] == &aEventHandler )
+ {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+OSN_EXPORT IAlfWidgetEventHandler* CAlfWidgetControl::findEventHandler(
+ const TAlfEvent& aEvent )
+ {
+ for ( int i = 0; i < mWdgtControlData->mEventHandlerArray.count(); ++i )
+ {
+ if ( mWdgtControlData->mEventHandlerArray[i]->accept( *this, aEvent ) )
+ {
+ return mWdgtControlData->mEventHandlerArray[i];
+ }
+ }
+ return 0;
+ }
+
+OSN_EXPORT void CAlfWidgetControl::addEventHandler(
+ IAlfWidgetEventHandler* aEventHandler, int aIndex )
+ {
+ try
+ {
+ if ( mWdgtControlData->mEventHandlerArray.findRef( aEventHandler ) ==
+ KErrNotFound )
+ {
+ if ( aIndex == -1 )
+ {
+ mWdgtControlData->mEventHandlerArray.resize(
+ mWdgtControlData->mEventHandlerArray.count()+1);
+ mWdgtControlData->mEventHandlerArray.insert(
+ mWdgtControlData->mEventHandlerArray.count(),
+ aEventHandler );
+ }
+ else
+ {
+ mWdgtControlData->mEventHandlerArray.resize(
+ mWdgtControlData->mEventHandlerArray.count()+1);
+ mWdgtControlData->mEventHandlerArray.insert( aIndex,
+ aEventHandler);
+ }
+ }
+ }
+ catch (...)
+ {
+ ALF_THROW(AlfWidgetException,ECommonError,"CAlfWidgetControl: Adding event handler failed.")
+ }
+ }
+
+OSN_EXPORT void CAlfWidgetControl::removeAndDestroyEventHandler(
+ IAlfWidgetEventHandler& aEventHandler )
+ {
+
+ for (int i =0; i<mWdgtControlData->mEventHandlerArray.count();i++)
+ {
+ if (mWdgtControlData->mEventHandlerArray[i] == &aEventHandler)
+ {
+ IAlfWidgetEventHandler *handler =
+ mWdgtControlData->mEventHandlerArray[i];
+ //check if it is an eventhandler associated with presentation
+ if(handler->eventHandlerType() ==
+ IAlfWidgetEventHandler::EPresentationEventHandler)
+ {
+ ElementData* elementData = 0;
+ // if the event handller is also an element, remove the
+ // corresponding element data from mEventHandlerArray
+ elementData = removePesentationElementData(*handler);
+ // if the element data does not exist, remove the event handler
+ // from mEventHandlerArray and destroy it
+ if(!elementData)
+ {
+ mWdgtControlData->mEventHandlerArray.remove( i );
+ }
+ // remove the event hanlder from the array but dont destroy it,
+ // and then delete element data which in turn will destroy the
+ // element and thus the event handler
+ else
+ {
+ // cache auto delete state.
+ bool autoDeleteState =
+ mWdgtControlData->mEventHandlerArray.autoDelete();
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(false);
+ mWdgtControlData->mEventHandlerArray.remove( i );
+ // restore auto delete state.
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(
+ autoDeleteState);
+ delete elementData;
+ }
+ }
+ else
+ {
+ mWdgtControlData->mEventHandlerArray.remove( i );
+ }
+ return;
+ }
+
+ }
+
+ }
+
+OSN_EXPORT void CAlfWidgetControl::removeEventHandler(
+ IAlfWidgetEventHandler& aEventHandler )
+ {
+ for (int i =0; i<mWdgtControlData->mEventHandlerArray.count();i++)
+ {
+ if (mWdgtControlData->mEventHandlerArray[i] == &aEventHandler)
+ {
+ // cache auto delete state.
+ bool autoDeleteState =
+ mWdgtControlData->mEventHandlerArray.autoDelete();
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(false);
+ mWdgtControlData->mEventHandlerArray.remove( i );
+ // restore auto delete state.
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(
+ autoDeleteState);
+ return;
+ }
+ }
+ }
+
+OSN_EXPORT void CAlfWidgetControl::removeAndDestroyEventHandler(
+ const UString& aHandlerId )
+ {
+ for (int i =0; i<mWdgtControlData->mEventHandlerArray.count();i++)
+ {
+ IAlfWidgetEventHandler* handler =
+ mWdgtControlData->mEventHandlerArray[i];
+ AlfWidgetEventHandlerInitData* eventData = handler->eventHandlerData();
+ if(eventData != 0)
+ {
+ //check for the event id/name
+ if (!aHandlerId.compare(eventData->mWidgetEventHandlerId))
+ {
+ //check if it is an eventhandler associated with presentation
+ if(handler->eventHandlerType() ==
+ IAlfWidgetEventHandler::EPresentationEventHandler)
+ {
+ ElementData* elementData = 0;
+ // if the event handller is also an element, remove the
+ // corresponding element data from mEventHandlerArray
+ elementData = removePesentationElementData(*handler);
+ // if the element data does not exist, remove the event
+ // handler from mEventHandlerArray and destroy it
+ if(!elementData)
+ {
+ // removes and destoys the event handler
+ mWdgtControlData->mEventHandlerArray.remove( i );
+ }
+ // remove the event hanlder from the array but dont destroy
+ // it, and then delete element data which in turn will
+ // destroy the element and thus the event handler
+ else
+ {
+ // cache auto delete state.
+ bool autoDeleteState =
+ mWdgtControlData->mEventHandlerArray.autoDelete();
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(
+ false);
+ mWdgtControlData->mEventHandlerArray.remove( i );
+ // restore auto delete state.
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(
+ autoDeleteState);
+ //delete element data
+ delete elementData;
+ }
+ }
+ else
+ {
+ mWdgtControlData->mEventHandlerArray.remove( i );
+ }
+ return;
+ }
+ }
+
+ }
+ }
+
+OSN_EXPORT void CAlfWidgetControl::removeAndDestroyPresentationEventHandlers()
+ {
+ int i=0;
+ while(i<mWdgtControlData->mEventHandlerArray.count())
+ {
+ IAlfWidgetEventHandler* handler =
+ mWdgtControlData->mEventHandlerArray[i];
+
+ //check if it is an eventhandler associated with presentation
+ if(handler->eventHandlerType() ==
+ IAlfWidgetEventHandler::EPresentationEventHandler)
+ {
+ ElementData* elementData = 0;
+ // if the event handller is also an element, remove the
+ // corresponding element data from mEventHandlerArray
+ elementData = removePesentationElementData(*handler);
+ // if the element data does not exist, remove the event handler
+ // from mEventHandlerArray and destroy it
+ if(!elementData)
+ {
+ mWdgtControlData->mEventHandlerArray.remove( i );
+ }
+ // remove the event hanlder from the array but dont destroy it,
+ // and then delete element data which in turn will destroy the
+ // element and thus the event handler
+ else
+ {
+ // cache auto delete state.
+ bool autoDeleteState =
+ mWdgtControlData->mEventHandlerArray.autoDelete();
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(false);
+ mWdgtControlData->mEventHandlerArray.remove( i );
+ // restore auto delete state.
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(
+ autoDeleteState);
+ //delete element data
+ delete elementData;
+ }
+ }
+ else
+ {
+ i++;
+ }
+ }
+
+ }
+
+OSN_EXPORT void CAlfWidgetControl::removePresentationEventHandlers()
+ {
+ int i=0;
+ // cache auto delete state.
+ bool autoDeleteState = mWdgtControlData->mEventHandlerArray.autoDelete();
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(false);
+ while(i<mWdgtControlData->mEventHandlerArray.count())
+ {
+ IAlfWidgetEventHandler* handler =
+ mWdgtControlData->mEventHandlerArray[i];
+ //check if it is an eventhandler associated with presentation
+ if(handler->eventHandlerType() ==
+ IAlfWidgetEventHandler::EPresentationEventHandler)
+ {
+ mWdgtControlData->mEventHandlerArray.remove( i );
+ }
+ else
+ {
+ i++;
+ }
+ }
+ // restore auto delete state.
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(autoDeleteState);
+ }
+
+ElementData* CAlfWidgetControl::removePesentationElementData(
+ IAlfWidgetEventHandler& aEventHandler )
+ {
+ IAlfElement* element =
+ IAlfInterfaceBase::makeInterface<IAlfElement>( &aEventHandler );
+
+ for ( int i = 0; i < mWdgtControlData->mElementArray.count(); ++i )
+ {
+ if ( mWdgtControlData->mElementArray[i]->mElement == element )
+ {
+ // cache auto delete state.
+ bool autoDeleteState =
+ mWdgtControlData->mElementArray.autoDelete();
+ mWdgtControlData->mElementArray.setAutoDelete(false);
+ // Store the Element Data which is to be removed.
+ // This pointer will be returned to the caller
+ ElementData* elementData = mWdgtControlData->mElementArray[i];
+ mWdgtControlData->mElementArray.remove( i );
+ // restore auto delete state.
+ mWdgtControlData->mElementArray.setAutoDelete(autoDeleteState);
+ return elementData;;
+ }
+ }
+ return 0;
+ }
+
+OSN_EXPORT int CAlfWidgetControl::numElements() const
+ {
+ return mWdgtControlData->mElementArray.count();
+ }
+
+OSN_EXPORT IAlfElement& CAlfWidgetControl::element( int aIndex )
+ {
+ return *(mWdgtControlData->mElementArray[aIndex]->mElement);
+ }
+
+OSN_EXPORT IAlfElement* CAlfWidgetControl::findElement( const char* aName )
+ {
+ UString name(aName);
+ for ( int i = 0; i < mWdgtControlData->mElementArray.count(); ++i )
+ {
+ IAlfElement* element = mWdgtControlData->mElementArray[i]->mElement;
+ if (name == UString(element->name()))
+ {
+ return element;
+ }
+ }
+ return 0;
+ }
+
+OSN_EXPORT void CAlfWidgetControl::addElement( IAlfElement* aElement )
+ {
+ for ( int i = 0; i < mWdgtControlData->mElementArray.count(); ++i )
+ {
+ if ( mWdgtControlData->mElementArray[i]->mElement == aElement )
+ {
+ return; // Already exists
+ }
+ }
+ auto_ptr<ElementData> elemData( new (EMM) ElementData() );
+ elemData->mElement = aElement;
+ elemData->mDataIdRange = 0xFFFFFFFF;
+ try
+ {
+ mWdgtControlData->mElementArray.resize(
+ mWdgtControlData->mElementArray.count()+1);
+ mWdgtControlData->mElementArray.insert(
+ mWdgtControlData->mElementArray.count(),
+ elemData.get() );
+ elemData.release(); // ownership transferred
+ }
+ catch (...)
+ {
+ // change the element of element data to 0.
+ // this will ensure that the element does not get deleted when the
+ // elemData gets out of scope, since elemData was not successfully
+ // added to the array
+ elemData->mElement = 0;
+ ALF_THROW(AlfException,ECommonError,"AlfWidgetControl: Adding the element failed.")
+ }
+ }
+
+OSN_EXPORT void CAlfWidgetControl::removeAndDestroyElement(
+ const IAlfElement& aElement )
+ {
+ for ( int i = 0; i < mWdgtControlData->mElementArray.count(); ++i )
+ {
+ if (mWdgtControlData->mElementArray[i])
+ {
+ if ( mWdgtControlData->mElementArray[i]->mElement == &aElement )
+ {
+ // Remove the element
+ IAlfElement *element =
+ mWdgtControlData->mElementArray[i]->mElement;
+
+ // If the element is also an event handler
+ IAlfWidgetEventHandler* eventHandler =
+ IAlfInterfaceBase::makeInterface<IAlfWidgetEventHandler>(
+ element );
+ int eventHandlerIndex =
+ mWdgtControlData->mEventHandlerArray.findRef(
+ eventHandler );
+ if ( eventHandler && eventHandlerIndex != KErrNotFound )
+ {
+ // cache auto delete state.
+ bool autoDeleteState =
+ mWdgtControlData->mEventHandlerArray.autoDelete();
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(false);
+ mWdgtControlData->mEventHandlerArray.remove(
+ eventHandlerIndex );
+ // restore auto delete state.
+ mWdgtControlData->mEventHandlerArray.setAutoDelete(
+ autoDeleteState);
+ }
+ // remove and destroy the element
+ mWdgtControlData->mElementArray.remove( i );
+ return;
+ }
+
+ }
+ }
+ }
+
+OSN_EXPORT void CAlfWidgetControl::removeElement(const IAlfElement& aElement )
+ {
+ for ( int i = 0; i < mWdgtControlData->mElementArray.count(); ++i )
+ {
+ if (mWdgtControlData->mElementArray[i])
+ {
+ if ( mWdgtControlData->mElementArray[i]->mElement == &aElement )
+ {
+ // make the element pointer of elementData null, and then
+ // destroy elementData. This will ensure that the memory
+ // allocated for the elementData is freed but the element
+ // is not destroyed
+ mWdgtControlData->mElementArray[i]->mElement = 0;
+ mWdgtControlData->mElementArray.remove(i);
+ return;
+ }
+ }
+ }
+ }
+
+OSN_EXPORT uint CAlfWidgetControl::elementDataId(
+ const IAlfElement& aElement,
+ uint aIndex,
+ uint aParentDataId )
+ {
+ uint range = dataIdRange( aElement );
+
+ if ( aIndex >= range )
+ {
+ }
+ // In hierarchical element structures this may overflow
+ return aParentDataId * range + aIndex;
+ }
+
+OSN_EXPORT uint CAlfWidgetControl::parentElementDataId(
+ const IAlfElement& aElement,
+ uint aDataId )
+ {
+ uint dataIdRng = dataIdRange( aElement );
+ if (0 == dataIdRng) return(0xFFFFFFFF);
+ else
+ return (uint)( aDataId / dataIdRange( aElement ) );
+ }
+
+OSN_EXPORT uint CAlfWidgetControl::dataIdToIndex(
+ const IAlfElement& aElement,
+ uint aDataId )
+ {
+ uint dataIdRng = dataIdRange( aElement );
+ if (0 == dataIdRng) return(0xFFFFFFFF);
+ else
+ return aDataId % dataIdRange( aElement );
+ }
+
+OSN_EXPORT IAlfVariantType* CAlfWidgetControl::elementData(
+ const IAlfElement& aElement, uint aDataId )
+ {
+ if (!mWdgtControlData->mWidget)
+ {
+ return 0;
+ }
+ IAlfModel* widgetModel = mWdgtControlData->mWidget->model();
+ if ( !widgetModel )
+ {
+ return 0;
+ }
+ IAlfVariantType* modelData = widgetModel->data();
+ if ( !modelData || modelData->type() != IAlfVariantType::EMap )
+ {
+ return 0;
+ }
+
+ IAlfMap* map = modelData->map();
+
+ // Use "current" to traverse elements from the root to the leaf
+ const IAlfElement* last = 0;
+ while ( last != &aElement )
+ {
+ int currentDataId = aDataId;
+ const IAlfElement* current;
+ for ( current = &aElement ;
+ current->parentElement() != last ;
+ current = current->parentElement() )
+ {
+ currentDataId = parentElementDataId( *current, currentDataId );
+ }
+ int index = dataIdToIndex( *current, currentDataId );
+ last = current;
+
+ IAlfVariantType* data = map->item( UString(current->name()) );
+ if ( data->type() == IAlfVariantType::EContainer )
+ {
+ data = data->container()->item( index );
+ }
+ if ( current == &aElement )
+ {
+ return data;
+ }
+ if ( data->type() == IAlfVariantType::EBranch )
+ {
+ // Continue with the child data
+ map = data->branch()->childData();
+ continue;
+ }
+ if ( data->type() == IAlfVariantType::EMap )
+ {
+ map = data->map();
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+ return 0;
+ }
+
+OSN_EXPORT void CAlfWidgetControl::setDataIdRange(
+ const IAlfElement& aElement, uint aRange )
+ {
+ for ( int i = 0; i < mWdgtControlData->mElementArray.count(); ++i )
+ {
+ if ( mWdgtControlData->mElementArray[i]->mElement == &aElement )
+ {
+ mWdgtControlData->mElementArray[i]->mDataIdRange = aRange;
+ return;
+ }
+ }
+ }
+
+OSN_EXPORT uint CAlfWidgetControl::dataIdRange( const IAlfElement& aElement )
+ {
+ for ( int i = 0; i < mWdgtControlData->mElementArray.count(); ++i )
+ {
+ if ( mWdgtControlData->mElementArray[i]->mElement == &aElement )
+ {
+ return mWdgtControlData->mElementArray[i]->mDataIdRange;
+ }
+ }
+ return 0;
+ }
+
+OSN_EXPORT void CAlfWidgetControl::updatePresentation()
+ {
+ if ( !mWdgtControlData->mWidget || !mWdgtControlData->mWidget->model() ||
+ !mWdgtControlData->mWidget->model()->data() ||
+ mWdgtControlData->mWidget->model()->data()->type() !=
+ IAlfVariantType::EMap )
+ {
+ return;
+ }
+ IAlfMap* map = mWdgtControlData->mWidget->model()->data()->map();
+ for ( int i = 0; i < map->count(); ++i )
+ {
+ IAlfElement* element = findElement( map->name( i ).getUtf8() );
+ if ( element )
+ {
+
+ int childInd = childIndex( *map, i, 0, true );
+ IAlfVariantType* data = map->item( i );
+ try
+ {
+ if ( data->type() == IAlfVariantType::EMap ||
+ data->type() == IAlfVariantType::EBranch)
+ {
+ // Data for a single presentation instance (visual tree)
+ element->createVisualTree( *data,
+ elementDataId( *element, childInd, 0 ),
+ element->defaultParentLayout( 0 ), childInd );
+ }
+ else if ( data->type() == IAlfVariantType::EContainer )
+ {
+
+ // Data for multiple presentation instances (visual trees)
+ IAlfContainer* container = data->container();
+ for ( int j = 0; j < container->count(); ++j )
+ {
+ element->createVisualTree( *container->item( j ),
+ elementDataId( *element, childInd + j, 0 ),
+ element->defaultParentLayout( 0 ), childInd + j );
+ }
+ }
+ }
+ catch (...)
+ {
+ ALF_THROW(AlfVisualException,ECanNotCreateVisual,"CAlfWidgetControl::updatePresentation failed")
+ }
+
+ }
+
+ }
+ }
+
+OSN_EXPORT void CAlfWidgetControl::destroyPresentation( int aTimeMilliseconds )
+ {
+ (void)aTimeMilliseconds;
+
+ for ( int i = 0; i < mWdgtControlData->mElementArray.count(); ++i )
+ {
+ mWdgtControlData->mElementArray[i]->mElement->removeAndDestroyVisuals(
+ aTimeMilliseconds );
+ }
+ processEvent(TAlfEvent(EEventWidgetPresentationDestroyed));
+ }
+
+OSN_EXPORT void CAlfWidgetControl::destroyVisualsAndElements(
+ int aTimeMilliseconds )
+ {
+ (void)aTimeMilliseconds;
+
+ // destroy visual trees from elements
+ for( int i = 0; i < mWdgtControlData->mElementArray.count(); ++i )
+ {
+ mWdgtControlData->mElementArray[i]->mElement->removeAndDestroyVisuals(
+ aTimeMilliseconds );
+ }
+ // destroy elements
+ while( numElements() )
+ {
+ removeAndDestroyElement( element(numElements()-1) );
+ }
+
+ // destroy presentation related event handlers
+ removeAndDestroyPresentationEventHandlers();
+
+ // send notification
+ processEvent(TAlfEvent(EEventWidgetPresentationDestroyed));
+ }
+
+OSN_EXPORT void CAlfWidgetControl::updateParentLayout()
+ {
+ //get the parent control
+ CAlfWidgetControl* parent = dynamic_cast<CAlfWidgetControl*>(Host());
+ if (parent)
+ {
+ IAlfLayoutManager* layoutManager =
+ CAlfWidgetControl::makeInterface<IAlfLayoutManager>(parent);
+ if (layoutManager)
+ {
+ layoutManager->updateChildLayout(this);
+ }
+ }
+ }
+
+OSN_EXPORT bool CAlfWidgetControl::isContainer() const
+ {
+ IAlfHostAPI* api = mWdgtControlData->mAlfHostAPIImpl.get();
+ return (api && api->getConnectionCount() > 0);
+ }
+
+OSN_EXPORT bool CAlfWidgetControl::isFocusable() const
+ {
+ return checkState(IAlfWidgetControl::Enabled) &&
+ checkState(IAlfWidgetControl::Focusable);
+ }
+
+void CAlfWidgetControl::setOwnerWidget( AlfWidget* aWidget )
+ {
+ mWdgtControlData->mWidget = aWidget;
+ }
+
+OSN_EXPORT AlfWidget* CAlfWidgetControl::widget()
+ {
+ return mWdgtControlData->mWidget;
+ }
+
+OSN_EXPORT AlfEventStatus CAlfWidgetControl::handleEvent(
+ const TAlfEvent& aEvent )
+ {
+ AlfEventStatus ret = EEventNotHandled;
+ if(isContainer())
+ {
+ CAlfWidgetControl* focused =
+ dynamic_cast<CAlfWidgetControl*>(FocusedConnection());
+ if(focused && aEvent.IsKeyEvent())
+ {
+ ret = focused->processEvent(aEvent);
+ }
+ else if ( aEvent.IsCustomEvent() )
+ {
+ int eventId = aEvent.CustomParameter();
+ switch(eventId)
+ {
+ case EEventFocusNextWidget:
+ {
+ if( handleFocusNext() )
+ {
+ ret = EEventConsumed;
+ }
+ }
+ break;
+ case EEventFocusPreviousWidget:
+ {
+ if( handleFocusPrevious() )
+ {
+ ret = EEventConsumed;
+ }
+ }
+ break;
+ }
+ }
+ }
+ return ret;
+
+ }
+
+
+OSN_EXPORT TBool CAlfWidgetControl::OfferEventL( const TAlfEvent& aEvent )
+ {
+ TBool ret(EFalse);
+ try
+ {
+ ret = processEvent(aEvent);
+ }
+ catch(AlfException& ae)
+ {
+ int reason = ae.errorCode();
+ User::Leave( reason );
+ }
+
+ return ret;
+ }
+
+
+
+
+ OSN_EXPORT AlfEventStatus CAlfWidgetControl::processEvent(
+ const TAlfEvent& aEvent )
+ {
+ AlfEventStatus ret(EEventNotHandled);
+
+ /* If the event is not a custom event, stop execution if the widget is
+ not in enabled state. For custom event continue execution anyway. */
+ if(!(mWdgtControlData->mState & IAlfWidgetControl::Enabled) &&
+ !(aEvent.IsCustomEvent()))
+ {
+ return EEventNotHandled;
+ }
+
+ // Go through tunneling phase event handlers.
+ AlfEventStatus ret2 = ProcessEventHandlingPhase( tunneling, aEvent );
+
+ if( ret2 == EEventConsumed )
+ {
+ return EEventConsumed;
+ }
+ else if ( ret2 == EEventHandled )
+ {
+ ret = EEventHandled;
+ }
+
+ // Execute business logic.
+ if(aEvent.IsPointerEvent())
+ {
+ if (aEvent.PointerDown() && isFocusable() && !Focus())
+ {
+ AcquireFocus();
+ }
+ }
+
+ ret2 = handleEvent( aEvent );
+
+ if( ret2 == EEventConsumed )
+ {
+ return EEventConsumed;
+ }
+ else if ( ret2 == EEventHandled )
+ {
+ ret = EEventHandled;
+ }
+
+ // Go through bubbling phase event handlers.
+ ret2 = ProcessEventHandlingPhase( bubbling, aEvent );
+
+ if( ret2 == EEventConsumed )
+ {
+ return EEventConsumed;
+ }
+ else if ( ret2 == EEventHandled )
+ {
+ ret = EEventHandled;
+ }
+
+ return ret;
+ }
+
+AlfEventStatus CAlfWidgetControl::ProcessEventHandlingPhase(
+ int aPhase, const TAlfEvent& aEvent )
+ {
+ // *** Implementation note ***
+ //
+ // offerEvent implementations may remove event handlers from the array that is
+ // being gone through. So that needs to be taken in consideration in the
+ // loop implementation.
+
+ AlfEventStatus ret = EEventNotHandled;
+
+ AlfPtrVector<IAlfWidgetEventHandler>& eventHandlerArray =
+ mWdgtControlData->mEventHandlerArray;
+
+ for (int i=0; i < eventHandlerArray.count() ; ++i)
+ {
+ IAlfWidgetEventHandler* eventHandler =
+ mWdgtControlData->mEventHandlerArray[i];
+
+ int phase = eventHandler->eventExecutionPhase();
+
+ bool matchingPhase = false;
+ if ( aPhase == bubbling )
+ {
+ if ( phase == IAlfWidgetEventHandler::
+ EBubblingPhaseEventHandler ||
+ phase == IAlfWidgetEventHandler::
+ ETunnellingAndBubblingPhaseEventHandler )
+ {
+ matchingPhase = true;
+ }
+ }
+ else if ( aPhase == tunneling )
+ {
+ if ( phase == IAlfWidgetEventHandler::
+ ETunnellingPhaseEventHandler ||
+ phase == IAlfWidgetEventHandler::
+ ETunnellingAndBubblingPhaseEventHandler )
+ {
+ matchingPhase = true;
+ }
+ }
+
+ if ( matchingPhase )
+ {
+ // This is preparation for the situation where event handlers are
+ // removed or added during offerEvent call.
+ // Store pointer to the event handler at next index.
+ IAlfWidgetEventHandler* nextHandler = 0;
+
+ if ( i+1 < eventHandlerArray.count() )
+ {
+ nextHandler = eventHandlerArray[i+1];
+ }
+
+ // Call offerEvent
+ AlfEventStatus ret2 = eventHandler->offerEvent(*this, aEvent);
+
+ // Update status in the function return value.
+ if( ret2 == EEventConsumed )
+ {
+ ret = EEventConsumed;
+ break;
+ }
+ else if ( ret2 == EEventHandled )
+ {
+ ret = EEventHandled;
+ }
+
+ // Now check whether next handler in the event handler array still
+ // matches with the stored pointer.
+ if ( nextHandler )
+ {
+ // Check whether the event handler at index i+1 is still the
+ // same as before calling offerEvent. If not, the array has
+ // been modified and the variable i needs to be set again.
+ if ( i+1 >= eventHandlerArray.count() ||
+ (i+1 < eventHandlerArray.count() &&
+ eventHandlerArray[i+1] != nextHandler) )
+ {
+ // Array has changed in offerEvent, the handler at index
+ // 'i+1' is not the same any more. Find the index of the
+ // current event handler again in the array and fix the
+ // loop variable 'i' point to that and continue.
+ int newCount = eventHandlerArray.count();
+ for ( int j = 0 ; j < newCount ; j++ )
+ {
+ if ( eventHandlerArray[j] == eventHandler )
+ {
+ i = j;
+ break;
+ }
+ }
+
+ }
+ }
+ }
+ }
+
+ return ret;
+ }
+
+// from base class IAlfModelChangeObserver
+
+OSN_EXPORT void CAlfWidgetControl::modelChanged( IAlfModel& aModel )
+ {
+ (void)aModel;
+ // This way the model change animation is customizable using event handlers
+ // The default event handler could implement this:
+ destroyPresentation( 0 );
+ updatePresentation();
+ updateParentLayout();
+ }
+
+OSN_EXPORT void CAlfWidgetControl::dataChanging(
+ const AlfPtrVector<AlfModelOperation>& aOperations )
+ {
+ for ( int i = 0; i < aOperations.count(); ++i )
+ {
+ dataChanging( *aOperations[i] );
+ }
+ }
+
+OSN_EXPORT void CAlfWidgetControl::dataChanging(
+ const AlfModelOperation& aOperation )
+ {
+ int numIndices = aOperation.numContainerIndices();
+ if ( !mWdgtControlData->mWidget->model() || numIndices <= 0 )
+ {
+ return;
+ }
+ uint dataId = 0, parentDataId = 0;
+ IAlfElement* element = 0;
+ IAlfElement* parentElement = 0;
+ IAlfVariantType* data = mWdgtControlData->mWidget->model()->data();
+ if(data == 0)
+ {
+ return;
+ }
+ IAlfBranch* parentBranch = 0;
+ // Traverse the data hierarchy to find the data, dataId and the element
+ for ( int i = 0; i < numIndices; ++i )
+ {
+ int index = aOperation.containerIndex( i );
+ if ( data->type() == IAlfVariantType::EMap &&
+ index >= 0 && index < data->map()->count() )
+ {
+ parentElement = element;
+ element = findElement( data->map()->name( index ).getUtf8() );
+ if ( element == 0 )
+ {
+ return; // Not found
+ }
+ IAlfMap* map = data->map();
+ data = data->map()->item( index );
+
+ if ( data->type() == IAlfVariantType::EContainer )
+ {
+ ++i;
+ int containerIndex = aOperation.containerIndex( i );
+ if ( containerIndex < 0 ||
+ containerIndex >= data->container()->count() )
+ {
+ break; // Not found
+ }
+ int childInd =
+ childIndex( *map, index, containerIndex, i == 1 );
+ parentDataId = dataId;
+ dataId = elementDataId( *element, childInd, parentDataId );
+ data = data->container()->item( containerIndex );
+ }
+ else
+ {
+ int childInd = childIndex( *map, index, 0, i == 0 );
+ parentDataId = dataId;
+ dataId = elementDataId( *element, childInd, parentDataId );
+ }
+ }
+ else if ( data->type() == IAlfVariantType::EBranch &&
+ index == 0 && i == numIndices - 1 )
+ {
+ // Changing the parent data
+ data = data->branch()->data();
+ }
+ else if ( data->type() == IAlfVariantType::EBranch && index == 1 )
+ {
+ parentBranch = data->branch();
+ data = data->branch()->childData();
+ }
+ else
+ {
+ return; // Not found
+ }
+ }
+
+ // Perform the operation
+ if ( aOperation.operation() == AlfModelOperation::EOperationAdd )
+ {
+ if ( parentBranch )
+ {
+ // The parent is responsible for it's children
+ parentElement->createChildVisualTree(
+ element, aOperation.newData(),
+ *parentBranch,aOperation.index(),
+ parentDataId );
+ }
+ else
+ {
+ if(element)
+ {
+ // Data added to a root element
+ try
+ {
+ element->createVisualTree(
+ aOperation.newData(), dataId,
+ element->defaultParentLayout( parentDataId ),
+ aOperation.index() );
+ }
+ catch (...)
+ {
+ ALF_THROW(AlfVisualException,ECanNotCreateVisual,"CAlfWidgetControl::dataChanging failed")
+ }
+ }
+ else
+ {
+ ALF_THROW(AlfVisualException,ECanNotCreateVisual,"CAlfWidgetControl::dataChanging failed")
+ }
+
+ }
+ }
+ else if ( aOperation.operation() == AlfModelOperation::EOperationRemove )
+ {
+ if ( parentBranch )
+ {
+ // The parent is responsible for it's children
+ parentElement->removeChildVisualTree(
+ element, *parentBranch, aOperation.index(), parentDataId );
+ }
+ else
+ {
+ if(element)
+ {
+ // Data removed from a root element
+ element->removeVisualTree( *data, dataId );
+ }
+ }
+ }
+ else if ( aOperation.operation() == AlfModelOperation::EOperationUpdate )
+ {
+ if(element)
+ {
+ element->updateVisualTree( aOperation.newData(), *data, dataId );
+ }
+ }
+ }
+
+OSN_EXPORT void CAlfWidgetControl::dataChanged()
+ {
+ // The default implementation is empty.
+ }
+
+uint CAlfWidgetControl::childIndex(
+ IAlfMap& aMap, uint aMapIndex,
+ uint aContainerIndex, bool aRoot )
+ {
+ // This method is only used internally
+ const UString& elementName = aMap.name( aMapIndex );
+ int index = 0;
+ for ( int i = 0; i < aMapIndex && i < aMap.count(); ++i )
+ {
+ if ( !aRoot || elementName == aMap.name( i ) )
+ {
+ IAlfVariantType* data = aMap.item( i );
+ if ( data->type() == IAlfVariantType::EMap ||
+ data->type() == IAlfVariantType::EBranch)
+ {
+ index++;
+ }
+ else if ( data->type() == IAlfVariantType::EContainer )
+ {
+ index += data->container()->count();
+ }
+ }
+ }
+ return index + aContainerIndex;
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfInterfaceBase.
+// Getter for interfaces provided by the control.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfInterfaceBase* CAlfWidgetControl::makeInterface(
+ const IfId& aType )
+ {
+ IAlfInterfaceBase* interface = 0;
+ UString param(aType.mImplementationId);
+ if ( param == IAlfWidgetControl::type().mImplementationId )
+ {
+ return static_cast<IAlfWidgetControl*>( this );
+ }
+ else if (param == IAlfAttributeOwner::type().mImplementationId)
+ {
+ return 0; // control does not have AttributeOwner instance
+ // and do not try get IF from elements in control
+ }
+ // Let the layout manager create the interface that is queried.
+ else if(mWdgtControlData->mAlfHostAPIImpl.get())
+ {
+ IAlfLayoutManager* layoutManager =
+ mWdgtControlData->mAlfHostAPIImpl->getBaseLayout();
+ if(layoutManager)
+ {
+ interface = layoutManager->makeInterface(aType);
+ }
+ }
+
+ if(interface == 0)
+ {
+ //go through all the elements
+ for (int i = 0; i < numElements() && !interface; i++)
+ {
+ IAlfElement& ele = element(i);
+ interface = ele.makeInterface(aType);
+ }
+ }
+
+ return interface;
+ }
+
+
+OSN_EXPORT CAlfLayout* CAlfWidgetControl::ContainerLayout(
+ const CAlfControl* /*aConnected*/) const
+ {
+ if(mWdgtControlData->mAlfHostAPIImpl.get() != 0)
+ {
+ IAlfLayoutManager* layoutManager =
+ mWdgtControlData->mAlfHostAPIImpl->getBaseLayout();
+ if(layoutManager != 0)
+ {
+ return &layoutManager->getLayout();
+ }
+ }
+ return 0;
+ }
+
+
+OSN_EXPORT void CAlfWidgetControl::AcquireFocus()
+ {
+ if (!FocusedConnection() && isFocusable())
+ {
+ if (isContainer())
+ {
+ IAlfHostAPI& hostApi = hostAPI();
+ //select the first connection.
+
+ CAlfWidgetControl* firstChild = nextFocusableControl(0);
+ if (firstChild)
+ {
+ firstChild->AcquireFocus();
+ }
+ }
+ else
+ {
+ CAlfControl::AcquireFocus();
+ }
+ }
+ }
+
+OSN_EXPORT void CAlfWidgetControl::RelinquishFocus()
+ {
+ if (Focus())
+ {
+ if (isContainer())
+ {
+ handleFocusNext();
+ }
+ else
+ {
+ //get parent control, check if it can focus next control.
+ CAlfWidgetControl* parent =
+ dynamic_cast<CAlfWidgetControl*>(Host());
+ if (parent)
+ {
+ parent->handleFocusNext();
+ }
+
+ CAlfControl::RelinquishFocus();
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// return hostapi. create instance if needed.
+// ---------------------------------------------------------------------------
+//
+IAlfHostAPI& CAlfWidgetControl::hostAPI()
+ {
+ if (!mWdgtControlData->mAlfHostAPIImpl.get()) // was it already created?
+ {
+ //late creation
+ mWdgtControlData->mAlfHostAPIImpl.reset( new (EMM) AlfHostAPIImpl() );
+ mWdgtControlData->mAlfHostAPIImpl->setHostControl(*this);
+ }
+
+ return *mWdgtControlData->mAlfHostAPIImpl.get();
+ }
+
+OSN_EXPORT bool CAlfWidgetControl::handleFocusNext()
+ {
+ bool focusChanged = false;
+ if (isContainer())
+ {
+ CAlfWidgetControl* focused =
+ dynamic_cast<CAlfWidgetControl*>(FocusedConnection());
+ if (focused)
+ {
+ CAlfWidgetControl* nextChild = nextFocusableControl(focused);
+
+ if (!nextChild)
+ {
+ //no next child, change focus to upper level, if that fails,
+ //loop to first connection.
+ CAlfWidgetControl* parent =
+ dynamic_cast<CAlfWidgetControl*>(Host());
+ if (parent)
+ {
+ focusChanged = parent->handleFocusNext();
+ }
+ if (!focusChanged)
+ {
+ //loop to first connection.
+ nextChild = nextFocusableControl(0);
+ }
+ }
+
+ //go deeper down the widget hierarchy, until a no-container widget
+ // is found
+ while(nextChild && nextChild->isContainer())
+ {
+ nextChild = nextChild->nextFocusableControl(0);
+ }
+
+ if (nextChild)
+ {
+ nextChild->AcquireFocus();
+ focusChanged = true;
+ }
+ }
+ }
+ return focusChanged;
+ }
+
+OSN_EXPORT bool CAlfWidgetControl::handleFocusPrevious()
+ {
+ bool focusChanged = false;
+ if (isContainer())
+ {
+
+ CAlfWidgetControl* focused =
+ dynamic_cast<CAlfWidgetControl*>(FocusedConnection());
+ if (focused)
+ {
+ CAlfWidgetControl* prevChild = previousFocusableControl(
+ focused);
+
+ if (!prevChild)
+ {
+ // no previous child, change focus to upper level, if that
+ // fails, loop to last connection.
+ CAlfWidgetControl* parent =
+ dynamic_cast<CAlfWidgetControl*>(Host());
+ if (parent)
+ {
+ focusChanged = parent->handleFocusPrevious();
+ }
+ if (!focusChanged)
+ {
+ //loop to last connection.
+ prevChild = previousFocusableControl(0);
+ }
+ }
+ //go deeper down the widget hierarchy, until a no-container widget
+ //is found.
+ while(prevChild && prevChild->isContainer())
+ {
+ //in each level, select the last focused widget.
+ prevChild = prevChild->previousFocusableControl(0);
+ }
+
+ if (prevChild)
+ {
+ prevChild->AcquireFocus();
+ focusChanged = true;
+ }
+ }
+ }
+
+ return focusChanged;
+ }
+
+OSN_EXPORT CAlfWidgetControl* CAlfWidgetControl::getFirstFocusable(
+ IAlfContainerWidget& aContainer)
+ {
+ CAlfWidgetControl* control = 0;
+ if (aContainer.widgetCount() > 0)
+ {
+ control = aContainer.getWidget(0)->control();
+ }
+ return control;
+ }
+
+OSN_EXPORT CAlfWidgetControl* CAlfWidgetControl::getLastFocusable(
+ IAlfContainerWidget& aContainer)
+ {
+ CAlfWidgetControl* control = 0;
+ if (aContainer.widgetCount() > 0)
+ {
+ IAlfWidget* w = aContainer.getWidget(aContainer.widgetCount()-1);
+ control = w->control();
+ }
+ return control;
+ }
+
+OSN_EXPORT CAlfWidgetControl* CAlfWidgetControl::getFocusableAfter(
+ IAlfContainerWidget& aContainer,
+ CAlfWidgetControl& aControl)
+ {
+ CAlfWidgetControl* control = 0;
+ int ind = aContainer.getWidgetIndex(*aControl.widget());
+ if (ind >= 0)
+ {
+ ind++;
+ if (ind < aContainer.widgetCount())
+ {
+ IAlfWidget* w = aContainer.getWidget(ind);
+ control = w->control();
+ }
+ }
+
+ return control;
+ }
+
+OSN_EXPORT CAlfWidgetControl* CAlfWidgetControl::getFocusableBefore(
+ IAlfContainerWidget& aContainer, CAlfWidgetControl& aControl)
+ {
+ CAlfWidgetControl* control = 0;
+ int ind = aContainer.getWidgetIndex(*aControl.widget());
+ ind--;
+ if (ind >= 0)
+ {
+ IAlfWidget* w = aContainer.getWidget(ind);
+ control = w->control();
+ }
+
+ return control;
+ }
+
+void CAlfWidgetControl::resetControlGroup(CAlfControlGroup& aControlGroup)
+ {
+ // If control group is already set and its same than the control group
+ // given as a parameter there's nothing we need to do.
+ if(!ControlGroup() || (ControlGroup() != &aControlGroup))
+ {
+ // Remove control from previous control group
+ if(ControlGroup())
+ {
+ ControlGroup()->Remove(this);
+ }
+ // Append control to the new control group
+ TRAPD(err, aControlGroup.AppendL(this));
+ if(err != KErrNone)
+ {
+ ALF_THROW(AlfException, err, "CAlfWidgetControl::resetControlGroup - Appending control to a new control group failed.");
+ }
+ }
+ }
+
+void CAlfWidgetControl::resetHierarchyControlGroup(
+ CAlfControlGroup& aControlGroup)
+ {
+ // Append this control to the new control group
+ resetControlGroup(aControlGroup);
+
+ // Call this recursively to all connected controls
+ AlfHostAPIImpl* hostApi = mWdgtControlData->mAlfHostAPIImpl.get();
+ if(hostApi != 0)
+ {
+ for(int i = 0; i < hostApi->getConnectionCount(); ++i)
+ {
+ CAlfWidgetControl* connectedControl = hostApi->getConnection(i);
+ if(connectedControl)
+ {
+ connectedControl->resetHierarchyControlGroup(aControlGroup);
+ }
+ }
+ }
+ }
+
+
+OSN_EXPORT void CAlfWidgetControl::FocusChanged(
+ CAlfDisplay& /*aDisplay*/,
+ TBool aFocused)
+ {
+ // Ensure that the state bit remains synched to the toolkit's version
+ if (aFocused)
+ {
+ mWdgtControlData->mState |= IAlfWidgetControl::Focused;
+ }
+ else
+ {
+ mWdgtControlData->mState &=~ IAlfWidgetControl::Focused;
+ }
+
+ if (aFocused)
+ {
+ processEvent(TAlfEvent(EEventWidgetGainedFocus));
+ }
+ else
+ {
+ processEvent(TAlfEvent(EEventWidgetLostFocus));
+ }
+ }
+
+OSN_EXPORT CAlfWidgetControl* CAlfWidgetControl::nextFocusableControl(
+ CAlfWidgetControl* aControl)
+ {
+ CAlfWidgetControl* control = 0;
+
+ if (isContainer())
+ {
+ IAlfContainerWidget* container =
+ IAlfInterfaceBase::makeInterface<IAlfContainerWidget>(widget());
+
+ assert(container);
+
+ if (!aControl)
+ {
+ control = getFirstFocusable(*container);
+ }
+ else
+ {
+ control = getFocusableAfter(*container, *aControl);
+ }
+
+ while(control && !control->isFocusable())
+ {
+ control = control->getFocusableAfter(*container, *control);
+ }
+ }
+
+ return control;
+ }
+
+OSN_EXPORT CAlfWidgetControl* CAlfWidgetControl::previousFocusableControl(
+ CAlfWidgetControl* aControl)
+ {
+ CAlfWidgetControl* control = 0;
+
+ if (isContainer())
+ {
+ IAlfContainerWidget* container =
+ IAlfInterfaceBase::makeInterface<IAlfContainerWidget>(widget());
+
+ assert(container);
+
+ if (!aControl)
+ {
+ control = getLastFocusable(*container);
+ }
+ else
+ {
+ control = getFocusableBefore(*container, *aControl);
+ }
+
+ while(control && !control->isFocusable())
+ {
+ control = control->getFocusableBefore(*container, *control);
+ }
+ }
+
+ return control;
+ }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CAlfWidgetControl::enableStateVisible()
+ {
+ // Only take action if the current state is different
+ if ( !(mWdgtControlData->mState & IAlfWidgetControl::Visible) )
+ {
+ // Update the new state in member variable
+ mWdgtControlData->mState |= IAlfWidgetControl::Visible;
+
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CAlfWidgetControl::disableStateVisible()
+ {
+ // Only take action if the current state is different
+ if ( mWdgtControlData->mState & IAlfWidgetControl::Visible )
+ {
+ // Update the new state in member variable
+ mWdgtControlData->mState &= ~IAlfWidgetControl::Visible;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CAlfWidgetControl::enableStateEnabled()
+ {
+ // Only take action if the current state is different
+ if ( !(mWdgtControlData->mState & IAlfWidgetControl::Enabled) )
+ {
+ // Update the new state in member variable
+ mWdgtControlData->mState |= IAlfWidgetControl::Enabled;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CAlfWidgetControl::disableStateEnabled()
+ {
+ // Only take action if the current state is different
+ if ( mWdgtControlData->mState & IAlfWidgetControl::Enabled )
+ {
+ // Update the new state in member variable
+ mWdgtControlData->mState &= ~IAlfWidgetControl::Enabled;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CAlfWidgetControl::enableStateFocused()
+ {
+ // Only take action if the current state is different
+ if ( !(mWdgtControlData->mState & IAlfWidgetControl::Focused) )
+ {
+ // Set the new state
+ AcquireFocus();
+
+ // Update the new state in member variable
+ mWdgtControlData->mState |= IAlfWidgetControl::Focused;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CAlfWidgetControl::disableStateFocused()
+ {
+ // Only take action if the current state is different
+ if ( mWdgtControlData->mState & IAlfWidgetControl::Focused )
+ {
+ // Set the new state
+ RelinquishFocus();
+
+ // Update the new state in member variable
+ mWdgtControlData->mState &= ~IAlfWidgetControl::Focused;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CAlfWidgetControl::enableStateFocusable()
+ {
+ // Only take action if the current state is different
+ if ( !(mWdgtControlData->mState & IAlfWidgetControl::Focusable) )
+ {
+ // Update the new state in member variable
+ mWdgtControlData->mState |= IAlfWidgetControl::Focusable;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CAlfWidgetControl::disableStateFocusable()
+ {
+ // Only take action if the current state is different
+ if ( mWdgtControlData->mState & IAlfWidgetControl::Focusable )
+ {
+ // Update the new state in member variable
+ mWdgtControlData->mState &= ~IAlfWidgetControl::Focusable;
+ }
+ }
+
+void CAlfWidgetControl::checkStateInvariants(uint aState)
+ {
+ // To be focused, it needs to be focusable (Focus -> Focusable)
+ if(aState & IAlfWidgetControl::Focused
+ && !(aState & IAlfWidgetControl::Focusable) )
+ {
+ ALF_THROW(AlfException, EInvalidArgument, "AlfWidgetControl() - state changing operation. Illegal state would result.");
+ }
+
+ // To be focusable, it needs to be enabled (Focusable -> Enabled)
+ if(aState & IAlfWidgetControl::Focusable
+ && !(aState & IAlfWidgetControl::Enabled) )
+ {
+ ALF_THROW(AlfException, EInvalidArgument, "AlfWidgetControl() - state changing operation. Illegal state would result.");
+ }
+ }
+
+void CAlfWidgetControl::predictAndCheckStateInvariants(
+ uint aChangePattern,
+ bool aEnabling) const
+ {
+ uint predictedState(mWdgtControlData->mState);
+ if(aEnabling)
+ {
+ predictedState |= aChangePattern;
+ }
+ else
+ {
+ predictedState &= ~aChangePattern;
+ }
+ checkStateInvariants(predictedState);
+ }
+
+
+} // namespace Alf
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfwidgetcontroleventfilter.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2007 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: Stray PointerUp Event Filter.
+*
+*/
+
+#include <osn/osnnew.h>
+#include <alf/alfevent.h>
+#include <alf/alfenv.h>
+#include <alf/alfwidgetevents.h>
+#include <alf/ialfscrollbarmodel.h>
+#include <alf/alfwidgetcontrol.h>
+
+#include "alfwidgetcontroleventfilter.h"
+
+enum EventfilterEvent
+ {
+ EEventStrayPointerUp=57423
+ };
+//namespace Alf
+namespace Alf
+{
+AlfWidgetControlEventFilter::AlfWidgetControlEventFilter()
+ {
+ mButtonDown = false;
+ }
+
+AlfWidgetControlEventFilter::~AlfWidgetControlEventFilter()
+ {
+ }
+
+IAlfWidgetEventHandler::AlfEventHandlerType AlfWidgetControlEventFilter
+ ::eventHandlerType()
+ {
+ return IAlfWidgetEventHandler::ELogicalEventHandler;
+ }
+
+IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase AlfWidgetControlEventFilter
+ ::eventExecutionPhase()
+ {
+ return IAlfWidgetEventHandler::ETunnellingPhaseEventHandler;
+ }
+
+bool AlfWidgetControlEventFilter::accept(
+ CAlfWidgetControl& /*aControl*/,
+ const TAlfEvent& /*aEvent */) const
+ {
+ return false;
+ }
+
+AlfEventStatus AlfWidgetControlEventFilter::offerEvent(
+ CAlfWidgetControl& aControl,
+ const TAlfEvent& aEvent )
+ {
+ if(aEvent.IsPointerEvent())
+ {
+ if (aEvent.PointerEvent().iType == TPointerEvent::EButton1Down)
+ {
+ // Recieved PointerDown
+ mButtonDown = true;
+ }
+ else if (aEvent.PointerUp())
+ {
+ if(!mButtonDown)
+ {
+ // Recieved a stray pointerUp
+ aControl.Env().Send(TAlfCustomEventCommand(EEventStrayPointerUp));
+ }
+ mButtonDown = false;
+ }
+ }
+ else if(aEvent.IsCustomEvent())
+ {
+ if(aEvent.CustomParameter() == EEventStrayPointerUp)
+ {
+ if(mButtonDown)
+ {
+ mButtonDown = false;
+ TAlfEvent customevent(EEventMissedPointerUp);
+ aControl.handleEvent(customevent);
+ }
+ }
+ }
+ return EEventNotHandled;
+ }
+
+void AlfWidgetControlEventFilter::setActiveStates( unsigned int /*aStates*/ )
+ {
+ }
+IAlfInterfaceBase* AlfWidgetControlEventFilter::makeInterface ( const IfId& /*aType*/ )
+ {
+ return NULL;
+ }
+
+}// namespace Alf
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfwidgetenvextension.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2007 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: Extensions can be added to AlfEnv through this class.
+ Currently resourcepool,widgetfactory can be added as extensions to AlfEnv.
+*
+*/
+
+
+#include <alf/alfenv.h>
+#include <alf/alfenvobject.h>
+#include <alf/alfresourcepool.h>
+
+#include <osn/osnnew.h>
+#include <alf/alfwidgetexception.h>
+#include <alf/alfwidgetenvextension.h>
+
+#include <alf/alfwidgetfactoryloader.h>
+#include <alf/ialfwidgetfactory.h>
+namespace Alf
+ {
+ const int KAlfExtensionResourcePoolUid( 89 ); // Bogus id for resource
+ // pool extension
+
+ const int KAlfExtensionWidgetFactoryUid( 106 ); // Bogus id for widget
+ // factory extension
+
+ // Env extension for the resource pool
+ class AlfExtensionResourcePoolContainer : public MAlfEnvObject
+ {
+ public:
+
+ AlfExtensionResourcePoolContainer( ResourcePool* aResourcePool) :
+ mResourcePool(aResourcePool )
+ {
+ }
+
+ virtual void Release()
+ {
+ delete this;
+ }
+
+ ~AlfExtensionResourcePoolContainer()
+ {
+ delete mResourcePool;
+ }
+ // Owned
+ ResourcePool* mResourcePool;
+ };
+
+
+ // Env extension for the widget factory
+ class AlfExtensionWidgetFactory : public MAlfEnvObject
+ {
+ public:
+
+ AlfExtensionWidgetFactory(
+ AlfWidgetFactoryLoader* amWidgetFactoryLoader,
+ IAlfWidgetFactory* aWidgetFactory) :
+ mWidgetFactoryLoader( amWidgetFactoryLoader ),
+ mWidgetFactory( aWidgetFactory )
+ {
+ }
+
+ virtual void Release()
+ {
+ delete this;
+ }
+
+ ~AlfExtensionWidgetFactory()
+ {
+ delete mWidgetFactoryLoader;
+ }
+ // Owned
+ AlfWidgetFactoryLoader* mWidgetFactoryLoader;
+ // Not owned
+ IAlfWidgetFactory* mWidgetFactory;
+ };
+
+// ---------------------------------------------------------------------------
+// Initializes environment with resource pool and factory extensions
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEnvExtension::initializeEnvironment(CAlfEnv& aEnv)
+ {
+ AlfExtensionResourcePoolContainer* poolContainer =
+ static_cast<AlfExtensionResourcePoolContainer*>(
+ aEnv.Extension( KAlfExtensionResourcePoolUid));
+ if ( poolContainer == NULL)
+ {
+ // Initialize the env with resource pool extension
+ initializeEnvironmentForResourcePool(aEnv);
+ }
+ AlfExtensionWidgetFactory* widgetFactoryExtension =
+ static_cast<AlfExtensionWidgetFactory*>(
+ aEnv.Extension( KAlfExtensionWidgetFactoryUid));
+ if ( widgetFactoryExtension == NULL)
+ {
+ // Initialize the env with widget factory extension
+ initializeEnvironmentForFactory(aEnv);
+ }
+ }
+// ---------------------------------------------------------------------------
+// Initializes environment with Theme Manager extension
+// ---------------------------------------------------------------------------
+//
+void AlfWidgetEnvExtension::initializeEnvironmentForTheme(CAlfEnv& /*aEnv*/ )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Initializes environment with resource pool extension
+// ---------------------------------------------------------------------------
+//
+void AlfWidgetEnvExtension::initializeEnvironmentForResourcePool(CAlfEnv& aEnv)
+ {
+ auto_ptr<ResourcePool> pool(new(EMM) ResourcePool(
+ aEnv.TextureManager(), NULL));
+ auto_ptr<AlfExtensionResourcePoolContainer> poolContainer(
+ new(EMM) AlfExtensionResourcePoolContainer( pool.release()));
+ int err = aEnv.AddExtension( KAlfExtensionResourcePoolUid,
+ (MAlfEnvObject*)(poolContainer.get()));
+ if ( err != KErrNone)
+ {
+ ALF_THROW(AlfWidgetException, ECommonError, "Failed to add AlfEnv extension");
+ }
+ else
+ {
+ poolContainer.release();
+ }
+ }
+// ---------------------------------------------------------------------------
+// Returns the reference for Resource Pool extension object.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT ResourcePool& AlfWidgetEnvExtension::resourcePool( CAlfEnv& aEnv)
+ {
+ Alf::AlfExtensionResourcePoolContainer* poolContainer =
+ static_cast<Alf::AlfExtensionResourcePoolContainer*>(aEnv.Extension( KAlfExtensionResourcePoolUid));
+ if ( poolContainer == NULL)
+ {
+ initializeEnvironment(aEnv);
+ }
+ //re-fetch the pool
+ poolContainer =
+ static_cast<Alf::AlfExtensionResourcePoolContainer*>(aEnv.Extension( KAlfExtensionResourcePoolUid));
+ return *(poolContainer->mResourcePool);
+}
+
+// ---------------------------------------------------------------------------
+// Initializes environment with factory extension
+// ---------------------------------------------------------------------------
+//
+void AlfWidgetEnvExtension::initializeEnvironmentForFactory(CAlfEnv& aEnv)
+ {
+ auto_ptr<AlfWidgetFactoryLoader> widgetFactoryLoader(
+ new (EMM) AlfWidgetFactoryLoader() );
+
+ IAlfWidgetFactory* widgetFactory = NULL;
+ widgetFactory = widgetFactoryLoader->loadWidgetFactory(aEnv);
+ if(!widgetFactory)
+ {
+ ALF_THROW(AlfWidgetException, ECommonError, "Failed to create widget factory");
+ }
+ auto_ptr<AlfExtensionWidgetFactory> widgetFactoryExtension(
+ new(EMM) AlfExtensionWidgetFactory( widgetFactoryLoader.release(),
+ widgetFactory));
+ int err = aEnv.AddExtension( KAlfExtensionWidgetFactoryUid,
+ (MAlfEnvObject*)(widgetFactoryExtension.get()));
+ if ( err != 0)
+ {
+ ALF_THROW(AlfWidgetException, ECommonError, "Failed to add AlfEnv extension");
+ }
+ else
+ {
+ widgetFactoryExtension.release();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the reference for Theme Manager extension object.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfThemeManagerUtil& AlfWidgetEnvExtension::themeManagerUtil( CAlfEnv& /*aEnv*/)
+ {
+ // Depricated
+ ALF_THROW(AlfWidgetException, EInvalidArgument, "Depricated Module");
+ }
+
+
+// ---------------------------------------------------------------------------
+//Access to the widget factory
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT IAlfWidgetFactory& AlfWidgetEnvExtension::widgetFactory(
+ CAlfEnv& aEnv)
+ {
+ AlfExtensionWidgetFactory* widgetFactoryExtension =
+ static_cast<AlfExtensionWidgetFactory*>(
+ aEnv.Extension( KAlfExtensionWidgetFactoryUid));
+ if ( widgetFactoryExtension == NULL)
+ {
+ initializeEnvironmentForFactory(aEnv);
+ }
+ //re-fetch the widget factory extension
+ widgetFactoryExtension =
+ static_cast<AlfExtensionWidgetFactory*>(
+ aEnv.Extension( KAlfExtensionWidgetFactoryUid));
+ return *(widgetFactoryExtension->mWidgetFactory);
+ }
+
+ } // Alf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfwidgeteventhandler.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,632 @@
+/*
+* Copyright (c) 2009 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: File implements eventhandler in widgetmodel.
+*
+*/
+
+#include <alf/alftypes.h>
+#include <osn/ustring.h>
+
+#include "alf/alfwidgeteventhandler.h"
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfvarianttype.h>
+#include <alf/alfexceptions.h>
+#include "alf/alfattribute.h"
+#include <alf/alfeventoutputsignalsubscriber.h>
+#include <alf/ialfappeventlistener.h>
+#include <stdexcept>
+#include <osn/osnnew.h>
+
+#ifdef RD_TACTILE_FEEDBACK
+#include <touchfeedback.h>
+#endif // RD_TACTILE_FEEDBACK
+
+#include "alfwidgeteventhandlerimpl.h"
+#include "alfanimationoutput.h"
+#include "alfeventinput.h"
+#include "alfeventoutput.h"
+
+
+namespace Alf
+ {
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfWidgetEventHandler::AlfWidgetEventHandler(
+ IAlfWidgetEventHandler::AlfEventHandlerType aEventHandlerType,
+ IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase aEventHandlerExecutionPhase )
+ {
+ mImpl.reset( new (EMM) AlfWidgetEventHandlerImpl(
+ aEventHandlerType, aEventHandlerExecutionPhase ) );
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+AlfWidgetEventHandler::~AlfWidgetEventHandler()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addKeyInput(
+ int aEventID,
+ EventTypeFlags aEventTypeFlags,
+ uint aModifiers )
+ {
+ if ( aEventTypeFlags != keyDown && aEventTypeFlags != keyUp )
+ {
+ ALF_THROW(
+ AlfException,
+ EInvalidArgument,
+ "AlfWidgetEventHandler - invalid event type given in addKeyInput()" );
+ }
+
+ mImpl->mInputs.resize(mImpl->mInputs.count()+1);
+ AlfEventInput* input = new( EMM ) AlfEventInput( aEventTypeFlags, aEventID, 0, aModifiers );
+ mImpl->mInputs.insert(mImpl->mInputs.count(),input);
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addCustomInput(
+ int aEventID, bool aUseEventData, int aEventData )
+ {
+ mImpl->mInputs.resize(mImpl->mInputs.count()+1);
+ AlfEventInput* input = new( EMM ) AlfEventInput(custom, aEventID, aEventData, 0 );
+ if ( aUseEventData )
+ {
+ input->mEventTypeFlags |= useEventData;
+ }
+
+ mImpl->mInputs.insert(mImpl->mInputs.count(), input);
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addPointerInput(
+ const char* aElementName, const char* aVisualName,
+ WidgetPointerEvent aEvent )
+ {
+ mImpl->mPointerInputs.resize(mImpl->mPointerInputs.count()+1);
+ AlfPointerEventInput* input = new( EMM ) AlfPointerEventInput( aElementName, aVisualName, aEvent );
+ mImpl->mPointerInputs.insert(mImpl->mPointerInputs.count(), input);
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+
+OSN_EXPORT void AlfWidgetEventHandler::addOutput(
+ int aEventType,
+ int aEventID,
+ const char* aTargetControl,
+ unsigned int aDelay )
+ {
+ mImpl->mOutputs.resize(mImpl->mOutputs.count()+1);
+ AlfEventOutput* output = new( EMM ) AlfEventOutput( aEventType, aEventID, aTargetControl, aDelay );
+ mImpl->mOutputs.insert(mImpl->mOutputs.count(), output);
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addAnimationOutput(
+ AlfReferenceToVisual* aTargetVisual,
+ AlfReferenceToVisual* aReferenceVisual,
+ IAlfAttributeSetter* aAttributeSetter,
+ AlfAttributeContainer* aAttributeContainer,
+ unsigned int aAnimationTime,
+ unsigned int aDelay )
+ {
+ mImpl->mAnimationOutputs.resize(mImpl->mAnimationOutputs.count()+1);
+
+ AlfAnimationOutput* output = new( EMM ) AlfAnimationOutput(
+ aTargetVisual,
+ aReferenceVisual,
+ aAttributeSetter,
+ aAttributeContainer,
+ aAnimationTime,
+ aDelay );
+
+ // This should always succeed, because the array has already been resized.
+ mImpl->mAnimationOutputs.insert(mImpl->mAnimationOutputs.count(), output );
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addCancelOutput(
+ const char* aTargetWidget, int aEventID, bool aCancelAll )
+ {
+ mImpl->mCancelOutputs.resize(mImpl->mCancelOutputs.count()+1);
+ AlfEventCancelOutput* output = new( EMM ) AlfEventCancelOutput( aTargetWidget, aEventID, aCancelAll );
+ mImpl->mCancelOutputs.insert(mImpl->mCancelOutputs.count(), output);
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addAnimationCancelOutput(
+ const char* aElementName,
+ const char* aVisualName,
+ TAlfOp aOperation,
+ bool aCancelAll )
+ {
+ mImpl->mAnimationCancelOutputs.resize(mImpl->mAnimationCancelOutputs.count()+1);
+ AlfAnimationCancelOutput* output = new( EMM ) AlfAnimationCancelOutput(aElementName, aVisualName, aOperation, aCancelAll );
+ mImpl->mAnimationCancelOutputs.insert(mImpl->mAnimationCancelOutputs.count(), output);
+ }
+
+// ---------------------------------------------------------------------------
+// AddWidgetAttributeOutput
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addWidgetAttributeOutput(
+ AlfAttribute& aAttribute, const char* aWidgetId )
+ {
+ mImpl->mWidgetAttributeOutputs.resize( mImpl->mWidgetAttributeOutputs.count() + 1 );
+ AlfWidgetAttributeOutput* output = new (EMM) AlfWidgetAttributeOutput( aAttribute, aWidgetId );
+ mImpl->mWidgetAttributeOutputs.insert( mImpl->mWidgetAttributeOutputs.count(), output );
+ }
+
+// ---------------------------------------------------------------------------
+// addWidgetAttributeOutput
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addWidgetAttributeOutput(
+ UString& aName, AlfAttributeValueType* aValue, const char* aWidgetId )
+ {
+ auto_ptr<AlfAttribute> attr(
+ new( EMM ) AlfAttribute(aName.getUtf8(), AlfAttribute::EStatic ) );
+ attr->addTargetValue( aValue );
+
+ mImpl->mWidgetAttributeOutputs.resize( mImpl->mWidgetAttributeOutputs.count() + 1 );
+ // Add attribute to attribute output. Onwership is transferred.
+ AlfWidgetAttributeOutput* output = new (EMM) AlfWidgetAttributeOutput( *attr.get(), aWidgetId );
+ attr.release();
+ mImpl->mWidgetAttributeOutputs.insert( mImpl->mWidgetAttributeOutputs.count(), output );
+ }
+
+// ---------------------------------------------------------------------------
+// addWidgetAttributeInput
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addWidgetAttributeInput(
+ UString& aName, AlfAttributeValueType* aValue, const char* aElementId )
+ {
+ auto_ptr<AlfAttribute> attr(
+ new( EMM ) AlfAttribute(aName.getUtf8(), AlfAttribute::EStatic ) );
+ attr->addTargetValue( aValue );
+
+ mImpl->mWidgetAttributeInputs.resize( mImpl->mWidgetAttributeInputs.count() + 1 );
+ // Add attribute to attribute input. Onwership is transferred.
+ AlfWidgetAttributeInput* input = new (EMM) AlfWidgetAttributeInput( *attr.get(), aElementId );
+ attr.release();
+ mImpl->mWidgetAttributeInputs.insert( mImpl->mWidgetAttributeInputs.count(), input );
+ }
+
+// ---------------------------------------------------------------------------
+// addTactileOutput
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addTactileOutput(
+ WidgetTactileFeedbackType aFeedbackType )
+ {
+#ifdef RD_TACTILE_FEEDBACK
+ // map the feedback type to official tactile feedback type
+ TTouchLogicalFeedback feedback = ETouchFeedbackNone;
+
+ switch ( aFeedbackType )
+ {
+ case tactileFeedbackBasic:
+ feedback = ETouchFeedbackBasic;
+ break;
+ case tactileFeedbackSensitive:
+ feedback = ETouchFeedbackSensitive;
+ break;
+ case tactileFeedbackNone:
+ default:
+ break;
+ }
+
+ // create tactile output
+ mImpl->mTactileOutputs.resize( mImpl->mTactileOutputs.count() + 1 );
+ AlfTactileOutput* output = new (EMM) AlfTactileOutput( feedback );
+ mImpl->mTactileOutputs.insert( mImpl->mTactileOutputs.count(), output );
+#endif // RD_TACTILE_FEEDBACK
+ }
+
+// ---------------------------------------------------------------------------
+// addEventPasserInput
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addEventPasserInput (
+ int aEventId, int aCustomData )
+ {
+ mImpl->mEventPasserInputs.resize( mImpl->mEventPasserInputs.count() + 1 );
+
+ AlfEventPasserInput* input = new( EMM ) AlfEventPasserInput(
+ aEventId, aCustomData );
+ mImpl->mEventPasserInputs.insert( mImpl->mEventPasserInputs.count(), input );
+ }
+
+// ---------------------------------------------------------------------------
+// addEventPasserOutput
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addEventPasserOutput(
+ const char* aSourceWidget , const char* aTargetWidget )
+ {
+ mImpl->mEventPasserOutputs.resize( mImpl->mEventPasserOutputs.count() + 1 );
+
+ //create new output here
+ AlfEventPasserOutput* output = new( EMM ) AlfEventPasserOutput(
+ aSourceWidget, aTargetWidget );
+
+ mImpl->mEventPasserOutputs.insert( mImpl->mEventPasserOutputs.count(), output );
+ }
+
+// ---------------------------------------------------------------------------
+// addEventPasserOutput
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addEventPasserOutput(
+ const char* aSourceWidget , const char* aTargetWidget, int aNewEventId, int aNewEventCustomData )
+ {
+ //create new output here
+ auto_ptr<AlfEventPasserOutput> output(new (EMM) AlfEventPasserOutput( aSourceWidget,
+ aTargetWidget,
+ aNewEventId,
+ aNewEventCustomData ));
+ mImpl->mEventPasserOutputs.resize( mImpl->mEventPasserOutputs.count() + 1 );
+ mImpl->mEventPasserOutputs.insert( mImpl->mEventPasserOutputs.count(), output.get() );
+ output.release();
+ }
+
+// ---------------------------------------------------------------------------
+// addWidgetEventOutputSignalSubscriber
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addWidgetEventOutputSignalSubscriber(
+ IAlfEventOutputSignalSubscriber& aSubscriber )
+ {
+ auto_ptr<AlfEventOutputSignal> signal(new (EMM) AlfEventOutputSignal( aSubscriber ));
+ mImpl->mWidgetEventOutputSignals.resize( mImpl->mWidgetEventOutputSignals.count() + 1 );
+ mImpl->mWidgetEventOutputSignals.insert( mImpl->mWidgetEventOutputSignals.count(), signal.get() );
+ signal.release();
+ }
+
+// ---------------------------------------------------------------------------
+// addWidgetStateOutput
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addWidgetStateOutput(
+ const UString& aName, uint aEnableStates, uint aDisableStates )
+ {
+ auto_ptr<AlfStateChangeOutput> output(new (EMM) AlfStateChangeOutput( aName.getUtf8(), aEnableStates, aDisableStates ));
+ mImpl->mStateChangeOutputs.resize( mImpl->mStateChangeOutputs.count() + 1 );
+ mImpl->mStateChangeOutputs.insert( mImpl->mStateChangeOutputs.count(), output.get() );
+ output.release();
+ }
+
+// ---------------------------------------------------------------------------
+// addAppEventOutput
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfWidgetEventHandler::addAppEventOutput(const UString& aCmd , IAlfAppEventListener& aAppEvent )
+ {
+ auto_ptr<AlfAppEventOutput> appOutput(new (EMM) AlfAppEventOutput( aCmd, aAppEvent ));
+ mImpl->mAppEventOutputs.resize( mImpl->mAppEventOutputs.count() + 1 );
+ mImpl->mAppEventOutputs.insert( mImpl->mAppEventOutputs.count(), appOutput.get() );
+ appOutput.release();
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+bool AlfWidgetEventHandler::accept(
+ CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const
+ {
+ bool ret = false;
+
+ // Custom and key events
+ if ( !aEvent.IsPointerEvent() )
+ {
+ int count = mImpl->mInputs.count();
+
+ for ( int i = 0 ; i < count ; i++ )
+ {
+ if ( mImpl->mInputs[i]->accept( aEvent ) )
+ {
+ ret = true;
+ break;
+ }
+ }
+ }
+
+ // Pointer events
+ else
+ {
+ int count = mImpl->mPointerInputs.count();
+
+ for ( int i = 0 ; i < count ; i++ )
+ {
+ if ( mImpl->mPointerInputs[i]->accept( aControl, aEvent ) )
+ {
+ ret = true;
+ break;
+ }
+ }
+ }
+
+ // All the inputs below handle only custom events.
+
+ if (!ret)
+ {
+ int count = mImpl->mWidgetAttributeInputs.count();
+
+ for ( int i = 0 ; i < count ; i++ )
+ {
+ if ( mImpl->mWidgetAttributeInputs[i]->accept( aEvent ) )
+ {
+ ret = true;
+ break;
+ }
+ }
+ }
+
+ if (!ret)
+ {
+ int count = mImpl->mEventPasserInputs.count();
+
+ for ( int i = 0 ; i < count ; i++ )
+ {
+ if ( mImpl->mEventPasserInputs[i]->accept( aEvent ) )
+ {
+ ret = true;
+ break;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+AlfEventStatus AlfWidgetEventHandler::offerEvent(
+ CAlfWidgetControl& aControl,
+ const TAlfEvent& aEvent )
+ {
+ AlfEventStatus ret(EEventNotHandled);
+
+ // If the event handler is active in the control's current state and
+ // any of the inputs accept the event, execute all outputs.
+
+ if ( ( (mImpl->mActiveStates == ~0) ||
+ (aControl.state() & mImpl->mActiveStates) ) &&
+ accept( aControl, aEvent ) )
+ {
+ ret = EEventHandled;
+
+ // Normal event outputs, property outputs and cancel outputs
+ // are executed with all types of events (custom, key, pointer).
+
+ int i;
+ int count = mImpl->mCancelOutputs.count();
+
+ for ( i = 0 ; i < count ; i++ )
+ {
+ mImpl->mCancelOutputs[i]->execute( aControl );
+ }
+
+ count = mImpl->mOutputs.count();
+
+ for ( i = 0 ; i < count ; i++ )
+ {
+ mImpl->mOutputs[i]->execute( aControl, aEvent );
+ }
+
+ // Tactile outputs
+#ifdef RD_TACTILE_FEEDBACK
+ count = mImpl->mTactileOutputs.count();
+
+ for ( i = 0 ; i < count ; i++ )
+ {
+ mImpl->mTactileOutputs[i]->execute();
+ }
+#endif // RD_TACTILE_FEEDBACK
+
+ // widget attribute outputs
+ count = mImpl->mWidgetAttributeOutputs.count();
+
+ for ( i = 0 ; i < count ; i++ )
+ {
+ mImpl->mWidgetAttributeOutputs[i]->execute(
+ aControl );
+ }
+
+ // Event output signal subscribers
+ count = mImpl->mWidgetEventOutputSignals.count();
+ for ( i = 0 ; i < count ; i++ )
+ {
+ mImpl->mWidgetEventOutputSignals[i]->execute();
+ }
+
+ // Animation event outputs, animation cancel outputs and property outputs
+ // are executed only with custom events.
+
+ if ( aEvent.IsCustomEvent() )
+ {
+ // Custom events have the associated data ID for finding the target
+ // visual in the event data parameter.
+
+ int dataID = aEvent.CustomEventData();
+
+ count = mImpl->mAnimationCancelOutputs.count();
+
+ for ( i = 0 ; i < count ; i++ )
+ {
+ mImpl->mAnimationCancelOutputs[i]->execute( aControl, dataID );
+ }
+
+ count = mImpl->mAnimationOutputs.count();
+
+ for ( i = 0 ; i < count ; i++ )
+ {
+ mImpl->mAnimationOutputs[i]->sendCommand( aControl, dataID );
+ }
+ }
+
+ // State change outputs
+ count = mImpl->mStateChangeOutputs.count();
+ for( i = 0; i < count; i++)
+ {
+ mImpl->mStateChangeOutputs[i]->execute( aControl );
+ }
+
+ // Event passer outputs
+ count = mImpl->mEventPasserOutputs.count();
+ for( i = 0; i < count; i++)
+ {
+ mImpl->mEventPasserOutputs[i]->execute( &aControl , aEvent );
+ }
+
+ // AlfAppEvent outputs
+ count = mImpl->mAppEventOutputs.count();
+ for( i = 0; i < count; i++)
+ {
+ mImpl->mAppEventOutputs[i]->execute( aEvent );
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// ---------------------------------------------------------------------------
+//
+void AlfWidgetEventHandler::setActiveStates( unsigned int aStates )
+ {
+ mImpl->mActiveStates = aStates;
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void AlfWidgetEventHandler::setCapturing( bool aCapturing )
+ {
+ mImpl->mCapturing = aCapturing;
+ }
+
+// ---------------------------------------------------------------------------
+// From class IAlfWidgetEventHandler.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+bool AlfWidgetEventHandler::capturing() const
+ {
+ return mImpl->mCapturing;
+ }
+
+// ---------------------------------------------------------------------------
+// From class MAlfInterfaceBase.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfWidgetEventHandler::makeInterface( const IfId& aType )
+ {
+ UString param( aType.mImplementationId );
+ if ( param == IAlfWidgetEventHandler::type().mImplementationId )
+ {
+ return static_cast<IAlfWidgetEventHandler*>( this );
+ }
+
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// setEventHandlerData
+// ---------------------------------------------------------------------------
+//
+void AlfWidgetEventHandler::setEventHandlerData(const AlfWidgetEventHandlerInitData& aData)
+ {
+ // Set event handler id
+ if (aData.mWidgetEventHandlerId)
+ {
+ int len = strlen(aData.mWidgetEventHandlerId);
+ char* tmp = new( EMM ) char[len + 1];
+
+ delete[] mImpl->mEhData.mWidgetEventHandlerId;
+
+ strcpy(tmp, aData.mWidgetEventHandlerId);
+ tmp[len] = 0;
+ mImpl->mEhData.mWidgetEventHandlerId = tmp;
+ }
+ // we don't need to set node at the moment
+ mImpl->mEhData.mNode = 0;
+ }
+
+// ---------------------------------------------------------------------------
+// eventHandlerData
+// ---------------------------------------------------------------------------
+//
+AlfWidgetEventHandlerInitData* AlfWidgetEventHandler::eventHandlerData()
+ {
+ return &mImpl->mEhData;
+ }
+
+// ---------------------------------------------------------------------------
+// eventHandlerType
+// ---------------------------------------------------------------------------
+//
+IAlfWidgetEventHandler::AlfEventHandlerType AlfWidgetEventHandler::eventHandlerType()
+ {
+ return mImpl->mEventHandlerType;
+ }
+
+// ---------------------------------------------------------------------------
+// eventExecutionPhase
+// ---------------------------------------------------------------------------
+//
+IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase AlfWidgetEventHandler::eventExecutionPhase()
+ {
+ return mImpl->mEventHandlerExecutionPhase;
+ }
+}
+// End of File.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfwidgeteventhandlerimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2009 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: The private implementation file for WidgetEventHandler.
+*
+*/
+
+
+#include "alfwidgeteventhandlerimpl.h"
+
+using namespace Alf;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+AlfWidgetEventHandlerImpl::AlfWidgetEventHandlerImpl(
+ IAlfWidgetEventHandler::AlfEventHandlerType aEventHandlerType,
+ IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase aEventHandlerExecutionPhase):
+ mActiveStates( ~0 ), // By default active in all states
+ mCapturing( false ),
+ mEventHandlerType(aEventHandlerType),
+ mEventHandlerExecutionPhase(aEventHandlerExecutionPhase)
+ {
+ construct();
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void AlfWidgetEventHandlerImpl::construct()
+ {
+ mInputs.setAutoDelete( true );
+ mEhData.mWidgetEventHandlerId = 0;
+ mEhData.mNode = 0;
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+AlfWidgetEventHandlerImpl::~AlfWidgetEventHandlerImpl()
+ {
+ mInputs.clear();
+ mPointerInputs.clear();
+ mOutputs.clear();
+ mCancelOutputs.clear();
+ mAnimationOutputs.clear();
+ mAnimationCancelOutputs.clear();
+ mWidgetAttributeOutputs.clear();
+ mWidgetAttributeInputs.clear();
+#ifdef RD_TACTILE_FEEDBACK
+ mTactileOutputs.clear();
+#endif // RD_TACTILE_FEEDBACK
+ mWidgetEventOutputSignals.clear();
+ mStateChangeOutputs.clear();
+ mEventPasserInputs.clear();
+ mEventPasserOutputs.clear();
+ mAppEventOutputs.clear();
+ if (mEhData.mWidgetEventHandlerId)
+ {
+ delete[] mEhData.mWidgetEventHandlerId;
+ }
+ }
+
+// End of File.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfwidgetimpl.cpp Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2007 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: The private implementation of CAlfWidget.
+*
+*/
+
+
+#include "alfwidgetimpl.h"
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfmodel.h>
+#include <alf/alfcontrolgroup.h>
+#include "alf/alfwidget.h"
+#include "alf/alfattribute.h"
+#include "alf/alfattributevaluetype.h"
+#include <alf/alfexceptions.h>
+#include <libc/string.h>
+#include <alf/ialfelement.h>
+
+#include "alfwidgetattributeownerimpl.h"
+
+
+namespace Alf
+ {
+
+AlfWidgetImpl::AlfWidgetImpl()
+ {
+ mControl = NULL;
+ mModel = NULL;
+ mAttributeList.setAutoDelete(true);
+ mWidgets.setAutoDelete(false);
+ mTakesModelOwnership=false;
+ }
+
+AlfWidgetImpl::~AlfWidgetImpl()
+ {
+ setControl( NULL, true );
+
+ if (mTakesModelOwnership)
+ {
+ delete mModel;
+ mModel = NULL;
+ }
+ mAttributeList.clear();
+ mWidgets.clear();
+ }
+
+void AlfWidgetImpl::setWidgetName( const UString& aWidgetName )
+ {
+ mWidgetName = aWidgetName;
+ }
+
+const UString& AlfWidgetImpl::widgetName() const
+ {
+ return mWidgetName;
+ }
+
+
+CAlfWidgetControl* AlfWidgetImpl::control()
+ {
+ return mControl;
+ }
+
+void AlfWidgetImpl::setControl( CAlfWidgetControl* aControl,bool aDeletePreviousControl)
+ {
+ if ( mControl != aControl )
+ {
+ if( mControl )
+ {
+ if( mModel )
+ {
+ // Remove model change observer from control
+ mModel->removeModelChangeObserver( *mControl );
+ }
+ if( aDeletePreviousControl )
+ {
+ // Delete control from possible control group to avoid double deletion
+ if(mControl->ControlGroup())
+ {
+ mControl->ControlGroup()->Remove(mControl);
+ }
+ // Delete the control
+ delete mControl;
+ mControl = NULL;
+ }
+ }
+
+ // Set the new control.
+ mControl = aControl;
+
+ // Add the new control as an observer for model changes.
+ if( mControl )
+ {
+ if( mModel )
+ {
+ mModel->addModelChangeObserver( *mControl );
+ }
+ mAttributeOwnerImpl.reset(new (EMM) AlfWidgetAttributeOwnerImpl(mControl));
+ }
+ }
+ }
+
+IAlfModel* AlfWidgetImpl::model()
+ {
+ return mModel;
+ }
+
+void AlfWidgetImpl::setModel( IAlfModel* aModel,bool aTakeOwnerShip )
+ {
+ if ( mModel != aModel )
+ {
+ // Release the old model.
+ if (mTakesModelOwnership)
+ {
+ delete mModel;
+ }
+
+ else if (mModel&&mControl)
+ {
+ mModel->removeModelChangeObserver(*mControl);
+ }
+
+ // Set the new model.
+ mModel = aModel;
+ mTakesModelOwnership=aTakeOwnerShip;
+ // Add the control as an observer for model changes.
+ if ( mModel && mControl )
+ {
+ mModel->addModelChangeObserver( *mControl );
+ }
+ }
+ else // just copy the ownership flag
+ {
+ if (mModel != NULL)
+ {
+ mTakesModelOwnership=aTakeOwnerShip;
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfWidgetImpl::addWidget(AlfWidget *aWidget)
+ {
+ for (int i=0 ; i< mWidgets.count(); i++ )
+ {
+ if (mWidgets.findRef(aWidget) >=0)
+ {
+ //widget already there.
+ return;
+ }
+ }
+ mWidgets.resize(mWidgets.count()+1);
+ mWidgets.insert(mWidgets.count(),aWidget);
+ }
+
+int AlfWidgetImpl::widgetCount()
+ {
+ return mWidgets.count();
+ }
+
+AlfWidget* AlfWidgetImpl::getWidget(int aIndex)
+ {
+ if (aIndex>=0 && aIndex < mWidgets.count())
+ return mWidgets[aIndex];
+ return 0;
+ }
+
+int AlfWidgetImpl::findWidget(AlfWidget* aWidget)
+ {
+ return mWidgets.findRef(aWidget);
+ }
+
+void AlfWidgetImpl::removeWidget(int aIndex)
+ {
+ if (aIndex >=0 and aIndex < mWidgets.count())
+ mWidgets.remove(aIndex);
+ }
+
+// ---------------------------------------------------------------------------
+// Returns attribute owner interface.
+// ---------------------------------------------------------------------------
+//
+AlfWidgetAttributeOwnerImpl* AlfWidgetImpl::getAttributeOwner()
+ {
+ return mAttributeOwnerImpl.get();
+ }
+
+ } //namespace alf
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/group/bld.inf Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2006 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: Build information file for UI Accelerator Toolkit
+*
+*/
+
+
+PRJ_MMPFILES
+
+../alfwidgetmodel/group/alfwidgetmodel.mmp
+../alfwidgetfactory/group/alfwidgetfactory.mmp
+
+
+PRJ_EXPORTS
+../../rom/widgetmodel.iby CORE_MW_LAYER_IBY_EXPORT_PATH(widgetmodel.iby)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/sis/createsisx.bat Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,25 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Batch file to create the widgetmodel sisx.
+rem
+
+
+@echo off
+echo DoTo: update the location for certificate and private key files
+
+set certificate_file=..\internal\certificates\rd.cer
+set private_key_file=..\internal\certificates\rd-key.pem
+
+makesis widgetmodel.pkg
+signsis widgetmodel.sis widgetmodel.sisx %certificate_file% %private_key_file%
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/sis/widgetmodel.pkg Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,48 @@
+;
+; Copyright (c) 2009 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: Pkg file to export widgetmodel binaries.
+;
+
+; ============================================================================
+; Name : widgetmodel.pkg
+; Part of : Widget model
+; Description : Package file
+; Version : %version: 2 % << Don't touch! Updated by Synergy at check-out.
+;
+; Copyright © 2007 Nokia. All rights reserved.
+; This material, including documentation and any related computer
+; programs, is protected by copyright controlled by Nokia. All
+; rights are reserved. Copying, including reproducing, storing,
+; adapting or translating, any or all of this material requires the
+; prior written consent of Nokia. This material also contains
+; confidential information which may not be disclosed to others
+; without the prior written consent of Nokia.
+; ============================================================================
+; Template version: 4.1
+
+; standard SIS file header
+; : aquire proper UID
+#{"Os neutral library"},(0x10207260),1,0,0
+
+;Localized Vendor Name
+%{"Nokia-EN"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Files to copy
+"\epoc32\release\armv5\urel\alfwidgetutils.dll"-"!:\sys\bin\alfwidgetutils.dll"
+"\epoc32\release\armv5\urel\alfwidgetmodel.dll"-"!:\sys\bin\alfwidgetmodel.dll"
+"\epoc32\release\armv5\urel\alfwidgetfactory.dll"-"!:\sys\bin\alfwidgetfactory.dll"
+"\epoc32\data\z\resource\plugins\alfwidgetfactory.rsc"-"!:\resource\plugins\alfwidgetfactory.rsc"
\ No newline at end of file