201025
authorhgs
Thu, 24 Jun 2010 14:55:55 +0300
changeset 31 e7a04a6385be
parent 30 d8e625c87f33
child 38 aca9d8bb5fbc
201025
creator/creator.pro
creator/engine/inc/creator_accesspoint.h
creator/engine/inc/creator_browser.h
creator/engine/inc/creator_contactsetcache.h
creator/engine/inc/creator_factory.h
creator/engine/inc/creator_note.h
creator/engine/inc/creator_notepadwrapper.h
creator/engine/inc/creator_phonebook.h
creator/engine/inc/creator_phonebookapi.h
creator/engine/inc/creator_phonebookbase.h
creator/engine/inc/creator_phonebookwrapper.h
creator/engine/inc/creator_virtualphonebook.h
creator/engine/src/creator_accesspoint.cpp
creator/engine/src/creator_connectionmethodelement.cpp
creator/engine/src/creator_contactelement.cpp
creator/engine/src/creator_contactsetcache.cpp
creator/engine/src/creator_factory.cpp
creator/engine/src/creator_note.cpp
creator/engine/src/creator_notepadwrapper.cpp
creator/engine/src/creator_phonebook.cpp
creator/engine/src/creator_phonebookapi.cpp
creator/engine/src/creator_phonebookbase.cpp
creator/engine/src/creator_phonebookwrapper.cpp
creator/engine/src/creator_scriptelementfactory.cpp
creator/engine/src/creator_virtualphonebook.cpp
creator/inc/engine.h
creator/inc/enginewrapper.h
creator/inc/mainview.h
creator/src/engine.cpp
creator/src/enginewrapper.cpp
creator/src/mainview.cpp
creator/src/notifications.cpp
filebrowser/engine/FBFileOps.cpp
filebrowser/engine/FBFileUtils.cpp
filebrowser/engine/FBFileUtils.h
filebrowser/engine/engine.cpp
filebrowser/engine/engine.h
filebrowser/group/ReleaseNotes_FileBrowser.txt
filebrowser/ui/inc/editorview.h
filebrowser/ui/inc/fbdrivelistviewitem.h
filebrowser/ui/inc/fbdrivemodel.h
filebrowser/ui/inc/fbdriveview.h
filebrowser/ui/inc/fbfilelistviewitem.h
filebrowser/ui/inc/fbfilemodel.h
filebrowser/ui/inc/fbfileview.h
filebrowser/ui/inc/fbmainwindow.h
filebrowser/ui/inc/filebrowsermainwindow.h
filebrowser/ui/inc/filebrowsermodel.h
filebrowser/ui/inc/filebrowsersortfilterproxymodel.h
filebrowser/ui/inc/filebrowserview.h
filebrowser/ui/inc/searchview.h
filebrowser/ui/inc/settingsview.h
filebrowser/ui/src/editorview.cpp
filebrowser/ui/src/enginewrapper.cpp
filebrowser/ui/src/fbdrivelistviewitem.cpp
filebrowser/ui/src/fbdrivemodel.cpp
filebrowser/ui/src/fbdriveview.cpp
filebrowser/ui/src/fbfilelistviewitem.cpp
filebrowser/ui/src/fbfilemodel.cpp
filebrowser/ui/src/fbfileview.cpp
filebrowser/ui/src/fbmainwindow.cpp
filebrowser/ui/src/filebrowsermainwindow.cpp
filebrowser/ui/src/filebrowsermodel.cpp
filebrowser/ui/src/filebrowsersortfilterproxymodel.cpp
filebrowser/ui/src/filebrowserview.cpp
filebrowser/ui/src/main.cpp
filebrowser/ui/src/notifications.cpp
filebrowser/ui/src/settingsview.cpp
filebrowser/ui/ui.pro
filebrowser/ui/ui.qrc
htiui/HtiAdmin/inc/HtiAdminAppUi.h
htiui/HtiAdmin/src/HtiAdminAppUi.cpp
htiui/HtiAdminQt/chtiadminengine.cpp
htiui/HtiAdminQt/chtiadminengine.h
htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/inc/EngineVideoRecording.h
htiui/HtiServicePlugins/HtiCameraServicePlugin/inc/HtiCameraServicePlugin.h
htiui/HtiServicePlugins/HtiCameraServicePlugin/src/HtiCameraServicePlugin.cpp
htiui/HtiServicePlugins/HtiSysInfoServicePlugin/group/HtiSysInfoServicePlugin.mmp
htiui/HtiServicePlugins/HtiSysInfoServicePlugin/inc/HtiSysInfoServicePlugin.h
htiui/HtiServicePlugins/HtiSysInfoServicePlugin/src/HtiSysInfoServicePlugin.cpp
htiui/sis/HTI_S60-10_1.pkg
htiui/sis/HTI_S60-52.pkg
htiui/sis/HTI_S60_Upgrade-10_1.pkg
htiui/sis/HTI_S60_Upgrade-52.pkg
htiui/sis/HTI_stub.pkg
launcher/launcher.pro
launcher/rom/Launcher.iby
layers.sysdef.xml
loadgen/engine/inc/loadgen_netconn.h
loadgen/group/bld.inf
loadgen/ui/hb/hb.pro
loadgen/ui/hb/src/engine.cpp
loadgen/ui/hb/src/mainview.cpp
memspyui/ui/avkon/inc/MemSpyAppUi.h
memspyui/ui/avkon/inc/MemSpyDeviceWideOperationDialog.h
memspyui/ui/avkon/inc/MemSpySettings.h
memspyui/ui/avkon/inc/MemSpyUiUtils.h
memspyui/ui/avkon/inc/MemSpyViewKernelObjects.h
memspyui/ui/avkon/inc/MemSpyViewThreadInfoItemGeneric.h
memspyui/ui/avkon/inc/MemSpyViewThreadInfoItemList.h
memspyui/ui/avkon/inc/MemSpyViewThreads.h
memspyui/ui/avkon/src/MemSpyAppUi.cpp
memspyui/ui/avkon/src/MemSpyDeviceWideOperationDialog.cpp
memspyui/ui/avkon/src/MemSpySettings.cpp
memspyui/ui/avkon/src/MemSpyUiUtils.cpp
memspyui/ui/avkon/src/MemSpyViewKernel.cpp
memspyui/ui/avkon/src/MemSpyViewKernelContainers.cpp
memspyui/ui/avkon/src/MemSpyViewKernelHeap.cpp
memspyui/ui/avkon/src/MemSpyViewKernelObjects.cpp
memspyui/ui/avkon/src/MemSpyViewProcesses.cpp
memspyui/ui/avkon/src/MemSpyViewThreadInfoItemActiveObject.cpp
memspyui/ui/avkon/src/MemSpyViewThreadInfoItemGeneric.cpp
memspyui/ui/avkon/src/MemSpyViewThreadInfoItemHeap.cpp
memspyui/ui/avkon/src/MemSpyViewThreadInfoItemList.cpp
memspyui/ui/avkon/src/MemSpyViewThreadInfoItemStack.cpp
memspyui/ui/avkon/src/MemSpyViewThreads.cpp
memspyui/ui/avkon/src/MemSpyViewWindowGroups.cpp
memspyui/ui/hb/hb.pro
memspyui/ui/hb/inc/enginewrapper.h
memspyui/ui/hb/inc/memspyheapdumpsview.h
memspyui/ui/hb/inc/memspykernelobjectdetailview.h
memspyui/ui/hb/inc/memspykernelobjecttypeview.h
memspyui/ui/hb/inc/memspykernelobjectview.h
memspyui/ui/hb/inc/memspylistview.h
memspyui/ui/hb/inc/memspymainview.h
memspyui/ui/hb/inc/memspyprocessview.h
memspyui/ui/hb/inc/memspysettingsview.h
memspyui/ui/hb/inc/memspyswmtview.h
memspyui/ui/hb/inc/memspythreaddetailindexview.h
memspyui/ui/hb/inc/memspythreaddetailview.h
memspyui/ui/hb/inc/memspythreadview.h
memspyui/ui/hb/inc/memspytrackingview.h
memspyui/ui/hb/inc/memspyview.h
memspyui/ui/hb/inc/viewmanager.h
memspyui/ui/hb/src/enginewrapper.cpp
memspyui/ui/hb/src/memspyheapdumpsview.cpp
memspyui/ui/hb/src/memspykernelobjectdetailview.cpp
memspyui/ui/hb/src/memspykernelobjecttypeview.cpp
memspyui/ui/hb/src/memspykernelobjectview.cpp
memspyui/ui/hb/src/memspylistview.cpp
memspyui/ui/hb/src/memspymainview.cpp
memspyui/ui/hb/src/memspyprocessview.cpp
memspyui/ui/hb/src/memspysettingsview.cpp
memspyui/ui/hb/src/memspyswmtview.cpp
memspyui/ui/hb/src/memspythreaddetailindexview.cpp
memspyui/ui/hb/src/memspythreaddetailview.cpp
memspyui/ui/hb/src/memspythreadview.cpp
memspyui/ui/hb/src/memspytrackingview.cpp
memspyui/ui/hb/src/memspyview.cpp
memspyui/ui/hb/src/viewmanager.cpp
perfmon/ui/hb/app/app.pro
piprofilerui/ui/hb/hb.pro
screengrabber/screengrabber.pro
stifui/avkon/group/ReleaseNote.txt
stifui/avkon/stifui/inc/AppUIApp.h
stifui/avkon/stifui/inc/AppUIDocument.h
stifui/avkon/stifui/inc/MenuListBox.h
stifui/avkon/stifui/inc/Stifui.hrh
stifui/avkon/stifui/inc/Stifui_loc.hrh
stifui/avkon/stifui/inc/TestSetMenuView.h
stifui/avkon/stifui/inc/version.h
stifui/avkon/stifui/src/AppUIApp.cpp
stifui/avkon/stifui/src/AppUIDocument.cpp
stifui/avkon/stifui/src/CreatedTestSetMenuView.cpp
stifui/avkon/stifui/src/MainMenuContainer.cpp
stifui/avkon/stifui/src/MainMenuView.cpp
stifui/avkon/stifui/src/MenuListBox.cpp
stifui/avkon/stifui/src/ShowStartedCasesContainer.cpp
stifui/avkon/stifui/src/StartedCasesMenuContainer.cpp
stifui/avkon/stifui/src/StartedCasesMenuView.cpp
stifui/avkon/stifui/src/TestCaseMenuContainer.cpp
stifui/avkon/stifui/src/TestSetBaseMenuContainer.cpp
stifui/avkon/stifui/src/TestSetInsertMenuContainer.cpp
stifui/avkon/stifui/src/TestSetMenuView.cpp
stifui/avkon/stifui/src/TestSetStartedCasesContainer.cpp
stifui/avkon/stifui/src/Testmodulesmenuview.cpp
stifui/avkon/stifui/src/UIStoreHandler.cpp
stifui/avkon/uitestserverstarter/inc/UITestServerStarter.hrh
stifui/avkon/uitestserverstarter/inc/UITestServerStarterApplication.h
stifui/avkon/uitestserverstarter/inc/UITestServerStarterDocument.h
stifui/avkon/uitestserverstarter/src/EventUtil.cpp
stifui/avkon/uitestserverstarter/src/UITestServerStarterAppContainer.cpp
stifui/avkon/uitestserverstarter/src/UITestServerStarterAppUi.cpp
stifui/qt/ReleaseNote.txt
stifui/qt/inc/cstfcase.h
stifui/qt/inc/cstfmodule.h
stifui/qt/inc/dlgoutput.h
stifui/qt/inc/dlgrepeatrun.h
stifui/qt/inc/dlgsetselector.h
stifui/qt/inc/dlgsetting.h
stifui/qt/inc/frmmain.h
stifui/qt/inc/istfqtuicontroller.h
stifui/qt/inc/istfqtuimodel.h
stifui/qt/inc/stfqtuicontroller.h
stifui/qt/inc/stfqtuimodel.h
stifui/qt/inc/stifexecutor.h
stifui/qt/inc/uisetting.h
stifui/qt/inc/uiversion.h
stifui/qt/inc/version.h
stifui/qt/rom/stfui.iby
stifui/qt/sis/stifqtui.pkg
stifui/qt/src/dlgoutput.cpp
stifui/qt/src/dlgrepeatrun.cpp
stifui/qt/src/dlgsetselector.cpp
stifui/qt/src/dlgsetting.cpp
stifui/qt/src/frmmain.cpp
stifui/qt/src/main.cpp
stifui/qt/src/stfqtuicontroller.cpp
stifui/qt/src/stfqtuimodel.cpp
stifui/qt/src/stifexecutor.cpp
stifui/qt/src/uisetting.cpp
--- a/creator/creator.pro	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/creator.pro	Thu Jun 24 14:55:55 2010 +0300
@@ -19,16 +19,10 @@
 symbian: {
         INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 	HEADERS += engine/inc/creator.hrh \
-			engine/inc/creator_accesspoint.h \
-			engine/inc/creator_browser.h \
-			engine/inc/creator_browserelement.h \
 			engine/inc/creator_calendar.h \
 			engine/inc/creator_calendarbase.h \
 			engine/inc/creator_calendarelement.h \
 			engine/inc/creator_cmdscriptrun.h \
-			engine/inc/creator_connectionmethod.h \
-			engine/inc/creator_connectionmethodbase.h \
-			engine/inc/creator_connectionmethodelement.h \
 			engine/inc/creator_contactelement.h \
 			engine/inc/creator_contactsetcache.h \
 			engine/inc/creator_factory.h \
@@ -44,7 +38,10 @@
 			engine/inc/creator_messageelement.h \
 			engine/inc/creator_modulebase.h \
 			engine/inc/creator_note.h \
+			engine/inc/creator_notepadwrapper.h \
 			engine/inc/creator_phonebook.h \
+			engine/inc/creator_phonebookwrapper.h \
+			engine/inc/creator_phonebookapi.h \
 			engine/inc/creator_phonebookbase.h \
 			engine/inc/creator_randomdatafield.h \
 			engine/inc/creator_randomdataparser.h \
@@ -59,14 +56,9 @@
 			inc/engine.h \
 			inc/enginewrapper.h
 
-	SOURCES += engine/src/creator_accesspoint.cpp \
-			engine/src/creator_browser.cpp \
-			engine/src/creator_browserelement.cpp \
-			engine/src/creator_calendar.cpp \
+	SOURCES += engine/src/creator_calendar.cpp \
 			engine/src/creator_calendarelement.cpp \
 			engine/src/creator_cmdscriptrun.cpp \
-			engine/src/creator_connectionmethod.cpp \
-			engine/src/creator_connectionmethodelement.cpp \
 			engine/src/creator_contactelement.cpp \
 			engine/src/creator_contactsetcache.cpp \
 			engine/src/creator_factory.cpp \
@@ -81,7 +73,10 @@
 			engine/src/creator_message.cpp \
 			engine/src/creator_messageelement.cpp \
 			engine/src/creator_note.cpp \
+			engine/src/creator_notepadwrapper.cpp \
 			engine/src/creator_phonebook.cpp \
+			engine/src/creator_phonebookwrapper.cpp \
+			engine/src/creator_phonebookapi.cpp \
 			engine/src/creator_phonebookbase.cpp \
 			engine/src/creator_randomdataparser.cpp \
 			engine/src/creator_scriptelement.cpp \
@@ -100,7 +95,6 @@
 			-lapparc \
 			-lcone \ 
 			-lcntmodel \
-			-lfavouritesengine \
 			-lmsgs \
 			-llogwrap \
 			-llogcli \
@@ -139,7 +133,6 @@
 			-lbitmaptransforms \
 			-lcmmanager \
 			-lcmmanagerdatabase \
-			-lapengine \
 			-lnoteseditor \
 			-lxqservice \
 		    -lQtContacts \
--- a/creator/engine/inc/creator_accesspoint.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/inc/creator_accesspoint.h	Thu Jun 24 14:55:55 2010 +0300
@@ -28,11 +28,11 @@
 
 #include <e32base.h>
 #include <commdb.h>
-#include <ApSelect.h>
-#include <ApDataHandler.h>
-#include <ApAccessPointItem.h>
-#include <ApUtils.h>
-#include <ApEngineConsts.h>
+//#include <ApSelect.h>
+//#include <ApDataHandler.h>
+//#include <ApAccessPointItem.h>
+//#include <ApUtils.h>
+//#include <ApEngineConsts.h>
 #include <msvapi.h>
 #include <mtclreg.h>
 #include <mmsclient.h>
--- a/creator/engine/inc/creator_browser.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/inc/creator_browser.h	Thu Jun 24 14:55:55 2010 +0300
@@ -26,9 +26,9 @@
 #include "creator_modulebase.h"
 
 #include <e32base.h>
-#include <FavouritesItem.h>
-#include <FavouritesDb.h>
-#include <FavouritesFile.h>
+//#include <FavouritesItem.h>
+//#include <FavouritesDb.h>
+//#include <FavouritesFile.h>
 
 
 
--- a/creator/engine/inc/creator_contactsetcache.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/inc/creator_contactsetcache.h	Thu Jun 24 14:55:55 2010 +0300
@@ -22,21 +22,19 @@
 #define CREATORCONTACTSETCACHE_H_
 
 #include <e32base.h>
-#include <qtcontacts.h>
 
 // Forward declarations
 class CContactLinkCacheImp;
 
-QTM_USE_NAMESPACE
 class CCreatorContactSet : public CBase
 {
 public:
     static CCreatorContactSet* NewL(TInt aLinkId, TInt aNumOfExistingContacts);
     virtual ~CCreatorContactSet();
-    void AppendL(QContactLocalId);
+    void AppendL(TUint32);
     TInt NumberOfExistingContacts() const;
-    RArray<QContactLocalId> ContactLinks();
-    const RArray<QContactLocalId> ContactLinks() const;
+    RArray<TUint32> ContactLinks();
+    const RArray<TUint32> ContactLinks() const;
 
     TInt LinkId() const;
 
@@ -45,15 +43,15 @@
     //void ConstructL();
     TInt iLinkId;
     TInt iNumOfExistingContacts;
-    RArray<QContactLocalId> iContactLinks;
+    RArray<TUint32> iContactLinks;
 };
 
 class MContactLinkCache
 {
 public:
     virtual void AppendL(CCreatorContactSet* aContactSet) = 0;
-    virtual RArray<QContactLocalId> ContactLinks(TInt aLinkId) = 0;
-    virtual const RArray<QContactLocalId> ContactLinks(TInt aLinkId) const = 0;    
+    virtual RArray<TUint32> ContactLinks(TInt aLinkId) = 0;
+    virtual const RArray<TUint32> ContactLinks(TInt aLinkId) const = 0;    
     virtual RPointerArray<CCreatorContactSet>& ContactSets() = 0;
     virtual const RPointerArray<CCreatorContactSet>& ContactSets() const = 0;
     virtual const CCreatorContactSet& ContactSet(TInt aLinkId) const = 0;
--- a/creator/engine/inc/creator_factory.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/inc/creator_factory.h	Thu Jun 24 14:55:55 2010 +0300
@@ -25,7 +25,7 @@
 
 class CCreatorEngine;
 class CCreatorPhonebookBase;
-class CCreatorConnectionSettingsBase;
+//class CCreatorConnectionSettingsBase;
 
 
 class TCreatorFactory{
@@ -34,8 +34,8 @@
 	static CCreatorPhonebookBase* CreatePhoneBookL(CCreatorEngine* aEngine);
 	static CCreatorModuleBaseParameters* CreatePhoneBookParametersL();
 
-    static CCreatorConnectionSettingsBase* CreateConnectionSettingsL(CCreatorEngine* aEngine);
-    static CCreatorModuleBaseParameters* CreateConnectionSettingsParametersL();
+//    static CCreatorConnectionSettingsBase* CreateConnectionSettingsL(CCreatorEngine* aEngine);
+//    static CCreatorModuleBaseParameters* CreateConnectionSettingsParametersL();
 	
 
 };
--- a/creator/engine/inc/creator_note.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/inc/creator_note.h	Thu Jun 24 14:55:55 2010 +0300
@@ -16,27 +16,20 @@
 */
 
 
-
-
-
 #ifndef __CREATORNOTEPAD_H__
 #define __CREATORNOTEPAD_H__
 
 #include "engine.h"
 #include "creator_modulebase.h"
-
+#include "creator_notepadwrapper.h"
 
 #include <e32base.h>
-//#include <npdapi.h>
-#include <noteseditorinterface.h>
-#include <AgendaUtil>
-#include <AgendaEntry>
-
 
 static const TInt KNotepadFieldLength = 1024;
 
 class CCreatorEngine;
 class CNotepadParameters;
+class CCreatorNotepadWrapper;
 
 
 class CCreatorNotepad : public CCreatorModuleBase
@@ -58,9 +51,7 @@
     void DeleteAllCreatedByCreatorL();
 
 private:
-    AgendaUtil *iAgendaUtil;
-    NotesEditorInterface *iNotepadApi;	//QT Notes api 
-    //CNotepadApi *iNotepadApi;
+    CCreatorNotepadWrapper* iNotepadWrapper;
 
     CNotepadParameters* iParameters;
     RFs& iFs;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/engine/inc/creator_notepadwrapper.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#ifndef __CREATORNOTEPADWRAPPER_H__
+#define __CREATORNOTEPADWRAPPER_H__
+
+//#include "engine.h"
+//#include "creator_modulebase.h"
+
+
+#include <e32base.h>
+#include <NotesEditorInterface>
+#include <AgendaUtil>
+#include <AgendaEntry>
+
+
+class CCreatorNotepadWrapper : public CBase
+	{
+	public:
+		static CCreatorNotepadWrapper* NewL();
+		static CCreatorNotepadWrapper* NewLC();
+		~CCreatorNotepadWrapper();
+		
+	private:
+		CCreatorNotepadWrapper();
+		void ConstructL();
+		
+	public:
+		TInt CreateNoteL( const TDesC& aText );
+		void DeleteAllL();
+		
+	private:
+		AgendaUtil *iAgendaUtil;
+		NotesEditorInterface *iNotepadApi;	//QT Notes api
+	};
+
+#endif // __CREATORNOTEPADWRAPPER_H__
--- a/creator/engine/inc/creator_phonebook.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/inc/creator_phonebook.h	Thu Jun 24 14:55:55 2010 +0300
@@ -17,65 +17,21 @@
 
 
 
-
-
 #ifndef __CREATORPHONEBOOK_H__
 #define __CREATORPHONEBOOK_H__
 
 #include "creator_phonebookbase.h"
 #include "creator_randomdatafield.h"
+#include "creator_phonebookwrapper.h"
 
 
-//#include <qmobilityglobal.h> //defines Q_SFW_EXPORT
-//#include <xqservicerequest.h>
-
-#include <QString>
-#include <qglobal.h>
-#include <QTime>
-#include <qtcontacts.h>
-//#include <qcontactmanager.h>
-//#include <qcontactname.h>
-//#include <qcontactid.h>
-//#include <qcontactphonenumber.h>
-//#include <qcontacturl.h>
-//#include <qcontactemailaddress.h>
-//#include <qcontact.h>
-
-//#include <e32base.h>
-//#include <cntdef.h>
-//#include <cntdb.h>
-//#include <cntitem.h>
-//#include <cntfldst.h>
-//#include <cntview.h>
-//#include <cvpbkcontactmanager.h>
-//#include <pbkfields.hrh>
-//#include <cpbk2imagemanager.h>
-//#include <mvpbkcontactstorelistobserver.h>
-//#include <mvpbkbatchoperationobserver.h>
-//#include <mvpbkcontactfindobserver.h>
-//#include <mvpbkcontactobserver.h>
-//#include <mpbk2imageoperationobservers.h>
-//#include <vpbkeng.rsg>
-//#include <cvpbkcontactlinkarray.h>
-//#include <MVPbkContactViewObserver.h>
-QTM_USE_NAMESPACE
 
 class CCreatorEngine;
 class CCreatorModuleBaseParameters;
 
-//class QContactManager;
-//class QContact;
-//class QContactId;
-//class QContactData;
-//class QContactName;
-
-//class MVPbkStoreContact;  //to change
-//class MVPbkContactStore;	//to change
-//class CAsyncWaiter;			//to change - remove
 class CContactDatabase;	
-//class MVPbkContactLinkArray;	//to change
 class CPhonebookParameters;	
-
+class CCreatorPhonebookWrapper;
 
 class CCreatorPhonebook : public CCreatorPhonebookBase 
     {
@@ -99,50 +55,42 @@
     void DeleteAllGroupsL();
     void DeleteAllGroupsCreatedByCreatorL();
     
+    void TestPrintOut(CPhonebookParameters* aParam);
+    
 private:
     
-    void InitializeContactParamsL(/*CCreatorModuleBaseParameters* aParameters*/);
-    TBool IsContactGroupL( QContactLocalId& aLink );
-    void StoreLinksForDeleteL( RArray<TUint32>& aLinks, TUid aStoreUid );														//modify
-    void DeleteContactsL( QList<QContactLocalId>& contacts /*MVPbkContactLinkArray* aContacts, TBool aGroup*/ );																//modify
+    void InitializeContactParamsL();
+    TBool IsContactGroupL( TUint32& aLink );
+    void StoreLinksForDeleteL( RArray<TUint32>& aLinks, TUid aStoreUid );
+    void DeleteContactsL( RArray<TUint32>& aContactsToDelete, TUid aStoreUid );
     void DeleteItemsCreatedWithCreatorL( TUid aStoreUid );
     void DoDeleteItemsCreatedWithCreatorL( TUid aStoreUid, CDictionaryFileStore* aStore );
-    TBool HasOtherThanGroupsL( /*MVPbkContactLinkArray* aContacts */);																			//modify
+    TBool HasOtherThanGroupsL();
     
 
 private:
-	
-    QContactManager* iContactMngr;//CVPbkContactManager* iContactManager;
+	CCreatorPhonebookWrapper* iPhonebookWrapper;
     TInt iOpCounter;
     
     CPhonebookParameters* iParameters;
     
-    static QString iPhoneNumberFields[];
     static TInt iUrlFields[];
     static TInt iEmailFields[];
-    //QList<QContactLocalId> 
-    RArray<TUint32> iContactLinkArray;//CVPbkContactLinkArray* iContactLinkArray;	//modify
-    RArray<TUint32>  iContactsToDelete;	//CVPbkContactLinkArray* iContactsToDelete;	//modify
-    RArray<TUint32>  iContactGroupsToDelete;	//CVPbkContactLinkArray* iContactGroupsToDelete;	//modify
+    
+    RArray<TUint32> iContactLinkArray;
+    RArray<TUint32>  iContactsToDelete;	
+    RArray<TUint32>  iContactGroupsToDelete;	
     
     RArray<TUint32> iPreviousDeleteLinks;
-    //RPointerArray<MVPbkContactLinkArray> iPreviousDeleteLinks;  //modify
     
 private:
 	//new variables
 	/// Ref: the target of the copy
-	QContact* iStore;     //MVPbkContactStore* iStore;  
-    
-    //CAsyncWaiter* iWaiter;	//remove
+  
     
     /// Own: Contact database for this store
     CContactDatabase* iContactDb;    
-    
     //Contacts found in contacts db.
-    QList<QContactId>* iContactResults;//MVPbkContactLinkArray* iContactResults;
-    // Contact groups that are found in the store. These are used in filtering
-    // the groups from the find results.
-    QList<QContactId>* iContactGroupsInStore;//MVPbkContactLinkArray* iContactGroupsInStore;
     
     };
 
@@ -159,15 +107,16 @@
 	TInt CPhonebookParameters::ScriptLinkId() const;
 	void CPhonebookParameters::SetScriptLinkId(TInt aLinkId);
 
-	QList<QContactDetail> iContactFields;//	RPointerArray<CCreatorContactField> iContactFields;
+	TCreatorContactFields iContactFields;
 
-    QString iGroupName;//HBufC*  iGroupName;
+    HBufC*  iGroupName; 	
     TInt iContactsInGroup;
     TInt iNumberOfPhoneNumberFields;
     TInt iNumberOfURLFields;
     TInt iNumberOfEmailAddressFields;
     TInt iContactSetPtr;
-    RArray<TLinkIdParam> iLinkIds; //QList<QContactId> iLinkIds;// For contactgroup. Stores the linked contact ids.
+    RArray<TLinkIdParam> iLinkIds; // For contactgroup. Stores the linked contact ids.
+    
     
 public:
     CPhonebookParameters();
@@ -178,13 +127,12 @@
     };
 
 
-class CCreatorContactField : public CBase//, public MCreatorRandomDataField
+class CCreatorContactField : public CBase				//, public MCreatorRandomDataField
     {
 public:    
     static CCreatorContactField* NewL();
-    QContactDetail CreateContactDetailL(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TInt aRand = KErrNotFound );
-    QContactDetail CreateContactDetailL(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TPtrC aData );
-    void AddFieldToParam( CPhonebookParameters* aParam, QContactDetail aDetail);
+    void AddFieldToParamL( CCreatorEngine* aEngine, CPhonebookParameters* aParam, TInt aType, TInt aRand = KErrNotFound );
+    void AddFieldToParamL( CPhonebookParameters* aParam, TInt aType, TPtrC aContent );
     ~CCreatorContactField();
 private:
     CCreatorContactField();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/engine/inc/creator_phonebookapi.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef CREATOR_PHONEBOOKAPI_H_
+#define CREATOR_PHONEBOOKAPI_H_
+
+#include <QString>
+#include <qglobal.h>
+#include <QTime>
+#include <qtcontacts.h>
+QTM_USE_NAMESPACE
+
+
+class CCreatorPhonebookAPI
+    {
+public:
+    CCreatorPhonebookAPI ();
+    ~CCreatorPhonebookAPI ();
+
+    quint32 saveContact( const QList<QContactDetail>& list );
+    quint32 createGroup( const QString& groupName );
+    int numberOfContacts();
+    int addContactToGroup( QContactLocalId group, QContactLocalId contact );
+    int addToGroup(QContactLocalId group, int amount);
+    bool deleteAllContacts();
+    bool deleteAllContacts( const QString& type );
+    bool deleteContacts( const QList<QContactLocalId>& list );
+    QContact contact( const QContactLocalId& contactId );
+
+private:
+    bool IsContactGroupL( const QContact& contact );
+    
+private:
+    QContactManager* mContactMngr;
+
+    };
+
+#endif /* CREATOR_PHONEBOOKAPI_H_ */
--- a/creator/engine/inc/creator_phonebookbase.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/inc/creator_phonebookbase.h	Thu Jun 24 14:55:55 2010 +0300
@@ -24,7 +24,7 @@
 #include "creator_modulebase.h"
 
 static const TInt KPhonebookFieldLength = 128;
-static const TInt KCreateRandomAmountOfGroups = -9999;
+static const TInt KCreateRandomAmountOfGroups = 1;
 
 class CCreatorModuleBaseParameters;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/engine/inc/creator_phonebookwrapper.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CREATORPHONEBOOKWRAPPER_H__
+#define __CREATORPHONEBOOKWRAPPER_H__
+
+#include "creator_phonebookbase.h"
+#include "creator_randomdatafield.h"
+
+#include <map>
+
+#include "creator_phonebookapi.h"
+
+class CCreatorEngine;
+class CCreatorModuleBaseParameters;
+
+class CContactDatabase;	
+//class CPhonebookWrapperParameters;	
+class CPhonebookParameters;
+
+typedef typename std::map<const TInt, HBufC*> TCreatorContactFields;
+typedef typename std::pair<const TInt, HBufC*> TCreatorContactField;
+
+class CCreatorPhonebookWrapper : public CBase 
+    {
+public:
+	enum ContactDetailType{
+	ELastName,					//0
+	ELastNameReading,			//1
+	EFirstName,
+	EFirstNameReading,
+	EPrefix,
+	ESuffix,					//5
+	ESecondName,
+	ELandPhoneHome,
+	EMobilePhoneHome,
+	EVideoNumberHome,
+	EFaxNumberHome,				//10
+	EVoipHome,
+	EEmailHome,
+	EUrlHome,
+	EAddrLabelHome,
+	EAddrPoHome,				//15
+	EAddrExtHome,
+	EAddrStreetHome,
+	EAddrLocalHome,
+	EAddrRegionHome,
+	EAddrPostCodeHome,			//20
+	EAddrCountryHome,
+	EJobTitle,
+	ECompanyName,
+	ELandPhoneWork,
+	EMobilePhoneWork,			//25
+	EVideoNumberWork,
+	EFaxNumberWork,
+	EVoipWork,
+	EEmailWork,
+	EUrlWork,					//30
+	EAddrLabelWork,
+	EAddrPoWork,
+	EAddrExtWork,
+	EAddrStreetWork,
+	EAddrLocalWork,				//35
+	EAddrRegionWork,
+	EAddrPostCodeWork,
+	EAddrCountryWork,
+	ELandPhoneGen,
+	EMobilePhoneGen,			//40
+	EVideoNumberGen,
+	EFaxNumberGen,
+	EVoipGen,
+	EPoc,
+	ESwis,						//45
+	ESip,
+	EEmailGen,
+	EUrlGen,
+	EAddrLabelGen,
+	EAddrPoGen,					//50
+	EAddrExtGen,
+	EAddrStreetGen,
+	EAddrLocalGen,
+	EAddrRegionGen,
+	EAddrPostCodeGen,			//55
+	EAddrCountryGen,
+	EPagerNumber,
+	EDtmfString,
+	EWVAddress,
+	EDate,						//60
+	ENote,
+	EThumbnailPic,
+	ERingTone,
+	ECallerObjImg,
+	ECallerObjText,				//65
+	EMiddleName,
+	EDepartment,
+	EAsstName,
+	ESpouse,
+	EChildren,					//70
+	EAsstPhone,
+	ECarPhone,
+	EAnniversary,
+	ESyncClass,
+	ELocPrivacy,				//75
+	EGenLabel,
+	ETopContact,
+	EIMPP,
+	};
+
+	
+public: 
+    static CCreatorPhonebookWrapper* NewL();
+    static CCreatorPhonebookWrapper* NewLC();
+    ~CCreatorPhonebookWrapper();
+
+private:
+    CCreatorPhonebookWrapper();
+    void ConstructL();
+
+public:  
+    TUint32 CreateContactEntryL(const TCreatorContactFields& Map);    
+    TUint32 CreateGroupEntryL( HBufC* aGroupName );
+    TInt CreateSubscribedContactEntryL(); 
+
+    /**
+     * NumberOfContacts() will return all contacts from Contact API
+     */
+    TInt NumberOfContacts();
+    
+    TInt AddContactToGroup( TUint32 aGroupId, TUint32 aContact );
+    TInt AddToGroup( TUint32 aGroupId, TInt aAmount );
+    
+    
+    void DeleteAllL();
+    void DeleteAllGroupsL();
+    void DeleteContactsL( RArray<TUint32>& aContactsToDelete, TUid aStoreUid );
+    
+private:
+    QList<QContactDetail> CreateContactDetailsFromParameters( const TCreatorContactFields& Map );
+    QContactDetail CreateContactDetail( QList<QContactDetail>& aContactDetailList,QString aDetail, QString aFieldContext, QString aFieldString, QString aData );
+    void AddFieldToList( QList<QContactDetail>& aDetailList, QContactDetail aDetail);
+    
+    TBool IsContactGroupL( TUint32& aLink );
+    
+    void DeleteItemsCreatedWithCreatorL( TUid aStoreUid );
+    void DoDeleteItemsCreatedWithCreatorL( TUid aStoreUid, CDictionaryFileStore* aStore );
+    TBool HasOtherThanGroupsL();
+    
+
+private:
+	
+    TInt iOpCounter;
+    
+    static QString iPhoneNumberFields[];
+    static TInt iUrlFields[];
+    static TInt iEmailFields[];
+    
+    RArray<TUint32> iContactLinkArray;
+    RArray<TUint32>  iContactsToDelete;	
+    RArray<TUint32>  iContactGroupsToDelete;	
+    
+    RArray<TUint32> iPreviousDeleteLinks;
+    //RPointerArray<MVPbkContactLinkArray> iPreviousDeleteLinks;  //modify
+    
+private:
+	//new variables
+	/// Ref: the target of the copy
+	QContact* iStore;       
+    
+    /// Own: Contact database for this store
+    CContactDatabase* iContactDb;    
+    
+    //Contacts found in contacts db.
+    QList<QContactId>* iContactResults;
+    // Contact groups that are found in the store. These are used in filtering
+    // the groups from the find results.
+    QList<QContactId>* iContactGroupsInStore;
+    
+    CCreatorPhonebookAPI* iPhonebookAPI;
+    };
+
+#endif // __CREATORPHONEBOOKWRAPPER_H__
--- a/creator/engine/inc/creator_virtualphonebook.h	Thu Jun 17 15:34:52 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,297 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-
-#ifndef __CREATORVIRTUALPHONEBOOK_H__
-#define __CREATORVIRTUALPHONEBOOK_H__
-
-#include "engine.h"
-#include "creator_phonebookbase.h"
-#include "creator_randomdatafield.h"
-
-#include <e32base.h>
-#include <cntdef.h>
-#include <cntdb.h>
-#include <cntitem.h>
-#include <cntfldst.h>
-#include <cntview.h>
-#include <cvpbkcontactmanager.h>
-#include <pbkfields.hrh>
-#include <cpbk2imagemanager.h>
-#include <mvpbkcontactstorelistobserver.h>
-#include <mvpbkbatchoperationobserver.h>
-#include <mvpbkcontactfindobserver.h>
-#include <mvpbkcontactobserver.h>
-#include <mpbk2imageoperationobservers.h>
-#include <vpbkeng.rsg>
-#include <cvpbkcontactlinkarray.h>
-#include <MVPbkContactViewObserver.h>
-
-class CCreatorEngine;
-class CCreatorModuleBaseParameters;
-
-class MVPbkStoreContact;
-class MVPbkContactStore;
-class CAsyncWaiter;
-class CContactDatabase;
-class MVPbkContactLinkArray;
-class CVirtualPhonebookParameters;
-
-
-class CCreatorVirtualPhonebook : public CCreatorPhonebookBase,  
-	public MVPbkContactStoreListObserver, public MVPbkBatchOperationObserver,
-	public MVPbkContactFindObserver, public MVPbkContactObserver, public MPbk2ImageSetObserver,
-	public MVPbkSingleContactOperationObserver, public MVPbkContactViewObserver
-    {
-public: 
-    static CCreatorVirtualPhonebook* NewL(CCreatorEngine* aEngine);
-    static CCreatorVirtualPhonebook* NewLC(CCreatorEngine* aEngine);
-    ~CCreatorVirtualPhonebook();
-
-private:
-    CCreatorVirtualPhonebook();
-    void ConstructL(CCreatorEngine* aEngine); // from MCreatorModuleBase
-
-public:  
-    TInt CreateContactEntryL(CCreatorModuleBaseParameters *aParameters);    
-    TInt CreateGroupEntryL(CCreatorModuleBaseParameters *aParameters);
-    TInt CreateSubscribedContactEntryL(CCreatorModuleBaseParameters *aParameters); 
-
-    void AddFieldToContactItemL(MVPbkStoreContact& aItem, TPbkFieldId aFieldId, const TDesC& aFieldText);
-    void AddFieldToContactItemL(MVPbkStoreContact& aItem, TPbkFieldId aFieldId, const TDesC8& aFieldText);
-    void AddFieldToContactItemL(MVPbkStoreContact& aItem, TPbkFieldId aFieldId, const TTime& aFieldText);
-    
-    void AddImageToContactL(MVPbkStoreContact& aContact, TInt aFieldResId, const TDesC& aFileName);
-    TBool IsActive();
-    void CancelOperation();
-    void DeleteAllL();
-    void DeleteAllCreatedByCreatorL();
-    void DeleteAllGroupsL();
-    void DeleteAllGroupsCreatedByCreatorL();
-    
-private:
-    void CompactPbkDatabaseL(TBool aCompressImmediately=EFalse);    
-    void AddFieldToParamsL(TInt aFieldType, const TDesC& aData);
-    void AddFieldToParamsL(TInt aFieldType, const TDesC8& aData);
-    void AddFieldToParamsL(TInt aFieldType, const TTime& aData);    
-    void InitializeContactParamsL(/*CCreatorModuleBaseParameters* aParameters*/);
-    TBool IsContactGroupL(const MVPbkContactLink& aLink);
-    void StoreLinksForDeleteL( MVPbkContactLinkArray& aLinks, TUid aStoreUid );
-    void DeleteContactsL( MVPbkContactLinkArray* aContacts, TBool aGroup );
-    void DeleteItemsCreatedWithCreatorL( TUid aStoreUid );
-    void DoDeleteItemsCreatedWithCreatorL( TUid aStoreUid, CDictionaryFileStore* aStore );
-    TBool HasOtherThanGroupsL( MVPbkContactLinkArray* aContacts );
-
-public: // MVPbkSingleContactOperationObserver
-    
-    void VPbkSingleContactOperationComplete(
-                    MVPbkContactOperationBase& aOperation,
-                    MVPbkStoreContact* aContact );
-    void VPbkSingleContactOperationFailed(
-                    MVPbkContactOperationBase& aOperation, 
-                    TInt aError );
-
-private: // MVPbkContactViewObserver
-    
-    void ContactViewReady( MVPbkContactViewBase& aView );
-    void ContactViewUnavailable(
-            MVPbkContactViewBase& aView );
-    void ContactAddedToView(
-            MVPbkContactViewBase& aView, 
-            TInt aIndex, 
-            const MVPbkContactLink& aContactLink );
-    void ContactRemovedFromView(
-            MVPbkContactViewBase& aView, 
-            TInt aIndex, 
-            const MVPbkContactLink& aContactLink );
-    void ContactViewError(
-            MVPbkContactViewBase& aView, 
-            TInt aError, 
-            TBool aErrorNotified );
-
-private:
-	CVPbkContactManager* iContactManager;
-    TInt iOpCounter;
-
-    CVirtualPhonebookParameters* iParameters;
-    
-    static TInt iPhoneNumberFields[];
-    static TInt iUrlFields[];
-    static TInt iEmailFields[];
-    CVPbkContactLinkArray* iContactLinkArray;
-    CVPbkContactLinkArray* iContactsToDelete;
-    CVPbkContactLinkArray* iContactGroupsToDelete;
-    RPointerArray<MVPbkContactLinkArray> iPreviousDeleteLinks;   
-    
-private:
-	//new variables
-	/// Ref: the target of the copy
-	MVPbkContactStore* iStore;
-    
-    CAsyncWaiter* iWaiter;	
-    
-    /// Own: Contact database for this store
-    CContactDatabase* iContactDb;    
-    
-    //Contacts found in contacts db.
-    MVPbkContactLinkArray* iContactResults;
-    // Contact groups that are found in the store. These are used in filtering
-    // the groups from the find results.
-    MVPbkContactLinkArray* iContactGroupsInStore;
-    
-    // Phonebook asynchronous operation
-    MVPbkContactOperationBase* iOperation;
-    
-    // Flag to indicate whether it is required to notify
-    // iEngine after operation is complete. This happens
-    // when user has cancelled the operation during 
-    // iOperation exists.
-    TBool iCancelCbRequested;
-
-public:
-	//Observer implentation from MVPbkContactStoreListObserver
-	void OpenComplete();
-
-	//observer implentation from MVPbkContactStoreObserver
-
-	void StoreReady(MVPbkContactStore& aContactStore);
-
-	void StoreUnavailable(MVPbkContactStore& aContactStore, 
-	        TInt aReason);
-
-	void HandleStoreEventL(
-	        MVPbkContactStore& aContactStore, 
-	        TVPbkContactStoreEvent aStoreEvent);
-
-	 TAny* ContactStoreObserverExtension(TUid aExtensionUid); 
-	        	
-	
-
-    
-    
-public:
-	//Observer implementation for MVPbkBatchOperationObserver
-
-	void StepComplete( 
-	        MVPbkContactOperationBase& aOperation,
-	        TInt aStepSize );
-	
-	TBool StepFailed(
-	        MVPbkContactOperationBase& aOperation,
-	        TInt aStepSize, TInt aError );
-	
-	void OperationComplete( 
-	        MVPbkContactOperationBase& aOperation );
-	
-	TAny* BatchOperationObserverExtension( 
-	        TUid aExtensionUid ) ;
-
-	
-	//--------------------------------------------
-	//Observer implementation for MVPbkContactFindObserver
-	public: // Interface
-
-	        void FindCompleteL( MVPbkContactLinkArray* aResults );
-
-	        void FindFailed( TInt aError );
-
-	        TAny* ContactFindObserverExtension( 
-	                TUid aExtensionUid );	
-	
-	
-	
-   	//--------------------------------------------
-   	//Observer implementation for MVPbkContactObserver
-
-	public:
-		void ContactOperationCompleted(TContactOpResult aResult);
-	
-		void ContactOperationFailed
-			(TContactOp aOpCode, TInt aErrorCode, TBool aErrorNotified);
-	
-	    TAny* ContactObserverExtension(TUid aExtensionUid) ;
-	     //~MVPbkContactObserver();	        
-	        
-	//--------------------------------------------
-	// Implementation of MPbk2ImageSetObserver:
-	public:
-	    void Pbk2ImageSetComplete(MPbk2ImageOperation& aOperation);
-	    void Pbk2ImageSetFailed(MPbk2ImageOperation& aOperation, TInt aError );	        
-    };
-
-class CCreatorContactFieldImpl;
-class CCreatorContactField : public CBase, public MCreatorRandomDataField
-    {
-public:    
-    static CCreatorContactField* NewL(TInt aFieldType, const TDesC& aData);
-    static CCreatorContactField* NewL(TInt aFieldType, const TDesC8& aData);
-    static CCreatorContactField* NewL(TInt aFieldType, const TTime& aData);
-    
-    static CCreatorContactField* NewL(TInt aFieldType, TRandomLengthType aRandomLenType, TInt aRandomLen);
-    
-    ~CCreatorContactField();    
-    TInt FieldType();
-    virtual void AddToContactL(CCreatorEngine* aEngine, MVPbkStoreContact& aContact, CCreatorVirtualPhonebook* aVPbk);
-    virtual void SetRandomParametersL(  MCreatorRandomDataField::TRandomLengthType aRandomLenType = MCreatorRandomDataField::ERandomLengthDefault, 
-                                TInt aRandomLen = 0 );
-    virtual void ParseL(CCommandParser* parser);
-    
-private:    
-    CCreatorContactField();
-    void ConstructL(TInt aFieldType, const TDesC& aData);
-    void ConstructL(TInt aFieldType, const TDesC8& aData);
-    void ConstructL(TInt aFieldType, const TTime& aData);
-    CCreatorContactFieldImpl* pImpl;    
-    };
-    
-    
-/**
- * Virtual phonebook parameters
- */
-    
-
-class CVirtualPhonebookParameters : public CCreatorModuleBaseParameters
-    {
-public:
-	void ParseL(CCommandParser* parser, TParseParams /*aCase = 0*/);
-	
-	TInt CVirtualPhonebookParameters::ScriptLinkId() const;
-	void CVirtualPhonebookParameters::SetScriptLinkId(TInt aLinkId);
-	RPointerArray<CCreatorContactField> iContactFields;
-
-    HBufC*  iGroupName;
-    TInt    iContactsInGroup;
-    TInt iNumberOfPhoneNumberFields;
-    TInt iNumberOfURLFields;
-    TInt iNumberOfEmailAddressFields;
-    TInt iContactSetPtr;
-    RArray<TLinkIdParam> iLinkIds; // For contactgroup. Stores the linked contact ids.
-    
-public:
-    CVirtualPhonebookParameters();
-    ~CVirtualPhonebookParameters();
-    
-private:
-    TInt iLinkId; // For contact. Stores the contact id
-    };
-
-
-
-#endif // __CREATORVIRTUALPHONEBOOK_H__
--- a/creator/engine/src/creator_accesspoint.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/src/creator_accesspoint.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -18,7 +18,7 @@
 
 
 
-#include "creator_accesspoint.h" 
+//#include "creator_accesspoint.h" 
 #include "creator_traces.h"
 #include <ApListItemList.h>
 #include <ApListItem.h> 
--- a/creator/engine/src/creator_connectionmethodelement.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/src/creator_connectionmethodelement.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -20,7 +20,7 @@
 #include "enginewrapper.h"
 #include "creator_connectionmethodelement.h"
 #include "creator_traces.h"
-#include "creator_accesspoint.h"
+//#include "creator_accesspoint.h"
 
 
 using namespace creatorconnectionmethod;
--- a/creator/engine/src/creator_contactelement.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/src/creator_contactelement.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -42,99 +42,98 @@
 {
 public:
     TPtrC iElementName;
-    QString iDetail;
-    QString iContext;
-    QString  iFieldCode;
+    TInt  iFieldCode;
     TContactFieldDataType iDataType;
 };
-//*********************************************************************************
 FieldMapping fieldMappingTbl[] = {
-       {TPtrC(KFirstname), (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactName::FieldFirstName).operator QString() /*R_VPBK_FIELD_TYPE_FIRSTNAME*/, EDataTypeText},
-       {TPtrC(KLastname), (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactName::FieldLastName).operator QString() /*R_VPBK_FIELD_TYPE_LASTNAME*/, EDataTypeText},
-       {TPtrC(KPrefix), (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactName::FieldPrefix).operator QString()/*R_VPBK_FIELD_TYPE_PREFIX*/, EDataTypeText},
-       {TPtrC(KSuffix), (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactName::FieldSuffix).operator QString()/*R_VPBK_FIELD_TYPE_SUFFIX*/, EDataTypeText},
-       {TPtrC(KSecondname), (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactName::FieldMiddleName).operator QString()/*R_VPBK_FIELD_TYPE_SECONDNAME*/, EDataTypeText},
-       {TPtrC(KLandphoneHome), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactPhoneNumber::SubTypeLandline).operator QString()/*R_VPBK_FIELD_TYPE_LANDPHONEHOME*/, EDataTypeText},
-       
-       {TPtrC(KMobilephoneHome), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactPhoneNumber::SubTypeMobile).operator QString()/*R_VPBK_FIELD_TYPE_MOBILEPHONEHOME*/, EDataTypeText},
-       {TPtrC(KVideonumberHome), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactPhoneNumber::SubTypeVideo).operator QString()/*R_VPBK_FIELD_TYPE_VIDEONUMBERHOME*/, EDataTypeText},
-       {TPtrC(KFaxnumberHome), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactPhoneNumber::SubTypeFacsimile).operator QString()/*R_VPBK_FIELD_TYPE_FAXNUMBERHOME*/, EDataTypeText},
-       //{TPtrC(KVoipHome), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactPhoneNumber::SubType).operator QString()/*R_VPBK_FIELD_TYPE_VOIPHOME*/, EDataTypeText},
-       {TPtrC(KEmailHome), (QContactEmailAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),""/*R_VPBK_FIELD_TYPE_EMAILHOME*/, EDataTypeText},
-       {TPtrC(KUrlHome), (QContactUrl::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactUrl::SubTypeHomePage).operator QString()/*R_VPBK_FIELD_TYPE_URLHOME*/, EDataTypeText},
-       //{TPtrC(KAddrlabelHome), R_VPBK_FIELD_TYPE_ADDRLABELHOME, EDataTypeText},
-       {TPtrC(KAddrpoHome), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactAddress::FieldPostOfficeBox).operator QString()/*R_VPBK_FIELD_TYPE_ADDRPOHOME*/, EDataTypeText},
+       {TPtrC(KFirstname), CCreatorPhonebookWrapper::EFirstName, EDataTypeText},
+       {TPtrC(KLastname), CCreatorPhonebookWrapper::ELastName, EDataTypeText},
+       {TPtrC(KFirstnameReading), CCreatorPhonebookWrapper::EFirstNameReading, EDataTypeText},
+       {TPtrC(KLastnameReading), CCreatorPhonebookWrapper::ELastNameReading, EDataTypeText},
+       {TPtrC(KPrefix), CCreatorPhonebookWrapper::EPrefix, EDataTypeText},
+       {TPtrC(KSuffix), CCreatorPhonebookWrapper::ESuffix, EDataTypeText},
+       {TPtrC(KSecondname), CCreatorPhonebookWrapper::ESecondName, EDataTypeText},
+       {TPtrC(KLandphoneHome), CCreatorPhonebookWrapper::ELandPhoneHome, EDataTypeText},
        
-      // {TPtrC(KAddrextHome), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactAddress::Field).operator QString()/*R_VPBK_FIELD_TYPE_ADDREXTHOME*/, EDataTypeText},
-       {TPtrC(KAddrstreetHome), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactAddress::FieldStreet).operator QString()/*R_VPBK_FIELD_TYPE_ADDRSTREETHOME*/, EDataTypeText},
-       {TPtrC(KAddrlocalHome), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactAddress::FieldLocality).operator QString()/*R_VPBK_FIELD_TYPE_ADDRLOCALHOME*/, EDataTypeText},
-       {TPtrC(KAddrregionHome), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactAddress::FieldRegion).operator QString()/*R_VPBK_FIELD_TYPE_ADDRREGIONHOME*/, EDataTypeText},
-       {TPtrC(KAddrpostcodeHome), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactAddress::FieldPostcode).operator QString()/*R_VPBK_FIELD_TYPE_ADDRPOSTCODEHOME*/, EDataTypeText},
-       {TPtrC(KAddrcountryHome), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactAddress::FieldCountry).operator QString()/*R_VPBK_FIELD_TYPE_ADDRCOUNTRYHOME*/, EDataTypeText},
-       {TPtrC(KJobtitle), (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactOrganization::FieldTitle).operator QString()/*R_VPBK_FIELD_TYPE_JOBTITLE*/, EDataTypeText},
-       {TPtrC(KCompanyname), (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactOrganization::FieldName).operator QString()/*R_VPBK_FIELD_TYPE_COMPANYNAME*/, EDataTypeText},
+       {TPtrC(KMobilephoneHome), CCreatorPhonebookWrapper::EMobilePhoneHome, EDataTypeText},
+       {TPtrC(KVideonumberHome), CCreatorPhonebookWrapper::EVideoNumberHome, EDataTypeText},
+       {TPtrC(KFaxnumberHome), CCreatorPhonebookWrapper::EFaxNumberHome, EDataTypeText},
+       {TPtrC(KVoipHome), CCreatorPhonebookWrapper::EVoipHome, EDataTypeText},
+       {TPtrC(KEmailHome), CCreatorPhonebookWrapper::EEmailHome, EDataTypeText},
+       {TPtrC(KUrlHome), CCreatorPhonebookWrapper::EUrlHome, EDataTypeText},
+       {TPtrC(KAddrlabelHome), CCreatorPhonebookWrapper::EAddrLabelHome, EDataTypeText},
+       {TPtrC(KAddrpoHome), CCreatorPhonebookWrapper::EAddrPoHome, EDataTypeText},
        
-       {TPtrC(KLandphoneWork), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactPhoneNumber::SubTypeLandline).operator QString()/*R_VPBK_FIELD_TYPE_LANDPHONEWORK*/, EDataTypeText},
-       {TPtrC(KMobilephoneWork), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactPhoneNumber::SubTypeMobile).operator QString()/*R_VPBK_FIELD_TYPE_MOBILEPHONEWORK*/, EDataTypeText},
-       {TPtrC(KVideonumberWork), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactPhoneNumber::SubTypeVideo).operator QString()/*R_VPBK_FIELD_TYPE_VIDEONUMBERWORK*/, EDataTypeText},
-       {TPtrC(KFaxnumberWork), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactPhoneNumber::SubTypeFacsimile).operator QString()/*R_VPBK_FIELD_TYPE_FAXNUMBERWORK*/, EDataTypeText},
-       //{TPtrC(KVoipWork), R_VPBK_FIELD_TYPE_VOIPWORK, EDataTypeText},
-       {TPtrC(KEmailWork), (QContactEmailAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),""/*R_VPBK_FIELD_TYPE_EMAILWORK*/, EDataTypeText},
-       {TPtrC(KUrlWork), (QContactUrl::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactUrl::SubTypeHomePage).operator QString()/*R_VPBK_FIELD_TYPE_URLWORK*/, EDataTypeText},
-       //{TPtrC(KAddrlabelWork), R_VPBK_FIELD_TYPE_ADDRLABELWORK, EDataTypeText},
+       {TPtrC(KAddrextHome), CCreatorPhonebookWrapper::EAddrExtHome, EDataTypeText},
+       {TPtrC(KAddrstreetHome), CCreatorPhonebookWrapper::EAddrStreetHome, EDataTypeText},
+       {TPtrC(KAddrlocalHome), CCreatorPhonebookWrapper::EAddrLocalHome, EDataTypeText},
+       {TPtrC(KAddrregionHome), CCreatorPhonebookWrapper::EAddrRegionHome, EDataTypeText},
+       {TPtrC(KAddrpostcodeHome), CCreatorPhonebookWrapper::EAddrPostCodeHome, EDataTypeText},
+       {TPtrC(KAddrcountryHome), CCreatorPhonebookWrapper::EAddrCountryHome, EDataTypeText},
+       {TPtrC(KJobtitle), CCreatorPhonebookWrapper::EJobTitle, EDataTypeText},
+       {TPtrC(KCompanyname), CCreatorPhonebookWrapper::ECompanyName, EDataTypeText},
        
-       {TPtrC(KAddrpoWork), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactAddress::FieldPostOfficeBox).operator QString()/*R_VPBK_FIELD_TYPE_ADDRPOWORK*/, EDataTypeText},
-       //{TPtrC(KAddrextWork), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactAddress::FieldPostOfficeBox).operator QString()/*R_VPBK_FIELD_TYPE_ADDREXTWORK*/, EDataTypeText},
-       {TPtrC(KAddrstreetWork), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactAddress::FieldStreet).operator QString()/*R_VPBK_FIELD_TYPE_ADDRSTREETWORK*/, EDataTypeText},
-       {TPtrC(KAddrlocalWork), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactAddress::FieldLocality).operator QString()/*R_VPBK_FIELD_TYPE_ADDRLOCALWORK*/, EDataTypeText},
-       {TPtrC(KAddrregionWork), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactAddress::FieldRegion).operator QString()/*R_VPBK_FIELD_TYPE_ADDRREGIONWORK*/, EDataTypeText},
-       {TPtrC(KAddrpostcodeWork), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactAddress::FieldPostcode).operator QString()/*R_VPBK_FIELD_TYPE_ADDRPOSTCODEWORK*/, EDataTypeText},
-       {TPtrC(KAddrcountryWork), (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactAddress::FieldCountry).operator QString()/*R_VPBK_FIELD_TYPE_ADDRCOUNTRYWORK*/, EDataTypeText},
+       {TPtrC(KLandphoneWork), CCreatorPhonebookWrapper::ELandPhoneWork, EDataTypeText},
+       {TPtrC(KMobilephoneWork), CCreatorPhonebookWrapper::EMobilePhoneWork, EDataTypeText},
+       {TPtrC(KVideonumberWork), CCreatorPhonebookWrapper::EVideoNumberWork, EDataTypeText},
+       {TPtrC(KFaxnumberWork), CCreatorPhonebookWrapper::EFaxNumberWork, EDataTypeText},
+       {TPtrC(KVoipWork), CCreatorPhonebookWrapper::EVoipWork, EDataTypeText},
+       {TPtrC(KEmailWork), CCreatorPhonebookWrapper::EEmailWork, EDataTypeText},
+       {TPtrC(KUrlWork), CCreatorPhonebookWrapper::EUrlWork, EDataTypeText},
+       {TPtrC(KAddrlabelWork), CCreatorPhonebookWrapper::EAddrLabelWork, EDataTypeText},
        
-       {TPtrC(KLandphoneGen), (QContactPhoneNumber::DefinitionName).operator QString(), "",(QContactPhoneNumber::SubTypeLandline).operator QString(), EDataTypeText},
-       {TPtrC(KMobilephoneGen), (QContactPhoneNumber::DefinitionName).operator QString(), "",(QContactPhoneNumber::SubTypeMobile).operator QString(), EDataTypeText},
-       {TPtrC(KVideonumberGen), (QContactPhoneNumber::DefinitionName).operator QString(), "",(QContactPhoneNumber::SubTypeVideo).operator QString(), EDataTypeText},
-       {TPtrC(KFaxnumberGen), (QContactPhoneNumber::DefinitionName).operator QString(), "",(QContactPhoneNumber::SubTypeFacsimile).operator QString(), EDataTypeText},
-     //  {TPtrC(KVoipGen), R_VPBK_FIELD_TYPE_VOIPGEN, EDataTypeText},
-     //  {TPtrC(KPoc), R_VPBK_FIELD_TYPE_POC, EDataTypeText},
-     //  {TPtrC(KSwis), R_VPBK_FIELD_TYPE_SWIS, EDataTypeText},
-     //  {TPtrC(KSip), R_VPBK_FIELD_TYPE_SIP, EDataTypeText},
-       {TPtrC(KEmailGen), (QContactEmailAddress::DefinitionName).operator QString(), "","", EDataTypeText},
+       {TPtrC(KAddrpoWork), CCreatorPhonebookWrapper::EAddrPoWork, EDataTypeText},
+       {TPtrC(KAddrextWork), CCreatorPhonebookWrapper::EAddrExtWork, EDataTypeText},
+       {TPtrC(KAddrstreetWork), CCreatorPhonebookWrapper::EAddrStreetWork, EDataTypeText},
+       {TPtrC(KAddrlocalWork), CCreatorPhonebookWrapper::EAddrLocalWork, EDataTypeText},
+       {TPtrC(KAddrregionWork), CCreatorPhonebookWrapper::EAddrRegionWork, EDataTypeText},
+       {TPtrC(KAddrpostcodeWork), CCreatorPhonebookWrapper::EAddrPostCodeWork, EDataTypeText},
+       {TPtrC(KAddrcountryWork), CCreatorPhonebookWrapper::EAddrCountryWork, EDataTypeText},
+       {TPtrC(KLandphoneGen), CCreatorPhonebookWrapper::ELandPhoneGen, EDataTypeText},
        
-       {TPtrC(KUrlGen), (QContactUrl::DefinitionName).operator QString(), "","", EDataTypeText},
-     //  {TPtrC(KAddrlabelGen), R_VPBK_FIELD_TYPE_ADDRLABELGEN, EDataTypeText},
-       {TPtrC(KAddrpoGen), (QContactAddress::DefinitionName).operator QString(), "",(QContactAddress::FieldPostOfficeBox).operator QString()/*R_VPBK_FIELD_TYPE_ADDRPOGEN*/, EDataTypeText},
-     //  {TPtrC(KAddrextGen), R_VPBK_FIELD_TYPE_ADDREXTGEN, EDataTypeText},
-       {TPtrC(KAddrstreetGen), (QContactAddress::DefinitionName).operator QString(), "" , (QContactAddress::FieldStreet).operator QString()/*R_VPBK_FIELD_TYPE_ADDRSTREETGEN*/, EDataTypeText},
-       {TPtrC(KAddrlocalGen), (QContactAddress::DefinitionName).operator QString(), "" , (QContactAddress::FieldLocality).operator QString()/*R_VPBK_FIELD_TYPE_ADDRLOCALGEN*/, EDataTypeText},
-       {TPtrC(KAddrregionGen), (QContactAddress::DefinitionName).operator QString(), "" , (QContactAddress::FieldRegion).operator QString()/*R_VPBK_FIELD_TYPE_ADDRREGIONGEN*/, EDataTypeText},
-       {TPtrC(KAddrpostcodeGen), (QContactAddress::DefinitionName).operator QString(), "" , (QContactAddress::FieldPostcode).operator QString()/*R_VPBK_FIELD_TYPE_ADDRPOSTCODEGEN*/, EDataTypeText},
-       {TPtrC(KAddrcountryGen), (QContactAddress::DefinitionName).operator QString(), "" , (QContactAddress::FieldCountry).operator QString()/*R_VPBK_FIELD_TYPE_ADDRCOUNTRYGEN*/, EDataTypeText},
+       {TPtrC(KMobilephoneGen), CCreatorPhonebookWrapper::EMobilePhoneGen, EDataTypeText},
+       {TPtrC(KVideonumberGen), CCreatorPhonebookWrapper::EVideoNumberGen, EDataTypeText},
+       {TPtrC(KFaxnumberGen), CCreatorPhonebookWrapper::EFaxNumberGen, EDataTypeText},
+       {TPtrC(KVoipGen), CCreatorPhonebookWrapper::EVoipGen, EDataTypeText},
+       {TPtrC(KPoc), CCreatorPhonebookWrapper::EPoc, EDataTypeText},
+       {TPtrC(KSwis), CCreatorPhonebookWrapper::ESwis, EDataTypeText},
+       {TPtrC(KSip), CCreatorPhonebookWrapper::ESip, EDataTypeText},
+       {TPtrC(KEmailGen), CCreatorPhonebookWrapper::EEmailGen, EDataTypeText},
        
-       {TPtrC(KPagerNumber),(QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactPhoneNumber::SubTypePager).operator QString()/* R_VPBK_FIELD_TYPE_PAGERNUMBER*/, EDataTypeText},
-       {TPtrC(KDtmfString), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactPhoneNumber::SubTypeDtmfMenu).operator QString()/* R_VPBK_FIELD_TYPE_DTMFSTRING*/, EDataTypeText},
-     //  {TPtrC(KWvAddress), R_VPBK_FIELD_TYPE_WVADDRESS, EDataTypeText},
-       {TPtrC(KDate), (QContactBirthday::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactBirthday::FieldBirthday).operator QString()/* R_VPBK_FIELD_TYPE_DATE*/, EDataTypeDateTime},
-       {TPtrC(KNote), (QContactNote::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactNote::FieldNote).operator QString()/* R_VPBK_FIELD_TYPE_NOTE*/, EDataTypeText},
-       {TPtrC(KThumbnailPath), (QContactAvatar::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactAvatar::SubTypeImage).operator QString()/* R_VPBK_FIELD_TYPE_THUMBNAILPIC*/, EDataTypeText},
-      // {TPtrC(KThumbnailId), R_VPBK_FIELD_TYPE_THUMBNAILPIC, EDataTypeText},
-      // {TPtrC(KRingTone),  R_VPBK_FIELD_TYPE_RINGTONE, EDataTypeText},
-      // {TPtrC(KRingToneId), R_VPBK_FIELD_TYPE_RINGTONE, EDataTypeText},
+       {TPtrC(KUrlGen), CCreatorPhonebookWrapper::EUrlGen, EDataTypeText},
+       {TPtrC(KAddrlabelGen), CCreatorPhonebookWrapper::EAddrLabelGen, EDataTypeText},
+       {TPtrC(KAddrpoGen), CCreatorPhonebookWrapper::EAddrPoGen, EDataTypeText},
+       {TPtrC(KAddrextGen), CCreatorPhonebookWrapper::EAddrExtGen, EDataTypeText},
+       {TPtrC(KAddrstreetGen), CCreatorPhonebookWrapper::EAddrStreetGen, EDataTypeText},
+       {TPtrC(KAddrlocalGen), CCreatorPhonebookWrapper::EAddrLocalGen, EDataTypeText},
+       {TPtrC(KAddrregionGen), CCreatorPhonebookWrapper::EAddrRegionGen, EDataTypeText},
+       {TPtrC(KAddrpostcodeGen), CCreatorPhonebookWrapper::EAddrPostCodeGen, EDataTypeText},
        
-       //{TPtrC(KCallerobjImg), R_VPBK_FIELD_TYPE_CALLEROBJIMG, EDataTypeText},
-      // {TPtrC(KCallerobjText), R_VPBK_FIELD_TYPE_CALLEROBJTEXT, EDataTypeText},
-       {TPtrC(KMiddlename), (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactName::FieldMiddleName).operator QString()/*R_VPBK_FIELD_TYPE_MIDDLENAME*/, EDataTypeText},
-       {TPtrC(KDepartment), (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactOrganization::FieldDepartment).operator QString()/*R_VPBK_FIELD_TYPE_DEPARTMENT*/, EDataTypeText},
-       {TPtrC(KAsstname), (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactOrganization::FieldAssistantName).operator QString()/*R_VPBK_FIELD_TYPE_ASSTNAME*/, EDataTypeText},
-       {TPtrC(KSpouse), (QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactFamily::FieldSpouse).operator QString()/* R_VPBK_FIELD_TYPE_SPOUSE*/, EDataTypeText},
-       {TPtrC(KChildren), (QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactFamily::FieldChildren).operator QString()/*R_VPBK_FIELD_TYPE_CHILDREN, EDataTypeText},
-       {TPtrC(KAsstphone), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactPhoneNumber::SubTypeAssistant).operator QString()/* R_VPBK_FIELD_TYPE_ASSTPHONE*/, EDataTypeText},
+       {TPtrC(KAddrcountryGen), CCreatorPhonebookWrapper::EAddrCountryGen, EDataTypeText},
+       {TPtrC(KPagerNumber), CCreatorPhonebookWrapper::EPagerNumber, EDataTypeText},
+       {TPtrC(KDtmfString), CCreatorPhonebookWrapper::EDtmfString, EDataTypeText},
+       {TPtrC(KWvAddress), CCreatorPhonebookWrapper::EWVAddress, EDataTypeText},
+       {TPtrC(KDate), CCreatorPhonebookWrapper::EDate, EDataTypeDateTime},
+       {TPtrC(KNote), CCreatorPhonebookWrapper::ENote, EDataTypeText},
+       {TPtrC(KThumbnailPath), CCreatorPhonebookWrapper::EThumbnailPic, EDataTypeText},
+       {TPtrC(KThumbnailId), CCreatorPhonebookWrapper::EThumbnailPic, EDataTypeText},
+       {TPtrC(KRingTone), CCreatorPhonebookWrapper::ERingTone, EDataTypeText},
+       {TPtrC(KRingToneId), CCreatorPhonebookWrapper::ERingTone, EDataTypeText},
        
-       {TPtrC(KCarphone), (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactPhoneNumber::SubTypeCar).operator QString()/* R_VPBK_FIELD_TYPE_CARPHONE*/, EDataTypeText},
-       {TPtrC(KAnniversary), (QContactAnniversary::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(),(QContactAnniversary::SubTypeEmployment).operator QString()/*R_VPBK_FIELD_TYPE_ANNIVERSARY*/, EDataTypeDateTime},
-     //  {TPtrC(KSyncclass), R_VPBK_FIELD_TYPE_SYNCCLASS, EDataTypeText},
-     //  {TPtrC(KLocPrivacy), R_VPBK_FIELD_TYPE_LOCPRIVACY, EDataTypeText},
-       {TPtrC(KGenlabel), (QContactDisplayLabel::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),(QContactDisplayLabel::FieldLabel).operator QString()/*R_VPBK_FIELD_TYPE_GENLABEL*/, EDataTypeText}
+       {TPtrC(KCallerobjImg), CCreatorPhonebookWrapper::ECallerObjImg, EDataTypeText},
+       {TPtrC(KCallerobjText), CCreatorPhonebookWrapper::ECallerObjText, EDataTypeText},
+       {TPtrC(KMiddlename), CCreatorPhonebookWrapper::EMiddleName, EDataTypeText},
+       {TPtrC(KDepartment), CCreatorPhonebookWrapper::EDepartment, EDataTypeText},
+       {TPtrC(KAsstname), CCreatorPhonebookWrapper::EAsstName, EDataTypeText},
+       {TPtrC(KSpouse), CCreatorPhonebookWrapper::ESpouse, EDataTypeText},
+       {TPtrC(KChildren), CCreatorPhonebookWrapper::EChildren, EDataTypeText},
+       {TPtrC(KAsstphone), CCreatorPhonebookWrapper::EAsstPhone, EDataTypeText},
+       
+       {TPtrC(KCarphone), CCreatorPhonebookWrapper::ECarPhone, EDataTypeText},
+       {TPtrC(KAnniversary), CCreatorPhonebookWrapper::EAnniversary, EDataTypeDateTime},
+       {TPtrC(KSyncclass), CCreatorPhonebookWrapper::ESyncClass, EDataTypeText},
+       {TPtrC(KLocPrivacy), CCreatorPhonebookWrapper::ELocPrivacy, EDataTypeText},
+       {TPtrC(KGenlabel), CCreatorPhonebookWrapper::EGenLabel, EDataTypeText}
 };
 
 //*********************************************************************************
@@ -220,25 +219,19 @@
                     
                         if( content == TPtrC(KEmpty) || content == TPtrC(KNullDesC) )
                             {
-                        // random
-							CleanupStack::PushL( field );
-							QContactDetail cntDetail = field->CreateContactDetailL(iEngine,param,mapping.iDetail,mapping.iContext,mapping.iFieldCode, KErrNotFound );
-                            if(!cntDetail.isEmpty())
-                            	{
-								field->AddFieldToParam( param, cntDetail ); //it will do "param->iContactFields.AppendL(field);"
-                            	}
-                            CleanupStack::Pop( field );
+							CCreatorContactField* field = CCreatorContactField::NewL();
+                        	CleanupStack::PushL(field);
+                        	field->AddFieldToParamL( iEngine,param, mapping.iFieldCode, KErrNotFound );
+                          	CleanupStack::Pop(field);
                             }
                         else
-                            {
-							CleanupStack::PushL( field );
-                        	QContactDetail cntDetail = field->CreateContactDetailL(iEngine,param,mapping.iDetail,mapping.iContext,mapping.iFieldCode, content );
-                            if(!cntDetail.isEmpty())
-                            	{
-                        		field->AddFieldToParam( param, cntDetail ); //it will do "param->iContactFields.AppendL(field);"
-                                }
-                            CleanupStack::Pop( field );
-                            }
+                        	{
+							CCreatorContactField* field = CCreatorContactField::NewL();
+                            CleanupStack::PushL(field);
+                            field->AddFieldToParamL( param, mapping.iFieldCode, content );
+                            CleanupStack::Pop(field);
+                        	}
+                        
 
                         break;
                         
@@ -258,16 +251,12 @@
                     // Skip thumbnail and ringtone IDs, since they are duplicates with thumbnailpath and ringtonepath
                     continue;
                     }
+                CCreatorContactField* field = CCreatorContactField::NewL();
+                CleanupStack::PushL(field);
+                field->AddFieldToParamL( iEngine,param, fieldMappingTbl[i].iFieldCode, KErrNotFound );
+                CleanupStack::Pop(field);
+                }
                 
-                CCreatorContactField* field = CCreatorContactField::NewL();
-                CleanupStack::PushL( field );
-                QContactDetail cntDetail = field->CreateContactDetailL(iEngine,param,fieldMappingTbl[i].iDetail,fieldMappingTbl[i].iContext,fieldMappingTbl[i].iFieldCode, KErrNotFound );
-                if(!cntDetail.isEmpty())
-                	{
-					field->AddFieldToParam( param, cntDetail ); //it will do "param->iContactFields.AppendL(field);"
-                	}
-                CleanupStack::Pop( field );
-                }
             }
         iEngine->AppendToCommandArrayL(ECmdCreatePhoneBookEntryContacts, param);
         iParameters.AppendL(param); // Save the pointer to the parametes. 
@@ -384,11 +373,11 @@
             
             if( groupNameAttr )
                 {
-                param ->iGroupName = QString::fromUtf16(groupNameAttr->Value().Ptr(), groupNameAttr->Value().Length()); 	//param->iGroupName->Des().Copy( groupNameAttr->Value() );
+				param->iGroupName->Des().Copy( groupNameAttr->Value() );
                 }
             else
-                {
-                param->iGroupName =   QString::fromUtf16( iEngine->RandomString(CCreatorEngine::EGroupName).Ptr(), iEngine->RandomString(CCreatorEngine::EGroupName).Length()); 	//->Des().Copy( iEngine->RandomString(CCreatorEngine::EGroupName) );
+            	{
+                param->iGroupName->Des().Copy( iEngine->RandomString(CCreatorEngine::EGroupName) );
                 }                
             iEngine->AppendToCommandArrayL(ECmdCreatePhoneBookEntryGroups, param);
             CleanupStack::Pop(param);
--- a/creator/engine/src/creator_contactsetcache.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/src/creator_contactsetcache.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -32,17 +32,17 @@
     return iLinkId;
     }
 
-void CCreatorContactSet::AppendL(QContactLocalId aContactLink)
+void CCreatorContactSet::AppendL(TUint32 aContactLink)
     {
     iContactLinks.AppendL(aContactLink);
     }
 
-RArray<QContactLocalId> CCreatorContactSet::ContactLinks()
+RArray<TUint32> CCreatorContactSet::ContactLinks()
     {
     return iContactLinks;
     }
 
-const RArray<QContactLocalId> CCreatorContactSet::ContactLinks() const
+const RArray<TUint32> CCreatorContactSet::ContactLinks() const
     {
     return iContactLinks;
     }
@@ -73,8 +73,8 @@
     virtual ~CContactLinkCacheImp();
     virtual void AppendL(CCreatorContactSet* aContactSet); 
 
-    virtual RArray<QContactLocalId> ContactLinks(TInt aLinkId);
-    virtual const RArray<QContactLocalId> ContactLinks(TInt aLinkId) const;
+    virtual RArray<TUint32> ContactLinks(TInt aLinkId);
+    virtual const RArray<TUint32> ContactLinks(TInt aLinkId) const;
 
     virtual RPointerArray<CCreatorContactSet>& ContactSets();
     virtual const RPointerArray<CCreatorContactSet>& ContactSets() const;
@@ -85,7 +85,7 @@
     void ConstructL();
     CContactLinkCacheImp();
     
-    RArray<QContactLocalId> iEmptyLinks;
+    RArray<TUint32> iEmptyLinks;
 
     RPointerArray<CCreatorContactSet> iContactSets;
     CCreatorContactSet* iDummyContactSet;
@@ -123,7 +123,7 @@
     {
     iContactSets.AppendL(aContactSet);
     }
-RArray<QContactLocalId> CContactLinkCacheImp::ContactLinks(TInt aLinkId)
+RArray<TUint32> CContactLinkCacheImp::ContactLinks(TInt aLinkId)
     {
     for( TInt i = 0; i < iContactSets.Count(); ++i )
         {
@@ -135,7 +135,7 @@
     return iEmptyLinks;
     }
 
-const RArray<QContactLocalId> CContactLinkCacheImp::ContactLinks(TInt aLinkId) const
+const RArray<TUint32> CContactLinkCacheImp::ContactLinks(TInt aLinkId) const
     {
     for( TInt i = 0; i < iContactSets.Count(); ++i )
         {
--- a/creator/engine/src/creator_factory.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/src/creator_factory.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -19,7 +19,7 @@
 #include "engine.h"
 #include "creator_factory.h"
 
-#include "creator_accesspoint.h"
+//#include "creator_accesspoint.h"
 #include "creator_phonebook.h"
 
 CCreatorPhonebookBase* TCreatorFactory::CreatePhoneBookL(CCreatorEngine* aEngine)
@@ -31,7 +31,7 @@
 	{
 	return new(ELeave) CPhonebookParameters;
 	}
-
+/*
 CCreatorConnectionSettingsBase* TCreatorFactory::CreateConnectionSettingsL(CCreatorEngine* aEngine)
 {
     return CCreatorAccessPoints::NewL(aEngine); 
@@ -41,3 +41,4 @@
     {
     return new(ELeave) CAccessPointsParameters;
     }
+*/
--- a/creator/engine/src/creator_note.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/src/creator_note.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -22,6 +22,7 @@
 #include "creator_note.h" 
 #include "creator_traces.h"
 
+
 const TInt KCreatorDiskSpaceNeededForSingleDeletion( 8192 );
 _LIT( KCreatorNotepadFile, "c:Notepad.dat" );
 
@@ -71,33 +72,23 @@
     LOGSTRING("Creator: CCreatorNotepad::ConstructL");
 
     iEngine = aEngine;
-    iAgendaUtil = new AgendaUtil();
-    //iNotepadApi = new NotesEditor(iAgendaUtil);
-    //iNotepadApi = CNotepadApi::NewL();
+    iNotepadWrapper = CCreatorNotepadWrapper::NewL();
     }
 
 CCreatorNotepad::~CCreatorNotepad()
     {
     LOGSTRING("Creator: CCreatorNotepad::~CCreatorNotepad");
- 
- /*   
-    if(iNotepadApi)
-        {
-        delete iNotepadApi;
-        iNotepadApi = NULL;
-        }
-*/    
-    if(iAgendaUtil)
-        {
-        delete iAgendaUtil;
-        iAgendaUtil = NULL;
-        }
     
     if (iParameters)
         {
         delete iParameters;
-        iParameters = NULL;
+        iParameters;
         }
+    
+    if (iNotepadWrapper)
+    	{
+		delete iNotepadWrapper;
+    	}
     }
 
 //----------------------------------------------------------------------------
@@ -142,10 +133,7 @@
     
     TInt err = KErrNone;
 
-    //iNotepadApi->AddContentL(parameters->iNoteText->Des());
-    QString textNote = QString::fromUtf16(parameters->iNoteText->Ptr(),parameters->iNoteText->Length());
-    iNotepadApi->edit(textNote, iAgendaUtil);
-    iNotepadApi->close(NotesEditorInterface::CloseWithSave, iAgendaUtil);
+    iNotepadWrapper->CreateNoteL(parameters->iNoteText->Des());
     
     return err;
     }
@@ -154,52 +142,7 @@
 void CCreatorNotepad::DeleteAllL()
     {
     LOGSTRING("Creator: CCreatorNotepad::DeleteAllL");
-    QList<AgendaEntry> ael;
-    AgendaUtil::FilterFlags filter = AgendaUtil::FilterFlags(AgendaUtil::IncludeNotes);
-
-    ael = iAgendaUtil->fetchAllEntries(filter);
-    for(int i=0 ; i<ael.count() ; i++)
-    	{
-        iAgendaUtil->deleteEntry(ael[i].id());
-    	}
-    
-    // Open Notes db
- /*   RDbs dbs;
-    User::LeaveIfError( dbs.Connect() );
-    CleanupClosePushL( dbs );
-    RDbNamedDatabase db;
-    TInt openErr( db.Open( dbs, KCreatorNotepadFile, KCreatorNotepadFormat ) );
-    CleanupClosePushL( db );
-    
-    if ( openErr && openErr !=  KErrNotFound )
-        {
-        User::Leave( openErr );
-        }
-    
-    // do not leave if openErr == KErrNotFound, 
-    // it means there is no notes (file) created -> no need to delete
-    
-    if ( openErr !=  KErrNotFound )
-        {
-        TInt retval = iFs.ReserveDriveSpace( KDefaultDrive, KCreatorDiskSpaceNeededForSingleDeletion );
-        if ( retval == KErrNone )
-            {
-            retval = iFs.GetReserveAccess( KDefaultDrive );
-            }
-
-        // Delete all Notes. Ignore rowCount returnvalue
-        db.Execute( KCreatorNotepadDeleteAllSQL );            
-        
-        User::LeaveIfError( db.Compact() );
-        
-        if ( retval == KErrNone )
-            {
-            retval = iFs.ReleaseReserveAccess( KDefaultDrive );
-            }
-        }
-    
-    CleanupStack::PopAndDestroy( &db );
-    CleanupStack::PopAndDestroy( &dbs );*/
+    iNotepadWrapper->DeleteAllL();
     }
 
 //----------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/engine/src/creator_notepadwrapper.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "creator_notepadwrapper.h"
+
+	/**
+	* Constructor
+	*/
+CCreatorNotepadWrapper::CCreatorNotepadWrapper()
+	{
+	}
+	
+	/**
+	* Destructor
+	*/
+CCreatorNotepadWrapper::~CCreatorNotepadWrapper()
+	{
+/*    
+	if(iNotepadApi)
+        {
+        delete iNotepadApi;
+        iNotepadApi = NULL;
+        }
+ */   
+    if(iAgendaUtil)
+        {
+        delete iAgendaUtil;
+        iAgendaUtil = NULL;
+        }
+	}
+	
+	/**
+	* Two-Phased constructor
+	*/
+CCreatorNotepadWrapper* CCreatorNotepadWrapper::NewL()
+	{
+	CCreatorNotepadWrapper* self = CCreatorNotepadWrapper::NewLC();
+	CleanupStack::Pop(self);
+    return self;
+	}
+
+	/**
+	* Two-Phased constructor
+	*/
+CCreatorNotepadWrapper* CCreatorNotepadWrapper::NewLC()
+	{
+	CCreatorNotepadWrapper* self = new (ELeave) CCreatorNotepadWrapper;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+    return self;
+	}
+	
+	/**
+	* ConstructL()
+	*/
+
+void CCreatorNotepadWrapper::ConstructL()
+	{
+	iAgendaUtil = new AgendaUtil();
+//	iNotepadApi = new NotesEditor(iAgendaUtil);
+	}
+
+TInt CCreatorNotepadWrapper::CreateNoteL( const TDesC& aText )
+	{
+	TInt err = KErrNone;
+	QString textNote = QString::fromUtf16( aText.Ptr(),aText.Length());
+    iNotepadApi->edit(textNote,iAgendaUtil);
+    iNotepadApi->close(NotesEditorInterface::CloseWithSave, iAgendaUtil);
+	return err;
+    }
+void CCreatorNotepadWrapper::DeleteAllL()
+	{
+	
+	QList<AgendaEntry> ael;
+    AgendaUtil::FilterFlags filter = AgendaUtil::FilterFlags(AgendaUtil::IncludeNotes);
+
+    ael = iAgendaUtil->fetchAllEntries(filter);
+    for(int i=0 ; i<ael.count() ; i++)
+    	{
+        iAgendaUtil->deleteEntry(ael[i].id());
+    	}
+		
+	}
+	
--- a/creator/engine/src/creator_phonebook.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/src/creator_phonebook.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -20,102 +20,136 @@
 #include "enginewrapper.h"
 #include "creator_contactsetcache.h"
 
-#include "creator_phonebook.h" 
+#include "creator_phonebook.h"
 #include "creator_traces.h"
 
 #include <bautils.h> 
-//#include <qpixmap>
 
-//#include <QDebug>
 _LIT(KTempPath, "C:\\Data\\Creator\\");
 
 
 typedef struct {
-QString iDetail;
-QString iFieldContext;
-QString iFieldString;
+TInt iFieldCode;
 TInt iRandomType;
 } DetailFieldInfo;
 static const TInt RND_TYPE_UNDEF = -99;
 DetailFieldInfo CreatorPbkMiscTextFields[] = {        
-        { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldFirstName).operator QString(), (TInt) CCreatorEngine::EFirstName},
-        { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldLastName).operator QString(), (TInt) CCreatorEngine::ESurname},
-        { (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldName).operator QString(), (TInt) CCreatorEngine::ECompany},
-        { (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldTitle).operator QString(), (TInt) CCreatorEngine::EJobTitle},
-        { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldPrefix).operator QString(), (TInt) CCreatorEngine::EPrefix},
-        { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldSuffix).operator QString(), (TInt) CCreatorEngine::ESuffix},
-        { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldMiddleName).operator QString(), (TInt) CCreatorEngine::EFirstName},
-        { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldStreet).operator QString(), (TInt) CCreatorEngine::EAddress},
-        { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldLocality).operator QString(), (TInt) CCreatorEngine::ECity},
-        { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldRegion).operator QString(), (TInt) CCreatorEngine::EState},
-        { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldPostcode).operator QString(), (TInt) CCreatorEngine::EPostcode},
-        { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldCountry).operator QString(), (TInt) CCreatorEngine::ECountry},
-        { (QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldStreet).operator QString(), (TInt) CCreatorEngine::EAddress},
-        { (QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldLocality).operator QString(), (TInt) CCreatorEngine::ECity},
-        { (QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldRegion).operator QString(), (TInt) CCreatorEngine::EState},
-        { (QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldPostcode).operator QString(), (TInt) CCreatorEngine::EPostcode},
-        { (QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldCountry).operator QString(), (TInt) CCreatorEngine::ECountry},
-        { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldStreet).operator QString(), (TInt) CCreatorEngine::EAddress},
-        { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldLocality).operator QString(), (TInt) CCreatorEngine::ECity},
-        { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldRegion).operator QString(), (TInt) CCreatorEngine::EState},
-        { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldPostcode).operator QString(), (TInt) CCreatorEngine::EPostcode},
-        { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldCountry).operator QString(), (TInt) CCreatorEngine::ECountry},
-        { (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactPhoneNumber::SubTypeMobile).operator QString(), (TInt) CCreatorEngine::EPhoneNumber},
-        { (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactPhoneNumber::SubTypeLandline).operator QString(), (TInt) CCreatorEngine::EPhoneNumber},
-        { (QContactNote::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactNote::FieldNote).operator QString(), (TInt)  CCreatorEngine::EMemoText},
-        { (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldDepartment).operator QString(), (TInt) CCreatorEngine::ECompany},
-        { (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldAssistantName).operator QString(), (TInt) CCreatorEngine::ECompany},
-        { (QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactFamily::FieldSpouse).operator QString(), (TInt) CCreatorEngine::EFirstName},
-        { (QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactFamily::FieldChildren).operator QString(), (TInt) CCreatorEngine::EFirstName},
-        { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),  (QContactName::FieldCustomLabel).operator QString(), (TInt) CCreatorEngine::EFirstName}
+        {CCreatorPhonebookWrapper::EFirstName, (TInt) CCreatorEngine::EFirstName},
+        {CCreatorPhonebookWrapper::EFirstNameReading, (TInt) CCreatorEngine::EFirstName},
+        {CCreatorPhonebookWrapper::ELastName, (TInt) CCreatorEngine::ESurname},
+        {CCreatorPhonebookWrapper::ELastNameReading, (TInt) CCreatorEngine::ESurname},
+        {CCreatorPhonebookWrapper::ECompanyName, (TInt) CCreatorEngine::ECompany},
+        {CCreatorPhonebookWrapper::EJobTitle, (TInt) CCreatorEngine::EJobTitle},
+        {CCreatorPhonebookWrapper::EPrefix, (TInt) CCreatorEngine::EPrefix},
+        {CCreatorPhonebookWrapper::ESuffix, (TInt) CCreatorEngine::ESuffix},
+        {CCreatorPhonebookWrapper::ESecondName, (TInt) CCreatorEngine::EFirstName},
+        {CCreatorPhonebookWrapper::EAddrLabelGen, (TInt) CCreatorEngine::EAddress},
+        {CCreatorPhonebookWrapper::EAddrPoGen, (TInt) CCreatorEngine::EPobox},
+        {CCreatorPhonebookWrapper::EAddrExtGen, (TInt) CCreatorEngine::EAddress},
+        {CCreatorPhonebookWrapper::EAddrStreetGen, (TInt) CCreatorEngine::EAddress},
+        {CCreatorPhonebookWrapper::EAddrLocalGen, (TInt) CCreatorEngine::ECity},
+        {CCreatorPhonebookWrapper::EAddrRegionGen, (TInt) CCreatorEngine::EState},
+        {CCreatorPhonebookWrapper::EAddrPostCodeGen, (TInt) CCreatorEngine::EPostcode},
+        {CCreatorPhonebookWrapper::EAddrCountryGen, (TInt) CCreatorEngine::ECountry},
+        {CCreatorPhonebookWrapper::EAddrLabelHome, (TInt) CCreatorEngine::EAddress},
+        {CCreatorPhonebookWrapper::EAddrPoHome, (TInt) CCreatorEngine::EPobox},
+        {CCreatorPhonebookWrapper::EAddrExtHome, (TInt) CCreatorEngine::EAddress},
+        {CCreatorPhonebookWrapper::EAddrStreetHome, (TInt) CCreatorEngine::EAddress},
+        {CCreatorPhonebookWrapper::EAddrLocalHome, (TInt) CCreatorEngine::ECity},
+        {CCreatorPhonebookWrapper::EAddrRegionHome, (TInt) CCreatorEngine::EState},
+        {CCreatorPhonebookWrapper::EAddrPostCodeHome, (TInt) CCreatorEngine::EPostcode},
+        {CCreatorPhonebookWrapper::EAddrCountryHome, (TInt) CCreatorEngine::ECountry},
+        {CCreatorPhonebookWrapper::EAddrLabelWork, (TInt) CCreatorEngine::EAddress},
+        {CCreatorPhonebookWrapper::EAddrPoWork, (TInt) CCreatorEngine::EPobox},
+        {CCreatorPhonebookWrapper::EAddrExtWork, (TInt) CCreatorEngine::EAddress},
+        {CCreatorPhonebookWrapper::EAddrStreetWork, (TInt) CCreatorEngine::EAddress},
+        {CCreatorPhonebookWrapper::EAddrLocalWork, (TInt) CCreatorEngine::ECity},
+        {CCreatorPhonebookWrapper::EAddrRegionWork, (TInt) CCreatorEngine::EState},
+        {CCreatorPhonebookWrapper::EAddrPostCodeWork, (TInt) CCreatorEngine::EPostcode},
+        {CCreatorPhonebookWrapper::EAddrCountryWork, (TInt) CCreatorEngine::ECountry},
+        {CCreatorPhonebookWrapper::EPoc, (TInt) CCreatorEngine::EPhoneNumber},
+        {CCreatorPhonebookWrapper::ESwis, (TInt) CCreatorEngine::EPhoneNumber},
+        {CCreatorPhonebookWrapper::ESip, (TInt) CCreatorEngine::EPhoneNumber},
+        {CCreatorPhonebookWrapper::EDtmfString, (TInt) CCreatorEngine::EFirstName},
+        {CCreatorPhonebookWrapper::ENote,(TInt)  CCreatorEngine::EMemoText},
+        {CCreatorPhonebookWrapper::EMiddleName, (TInt) CCreatorEngine::EFirstName},
+        {CCreatorPhonebookWrapper::EDepartment, (TInt) CCreatorEngine::ECompany},
+        {CCreatorPhonebookWrapper::EAsstName, (TInt) CCreatorEngine::EFirstName},
+        {CCreatorPhonebookWrapper::ESpouse, (TInt) CCreatorEngine::EFirstName},
+        {CCreatorPhonebookWrapper::EChildren, (TInt) CCreatorEngine::EFirstName},
+        {CCreatorPhonebookWrapper::ESyncClass, RND_TYPE_UNDEF},
+        {CCreatorPhonebookWrapper::ELocPrivacy, RND_TYPE_UNDEF},
+        {CCreatorPhonebookWrapper::EGenLabel, (TInt) CCreatorEngine::EFirstName},
+        {CCreatorPhonebookWrapper::EWVAddress, (TInt) CCreatorEngine::EPhoneNumber},
+        {CCreatorPhonebookWrapper::ERingTone, RND_TYPE_UNDEF},
+        {CCreatorPhonebookWrapper::EThumbnailPic, RND_TYPE_UNDEF},
+        {CCreatorPhonebookWrapper::ECallerObjText, (TInt) CCreatorEngine::EFirstName}
         };
                   
 
-typedef struct{
-QString iFieldContext;
-QString iFieldString;
-}PhoneNumInfo;
-PhoneNumInfo CreatorPhoneNumberFields[] =
+TInt CreatorPbkBinaryFields[] = {
+        CCreatorPhonebookWrapper::ECallerObjImg//,
+        //R_VPBK_FIELD_TYPE_THUMBNAILPATH
+        };
+
+TInt CreatorPbkDateTimeFields[] = {
+        CCreatorPhonebookWrapper::EAnniversary
+        };
+
+//----------------------------------------------------------------------------
+TInt CreatorPbkPhoneNumberFields[] =
     {
-    { "", "Landline"},
-    { "Home", "Landline"},
-    { "Work", "Landline"},                        
-    { "","Mobile"},
-    { "Home","Mobile"},
-    { "Work", "Mobile"},
-    { "Home", "Facsimile"},
-    { "Work", "Facsimile"},
-    { "Work", "Pager"},
-    { "Home", "Video"},
-    { "Work", "Video"},   //{ "Home", "Voice" },//{ "Work", "Voice" },
-    { "Work", "Assistant" },
-    { "Home",  "Car" }
+    CCreatorPhonebookWrapper::ELandPhoneGen,
+    CCreatorPhonebookWrapper::ELandPhoneHome,
+    CCreatorPhonebookWrapper::ELandPhoneWork,                        
+    CCreatorPhonebookWrapper::EMobilePhoneGen,
+    CCreatorPhonebookWrapper::EMobilePhoneHome,
+    CCreatorPhonebookWrapper::EMobilePhoneWork,
+    CCreatorPhonebookWrapper::EFaxNumberGen,
+    CCreatorPhonebookWrapper::EFaxNumberHome,
+    CCreatorPhonebookWrapper::EFaxNumberWork,
+    CCreatorPhonebookWrapper::EPagerNumber,           
+    CCreatorPhonebookWrapper::EVideoNumberGen,
+    CCreatorPhonebookWrapper::EVideoNumberHome,
+    CCreatorPhonebookWrapper::EVideoNumberWork,
+    CCreatorPhonebookWrapper::EVoipGen,
+    CCreatorPhonebookWrapper::EVoipHome,
+    CCreatorPhonebookWrapper::EVoipWork,
+    CCreatorPhonebookWrapper::EAsstPhone,
+    CCreatorPhonebookWrapper::ECarPhone
     };
 
-
-QString CreatorPbkEmailFields[] =
+TInt CreatorPbkUrlFields[] =
     {
-    //R_VPBK_FIELD_TYPE_EMAILGEN,
-    (QContactDetail::ContextHome).operator QString(),//"Home",//R_VPBK_FIELD_TYPE_EMAILHOME,
-    (QContactDetail::ContextWork).operator QString()//R_VPBK_FIELD_TYPE_EMAILWORK
+    CCreatorPhonebookWrapper::EUrlGen,
+    CCreatorPhonebookWrapper::EUrlHome,
+    CCreatorPhonebookWrapper::EUrlWork
     };
 
+TInt CreatorPbkEmailFields[] =
+    {
+    CCreatorPhonebookWrapper::EEmailGen,
+    CCreatorPhonebookWrapper::EEmailHome,
+    CCreatorPhonebookWrapper::EEmailWork
+    };
 
 CPhonebookParameters::CPhonebookParameters()
     {
-    LOGSTRING("Creator: CVirtualPhonebookParameters::CVirtualPhonebookParameters");
-    //iGroupName = HBufC::New(KPhonebookFieldLength);  
+    LOGSTRING("Creator: CPhonebookParameters::CVirtualPhonebookParameters");
+    iGroupName = HBufC::New(KPhonebookFieldLength);  
     }
 
 CPhonebookParameters::~CPhonebookParameters()
     {
-    LOGSTRING("Creator: CVirtualPhonebookParameters::~CVirtualPhonebookParameters");
+    LOGSTRING("Creator: CPhonebookParameters::~CPhonebookParameters");
 
-    //delete iGroupName;   
-    //iContactFields.ResetAndDestroy();
-    //iContactFields.Close();
-    
-    //iLinkIds.clear();
+    delete iGroupName;   
+    for( TCreatorContactFields::iterator it = iContactFields.begin(); it != iContactFields.end(); ++it)
+        {
+        HBufC* temp =  (*it).second;
+        iContactFields.erase(it);
+        delete temp;
+        }
     iLinkIds.Reset();
     iLinkIds.Close();
     }
@@ -164,7 +198,7 @@
 	
 	iEngine = aEngine;
 	
-	iContactMngr = new QContactManager("symbian");
+	iPhonebookWrapper = CCreatorPhonebookWrapper::NewL();
 
 	SetDefaultParameters();
     }
@@ -183,15 +217,16 @@
         TRAP_IGNORE( StoreLinksForDeleteL( iContactGroupsToDelete, KUidDictionaryUidContactGroups ) );
         }
     
-	if( iContactMngr )
+	if( iPhonebookWrapper )
 		{
-		delete iContactMngr;
+		delete iPhonebookWrapper;
 		}
     
     if (iParameters)
     	{
         delete iParameters;
     	}
+  
     }
 
 //----------------------------------------------------------------------------
@@ -202,7 +237,6 @@
 	delete iParameters;
 	    iParameters = 0;
 	CPhonebookParameters* parameters = 0;
-	//InitializeContactParamsL();
 	
 	if( aParameters == 0 )
 	    {
@@ -214,23 +248,13 @@
 	    parameters = (CPhonebookParameters*) aParameters;
 	    }
 	    
-	bool success = false;
+	int numberOfFields = parameters->iContactFields.size();
 	// create a new contact item
-	QContact iStore;
 	
-	int numberOfFields = parameters->iContactFields.count();
-	QString phone;
-	for(int i=0; i< numberOfFields; i++ )
-		{
-		QContactDetail* cntdet = new QContactDetail(parameters->iContactFields.at(i));
-		success = iStore.saveDetail( cntdet );
-		delete cntdet;		
-		}
+	TUint32 contactId = iPhonebookWrapper->CreateContactEntryL( parameters->iContactFields ); //wrapper should return contact id to store
+	iContactsToDelete.Append( contactId );
 	
-	iContactMngr->saveContact( &iStore );
-	
-	iContactsToDelete.Append( (TUint32)iStore.localId() );
-	
+
 	// If this contact has a link id in script (i.e. belongs to a contact-set), we must cache the contact id:
 	    if( parameters->ScriptLinkId() > 0 )
 	        {                
@@ -240,10 +264,10 @@
 	            {
 	            if( contactsets[i]->LinkId() == parameters->ScriptLinkId() )
 	                {
-	                if( iStore.localId() )
+	                if( contactId )
 	                    {
-	                    contactsets[i]->AppendL( iStore.localId() );
-	                    iContactLinkArray.AppendL( (TUint32)iStore.localId() );
+	                    contactsets[i]->AppendL( contactId );
+	                    iContactLinkArray.AppendL( contactId );
 	                    }
 	                setFound = ETrue;
 	                break;
@@ -267,8 +291,7 @@
 
 void CCreatorPhonebook::DeleteAllL()
     {
-	QList<QContactLocalId> contacts = iContactMngr->contactIds();
-	DeleteContactsL( contacts );
+	iPhonebookWrapper->DeleteAllL();
     }
 
 //----------------------------------------------------------------------------
@@ -282,19 +305,7 @@
 void CCreatorPhonebook::DeleteAllGroupsL()
     {
     LOGSTRING("Creator: CCreatorPhonebook::DeleteAllGroupsL");
-    
-    QList<QContactLocalId> contacts = iContactMngr->contactIds();
-    QList<QContactLocalId> groups;
-    for(int i = 0; i < contacts.count(); i++)
-    	{
-		QContact group = iContactMngr->contact( contacts.at(i) );
-		if( group.type() == QContactType::TypeGroup )
-			{
-			groups.append( group.localId() );
-			}
-    	}
-    DeleteContactsL( groups );
-
+    iPhonebookWrapper->DeleteAllGroupsL();
     }
 
 //----------------------------------------------------------------------------
@@ -305,47 +316,44 @@
     }
 
 //----------------------------------------------------------------------------
-void CCreatorPhonebook::DeleteContactsL( QList<QContactLocalId>& aContacts /*MVPbkContactLinkArray* aContacts, TBool aGroup*/ )
+void CCreatorPhonebook::DeleteContactsL( RArray<TUint32>& aContactsToDelete, TUid aStoreUid	)
     {
-	//QList<QContactLocalId> contacts = iContactMngr->contactIds();
-    QMap<int, QContactManager::Error> errorMap;
-	iContactMngr->removeContacts( aContacts, &errorMap );
+	iPhonebookWrapper->DeleteContactsL( aContactsToDelete, aStoreUid );
     }
 
 //----------------------------------------------------------------------------
+
+
 void CCreatorPhonebook::DeleteItemsCreatedWithCreatorL( TUid aStoreUid )
     {
 	CDictionaryFileStore* store = iEngine->FileStoreLC();
-	       User::LeaveIfNull( store );
-	       
-	       QList<QContactLocalId> contacts;
-	       // backup previous contact links from store
-	       // otherwise they would be overwritten when calling out.WriteL
-	       TUint32 creatorLink;
-	       if ( store->IsPresentL( aStoreUid ) )
-	           {
-	           RDictionaryReadStream in;
-	           in.OpenLC( *store, aStoreUid );
-	           TRAP_IGNORE( 
-	               do{ 
-	                   creatorLink = in.ReadUint32L();
-	                   QContact contact = iContactMngr->contact( creatorLink );
-	                   if( (contact.type() == QContactType::TypeGroup && aStoreUid == KUidDictionaryUidContactGroups ) ||  (contact.type() != QContactType::TypeGroup && aStoreUid != KUidDictionaryUidContactGroups) )
-	                	   {
-						   contacts.append( creatorLink );
-	                	   }
-	               }while( creatorLink );)
-	           
-	           CleanupStack::PopAndDestroy(); // in
-	           }
-	       
-	       
-	       DeleteContactsL( contacts );
-	       
-	       store->Remove( aStoreUid );
-	       store->CommitL();
-	       
-	       CleanupStack::PopAndDestroy( store );
+    User::LeaveIfNull( store );
+    
+    RArray<TUint32> contacts; 
+    // backup previous contact links from store
+    // otherwise they would be overwritten when calling out.WriteL
+    TUint32 creatorLink;
+    if ( store->IsPresentL( aStoreUid ) )
+       {
+       RDictionaryReadStream in;
+       in.OpenLC( *store, aStoreUid );
+       TRAP_IGNORE( 
+           do{ 
+               creatorLink = in.ReadUint32L();
+               contacts.AppendL( creatorLink );
+           }while( creatorLink );
+       );
+       
+       CleanupStack::PopAndDestroy(); // in
+       }
+    
+    
+    iPhonebookWrapper->DeleteContactsL( contacts, aStoreUid );
+    
+    store->Remove( aStoreUid );
+    store->CommitL();
+    
+    CleanupStack::PopAndDestroy( store );
     }
 
 //----------------------------------------------------------------------------
@@ -355,7 +363,7 @@
     }
 
 //----------------------------------------------------------------------------
-TBool CCreatorPhonebook::HasOtherThanGroupsL( /*MVPbkContactLinkArray* aContacts */)
+TBool CCreatorPhonebook::HasOtherThanGroupsL()
     {
     LOGSTRING("Creator: CCreatorPhonebook::HasOtherThanGroupsL");
     TBool result( EFalse );
@@ -405,18 +413,14 @@
        for ( TInt i = 0; i < iPreviousDeleteLinks.Count(); i++ )
            {
            out.WriteUint32L( iPreviousDeleteLinks[i] );
-           //CleanupStack::PopAndDestroy(); // PackLC            
            }
        
        // write new links
        for(int i=0; i < aLinks.Count(); i++)
     	   {
-		   //TUint32 localId = (TUint32) aLinks[i];
-		   //out.WriteUint32L( aLinks[i] );
 		   out.WriteUint32L( aLinks[i] );
     	   }
        out.CommitL();
-       //CleanupStack::PopAndDestroy(); // aLinks.PackLC
        CleanupStack::PopAndDestroy(); // out
        
        store->CommitL();
@@ -425,10 +429,9 @@
     }
 
 //----------------------------------------------------------------------------
-       
 //----------------------------------------------------------------------------
 
-void CCreatorPhonebook::InitializeContactParamsL(/*CCreatorModuleBaseParameters* aParameters*/)
+void CCreatorPhonebook::InitializeContactParamsL()
     {
     LOGSTRING("Creator: CCreatorPhonebook::InitializeContactParamsL");        
  
@@ -438,166 +441,175 @@
     iParameters->iNumberOfURLFields = iNumberOfURLFields;
     iParameters->iNumberOfEmailAddressFields = iNumberOfEmailAddressFields;       
     
-        
-    QContactName name;
-    
     TPtrC fname = iEngine->RandomString(CCreatorEngine::EFirstName);
     TPtrC lname = iEngine->RandomString(CCreatorEngine::ESurname);
-    QString firstname = QString::fromUtf16( fname.Ptr(), fname.Length() ); 
-    QString lastname  = QString::fromUtf16( lname.Ptr(), lname.Length() );               
     
-    name.setFirstName(firstname);
-    name.setLastName(lastname);
     
     if( iAddAllFields )
         {
 		TInt textFieldCount = sizeof(CreatorPbkMiscTextFields) / sizeof(DetailFieldInfo);
 		for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex )
-                    { 
-//    				QContactDetail field = CreateContactDetail( CreatorPbkMiscTextFields[tfIndex].iDetail, CreatorPbkMiscTextFields[tfIndex].iFieldContext, CreatorPbkMiscTextFields[tfIndex].iFieldString, CreatorPbkMiscTextFields[tfIndex].iRandomType );
-    				
-    				CCreatorContactField* field = CCreatorContactField::NewL();
-	                CleanupStack::PushL( field );
-	                QContactDetail cntDetail = field->CreateContactDetailL(iEngine,iParameters,CreatorPbkMiscTextFields[tfIndex].iDetail, CreatorPbkMiscTextFields[tfIndex].iFieldContext, CreatorPbkMiscTextFields[tfIndex].iFieldString, CreatorPbkMiscTextFields[tfIndex].iRandomType );
-  	                if(!cntDetail.isEmpty())
-  	                	{
-  						field->AddFieldToParam( iParameters, cntDetail ); //it will do "param->iContactFields.AppendL(field);"
-  	                	}
-  	                CleanupStack::Pop( field );
-                    }
+			{ 
+			CCreatorContactField* field = CCreatorContactField::NewL();
+			CleanupStack::PushL(field);
+	        field->AddFieldToParamL( iEngine,iParameters, CreatorPbkMiscTextFields[tfIndex].iFieldCode, CreatorPbkMiscTextFields[tfIndex].iRandomType );
+  	        CleanupStack::Pop(field);
+            }
+		
 		// Add binary fields:
-		TPtrC emptyData;
-		CCreatorContactField* fieldPicture = CCreatorContactField::NewL();
-		CleanupStack::PushL( fieldPicture );
-		QContactDetail cntDetail = fieldPicture->CreateContactDetailL(iEngine,iParameters,QContactAvatar::DefinitionName,"","",emptyData );
-		if(!cntDetail.isEmpty())
-		  	{
-		fieldPicture->AddFieldToParam( iParameters, cntDetail ); //it will do "param->iContactFields.AppendL(field);"
-		  	}
-		CleanupStack::Pop( fieldPicture );
 		
+		RFs& fs = CCoeEnv::Static()->FsSession();
+		      
+        TBuf<KMaxFileName> srcPath;
+		iEngine->RandomPictureFileL(srcPath);
+		TBuf<KMaxFileName> destPath(KTempPath);
+		                            
+		if(!BaflUtils::FolderExists( fs, destPath ))
+			{
+		    BaflUtils::EnsurePathExistsL( fs, destPath );
+		    }
+		                
+		TInt err=BaflUtils::CopyFile( fs, srcPath, destPath );
+
+		TParse temp;
+		temp.Set( srcPath,NULL,NULL );
+		destPath.Append(temp.NameAndExt());
+		TPtrC picture;
+		picture.Set(destPath);
+		CCreatorContactField* picturefield = CCreatorContactField::NewL();
+		CleanupStack::PushL(picturefield);
+		picturefield->AddFieldToParamL( iParameters, CCreatorPhonebookWrapper::EThumbnailPic, picture );
+		CleanupStack::Pop(picturefield);
 		// Add date-time fields:
+		TPtrC anniv;
+		TBuf<20> timeString;
+		TTime datetime = iEngine->RandomDate( CCreatorEngine::EDateFuture );
+		_LIT(KDateString,"%D%M%Y%/0%1%/1%2%/2%3%/3");
+		TRAP_IGNORE( datetime.FormatL(timeString, KDateString) );
+		
+		anniv.Set(timeString);
+ 
 		CCreatorContactField* fieldAnniv = CCreatorContactField::NewL();
 		CleanupStack::PushL( fieldAnniv );
-		QContactDetail cntDetAnniv = fieldAnniv->CreateContactDetailL(iEngine,iParameters,QContactAnniversary::DefinitionName,"","",emptyData );
-		if(!cntDetAnniv .isEmpty())
-		  	{
-			fieldAnniv->AddFieldToParam( iParameters, cntDetAnniv ); //it will do "param->iContactFields.AppendL(field);"
-			}
+		fieldAnniv->AddFieldToParamL(iParameters,CCreatorPhonebookWrapper::EAnniversary, anniv );
 		CleanupStack::Pop( fieldAnniv );
-
     //***************************************************************************
     
         }
     else
-        {    
-		iParameters->iContactFields.append( name );
+        {
+		CCreatorContactField* field = CCreatorContactField::NewL();
+    	CleanupStack::PushL(field);
+    	field->AddFieldToParamL( iParameters, CCreatorPhonebookWrapper::EFirstName, fname );
+		field->AddFieldToParamL( iParameters, CCreatorPhonebookWrapper::ELastName, lname );
+		CleanupStack::Pop(field);
         }
                         
       // Phone numbers:
-    TInt phoneFieldCount = sizeof(CreatorPhoneNumberFields) / sizeof(PhoneNumInfo);
+    TInt phoneFieldCount = sizeof(CreatorPbkPhoneNumberFields) / sizeof(TInt);
     
     TInt inc=0;
-    for( int i=0; i<iNumberOfPhoneNumberFields; i++ )
+    for( TInt i=0; i<iNumberOfPhoneNumberFields; i++ )
     	{
     
 		if(inc >= phoneFieldCount )
         	{
     		inc = 0;
         	}
+		
+		CCreatorContactField* field = CCreatorContactField::NewL();
+        CleanupStack::PushL(field);
+		field->AddFieldToParamL(iEngine, iParameters, CreatorPbkPhoneNumberFields[inc] );
+		CleanupStack::Pop(field);
     
-		QContactPhoneNumber phoneNum;
-		TPtrC phoneNumber = iEngine->RandomString(CCreatorEngine::EPhoneNumber);
-		QString phone = QString::fromUtf16( phoneNumber.Ptr(), phoneNumber.Length() );
-		if(!CreatorPhoneNumberFields[inc].iFieldContext.isEmpty())
-			{
-			phoneNum.setContexts(CreatorPhoneNumberFields[inc].iFieldContext);
-			}
-		phoneNum.setSubTypes(CreatorPhoneNumberFields[inc].iFieldString);
-		
-
-		phoneNum.setNumber( phone );
-
-		iParameters->iContactFields.append( phoneNum );
 		inc++;
     	}
     
     
     
     // URLs:
-    for( int i=0; i<iNumberOfURLFields; i++ )
+    TInt urlFieldCount = sizeof(CreatorPbkUrlFields) / sizeof(TInt);
+    inc = 0;
+    for( TInt i=0; i<iNumberOfURLFields; i++ )
         {
-    	CCreatorContactField* fieldUrl = CCreatorContactField::NewL();
-    	CleanupStack::PushL( fieldUrl );
-    	QContactDetail cntDetUrl = fieldUrl->CreateContactDetailL(iEngine,iParameters,QContactUrl::DefinitionName,"","",KErrNotFound );
-    	if(!cntDetUrl.isEmpty())
-    	  	{
-			fieldUrl->AddFieldToParam( iParameters, cntDetUrl ); //it will do "param->iContactFields.AppendL(field);"
-    	  	}
-    	CleanupStack::Pop( fieldUrl );
-
+    
+		if(inc >= urlFieldCount )
+          	{
+        	inc = 0;
+           	}
+    
+		CCreatorContactField* field = CCreatorContactField::NewL();
+        CleanupStack::PushL(field);
+    	field->AddFieldToParamL(iEngine, iParameters, CreatorPbkUrlFields[inc] );
+    	CleanupStack::Pop(field);
+    	inc++;
         }
 
     // EMail addresses:
+    TInt emailFieldCount = sizeof(CreatorPbkEmailFields) / sizeof(TInt);
+    inc = 0;
     for( int i=0; i<iNumberOfEmailAddressFields; i++ )
+    	{
+		if(inc >= emailFieldCount )
+           	{
+          	inc = 0;
+           	}
+        CCreatorContactField* field = CCreatorContactField::NewL();
+        CleanupStack::PushL(field);
+        field->AddFieldToParamL(iEngine, iParameters, CreatorPbkEmailFields[inc] );
+        CleanupStack::Pop(field);
+        inc++;
+    	}
+    
+    TestPrintOut(iParameters);
+    
+   }
+
+void CCreatorPhonebook::TestPrintOut(CPhonebookParameters* aParam)
+	{
+	LOGSTRING("Creator: CCreatorPhonebook::TestPrintOut");
+	for( TCreatorContactFields::iterator it = aParam->iContactFields.begin(); it != aParam->iContactFields.end(); ++it)
+        {
+        HBufC* temp = (*it).second;
+        if(temp)
         	{
-			CCreatorContactField* fieldEmail = CCreatorContactField::NewL();
-        	CleanupStack::PushL( fieldEmail );
-        	QContactDetail cntDetEmail = fieldEmail->CreateContactDetailL(iEngine,iParameters,QContactEmailAddress::DefinitionName,"","",KErrNotFound );
-        	if(!cntDetEmail.isEmpty())
-        	  	{
-				fieldEmail->AddFieldToParam( iParameters, cntDetEmail ); //it will do "param->iContactFields.AppendL(field);"
-        	  	}
-        	CleanupStack::Pop( fieldEmail );
+			LOGSTRING3("Type: %d Content:%S ", (*it).first, &temp->Des() );
         	}
-    
+        }
     }
 
-
-
 // Checks if the link is a group or not
-TBool CCreatorPhonebook::IsContactGroupL( QContactLocalId& aLink )
+TBool CCreatorPhonebook::IsContactGroupL( TUint32& aLink )
 	{
-    QContact group = iContactMngr->contact( aLink );
-    if( group.type() == QContactType::TypeGroup )
-        {
-        return ETrue;
-        }
+	//not used right now
 	return EFalse;
 	}
 
+
 TInt CCreatorPhonebook::CreateGroupEntryL(CCreatorModuleBaseParameters *aParameters)
     {
-	 LOGSTRING("Creator: CCreatorVirtualPhonebook::CreateGroupEntryL");
+	 LOGSTRING("Creator: CCreatorPhonebook::CreateGroupEntryL");
+	 TInt err = KErrNone;
+	 
 	    delete iParameters;
 	    iParameters = 0;
 	    
 	    CPhonebookParameters* parameters = (CPhonebookParameters*) aParameters;
 	    
 	    if( !parameters )
-	        {
-	        iParameters = new (ELeave) CPhonebookParameters;
-	        iParameters->iContactsInGroup = iContactsInGroup;
-	        TPtrC gname = iEngine->RandomString(CCreatorEngine::EGroupName);
-	        iParameters->iGroupName = QString::fromUtf16( gname.Ptr(),gname.Length() );
-	        iParameters->iGroupName += " #";
-	        int rnd = iEngine->RandomNumber(1000, 9999);
-	        iParameters->iGroupName += QString::number( rnd, 10 );
-	        parameters = iParameters;
-	        }
-
-	    TInt err = KErrNone;
-	 
+	       {
+	       iParameters = new (ELeave) CPhonebookParameters;
+	       iParameters->iContactsInGroup = iContactsInGroup;
+	       iParameters->iGroupName->Des().Copy( iEngine->RandomString(CCreatorEngine::EGroupName) );
+	       iParameters->iGroupName->Des().Append( _L(" #") );
+	       iParameters->iGroupName->Des().AppendNum( iEngine->RandomNumber(1000, 9999) );
+	       parameters = iParameters;
+	       }
+	   
 	    // create a new contact group
-	    QContact newGroup;
-	    newGroup.setType(QContactType::TypeGroup);
-        QContactName newGroupName;
-        newGroupName.setCustomLabel( parameters->iGroupName );
-        newGroup.saveDetail(&newGroupName);
-        iContactMngr->saveContact(&newGroup);
-        QContactLocalId newGroupId = newGroup.localId();
-
-	        
+	    
+	    TUint32 newGroupId = iPhonebookWrapper->CreateGroupEntryL( parameters->iGroupName );
+	    
 	    // define amounts of contacts to be added to the group
 	    TInt amountOfContactsToBeAdded = 0;
 	    if (parameters->iContactsInGroup == KCreateRandomAmountOfGroups)
@@ -615,7 +627,7 @@
 	            {
 	            const CCreatorContactSet& set = ContactLinkCache::Instance()->ContactSet(parameters->iLinkIds[i].iLinkId);
 	          
-	            const RArray<QContactLocalId> links = set.ContactLinks();//ContactLinkCache::Instance()->ContactSets();//set.ContactLinks();
+	            const RArray<TUint32> links = set.ContactLinks();//ContactLinkCache::Instance()->ContactSets();//set.ContactLinks();
 	            TInt numberOfExplicitLinks = links.Count(); // Number of defined contacts in contact-set
 	            TInt numberOfExistingContacts = set.NumberOfExistingContacts(); // Number of existing contacts in contact-set
 	            TInt maxAmount = numberOfExplicitLinks + numberOfExistingContacts;
@@ -627,22 +639,9 @@
 	            
 	            for( TInt j = 0; j < links.Count() && addedMembers < maxAmount; ++j )
 	                {
-	                QContactLocalId link = links[j];
-	                QContact contactLink = iContactMngr->contact( link );
-	                if( link && IsContactGroupL( link ) == EFalse )
-	                    {
-                        //QList<QContactRelationship> relationships = contactLink.relationships(QContactRelationship::HasMember);
-	                    if(/*!relationships.count() && */contactLink.type() == QContactType::TypeContact ) //just for contacts that are not in relationship - not in group yet
-	                        {
-	                        QContactRelationship* contactRel = new QContactRelationship();
-	                        contactRel->setRelationshipType(QContactRelationship::HasMember);
-	                        contactRel->setFirst(newGroup.id());
-	                        contactRel->setSecond( contactLink.id() );
-	                        iContactMngr->saveRelationship( contactRel );
-	                        delete contactRel;
-	                        ++addedMembers;
-	                        }         
-	                    }
+					
+					addedMembers += iPhonebookWrapper->AddContactToGroup(newGroupId,links[j]);
+	           
 	                }
 	            if( addedMembers < maxAmount )
 	            	{
@@ -653,46 +652,13 @@
 	        }
 	    if( amountOfContactsToBeAdded > 0 )
 	        {
-			QList<QContactLocalId> contacts = iContactMngr->contactIds();
-			QContactRelationshipFilter rFilter;
-			rFilter.setRelationshipType(QContactRelationship::HasMember);
-			rFilter.setRelatedContactRole(QContactRelationshipFilter::First);
-			rFilter.setRelatedContactId( newGroup.id() );
-			
-			int cnt = 0;
-			for(int i=0; cnt < amountOfContactsToBeAdded && i < contacts.count() ; i++ )
-				{
-				QContact contact = iContactMngr->contact( iContactMngr->contactIds().at(i) );
-				if( iContactMngr->error() == QContactManager::DoesNotExistError )
-					{
-				
-					}
-				else
-					{
-					QList<QContactRelationship> relationships = contact.relationships(QContactRelationship::HasMember);
-					if(!relationships.count() && contact.type() == QContactType::TypeContact ) //just for contacts that are not in relationship - not in group yet
-						{
-						QContactRelationship* contactRel = new QContactRelationship();
-						contactRel->setRelationshipType(QContactRelationship::HasMember);
-						contactRel->setFirst(newGroup.id());
-						contactRel->setSecond(contact.id());
-						iContactMngr->saveRelationship( contactRel );
-						delete contactRel;
-						cnt++;
-						}
-					}
-				}
-			
-	       // group members and their count
-			QList<QContactLocalId> groupMemberIds = iContactMngr->contactIds( rFilter );
-			int testcnt = groupMemberIds.count(); 
-	    
-	   
+			TInt addedContacts = iPhonebookWrapper->AddToGroup(newGroupId, amountOfContactsToBeAdded);
+		
 	        }
 	    
 	    // store the link to contact, so that Creator is able to delete
 	    // it when user requests deletion of contacts that were created with Creator 
-	    iContactGroupsToDelete.Append( (TUint32)newGroupId );
+	    iContactGroupsToDelete.Append( newGroupId );
 	    
 	    return err;
     }
@@ -725,369 +691,79 @@
     }
 void CCreatorContactField::ConstructL()
     {
-    //pImpl = CCreatorContactTextField::NewL(aFieldType, aData); 
-    }
-QContactDetail CCreatorContactField::CreateContactDetailL(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TInt aRand )
-    {
-	QContactDetail emptyDet;
-    TPtrC contentData;
-    HBufC16* tempData = 0;
-    if(aRand == KErrNotFound)
-    	{
-		TInt textFieldCount = sizeof(CreatorPbkMiscTextFields) / sizeof(DetailFieldInfo);
-		for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex )
-			{
-			if( CreatorPbkMiscTextFields[tfIndex].iDetail == aDetail && CreatorPbkMiscTextFields[tfIndex].iFieldContext == aFieldContext && CreatorPbkMiscTextFields[tfIndex].iFieldString == aFieldString)
-				{
-				aRand = CreatorPbkMiscTextFields[tfIndex].iRandomType;
-				}
-			}
-    	}
-    
-    if( aRand != KErrNotFound ) 
-    	{
-		contentData.Set(aEngine->RandomString((CCreatorEngine::TRandomStringType) aRand));
-    	}
-    else
-    	{
-		if( aDetail == QContactPhoneNumber::DefinitionName )
-			{
-			contentData.Set(aEngine->RandomString(CCreatorEngine::EPhoneNumber));
-			}
-		else if( aDetail == QContactEmailAddress::DefinitionName )
-			{
-			tempData = aEngine->CreateEmailAddressLC();
-			contentData.Set( tempData->Des() );
-			}
-		else if( aDetail == QContactUrl::DefinitionName )
-			{
-			tempData = aEngine->CreateHTTPUrlLC(); 
-			contentData.Set( tempData->Des() );
-			}
-		else
-			{
-			return emptyDet;
-			}
-    	}
-    emptyDet = CreateContactDetailL( aEngine, aParameters, aDetail, aFieldContext, aFieldString, contentData );
-    if( tempData )
-    	{
-		CleanupStack::PopAndDestroy( tempData );
-    	}
-    return emptyDet;
     }
 
-QContactDetail CCreatorContactField::CreateContactDetailL(CCreatorEngine* aEngine,CPhonebookParameters* aParameters,QString aDetail, QString aFieldContext, QString aFieldString, TPtrC aData )
+
+void CCreatorContactField::AddFieldToParamL( CCreatorEngine* aEngine, CPhonebookParameters* aParam, TInt aType, TInt aRand )
     {
-    QContactDetail contactDetail;
-        
-        if( aDetail == QContactPhoneNumber::DefinitionName)
-            {
-            QContactPhoneNumber phoneNumber;// = contactDetail;
-            if(!aFieldContext.isEmpty())
-            	{
-				phoneNumber.setContexts(aFieldContext);
-            	}
-            phoneNumber.setSubTypes(aFieldString);
-            QString number = QString::fromUtf16(aData.Ptr(),aData.Length());
-            phoneNumber.setNumber(number);
-            return phoneNumber;
-            }
-        else if( aDetail == QContactName::DefinitionName )          //--Contact NAME-----------------------------
+    HBufC* content = NULL;
+    if( aRand == KErrNotFound ) 
+        {
+        TInt textFieldCount = sizeof(CreatorPbkPhoneNumberFields)/sizeof(TInt);;
+        for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex )
             {
-            QContactName contactName;
-            for(int i = 0 ; i < aParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
-                {
-                if(aParameters->iContactFields.at(i).definitionName() == QContactName::DefinitionName )
-                    {
-                    contactName = aParameters->iContactFields.at(i);
-                    }
-                }
-            QString name = QString::fromUtf16(aData.Ptr(),aData.Length());
-            if(aFieldString == QContactName::FieldFirstName)
-                {
-                if(contactName.firstName().isEmpty())
-                    {
-                    contactName.setFirstName( name );
-                    }
-                }
-            else if(aFieldString == QContactName::FieldLastName)
-                {
-                if(contactName.lastName().isEmpty())
-                    {
-                    contactName.setLastName( name );
-                    }
-                }
-            else if(aFieldString == QContactName::FieldMiddleName)
-                {
-                if(contactName.middleName().isEmpty())
-                    {
-                    contactName.setMiddleName( name );
-                    }
-                }
-            else if(aFieldString == QContactName::FieldPrefix)
-                {
-                if(contactName.prefix().isEmpty())
-                    {
-                    contactName.setPrefix( name );
-                    }
-                }
-            else if(aFieldString == QContactName::FieldSuffix)
+            if( CreatorPbkPhoneNumberFields[tfIndex] == aType )
                 {
-                if(contactName.suffix().isEmpty())
-                    {
-                    contactName.setSuffix( name );
-                    }
+                content = aEngine->RandomString(CCreatorEngine::EPhoneNumber).AllocL();
+                break;
                 }
-            else        //QContactName::FieldCustomLabel:
-                {
-                if(contactName.customLabel().isEmpty())
-                    {
-                    contactName.setCustomLabel( name );
-                    }
-                }
-            return contactName;
             }
-        else if( aDetail == QContactOrganization::DefinitionName )          //--Contact Company-----------------------------
+    
+        textFieldCount = sizeof(CreatorPbkUrlFields)/sizeof(TInt);;
+        for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex )
             {
-            QContactOrganization contactCompany;
-            
-            for(int i = 0 ; i < aParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
-                {
-                if(aParameters->iContactFields.at(i).definitionName() == QContactOrganization::DefinitionName )
-                    {
-                    contactCompany = aParameters->iContactFields.at(i);
-                    }
-                }
-            
-            QString company = QString::fromUtf16(aData.Ptr(),aData.Length());
-            if(aFieldString == QContactOrganization::FieldName)
+            if( CreatorPbkUrlFields[tfIndex] == aType )
                 {
-                if(contactCompany.name().isEmpty())
-                    {
-                    contactCompany.setName( company );
-                    }
-                }
-            if(aFieldString == QContactOrganization::FieldTitle)
-                {
-                if(contactCompany.title().isEmpty())
-                    {
-                    contactCompany.setTitle( company );
-                    }
+                content = aEngine->CreateHTTPUrlLC(); 
+                CleanupStack::Pop();
+                break;
                 }
-            if(aFieldString == QContactOrganization::FieldDepartment)
-                {
-                QStringList depList = contactCompany.department();
-                depList.append(company);
-                contactCompany.setDepartment(depList);
-                }
-            if(aFieldString == QContactOrganization::FieldAssistantName)
-                {
-                if(contactCompany.assistantName().isEmpty())
-                    {
-                    contactCompany.setAssistantName( company );
-                    }
-                }
-            return contactCompany;
             }
-        else if( aDetail == QContactAddress::DefinitionName )           //--Contact Address-----------------------------
+        textFieldCount = sizeof(CreatorPbkEmailFields)/sizeof(TInt);;
+        for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex )
+            {
+            if( CreatorPbkEmailFields[tfIndex] == aType )
                 {
-                QContactAddress contactAddress;
-                
-                for(int i = 0 ; i < aParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
-                    {
-                    if(aParameters->iContactFields.at(i).definitionName() == QContactAddress::DefinitionName && aParameters->iContactFields.at(i).value(QContactDetail::FieldContext) == aFieldContext )
-                        {
-                        contactAddress = aParameters->iContactFields.at(i);
-                        }
-                    }
-                if( !aFieldContext.isEmpty() )
-                    {
-					contactAddress.setContexts( aFieldContext );
-                    }
-                QString address = QString::fromUtf16(aData.Ptr(),aData.Length());
-                if(aFieldString == QContactAddress::FieldStreet )
-                    {
-                    if( contactAddress.street().isEmpty() )
-                        {
-                        contactAddress.setStreet( address );
-                        }
-                    }
-                else if(aFieldString == QContactAddress::FieldLocality )
-                    {
-                    if( contactAddress.locality().isEmpty() )
-                        {
-                        contactAddress.setLocality( address );
-                        }
-                    }
-                else if(aFieldString == QContactAddress::FieldRegion )
-                    {
-                    if( contactAddress.region().isEmpty() )
-                        {
-                        contactAddress.setRegion( address );
-                        }
-                    }
-                else if(aFieldString == QContactAddress::FieldPostcode )
-                    {
-                    if( contactAddress.postcode().isEmpty() )
-                        {
-                        contactAddress.setPostcode( address );
-                        }
-                    }
-                else if(aFieldString == QContactAddress::FieldCountry )
-                    {
-                    if( contactAddress.country().isEmpty() )
-                        {
-                        contactAddress.setCountry( address );
-                        }
-                    }
-                else 
-                    {
-                    return contactDetail;
-                    }
-                return contactAddress;
+                content = aEngine->CreateEmailAddressLC();
+                CleanupStack::Pop();
+                break;
                 }
-        else if( aDetail == QContactNote::DefinitionName )          //--Contact Note-----------------------------
-                    {
-                    QContactNote contactNote;
-                    QString note = QString::fromUtf16(aData.Ptr(),aData.Length());
-                    contactNote.setNote(note);
-                    return contactNote;
-                    }
-        else if( aDetail == QContactFamily::DefinitionName )            //--Contact Family-----------------------------
-                    {
-                    QContactFamily contactFamily;
-                    
-                    for(int i = 0 ; i < aParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
-                        {
-                        if(aParameters->iContactFields.at(i).definitionName() == QContactFamily::DefinitionName && aParameters->iContactFields.at(i).value(QContactDetail::FieldContext) == aFieldContext )
-                            {
-                            contactFamily = aParameters->iContactFields.at(i);
-                            }
-                        }
-                   
-                    QString familyData = QString::fromUtf16(aData.Ptr(),aData.Length());
-                    if(aFieldString == QContactFamily::FieldSpouse )
-                        {
-                        if( contactFamily.spouse().isEmpty() )
-                            {
-                            contactFamily.setSpouse( familyData );
-                            }
-                        }
-                    if(aFieldString == QContactFamily::FieldChildren )
-                        {
-                            QStringList children = contactFamily.children();
-                            children.append( familyData );
-                            contactFamily.setChildren( children );
-                        }
-                    
-                    return contactFamily;
-                    }
+            }
         
-        if( aDetail == QContactAvatar::DefinitionName)                      //--Contact Picture-----------------------------
-                {
-                RFs& fs = CCoeEnv::Static()->FsSession();
-                QContactAvatar contactAvatar;
-                TBuf<KMaxFileName> srcPath;
-                aEngine->RandomPictureFileL(srcPath);
-                TBuf<KMaxFileName> destPath(KTempPath);
-                            
-                if(!BaflUtils::FolderExists( fs, destPath ))
-                    {
-                    BaflUtils::EnsurePathExistsL( fs, destPath );
-                    }
-                
-                TInt err=BaflUtils::CopyFile( fs, srcPath, destPath );
+    
+        //if there is textfield without specified random number
+        textFieldCount = sizeof(CreatorPbkMiscTextFields) / sizeof(DetailFieldInfo);
+        for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex )
+            {
+			if( CreatorPbkMiscTextFields[tfIndex].iFieldCode == aType && CreatorPbkMiscTextFields[tfIndex].iRandomType != RND_TYPE_UNDEF )
+            	{
+				TInt rand =  CreatorPbkMiscTextFields[tfIndex].iRandomType;
+				content = aEngine->RandomString((CCreatorEngine::TRandomStringType) rand).AllocL();
+				break;
+				}
+			}	
+        }
 
-                TParse temp;
-                temp.Set( srcPath,NULL,NULL );
-                destPath.Append(temp.NameAndExt());
-                
-                QString avatarFile = QString::fromUtf16( destPath.Ptr(),destPath.Length() );
-                
-                //QPixmap avatarPix(avatarFile);
-
-                QUrl imageUrl;
-                imageUrl.setUrl(avatarFile);
-                contactAvatar.setImageUrl(imageUrl);
-                //contactAvatar.setAvatar(avatarFile); //deprecated
-                //contactAvatar.setPixmap(avatarPix);
-
-                return contactAvatar;
-                }
-        if( aDetail == QContactAnniversary::DefinitionName) //--Anniversary------------------------------
-                {
-                QContactAnniversary contactAnniversary;
-                QDate date;
-                TTime datetime = aEngine->RandomDate( CCreatorEngine::EDateFuture );
-                date.setDate( datetime.DateTime().Year(),(int) (datetime.DateTime().Month()+1), datetime.DateTime().Day() );
-                contactAnniversary.setOriginalDate( date );
-                return contactAnniversary;
-                }
-        if( aDetail == QContactEmailAddress::DefinitionName) //--Email------------------------------------
+    if( aRand != KErrNotFound && aRand != RND_TYPE_UNDEF ) 
+        {
+        TInt textFieldCount = sizeof(CreatorPbkMiscTextFields) / sizeof(DetailFieldInfo);
+        for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex )
             {
-            QContactEmailAddress email;
-            QString emailAddr = QString::fromUtf16(aData.Ptr(),aData.Length());
-            if( !aFieldContext.isEmpty() )
-            	{
-				email.setContexts( aFieldContext );
-            	}
-            email.setEmailAddress( emailAddr );
-            return email;
-            }
-        if( aDetail == QContactUrl::DefinitionName )    //--Url-------------------------------------------
-            {
-            QContactUrl url;
-            QString urlStr = QString::fromUtf16(aData.Ptr(),aData.Length());
-            if( !aFieldContext.isEmpty() )
+            if( CreatorPbkMiscTextFields[tfIndex].iFieldCode == aType )
                 {
-				url.setContexts( aFieldContext );
+                content = aEngine->RandomString((CCreatorEngine::TRandomStringType) aRand).AllocL();
                 }
-            url.setUrl(urlStr);
-            return url;
             }
-        if( aDetail == QContactBirthday::DefinitionName )   //--Birthday-----------------------------------
-            {
-            QContactBirthday birthday;
-            QDate date;
-            TTime datetime = aEngine->RandomDate( CCreatorEngine::EDatePast );
-            date.setDate( datetime.DateTime().Year(),(int) (datetime.DateTime().Month()+1), datetime.DateTime().Day() );
-            birthday.setDate( date );
-            return birthday;
-            }
-                
-        return contactDetail;
+        }
+	
+	aParam->iContactFields.insert( TCreatorContactField(aType, content) );
+	}
+
+void CCreatorContactField::AddFieldToParamL( CPhonebookParameters* aParam, TInt aType, TPtrC aContent )
+    {
+    aParam->iContactFields.insert( TCreatorContactField(aType, aContent.AllocL()) );
     }
 
-void CCreatorContactField::AddFieldToParam( CPhonebookParameters* aParam, QContactDetail aDetail)
-    {
-     bool replace = false;
-     for(int i = 0 ; i< aParam->iContactFields.count() ; i++) //go through
-          {
-           if( !aDetail.isEmpty() && aDetail.definitionName() == aParam->iContactFields.at(i).definitionName() 
-        		   && aDetail.definitionName() != QContactPhoneNumber::DefinitionName 
-        		   && aDetail.definitionName() != QContactEmailAddress::DefinitionName
-        		   && aDetail.definitionName() != QContactUrl::DefinitionName )
-               {
-               QString context = aDetail.value(QContactDetail::FieldContext);
-               bool isContextEmpty = context.isEmpty();
-               if( isContextEmpty ||  ( aDetail.value(QContactDetail::FieldContext) == aParam->iContactFields.at(i).value(QContactDetail::FieldContext)) )
-                   {
-                   //replace
-                   aParam->iContactFields.replace(i,aDetail);
-                   replace = true;
-                   }
-               }
-          }
-          if(!replace)
-             {
-             if(!aDetail.isEmpty())
-                {
-                aParam->iContactFields.append(aDetail);
-                }
-             }
-      
-    }
 //----------------------------------------------------------------------------
 
 //----------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/engine/src/creator_phonebookapi.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "creator_phonebookapi.h"
+
+CCreatorPhonebookAPI::CCreatorPhonebookAPI ()
+    {
+    mContactMngr = new QContactManager("symbian");
+    }
+
+CCreatorPhonebookAPI::~CCreatorPhonebookAPI ()
+    {
+    if( mContactMngr )
+        {
+        delete mContactMngr;
+        mContactMngr = NULL;
+        }
+    }
+
+quint32 CCreatorPhonebookAPI::saveContact( const QList<QContactDetail>& list )
+    {
+    // create a new contact item
+    QContact store;
+    quint32 id;
+    bool success = false;
+    for(int i = 0 ; i < list.count() ; i++ )
+    	{
+		QContactDetail cntdetail = list.at(i);
+		success = store.saveDetail(&cntdetail);
+    	}
+    /*foreach( QContactDetail cntdetail, list )
+        {
+        success = store.saveDetail( &cntdetail );
+        }
+    */
+    success = mContactMngr->saveContact( &store );
+    id = store.localId();
+    return id;
+    }
+
+quint32 CCreatorPhonebookAPI::createGroup( const QString& groupName )
+	{
+	QContact newGroup;
+	newGroup.setType(QContactType::TypeGroup);
+	QContactName newGroupName;
+	newGroupName.setCustomLabel( groupName );
+	newGroup.saveDetail(&newGroupName);
+	mContactMngr->saveContact(&newGroup);
+	return newGroup.localId();
+	}
+
+int CCreatorPhonebookAPI::numberOfContacts()
+	{
+	QList<QContactLocalId> contacts = mContactMngr->contactIds();
+	return contacts.count();
+	
+	}
+
+bool CCreatorPhonebookAPI::IsContactGroupL( const QContact& contact )
+	{
+	 
+	if( contact.type() == QContactType::TypeGroup )
+		{
+		return true;
+		}
+	return false;
+	}
+
+int CCreatorPhonebookAPI::addContactToGroup( QContactLocalId group, QContactLocalId contact )
+	{
+	QContact newGroup = mContactMngr->contact( group );
+	QContact contactLink = mContactMngr->contact( contact );
+	int ret = 0;
+	if( contact && IsContactGroupL( contactLink ) == false )
+	    {
+        QList<QContactRelationship> relationships = contactLink.relationships(QContactRelationship::HasMember);
+        if( !relationships.count() && contactLink.type() == QContactType::TypeContact ) //just for contacts that are not in relationship - not in group yet
+			{
+			QContactRelationship* contactRel = new QContactRelationship();
+			contactRel->setRelationshipType(QContactRelationship::HasMember);
+			contactRel->setFirst(newGroup.id());
+			contactRel->setSecond( contactLink.id() );
+			mContactMngr->saveRelationship( contactRel );
+			delete contactRel;
+			ret++;
+			}         
+		}
+	return ret;
+	}
+int CCreatorPhonebookAPI::addToGroup(QContactLocalId group, int amount)
+	{
+	QList<QContactLocalId> contacts = mContactMngr->contactIds();
+	int ret = 0;		
+	int tmp = 0;
+	int cnt = 0;
+	
+	for( int i=0; cnt < amount && i < contacts.count() ; i++ )
+		{
+		QContact contact = mContactMngr->contact( mContactMngr->contactIds().at(i) );
+		if( contact.type() == QContactType::TypeContact )
+			{
+			tmp = addContactToGroup(group,mContactMngr->contactIds().at(i)); 
+			ret += tmp;
+			if(tmp)
+				{
+				cnt++;
+				tmp = 0;
+				}
+			}
+		}
+	return ret;
+	}
+
+
+bool CCreatorPhonebookAPI::deleteAllContacts()
+    {
+    QList<QContactLocalId> all = mContactMngr->contactIds();
+    return deleteContacts( all );
+    }
+
+bool CCreatorPhonebookAPI::deleteAllContacts( const QString& type )
+    {
+    QList<QContactLocalId> contactsToDelete;
+    QList<QContactLocalId> contacts = mContactMngr->contactIds();
+    foreach(QContactLocalId contactId, contacts)
+        {
+        QContact contact = mContactMngr->contact( contactId );
+        if( contact.type() == type )
+            {
+            contactsToDelete.append( contact.localId() );
+            }
+        }
+    return deleteContacts( contactsToDelete );
+    }
+
+
+bool CCreatorPhonebookAPI::deleteContacts( const QList<QContactLocalId>& list )
+    {
+    QMap<int, QContactManager::Error> errorMap;
+    return mContactMngr->removeContacts( list, &errorMap );
+    }
+
+QContact CCreatorPhonebookAPI::contact( const QContactLocalId& contactId )
+    {
+    return mContactMngr->contact( contactId );
+    }
+// End of File
--- a/creator/engine/src/creator_phonebookbase.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/src/creator_phonebookbase.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -41,9 +41,16 @@
             iEntriesToBeCreated = 1;
             break;
         case ECreatorPhonebookStart:
-            retval = iEngine->GetEngineWrapper()->ListQueryDialog(_L("Fields in contact"), R_CONTACT_CREATION_TYPE_QUERY, 
-                &iDummy, this, iCommand == ECmdCreatePhoneBookEntryContacts ? ECreatorPhonebookGetContactFields : ECreatorPhonebookGetGroupFields
-                );
+        	if(iCommand == ECmdCreatePhoneBookEntryContacts )
+        		{
+				retval = iEngine->GetEngineWrapper()->ListQueryDialog(_L("Fields in contact"), R_CONTACT_CREATION_TYPE_QUERY, 
+        	                &iDummy, this, ECreatorPhonebookGetContactFields );
+        		}
+        	else
+        		{
+				retval = iEngine->GetEngineWrapper()->ListQueryDialog(_L("Number of contacts "), R_GROUP_CREATION_TYPE_QUERY, 
+        	       	                &iDummy, this, ECreatorPhonebookGetGroupFields );
+        		}
             break;
         case ECreatorPhonebookGetContactFields:
             if(iDummy==0)// first item, use default fields
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/engine/src/creator_phonebookwrapper.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,654 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "engine.h"
+#include "enginewrapper.h"
+#include "creator_contactsetcache.h"
+
+#include "creator_phonebookwrapper.h" 
+#include "creator_traces.h"
+
+#include <bautils.h> 
+
+_LIT(KTempPath, "C:\\Data\\Creator\\");
+
+typedef struct {
+TInt iFieldCode;
+QString iDetail;
+QString iFieldContext;
+QString iFieldString;
+} QDetailFieldInfo;
+//static const TInt RND_TYPE_UNDEF = -99;
+QDetailFieldInfo CreatorPbkTextFields[] = {        
+        { (TInt)CCreatorPhonebookWrapper::EFirstName,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldFirstName).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ELastName,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldLastName).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ECompanyName,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldName).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EJobTitle,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldTitle).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EPrefix,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldPrefix).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ESuffix,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldSuffix).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EMiddleName,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldMiddleName).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrStreetHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldStreet).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrLocalHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldLocality).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrRegionHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldRegion).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrPostCodeHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldPostcode).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrCountryHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldCountry).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrStreetGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldStreet).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrLocalGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldLocality).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrRegionGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldRegion).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrPostCodeGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldPostcode).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrCountryGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldCountry).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrStreetWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldStreet).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrLocalWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldLocality).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrRegionWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldRegion).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrPostCodeWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldPostcode).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrCountryWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldCountry).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EMobilePhoneWork,(QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactPhoneNumber::SubTypeMobile).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ELandPhoneWork,(QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactPhoneNumber::SubTypeLandline).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ENote,(QContactNote::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactNote::FieldNote).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EDepartment,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldDepartment).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAsstName,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldAssistantName).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ESpouse,(QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactFamily::FieldSpouse).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EChildren,(QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactFamily::FieldChildren).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EGenLabel,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),  (QContactName::FieldCustomLabel).operator QString()}
+        };
+                  
+
+typedef struct{
+TInt iFieldCode;
+QString iFieldContext;
+QString iFieldString;
+}PhoneNumInfo;
+PhoneNumInfo CreatorPhoneNumberFields[] =
+    {
+    { CCreatorPhonebookWrapper::ELandPhoneGen,"", "Landline"},
+    { CCreatorPhonebookWrapper::ELandPhoneHome,"Home", "Landline"},
+    { CCreatorPhonebookWrapper::ELandPhoneWork,"Work", "Landline"},                        
+    { CCreatorPhonebookWrapper::EMobilePhoneGen,"","Mobile"},
+    { CCreatorPhonebookWrapper::EMobilePhoneHome,"Home","Mobile"},
+    { CCreatorPhonebookWrapper::EMobilePhoneWork,"Work", "Mobile"},
+    { CCreatorPhonebookWrapper::EFaxNumberGen, "", "Facsimile"},
+    { CCreatorPhonebookWrapper::EFaxNumberHome, "Home", "Facsimile"},
+    { CCreatorPhonebookWrapper::EFaxNumberWork, "Work", "Facsimile"},
+    { CCreatorPhonebookWrapper::EPagerNumber, "Work", "Pager"},
+    { CCreatorPhonebookWrapper::EVideoNumberGen, "", "Video"},
+    { CCreatorPhonebookWrapper::EVideoNumberHome, "Home", "Video"},
+    { CCreatorPhonebookWrapper::EVideoNumberWork, "Work", "Video"},   //{ "Home", "Voice" },//{ "Work", "Voice" },
+    { CCreatorPhonebookWrapper::EAsstPhone, "Work", "Assistant" },
+    { CCreatorPhonebookWrapper::ECarPhone, "Home",  "Car" }
+    };
+
+
+typedef struct{
+	TInt iFieldCode;
+	QString iFieldContext;
+}EmailInfo;
+EmailInfo CreatorEmailFields[] =
+	{
+    {CCreatorPhonebookWrapper::EEmailGen,""},
+    {CCreatorPhonebookWrapper::EEmailHome,(QContactDetail::ContextHome).operator QString()},
+    {CCreatorPhonebookWrapper::EEmailWork,(QContactDetail::ContextWork).operator QString()}
+    };
+
+typedef struct{
+	TInt iFieldCode;
+	QString iFieldContext;
+}UrlInfo;
+UrlInfo CreatorUrlFields[] =
+    {
+    {CCreatorPhonebookWrapper::EUrlGen,""},
+    {CCreatorPhonebookWrapper::EUrlHome,(QContactDetail::ContextHome).operator QString()},
+    {CCreatorPhonebookWrapper::EUrlWork,(QContactDetail::ContextWork).operator QString()}
+    };
+
+CCreatorPhonebookWrapper* CCreatorPhonebookWrapper::NewL()
+    {
+    CCreatorPhonebookWrapper* self = CCreatorPhonebookWrapper::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CCreatorPhonebookWrapper* CCreatorPhonebookWrapper::NewLC()
+    {
+    CCreatorPhonebookWrapper* self = new (ELeave) CCreatorPhonebookWrapper();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+
+CCreatorPhonebookWrapper::CCreatorPhonebookWrapper() 
+    {
+    }
+
+void CCreatorPhonebookWrapper::ConstructL()
+    {
+    LOGSTRING("Creator: CCreatorPhonebookWrapper::ConstructL");
+
+    QT_TRYCATCH_LEAVING( iPhonebookAPI = new CCreatorPhonebookAPI() );
+	
+	}
+	
+
+CCreatorPhonebookWrapper::~CCreatorPhonebookWrapper()
+    {
+    LOGSTRING("Creator: CCreatorPhonebookWrapper::~CCreatorPhonebookWrapper");
+	if( iPhonebookAPI )
+        {
+        delete iPhonebookAPI;
+        iPhonebookAPI = NULL;
+        }
+    }
+
+//----------------------------------------------------------------------------
+
+QList<QContactDetail> CCreatorPhonebookWrapper::CreateContactDetailsFromParameters( const TCreatorContactFields& aFields )
+	{
+	QList<QContactDetail> contDetList;
+	QString content;
+	HBufC* temp;
+	TInt arraySize = sizeof(CreatorPbkTextFields)/sizeof(QDetailFieldInfo);
+	for (TInt i = 0; i < arraySize; i++)
+		{
+	    TCreatorContactFields::const_iterator it = aFields.find(CreatorPbkTextFields[i].iFieldCode);
+		if( it != aFields.end() )
+			{
+		    temp = (*it).second;
+			content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+			QContactDetail contactDetail =  CreateContactDetail(contDetList, CreatorPbkTextFields[i].iDetail,CreatorPbkTextFields[i].iFieldContext,CreatorPbkTextFields[i].iFieldString, content );
+			AddFieldToList( contDetList, contactDetail );
+			}
+		
+		}
+	arraySize = sizeof(CreatorPhoneNumberFields)/sizeof(PhoneNumInfo);
+		for (TInt i = 0; i < arraySize; i++)
+			{
+			TCreatorContactFields::const_iterator it = aFields.find(CreatorPhoneNumberFields[i].iFieldCode);
+			if( it != aFields.end() )
+				{
+			    temp = (*it).second;
+				content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+				QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactPhoneNumber::DefinitionName ,CreatorPhoneNumberFields[i].iFieldContext,CreatorPhoneNumberFields[i].iFieldString, content );
+				AddFieldToList( contDetList, contactDetail );
+				}
+			}
+		
+	arraySize = sizeof(CreatorEmailFields)/sizeof(EmailInfo);
+		for (TInt i = 0; i < arraySize; i++)
+			{
+			TCreatorContactFields::const_iterator it = aFields.find(CreatorEmailFields[i].iFieldCode);
+			if( it != aFields.end() )
+				{
+			    temp = (*it).second;
+				content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+				QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactEmailAddress::DefinitionName ,CreatorEmailFields[i].iFieldContext,"", content );
+				AddFieldToList( contDetList, contactDetail );
+				}
+			}
+		
+	arraySize = sizeof(CreatorUrlFields)/sizeof(UrlInfo);
+			for (TInt i = 0; i < arraySize; i++)
+				{
+				TCreatorContactFields::const_iterator it = aFields.find(CreatorUrlFields[i].iFieldCode);
+				if( it != aFields.end() )
+					{
+				    temp = (*it).second;
+					content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+					QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactUrl::DefinitionName ,CreatorUrlFields[i].iFieldContext,"", content );
+					AddFieldToList( contDetList, contactDetail );
+					}
+				}	
+	arraySize = sizeof(CreatorUrlFields)/sizeof(UrlInfo);
+			for (TInt i = 0; i < arraySize; i++)
+				{
+				TCreatorContactFields::const_iterator it = aFields.find(CreatorUrlFields[i].iFieldCode);
+				if( it != aFields.end() )
+					{
+					temp = (*it).second;
+					content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+					QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactUrl::DefinitionName ,CreatorUrlFields[i].iFieldContext,"", content );
+					AddFieldToList( contDetList, contactDetail );
+					}
+				}
+			
+			TCreatorContactFields::const_iterator it = aFields.find(CCreatorPhonebookWrapper::EThumbnailPic);
+			if( it != aFields.end() )
+				{
+				temp = (*it).second;
+				if(temp)
+					{
+					content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+					QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactAvatar::DefinitionName ,"","", content );
+					AddFieldToList( contDetList, contactDetail );
+					}
+				}
+			it = aFields.find(CCreatorPhonebookWrapper::EAnniversary);
+				if( it != aFields.end() )
+					{
+					temp = (*it).second;
+					if(temp)
+						{
+						content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+						QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactAnniversary::DefinitionName ,"","", content );
+						AddFieldToList( contDetList, contactDetail );
+						}
+					}
+		
+	return contDetList;
+	}
+QContactDetail CCreatorPhonebookWrapper::CreateContactDetail( QList<QContactDetail>& aContactDetailList,QString aDetail, QString aFieldContext, QString aFieldString, QString aData )
+    {
+    QContactDetail contactDetail;
+        
+        if( aDetail == QContactPhoneNumber::DefinitionName)
+            {
+            QContactPhoneNumber phoneNumber;// = contactDetail;
+            if(!aFieldContext.isEmpty())
+            	{
+				phoneNumber.setContexts(aFieldContext);
+            	}
+            phoneNumber.setSubTypes(aFieldString);
+            //QString number = QString::fromUtf16(aData.Ptr(),aData.Length());
+            phoneNumber.setNumber(aData);
+            return phoneNumber;
+            }
+        else if( aDetail == QContactName::DefinitionName )          //--Contact NAME-----------------------------
+            {
+            QContactName contactName;
+            for(int i = 0 ; i < aContactDetailList.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
+                {
+                if(aContactDetailList.at(i).definitionName() == QContactName::DefinitionName )
+                    {
+                    contactName = aContactDetailList.at(i);
+                    }
+                }
+            //QString name = QString::fromUtf16(aData.Ptr(),aData.Length());
+            if(aFieldString == QContactName::FieldFirstName)
+                {
+                if(contactName.firstName().isEmpty())
+                    {
+                    contactName.setFirstName( aData );
+                    }
+                }
+            else if(aFieldString == QContactName::FieldLastName)
+                {
+                if(contactName.lastName().isEmpty())
+                    {
+                    contactName.setLastName( aData );
+                    }
+                }
+            else if(aFieldString == QContactName::FieldMiddleName)
+                {
+                if(contactName.middleName().isEmpty())
+                    {
+                    contactName.setMiddleName( aData );
+                    }
+                }
+            else if(aFieldString == QContactName::FieldPrefix)
+                {
+                if(contactName.prefix().isEmpty())
+                    {
+                    contactName.setPrefix( aData );
+                    }
+                }
+            else if(aFieldString == QContactName::FieldSuffix)
+                {
+                if(contactName.suffix().isEmpty())
+                    {
+                    contactName.setSuffix( aData );
+                    }
+                }
+            else        //QContactName::FieldCustomLabel:
+                {
+                if(contactName.customLabel().isEmpty())
+                    {
+                    contactName.setCustomLabel( aData );
+                    }
+                }
+            return contactName;
+            }
+        else if( aDetail == QContactOrganization::DefinitionName )          //--Contact Company-----------------------------
+            {
+            QContactOrganization contactCompany;
+            
+            for(int i = 0 ; i < aContactDetailList.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
+                {
+                if(aContactDetailList.at(i).definitionName() == QContactOrganization::DefinitionName )
+                    {
+                    contactCompany = aContactDetailList.at(i);
+                    }
+                }
+            
+            //QString company = QString::fromUtf16(aData.Ptr(),aData.Length());
+            if(aFieldString == QContactOrganization::FieldName)
+                {
+                if(contactCompany.name().isEmpty())
+                    {
+                    contactCompany.setName( aData );
+                    }
+                }
+            if(aFieldString == QContactOrganization::FieldTitle)
+                {
+                if(contactCompany.title().isEmpty())
+                    {
+                    contactCompany.setTitle( aData );
+                    }
+                }
+            if(aFieldString == QContactOrganization::FieldDepartment)
+                {
+                QStringList depList = contactCompany.department();
+                depList.append(aData);
+                contactCompany.setDepartment(depList);
+                }
+            if(aFieldString == QContactOrganization::FieldAssistantName)
+                {
+                if(contactCompany.assistantName().isEmpty())
+                    {
+                    contactCompany.setAssistantName( aData );
+                    }
+                }
+            return contactCompany;
+            }
+        else if( aDetail == QContactAddress::DefinitionName )           //--Contact Address-----------------------------
+                {
+                QContactAddress contactAddress;
+                
+                for(int i = 0 ; i < aContactDetailList.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
+                    {
+                    if(aContactDetailList.at(i).definitionName() == QContactAddress::DefinitionName && aContactDetailList.at(i).value(QContactDetail::FieldContext) == aFieldContext )
+                        {
+                        contactAddress = aContactDetailList.at(i);
+                        }
+                    }
+                if( !aFieldContext.isEmpty() )
+                    {
+					contactAddress.setContexts( aFieldContext );
+                    }
+                //QString address = QString::fromUtf16(aData.Ptr(),aData.Length());
+                if(aFieldString == QContactAddress::FieldStreet )
+                    {
+                    if( contactAddress.street().isEmpty() )
+                        {
+                        contactAddress.setStreet( aData );
+                        }
+                    }
+                else if(aFieldString == QContactAddress::FieldLocality )
+                    {
+                    if( contactAddress.locality().isEmpty() )
+                        {
+                        contactAddress.setLocality( aData );
+                        }
+                    }
+                else if(aFieldString == QContactAddress::FieldRegion )
+                    {
+                    if( contactAddress.region().isEmpty() )
+                        {
+                        contactAddress.setRegion( aData );
+                        }
+                    }
+                else if(aFieldString == QContactAddress::FieldPostcode )
+                    {
+                    if( contactAddress.postcode().isEmpty() )
+                        {
+                        contactAddress.setPostcode( aData );
+                        }
+                    }
+                else if(aFieldString == QContactAddress::FieldCountry )
+                    {
+                    if( contactAddress.country().isEmpty() )
+                        {
+                        contactAddress.setCountry( aData );
+                        }
+                    }
+                else 
+                    {
+                    return contactDetail;
+                    }
+                return contactAddress;
+                }
+        else if( aDetail == QContactNote::DefinitionName )          //--Contact Note-----------------------------
+                    {
+                    QContactNote contactNote;
+                    //QString note = QString::fromUtf16(aData.Ptr(),aData.Length());
+                    contactNote.setNote(aData);
+                    return contactNote;
+                    }
+        else if( aDetail == QContactFamily::DefinitionName )            //--Contact Family-----------------------------
+                    {
+                    QContactFamily contactFamily;
+                    
+                    for(int i = 0 ; i < aContactDetailList.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
+                        {
+                        if(aContactDetailList.at(i).definitionName() == QContactFamily::DefinitionName && aContactDetailList.at(i).value(QContactDetail::FieldContext) == aFieldContext )
+                            {
+                            contactFamily = aContactDetailList.at(i);
+                            }
+                        }
+                   
+                    //QString familyData = QString::fromUtf16(aData.Ptr(),aData.Length());
+                    if(aFieldString == QContactFamily::FieldSpouse )
+                        {
+                        if( contactFamily.spouse().isEmpty() )
+                            {
+                            contactFamily.setSpouse( aData );
+                            }
+                        }
+                    if(aFieldString == QContactFamily::FieldChildren )
+                        {
+                            QStringList children = contactFamily.children();
+                            children.append( aData );
+                            contactFamily.setChildren( children );
+                        }
+                    
+                    return contactFamily;
+                    }
+        
+        if( aDetail == QContactAvatar::DefinitionName)                      //--Contact Picture-----------------------------
+                {
+                QContactAvatar contactAvatar;
+                /*TBuf<KMaxFileName> srcPath;
+                aEngine->RandomPictureFileL(srcPath);
+                TBuf<KMaxFileName> destPath(KTempPath);
+                            
+                if(!BaflUtils::FolderExists( fs, destPath ))
+                    {
+                    BaflUtils::EnsurePathExistsL( fs, destPath );
+                    }
+                
+                TInt err=BaflUtils::CopyFile( fs, srcPath, destPath );
+
+                TParse temp;
+                temp.Set( srcPath,NULL,NULL );
+                destPath.Append(temp.NameAndExt());
+                
+                QString avatarFile = QString::fromUtf16( destPath.Ptr(),destPath.Length() );
+                */
+                QUrl imageUrl;
+                imageUrl.setUrl(aData);
+                contactAvatar.setImageUrl(imageUrl);
+
+                return contactAvatar;
+                }
+        if( aDetail == QContactAnniversary::DefinitionName) //--Anniversary------------------------------
+                {
+                QContactAnniversary contactAnniversary;
+                aData.replace(QChar('/'), QChar('-'));
+       		    QDate date = QDate::fromString(aData, "dd-MM-yyyy");
+                //TTime datetime = aEngine->RandomDate( CCreatorEngine::EDateFuture );
+                //date.setDate( datetime.DateTime().Year(),(int) (datetime.DateTime().Month()+1), datetime.DateTime().Day() );
+                contactAnniversary.setOriginalDate( date );
+                return contactAnniversary;
+                }
+        if( aDetail == QContactEmailAddress::DefinitionName) //--Email------------------------------------
+            {
+            QContactEmailAddress email;
+            //QString emailAddr = QString::fromUtf16(aData.Ptr(),aData.Length());
+            if( !aFieldContext.isEmpty() )
+            	{
+				email.setContexts( aFieldContext );
+            	}
+            email.setEmailAddress( aData );
+            return email;
+            }
+        if( aDetail == QContactUrl::DefinitionName )    //--Url-------------------------------------------
+            {
+            QContactUrl url;
+            //QString urlStr = QString::fromUtf16(aData.Ptr(),aData.Length());
+            if( !aFieldContext.isEmpty() )
+                {
+				url.setContexts( aFieldContext );
+                }
+            url.setUrl(aData);
+            return url;
+            }
+        if( aDetail == QContactBirthday::DefinitionName )   //--Birthday-----------------------------------
+            {
+            QContactBirthday birthday;
+            QDate date = QDate::fromString(aData);
+            //TTime datetime = aEngine->RandomDate( CCreatorEngine::EDatePast );
+            //date.setDate( datetime.DateTime().Year(),(int) (datetime.DateTime().Month()+1), datetime.DateTime().Day() );
+            birthday.setDate( date );
+            return birthday;
+            }
+                
+        return contactDetail;
+    }
+
+void CCreatorPhonebookWrapper::AddFieldToList( QList<QContactDetail>& aDetailList, QContactDetail aDetail)
+    {
+     bool replace = false;
+     for(int i = 0 ; i< aDetailList.count() ; i++) //go through
+          {
+           if( !aDetail.isEmpty() && aDetail.definitionName() == aDetailList.at(i).definitionName() 
+        		   && aDetail.definitionName() != QContactPhoneNumber::DefinitionName 
+        		   && aDetail.definitionName() != QContactEmailAddress::DefinitionName
+        		   && aDetail.definitionName() != QContactUrl::DefinitionName )
+               {
+               QString context = aDetail.value(QContactDetail::FieldContext);
+               bool isContextEmpty = context.isEmpty();
+               if( isContextEmpty ||  ( aDetail.value(QContactDetail::FieldContext) == aDetailList.at(i).value(QContactDetail::FieldContext)) )
+                   {
+                   //replace
+                   aDetailList.replace(i,aDetail);
+                   replace = true;
+                   }
+               }
+          }
+          if(!replace)
+             {
+             if(!aDetail.isEmpty())
+                {
+                aDetailList.append(aDetail);
+                }
+             }
+      
+    }
+
+TUint32 CCreatorPhonebookWrapper::CreateContactEntryL(const TCreatorContactFields& aFields)
+    {
+	QList<QContactDetail> list = CreateContactDetailsFromParameters( aFields );
+	
+	return iPhonebookAPI->saveContact( list );
+    }
+
+
+//----------------------------------------------------------------------------
+
+
+
+//----------------------------------------------------------------------------
+
+void CCreatorPhonebookWrapper::DeleteAllL()
+    {
+	iPhonebookAPI->deleteAllContacts();
+    }
+
+//----------------------------------------------------------------------------
+void CCreatorPhonebookWrapper::DeleteAllGroupsL()
+    {
+    LOGSTRING("Creator: CCreatorPhonebookWrapper::DeleteAllGroupsL");
+    
+    iPhonebookAPI->deleteAllContacts( QContactType::TypeGroup );
+
+    }
+
+//----------------------------------------------------------------------------
+void CCreatorPhonebookWrapper::DeleteContactsL( RArray<TUint32>& aContactsToDelete, TUid aStoreUid )
+    {
+	QList<QContactLocalId> contacts; 
+	for( TInt i = 0; i < aContactsToDelete.Count(); ++i )
+	    {
+	    QContact contact = iPhonebookAPI->contact( QContactLocalId( aContactsToDelete[i] ) );
+	    if( (contact.type() == QContactType::TypeGroup && aStoreUid == KUidDictionaryUidContactGroups ) ||  (contact.type() != QContactType::TypeGroup && aStoreUid != KUidDictionaryUidContactGroups) )
+            {
+            contacts.append( QContactLocalId( aContactsToDelete[i] ) );
+            }
+	    }
+    QMap<int, QContactManager::Error> errorMap;
+	iPhonebookAPI->deleteContacts( contacts );
+    }
+
+//----------------------------------------------------------------------------
+TBool CCreatorPhonebookWrapper::HasOtherThanGroupsL()
+    {
+    LOGSTRING("Creator: CCreatorPhonebookWrapper::HasOtherThanGroupsL");
+    TBool result( EFalse );
+    return result;
+    }
+
+
+TUint32 CCreatorPhonebookWrapper::CreateGroupEntryL( HBufC* aGroupName )
+    {
+	TUint32 id = 0;
+	QString groupName = QString::fromUtf16( aGroupName->Des().Ptr(), aGroupName->Length() );
+	
+	id = iPhonebookAPI->createGroup( groupName );
+	
+	return id; 
+    }
+TInt CCreatorPhonebookWrapper::NumberOfContacts()
+	{
+	//return all stored contacts
+	return iPhonebookAPI->numberOfContacts();
+	}
+
+TInt CCreatorPhonebookWrapper::AddContactToGroup( TUint32 aGroupId, TUint32 aContact )
+	{
+	QContactLocalId group = QContactLocalId(aGroupId);
+	QContactLocalId contact = QContactLocalId(aContact);
+	
+	TInt ret = iPhonebookAPI->addContactToGroup(group, contact);
+
+	return ret;
+	}
+TInt CCreatorPhonebookWrapper::AddToGroup( TUint32 aGroupId, TInt aAmount )
+	{
+	QContactLocalId group = QContactLocalId(aGroupId);
+	TInt ret = iPhonebookAPI->addToGroup( group, (int) aAmount );
+	return ret;
+	}
+
+
+//----------------------------------------------------------------------------
+
+TInt CCreatorPhonebookWrapper::CreateSubscribedContactEntryL()
+    {
+    LOGSTRING("Creator: CCreatorPhonebookWrapper::CreateSubscribedContactEntryL");
+
+    return KErrNotSupported;
+    }
+
--- a/creator/engine/src/creator_scriptelementfactory.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/engine/src/creator_scriptelementfactory.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -23,13 +23,13 @@
 #include "creator_calendarelement.h"
 #include "creator_messageelement.h"
 #include "creator_fileelement.h"
-#include "creator_browserelement.h"
+//#include "creator_browserelement.h"
 #include "creator_logelement.h"
 //#include "creator_noteelement.h"
 //#include "creator_impselement.h"
 #include "creator_landmarkelement.h"
 #include "creator_mailboxelement.h"
-#include "creator_connectionmethodelement.h"
+//#include "creator_connectionmethodelement.h"
 
 CCreatorScriptElement* TCreatorScriptElementFactory::CreateElementL(CCreatorEngine* aEngine, const TDesC& aElementName, const TDesC& aContext )
     {   
@@ -73,6 +73,7 @@
         {
         return CCreatorFileElement::NewL(aEngine, aElementName, aContext);
         }
+    /*
     else if( aElementName == creatorbrowser::KBookmark ||
             aElementName == creatorbrowser::KBookmarkFolder ||
             aElementName == creatorbrowser::KSavedPage ||
@@ -80,6 +81,7 @@
         {
         return CCreatorBrowserElement::NewL(aEngine, aElementName, aContext);
         }
+    */
     else if( aElementName == creatorlog::KLog )
         {
         return CCreatorLogElement::NewL(aEngine, aElementName, aContext);
@@ -106,10 +108,12 @@
         {
         return CCreatorMailboxElement::NewL(aEngine, aElementName, aContext);
         }
+/*    
     else if( aElementName == creatorconnectionmethod::KCm )
     	{
     	return CCreatorConnectionMethodElement::NewL(aEngine, aElementName, aContext);
     	}
+*/    	
     else
         {
         return CCreatorScriptElement::NewL(aEngine, aElementName, aContext);
--- a/creator/engine/src/creator_virtualphonebook.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1777 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include "engine.h"
-#include "enginewrapper.h"
-#include "creator_virtualphonebook.h" 
-#include "creator_traces.h"
-#include "creator_contactsetcache.h"
-
-#include <cvpbkcontactstoreuriarray.h>
-#include <vpbkcontactstoreuris.h>
-#include <tvpbkcontactstoreuriptr.h>
-#include <mvpbkcontactgroup.h>
-#include <mvpbkcontactstore.h>
-#include <cvpbkcontactmanager.h>
-#include <mvpbkcontactstorelist.h>
-#include <mvpbkcontactstorelistobserver.h>
-#include <mvpbkcontactoperationbase.h>
-#include <mvpbkstorecontact.h>
-#include <mvpbkcontactstoreproperties.h>
-#include <mvpbkcontactfielddata.h>
-#include <mvpbkfieldtype.h>
-#include <mvpbkcontactfieldtextdata.h>
-#include <mvpbkcontactfieldbinarydata.h>
-#include <mvpbkcontactfielddatetimedata.h>
-#include <CVPbkContactViewDefinition.h>
-#include <mvpbkcontactview.h>
-
-#include <vpbkcontactview.hrh>
-#include <vpbkeng.rsg>
-
-typedef struct {
-TInt iFieldCode;
-TInt iRandomType;
-} FieldInfo;
-static const TInt RND_TYPE_UNDEF = -99;
-FieldInfo CreatorVPbkMiscTextFields[] = {        
-        {R_VPBK_FIELD_TYPE_FIRSTNAME, (TInt) CCreatorEngine::EFirstName},
-        {R_VPBK_FIELD_TYPE_FIRSTNAMEREADING, (TInt) CCreatorEngine::EFirstName},
-        {R_VPBK_FIELD_TYPE_LASTNAME, (TInt) CCreatorEngine::ESurname},
-        {R_VPBK_FIELD_TYPE_LASTNAMEREADING, (TInt) CCreatorEngine::ESurname},
-        {R_VPBK_FIELD_TYPE_COMPANYNAME, (TInt) CCreatorEngine::ECompany},
-        {R_VPBK_FIELD_TYPE_JOBTITLE, (TInt) CCreatorEngine::EJobTitle},
-        {R_VPBK_FIELD_TYPE_PREFIX, (TInt) CCreatorEngine::EPrefix},
-        {R_VPBK_FIELD_TYPE_SUFFIX, (TInt) CCreatorEngine::ESuffix},
-        {R_VPBK_FIELD_TYPE_SECONDNAME, (TInt) CCreatorEngine::EFirstName},
-        {R_VPBK_FIELD_TYPE_ADDRLABELGEN, (TInt) CCreatorEngine::EAddress},
-        {R_VPBK_FIELD_TYPE_ADDRPOGEN, (TInt) CCreatorEngine::EPobox},
-        {R_VPBK_FIELD_TYPE_ADDREXTGEN, (TInt) CCreatorEngine::EAddress},
-        {R_VPBK_FIELD_TYPE_ADDRSTREETGEN, (TInt) CCreatorEngine::EAddress},
-        {R_VPBK_FIELD_TYPE_ADDRLOCALGEN, (TInt) CCreatorEngine::ECity},
-        {R_VPBK_FIELD_TYPE_ADDRREGIONGEN, (TInt) CCreatorEngine::EState},
-        {R_VPBK_FIELD_TYPE_ADDRPOSTCODEGEN, (TInt) CCreatorEngine::EPostcode},
-        {R_VPBK_FIELD_TYPE_ADDRCOUNTRYGEN, (TInt) CCreatorEngine::ECountry},
-        {R_VPBK_FIELD_TYPE_ADDRLABELHOME, (TInt) CCreatorEngine::EAddress},
-        {R_VPBK_FIELD_TYPE_ADDRPOHOME, (TInt) CCreatorEngine::EPobox},
-        {R_VPBK_FIELD_TYPE_ADDREXTHOME, (TInt) CCreatorEngine::EAddress},
-        {R_VPBK_FIELD_TYPE_ADDRSTREETHOME, (TInt) CCreatorEngine::EAddress},
-        {R_VPBK_FIELD_TYPE_ADDRLOCALHOME, (TInt) CCreatorEngine::ECity},
-        {R_VPBK_FIELD_TYPE_ADDRREGIONHOME, (TInt) CCreatorEngine::EState},
-        {R_VPBK_FIELD_TYPE_ADDRPOSTCODEHOME, (TInt) CCreatorEngine::EPostcode},
-        {R_VPBK_FIELD_TYPE_ADDRCOUNTRYHOME, (TInt) CCreatorEngine::ECountry},
-        {R_VPBK_FIELD_TYPE_ADDRLABELWORK, (TInt) CCreatorEngine::EAddress},
-        {R_VPBK_FIELD_TYPE_ADDRPOWORK, (TInt) CCreatorEngine::EPobox},
-        {R_VPBK_FIELD_TYPE_ADDREXTWORK, (TInt) CCreatorEngine::EAddress},
-        {R_VPBK_FIELD_TYPE_ADDRSTREETWORK, (TInt) CCreatorEngine::EAddress},
-        {R_VPBK_FIELD_TYPE_ADDRLOCALWORK, (TInt) CCreatorEngine::ECity},
-        {R_VPBK_FIELD_TYPE_ADDRREGIONWORK, (TInt) CCreatorEngine::EState},
-        {R_VPBK_FIELD_TYPE_ADDRPOSTCODEWORK, (TInt) CCreatorEngine::EPostcode},
-        {R_VPBK_FIELD_TYPE_ADDRCOUNTRYWORK, (TInt) CCreatorEngine::ECountry},
-        {R_VPBK_FIELD_TYPE_POC, (TInt) CCreatorEngine::EPhoneNumber},
-        {R_VPBK_FIELD_TYPE_SWIS, (TInt) CCreatorEngine::EPhoneNumber},
-        {R_VPBK_FIELD_TYPE_SIP, (TInt) CCreatorEngine::EPhoneNumber},
-        {R_VPBK_FIELD_TYPE_DTMFSTRING, (TInt) CCreatorEngine::EFirstName},
-        {R_VPBK_FIELD_TYPE_NOTE,(TInt)  CCreatorEngine::EMemoText},
-        {R_VPBK_FIELD_TYPE_MIDDLENAME, (TInt) CCreatorEngine::EFirstName},
-        {R_VPBK_FIELD_TYPE_DEPARTMENT, (TInt) CCreatorEngine::ECompany},
-        {R_VPBK_FIELD_TYPE_ASSTNAME, (TInt) CCreatorEngine::EFirstName},
-        {R_VPBK_FIELD_TYPE_SPOUSE, (TInt) CCreatorEngine::EFirstName},
-        {R_VPBK_FIELD_TYPE_CHILDREN, (TInt) CCreatorEngine::EFirstName},
-        {R_VPBK_FIELD_TYPE_SYNCCLASS, RND_TYPE_UNDEF},
-        {R_VPBK_FIELD_TYPE_LOCPRIVACY, RND_TYPE_UNDEF},
-        {R_VPBK_FIELD_TYPE_GENLABEL, (TInt) CCreatorEngine::EFirstName},
-        {R_VPBK_FIELD_TYPE_WVADDRESS, (TInt) CCreatorEngine::EPhoneNumber},
-        {R_VPBK_FIELD_TYPE_RINGTONE, RND_TYPE_UNDEF},
-        {R_VPBK_FIELD_TYPE_THUMBNAILPIC, RND_TYPE_UNDEF},
-        {R_VPBK_FIELD_TYPE_CALLEROBJTEXT, (TInt) CCreatorEngine::EFirstName}
-        };
-                    
-TInt CreatorVPbkBinaryFields[] = {
-        R_VPBK_FIELD_TYPE_CALLEROBJIMG//,
-        //R_VPBK_FIELD_TYPE_THUMBNAILPATH
-        };
-
-TInt CreatorVPbkDateTimeFields[] = {
-        R_VPBK_FIELD_TYPE_ANNIVERSARY
-        };
-
-//----------------------------------------------------------------------------
-TInt CreatorVPbkPhoneNumberFields[] =
-    {
-    R_VPBK_FIELD_TYPE_LANDPHONEGEN,
-    R_VPBK_FIELD_TYPE_LANDPHONEHOME,
-    R_VPBK_FIELD_TYPE_LANDPHONEWORK,                        
-    R_VPBK_FIELD_TYPE_MOBILEPHONEGEN,
-    R_VPBK_FIELD_TYPE_MOBILEPHONEHOME,
-    R_VPBK_FIELD_TYPE_MOBILEPHONEWORK,
-    R_VPBK_FIELD_TYPE_FAXNUMBERGEN,
-    R_VPBK_FIELD_TYPE_FAXNUMBERHOME,
-    R_VPBK_FIELD_TYPE_FAXNUMBERWORK,
-    R_VPBK_FIELD_TYPE_PAGERNUMBER,           
-    R_VPBK_FIELD_TYPE_VIDEONUMBERGEN,
-    R_VPBK_FIELD_TYPE_VIDEONUMBERHOME,
-    R_VPBK_FIELD_TYPE_VIDEONUMBERWORK,
-    R_VPBK_FIELD_TYPE_VOIPGEN,
-    R_VPBK_FIELD_TYPE_VOIPHOME,
-    R_VPBK_FIELD_TYPE_VOIPWORK,
-    R_VPBK_FIELD_TYPE_ASSTPHONE,
-    R_VPBK_FIELD_TYPE_CARPHONE
-    };
-
-TInt CreatorVPbkUrlFields[] =
-    {
-    R_VPBK_FIELD_TYPE_URLGEN,
-    R_VPBK_FIELD_TYPE_URLHOME,
-    R_VPBK_FIELD_TYPE_URLWORK
-    };
-
-TInt CreatorVPbkEmailFields[] =
-    {
-    R_VPBK_FIELD_TYPE_EMAILGEN,
-    R_VPBK_FIELD_TYPE_EMAILHOME,
-    R_VPBK_FIELD_TYPE_EMAILWORK
-    };
-
-//----------------------------------------------------------------------------
-
-CVirtualPhonebookParameters::CVirtualPhonebookParameters()
-    {
-    LOGSTRING("Creator: CVirtualPhonebookParameters::CVirtualPhonebookParameters");
-    iGroupName = HBufC::New(KPhonebookFieldLength);  
-    }
-
-CVirtualPhonebookParameters::~CVirtualPhonebookParameters()
-    {
-    LOGSTRING("Creator: CVirtualPhonebookParameters::~CVirtualPhonebookParameters");
-
-    delete iGroupName;   
-    iContactFields.ResetAndDestroy();
-    iContactFields.Close();
-    iLinkIds.Reset();
-    iLinkIds.Close();
-    }
-
-void CVirtualPhonebookParameters::ParseL(CCommandParser* /*parser*/, TParseParams /*aCase = 0*/)
-	{
-	}
-
-TInt CVirtualPhonebookParameters::ScriptLinkId() const
-    {
-    return iLinkId;
-    }
-
-void CVirtualPhonebookParameters::SetScriptLinkId(TInt aLinkId)
-    {
-    iLinkId = aLinkId;
-    }
-
-//----------------------------------------------------------------------------
-
-CCreatorVirtualPhonebook* CCreatorVirtualPhonebook::NewL(CCreatorEngine* aEngine)
-    {
-    CCreatorVirtualPhonebook* self = CCreatorVirtualPhonebook::NewLC(aEngine);
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-CCreatorVirtualPhonebook* CCreatorVirtualPhonebook::NewLC(CCreatorEngine* aEngine)
-    {
-    CCreatorVirtualPhonebook* self = new (ELeave) CCreatorVirtualPhonebook;
-    CleanupStack::PushL(self);
-    self->ConstructL(aEngine);
-    return self;
-    }
-
-CCreatorVirtualPhonebook::CCreatorVirtualPhonebook()
-    {    
-    iAddAllFields = EFalse;
-    }
-
-void CCreatorVirtualPhonebook::ConstructL(CCreatorEngine* aEngine)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::ConstructL");
-
-    iContactLinkArray = CVPbkContactLinkArray::NewL();
-    iContactsToDelete = CVPbkContactLinkArray::NewL();
-    iContactGroupsToDelete = CVPbkContactLinkArray::NewL();
-    
-    iEngine = aEngine;
-    SetDefaultParameters();
-    
-    // initialize virtual phonebook
-    CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewLC();
-    uriArray->AppendL( TVPbkContactStoreUriPtr(VPbkContactStoreUris::DefaultCntDbUri()));
-    iContactManager = CVPbkContactManager::NewL( *uriArray, &CCoeEnv::Static()->FsSession());
-    CleanupStack::PopAndDestroy(uriArray);
-    
-    //When the contact manager is created, the stores is opened
-    MVPbkContactStoreList& storeList = iContactManager->ContactStoresL();
-    
-    iWaiter = CAsyncWaiter::NewL();
-
-    //MVPbkContactStoreListObserver must give as parameter    
-    storeList.OpenAllL(*this);
-    // wait for OpenComplete() callback
-    iWaiter->StartAndWait();
-    
-    _LIT(dbUri, "cntdb://c:contacts.cdb");
-    const TVPbkContactStoreUriPtr uri = TVPbkContactStoreUriPtr(dbUri);
-       
-    iStore = storeList.Find(uri);    
-    iOpCounter = 0;    
-    }
-
-TBool CCreatorVirtualPhonebook::IsActive()
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::IsActive");
-    return iOperation != NULL;
-    }
-
-void CCreatorVirtualPhonebook::CancelOperation()
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::CancelOperation");
-    iCancelCbRequested = ETrue;    
-    }
-
-CCreatorVirtualPhonebook::~CCreatorVirtualPhonebook()
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::~CCreatorVirtualPhonebook");
-    
-    // this is done only once per phonebook operation
-    if ( iContactsToDelete && iContactsToDelete->Count() )
-        {
-        TRAP_IGNORE( StoreLinksForDeleteL( *iContactsToDelete, KUidDictionaryUidContacts ) );
-        }
-    delete iContactsToDelete;
-    if ( iContactGroupsToDelete && iContactGroupsToDelete->Count() )
-        {
-        TRAP_IGNORE( StoreLinksForDeleteL( *iContactGroupsToDelete, KUidDictionaryUidContactGroups ) );
-        }
-    delete iContactGroupsToDelete;
-    
-    iPreviousDeleteLinks.ResetAndDestroy();
-    
-    delete iOperation;
-    
-    TInt err = 0;
-    TRAP(err, CompactPbkDatabaseL( ETrue ));
-
-    if(iContactResults)
-    	{
-    	delete iContactResults;
-    	}
-    
-    delete iContactLinkArray;
-    delete iContactGroupsInStore;
-    
-    if(iContactManager)
-    	{
-    	TRAP(err, iContactManager->ContactStoresL().CloseAll(*this));
-    	delete iContactManager;
-    	}
-    if(iWaiter)
-    	{
-    	delete iWaiter;    
-    	}
-    if (iParameters)
-    	{
-        delete iParameters;
-    	}
-    }
-
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::DeleteAllL()
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::DeleteAllL");
-    
-    // Delete all contacts, not contact groups
-    
-    //get field types
-    const MVPbkFieldTypeList& fieldList = iStore->StoreProperties().SupportedFields();
-        
-    // get all contact links, results will be set to iContactResults
-    MVPbkContactOperationBase* operation = iContactManager->FindL( _L(""), fieldList , *this );
-    if ( operation )
-        {
-        iWaiter->StartAndWait(); //Making asynchronous FindL to synchronous
-        delete operation;
-        }
-    
-    while( iContactResults->Count() && 
-           !iCancelCbRequested &&
-           HasOtherThanGroupsL( iContactResults ) )
-        {
-        // delete all found contacts
-        DeleteContactsL( iContactResults, EFalse );
-        
-        if ( !iCancelCbRequested )
-            {
-            // find next set of contacts to delete
-            MVPbkContactOperationBase* operation = iContactManager->FindL( _L(""), fieldList , *this );
-            if ( operation )
-                {
-                iWaiter->StartAndWait(); //Making asynchronous FindL to synchronous
-                delete operation;
-                }
-            }
-        }
-    
-    if ( iCancelCbRequested && iEngine )
-        {
-        // User cancelled, must callback to finish terminatio sequence
-        iEngine->CancelComplete();
-        }
-    else
-        {
-        // contacts deleted, remove the Creator internal contact registry
-        // (no callback required)
-        CDictionaryFileStore* store = iEngine->FileStoreLC();
-        if ( store )
-            {
-            store->Remove( KUidDictionaryUidContacts );
-            store->CommitL();        
-            }
-        CleanupStack::PopAndDestroy( store );
-        }    
-    }
-
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::DeleteAllCreatedByCreatorL()
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::DeleteAllCreatedByCreatorL");
-    DeleteItemsCreatedWithCreatorL( KUidDictionaryUidContacts );
-    }
-
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::DeleteAllGroupsL()
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::DeleteAllGroupsL");
-    User::LeaveIfNull( iStore );
-    MVPbkContactLinkArray* groups = iStore->ContactGroupsLC();
-    DeleteContactsL( groups, ETrue );
-    CleanupStack::PopAndDestroy(); // cannot use groups as parameter
-    }
-
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::DeleteAllGroupsCreatedByCreatorL()
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::DeleteAllGroupsCreatedByCreatorL");
-    DeleteItemsCreatedWithCreatorL( KUidDictionaryUidContactGroups );
-    }
-
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::DeleteContactsL( MVPbkContactLinkArray* aContacts, TBool aGroup )
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::DeleteContactsL");
-    const MVPbkContactLink* link( NULL );
-    delete iOperation;
-    iOperation = NULL;
-    TInt i(0);
-    while ( aContacts && i < aContacts->Count() && !iCancelCbRequested )
-        {
-        link = &aContacts->At( i++ );
-        if ( aGroup == IsContactGroupL( *link ) )
-            {
-            iOperation = iContactManager->RetrieveContactL( *link, *this );
-            // see VPbkSingleContactOperationComplete
-            if ( iOperation )
-                {
-                iWaiter->StartAndWait();
-                delete iOperation;
-                iOperation = NULL;
-                }            
-            }
-        link = NULL;
-        }
-    }
-
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::DeleteItemsCreatedWithCreatorL( TUid aStoreUid )
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::DeleteItemsCreatedWithCreatorL");
-    __ASSERT_ALWAYS( aStoreUid == KUidDictionaryUidContacts || 
-                     aStoreUid == KUidDictionaryUidContactGroups,
-                     User::Panic( _L("CCreatorVPb"), KErrArgument ) );
-    CDictionaryFileStore* store = iEngine->FileStoreLC();
-    User::LeaveIfNull( store );
-    if ( store->IsPresentL( aStoreUid ) )
-        {
-        TRAP_IGNORE( DoDeleteItemsCreatedWithCreatorL( aStoreUid, store ) );
-
-        if ( iCancelCbRequested && iEngine )
-            {
-            iEngine->CancelComplete();
-            }
-        else
-            {
-            // contacts deleted, remove the Creator internal contact registry
-            store->Remove( aStoreUid );
-            store->CommitL();            
-            }
-        }
-    CleanupStack::PopAndDestroy( store );
-    }
-
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::DoDeleteItemsCreatedWithCreatorL( TUid aStoreUid, CDictionaryFileStore* aStore )
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::DoDeleteItemsCreatedWithCreatorL");
-    RDictionaryReadStream in;
-    in.OpenLC( *aStore, aStoreUid );
-    MVPbkContactLinkArray* contactsToDelete = NULL;
-    // fetch contact links from store
-    while ( ( contactsToDelete = iContactManager->CreateLinksLC( in ) ) != NULL && // will leave with KErrEof
-            !iCancelCbRequested ) 
-        {
-        DeleteContactsL( contactsToDelete, aStoreUid == KUidDictionaryUidContactGroups );
-        // PopAndDestroy for contactsToDelete causes E32USER-CBase:90
-        // however there is no mem-leak even if not deleting contactsToDelete object
-        }
-    CleanupStack::PopAndDestroy(); // in
-    }
-
-//----------------------------------------------------------------------------
-TBool CCreatorVirtualPhonebook::HasOtherThanGroupsL( MVPbkContactLinkArray* aContacts )
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::HasOtherThanGroupsL");
-    TBool result( EFalse );
-    TInt i(0);
-    while ( aContacts && i < aContacts->Count() && !iCancelCbRequested && !result )
-        {
-        if ( !IsContactGroupL( aContacts->At( i++ ) ) )
-            {
-            result = ETrue;
-            }
-        }
-    return result;
-    }
-
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::VPbkSingleContactOperationComplete(
-                MVPbkContactOperationBase& /*aOperation*/,
-                MVPbkStoreContact* aContact )
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::VPbkSingleContactOperationComplete");
-    
-    // This callback is currently used only for deleting a contact
-    // See DeleteContactsL
-    
-    TRAP_IGNORE( 
-            aContact->PushL();
-            aContact->DeleteL( *this );
-            CleanupStack::PopAndDestroy( aContact );
-        );
-    }
-
-void CCreatorVirtualPhonebook::VPbkSingleContactOperationFailed(
-                MVPbkContactOperationBase& /*aOperation*/, 
-                TInt /*aError*/ )
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::VPbkSingleContactOperationFailed");
-    iWaiter->Cancel();
-    }
-
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::StoreLinksForDeleteL( MVPbkContactLinkArray& aLinks, TUid aStoreUid )
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::StoreLinksForDeleteL");
-    CDictionaryFileStore* store = iEngine->FileStoreLC();
-    User::LeaveIfNull( store );
-    
-    // backup previous contact links from store
-    // otherwise they would be overwritten when calling out.WriteL
-    MVPbkContactLinkArray* previousLinks( NULL );
-    if ( store->IsPresentL( aStoreUid ) )
-        {
-        RDictionaryReadStream in;
-        in.OpenLC( *store, aStoreUid );        
-        TRAP_IGNORE( 
-            while ( ( previousLinks = iContactManager->CreateLinksLC( in )) != NULL ) // will leave with KErrEof
-                {
-                CleanupStack::Pop(); // previousLinks
-                iPreviousDeleteLinks.Append( previousLinks );
-                previousLinks = NULL;
-                }
-            );
-        CleanupStack::PopAndDestroy(); // in
-        }
-
-    RDictionaryWriteStream out;       
-    out.AssignLC( *store, aStoreUid );
-    
-    // restore previous links
-    for ( TInt i = 0; i < iPreviousDeleteLinks.Count(); i++ )
-        {
-        out.WriteL( *iPreviousDeleteLinks[i]->PackLC() );
-        CleanupStack::PopAndDestroy(); // PackLC            
-        }
-    iPreviousDeleteLinks.ResetAndDestroy();
-    
-    // write new links
-    out.WriteL( *aLinks.PackLC() );
-    out.CommitL();
-    CleanupStack::PopAndDestroy(); // aLinks.PackLC
-    CleanupStack::PopAndDestroy(); // out
-    
-    store->CommitL();
-    CleanupStack::PopAndDestroy( store );
-    }
-
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::AddFieldToParamsL(TInt aFieldType, const TDesC& aData)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::AddFieldToParamsL(TInt aFieldType, const TDesC& aData)");
-    if(iParameters == 0)
-        return;
-    CCreatorContactField* field = CCreatorContactField::NewL(aFieldType, aData);
-    CleanupStack::PushL(field);
-    iParameters->iContactFields.AppendL(field);
-    CleanupStack::Pop();
-    }
-
-void CCreatorVirtualPhonebook::AddFieldToParamsL(TInt aFieldType, const TDesC8& aData)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::AddFieldToParamsL(TInt aFieldType, const TDesC8& aData)");
-    if(iParameters == 0)
-        return;
-    CCreatorContactField* field = CCreatorContactField::NewL(aFieldType, aData);
-    CleanupStack::PushL(field);
-    iParameters->iContactFields.AppendL(field);
-    CleanupStack::Pop();
-    }
-
-void CCreatorVirtualPhonebook::AddFieldToParamsL(TInt aFieldType, const TTime& aData)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::AddFieldToParamsL(TInt aFieldType, const TTime& aData)");
-    if(iParameters == 0)
-        return;
-    CCreatorContactField* field = CCreatorContactField::NewL(aFieldType, aData);
-    CleanupStack::PushL(field);
-    iParameters->iContactFields.AppendL(field);
-    CleanupStack::Pop();
-    }
-       
-//----------------------------------------------------------------------------
-TInt CCreatorVirtualPhonebook::iPhoneNumberFields[] =
-    {
-    R_VPBK_FIELD_TYPE_LANDPHONEGEN,
-    R_VPBK_FIELD_TYPE_LANDPHONEHOME,
-    R_VPBK_FIELD_TYPE_LANDPHONEWORK,                        
-    R_VPBK_FIELD_TYPE_MOBILEPHONEGEN,
-    R_VPBK_FIELD_TYPE_MOBILEPHONEHOME,
-    R_VPBK_FIELD_TYPE_MOBILEPHONEWORK,
-    R_VPBK_FIELD_TYPE_FAXNUMBERGEN,
-    R_VPBK_FIELD_TYPE_FAXNUMBERHOME,
-    R_VPBK_FIELD_TYPE_FAXNUMBERWORK,
-    R_VPBK_FIELD_TYPE_PAGERNUMBER,           
-    R_VPBK_FIELD_TYPE_VIDEONUMBERGEN,
-    R_VPBK_FIELD_TYPE_VIDEONUMBERHOME,
-    R_VPBK_FIELD_TYPE_VIDEONUMBERWORK,
-    R_VPBK_FIELD_TYPE_VOIPGEN,
-    R_VPBK_FIELD_TYPE_VOIPHOME,
-    R_VPBK_FIELD_TYPE_VOIPWORK,
-    R_VPBK_FIELD_TYPE_ASSTPHONE,
-    R_VPBK_FIELD_TYPE_CARPHONE
-    };
-
-TInt CCreatorVirtualPhonebook::iUrlFields[] =
-    {
-    R_VPBK_FIELD_TYPE_URLGEN,
-    R_VPBK_FIELD_TYPE_URLHOME,
-    R_VPBK_FIELD_TYPE_URLWORK
-    };
-
-TInt CCreatorVirtualPhonebook::iEmailFields[] =
-    {
-    R_VPBK_FIELD_TYPE_EMAILGEN,
-    R_VPBK_FIELD_TYPE_EMAILHOME,
-    R_VPBK_FIELD_TYPE_EMAILWORK
-    };
-
-void CCreatorVirtualPhonebook::InitializeContactParamsL(/*CCreatorModuleBaseParameters* aParameters*/)
-    {
-    LOGSTRING("Creator: CCreatorPhonebook::InitializeContactParamsL");        
-    iParameters = new (ELeave) CVirtualPhonebookParameters;
-        
-    iParameters->iNumberOfPhoneNumberFields = iNumberOfPhoneNumberFields;
-    iParameters->iNumberOfURLFields = iNumberOfURLFields;
-    iParameters->iNumberOfEmailAddressFields = iNumberOfEmailAddressFields;       
-        
-    TPtrC firstname = iEngine->RandomString(CCreatorEngine::EFirstName);
-    TPtrC lastname  = iEngine->RandomString(CCreatorEngine::ESurname);               
-                    
-    if( iAddAllFields )
-        {
-        // Add text fields:
-        TInt textFieldCount = sizeof(CreatorVPbkMiscTextFields) / sizeof(FieldInfo);
-        for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex )
-            {                
-            CCreatorContactField* field = CCreatorContactField::NewL(CreatorVPbkMiscTextFields[tfIndex].iFieldCode, KNullDesC);
-            CleanupStack::PushL(field);
-            field->SetRandomParametersL(CCreatorContactField::ERandomLengthDefault);
-            iParameters->iContactFields.AppendL(field);
-            CleanupStack::Pop(field);
-            }
-            
-        // Add binary fields:
-        TInt binFieldCount = sizeof(CreatorVPbkBinaryFields) / sizeof(TInt);
-        for( TInt bfIndex = 0; bfIndex < binFieldCount; ++bfIndex )
-            {                
-            CCreatorContactField* field = CCreatorContactField::NewL(CreatorVPbkBinaryFields[bfIndex], KNullDesC8);
-            CleanupStack::PushL(field);
-            field->SetRandomParametersL(CCreatorContactField::ERandomLengthDefault);
-            iParameters->iContactFields.AppendL(field);
-            CleanupStack::Pop(field);
-            }
-            
-        // Add date-time fields:
-        TInt dtFieldCount = sizeof(CreatorVPbkDateTimeFields) / sizeof(TInt);
-        for( TInt dtIndex = 0; dtIndex < dtFieldCount; ++dtIndex )
-            {
-            AddFieldToParamsL(CreatorVPbkDateTimeFields[dtIndex], iEngine->RandomDate(CCreatorEngine::EDateFuture));
-            }
-
-        AddFieldToParamsL(R_VPBK_FIELD_TYPE_CALLEROBJIMG, KNullDesC8);        
-        AddFieldToParamsL(R_VPBK_FIELD_TYPE_THUMBNAILPIC, KNullDesC8);        
-        AddFieldToParamsL(R_VPBK_FIELD_TYPE_CALLEROBJTEXT, firstname);
-        }
-    else
-        {                      
-        AddFieldToParamsL(R_VPBK_FIELD_TYPE_FIRSTNAME, firstname);            
-        AddFieldToParamsL(R_VPBK_FIELD_TYPE_LASTNAME, lastname);            
-        }
-                    
-    // Phone numbers:
-    TInt arraySize = sizeof(iPhoneNumberFields)/sizeof(TInt);
-    TInt index = 0;
-    for (TInt i=0; i<iParameters->iNumberOfPhoneNumberFields; i++ )
-        {            
-        if( index >= arraySize )
-            {
-            index = 0;
-            }
-        if( arraySize > 0  )
-            {
-            CCreatorContactField* field = CCreatorContactField::NewL(iPhoneNumberFields[index], KNullDesC);
-            CleanupStack::PushL(field);
-            field->SetRandomParametersL(CCreatorContactField::ERandomLengthDefault);
-            iParameters->iContactFields.AppendL(field);
-            CleanupStack::Pop(field);
-            }
-        ++index;
-        }
-            
-       
-    // URLs:
-    arraySize = sizeof(iUrlFields)/sizeof(TInt);
-    index = 0;
-    for( TInt i = 0; i < iParameters->iNumberOfURLFields; ++i)
-        {
-        if( index >= arraySize )
-            {
-            index = 0;
-            }
-        if( arraySize > 0  )
-            {
-            CCreatorContactField* field = CCreatorContactField::NewL(iUrlFields[index], KNullDesC);
-            CleanupStack::PushL(field);
-            field->SetRandomParametersL(CCreatorContactField::ERandomLengthDefault);
-            iParameters->iContactFields.AppendL(field);
-            CleanupStack::Pop(field);            
-            }
-        ++index;
-        }
-                    
-    // EMail addresses:
-    arraySize = sizeof(iEmailFields)/sizeof(TInt);
-    index = 0;
-    for( TInt i = 0; i < iParameters->iNumberOfEmailAddressFields; ++i)
-        {
-        if( index >= arraySize )
-            {
-            index = 0;
-            }
-        if( arraySize > 0  )
-            {
-            CCreatorContactField* field = CCreatorContactField::NewL(iEmailFields[index], KNullDesC);
-            CleanupStack::PushL(field);
-            field->SetRandomParametersL(CCreatorContactField::ERandomLengthDefault);
-            iParameters->iContactFields.AppendL(field);
-            CleanupStack::Pop(field);               
-            }
-        ++index;
-        }
-    }
-
-TInt CCreatorVirtualPhonebook::CreateContactEntryL(CCreatorModuleBaseParameters *aParameters)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::CreateContactEntryL");
-    
-    delete iParameters;
-    iParameters = 0;
-    CVirtualPhonebookParameters* parameters = 0;
-    
-    if( aParameters == 0 )
-        {
-        InitializeContactParamsL();
-        parameters = iParameters;
-        }
-    else
-        {
-        parameters = (CVirtualPhonebookParameters*) aParameters;
-        }
-    
-    TInt err = KErrNone;
-
-    // create a new contact item
-    MVPbkStoreContact* newContact = iStore->CreateNewContactLC();
-    for( TInt i = 0; i < parameters->iContactFields.Count(); ++i )
-        {
-        CCreatorContactField* cField = parameters->iContactFields[i];
-        if( cField )
-            {
-            cField->AddToContactL(iEngine, *newContact, this);
-            }
-        }
-
-    RArray<MVPbkStoreContact*> contacts;
-    CleanupClosePushL( contacts );    
-    contacts.Append(newContact);        
-    
-    delete iOperation;
-    iOperation = NULL;
-    iOperation = iContactManager->CommitContactsL( contacts.Array(), *this );       
-    if ( iOperation )
-        {
-
-        iWaiter->StartAndWait();//Making asynchronous CommitContctsL to synchronous
-        delete iOperation;
-        iOperation = NULL;
-        }    
-    
-    // store the link to contact, so that Creator is able to delete
-    // it when user requests deletion of contacts that are created by Creator 
-    MVPbkContactLink* linkToContact = newContact->CreateLinkLC();
-    iContactsToDelete->AppendL( linkToContact );
-    CleanupStack::Pop(); // linkToContact
-    
-    // If this contact has a link id in script (i.e. belongs to a contact-set), we must cache the contact id:
-    if( parameters->ScriptLinkId() > 0 )
-        {                
-        RPointerArray<CCreatorContactSet>& contactsets = ContactLinkCache::Instance()->ContactSets();
-        TBool setFound(EFalse);
-        for(TInt i = 0; i < contactsets.Count(); ++i )
-            {
-            if( contactsets[i]->LinkId() == parameters->ScriptLinkId())
-                {
-                MVPbkContactLink* linkToContact = newContact->CreateLinkLC();
-                if( linkToContact )
-                    {
-                    contactsets[i]->AppendL(linkToContact);
-                    iContactLinkArray->AppendL(linkToContact);
-                    CleanupStack::Pop(); // linkToContact
-                    }
-                setFound = ETrue;
-                break;
-                }
-            }
-        if( !setFound )
-        	{
-        	LOGSTRING2("Error: Contact set id %d not found.", parameters->ScriptLinkId());
-        	}
-        }
-    
-    CleanupStack::Pop();//contacts
-    contacts.Close();
-    CompactPbkDatabaseL();
-    CleanupStack::PopAndDestroy();//newContact
-    if ( iCancelCbRequested && iEngine ) iEngine->CancelComplete();
-    return err;
-    }
-
-
-//----------------------------------------------------------------------------
-
-void CCreatorVirtualPhonebook::AddImageToContactL(MVPbkStoreContact& aContact, TInt aFieldResId, const TDesC& aFileName)
-    {
-    LOGSTRING("Creator: CCreatorPhonebook::AddImageToContactL");
-    CPbk2ImageManager* imageMgr = CPbk2ImageManager::NewL(*iContactManager);
-    CleanupStack::PushL(imageMgr);
-    const MVPbkFieldTypeList& fieldList = aContact.ParentStore().StoreProperties().SupportedFields();        
-    const MVPbkFieldType* fieldType = fieldList.Find(aFieldResId);
-    if( fieldType == 0 )
-        {
-        return;
-        }
-    MPbk2ImageOperation* imageOp = 0;
-    TRAPD(err, imageOp = imageMgr->SetImageAsyncL(aContact, *fieldType, *this, aFileName));   
-    if( err == KErrNone)
-        {
-        if (imageOp)
-            {
-            CleanupDeletePushL( imageOp );
-            iWaiter->StartAndWait(); // Making asynchronous SetImageAsyncL to synchronous
-            CleanupStack::Pop(imageOp);
-            delete imageOp;
-            }
-        }    
-    else if(err != KErrNotSupported)
-        {
-        User::Leave(err);
-        }
-    CleanupStack::PopAndDestroy(imageMgr);        
-    }
-
-// Checks if the link is a group or not
-TBool CCreatorVirtualPhonebook::IsContactGroupL(const MVPbkContactLink& aLink)
-	{
-	LOGSTRING("Creator: CCreatorPhonebook::IsContactGroupL");
-	if( iStore )
-		{
-		delete iContactGroupsInStore;
-		iContactGroupsInStore = 0;
-		// Save contact group links here
-		iContactGroupsInStore = iStore->ContactGroupsLC();
-		CleanupStack::Pop();
-		}
-		
-	if( iContactGroupsInStore )
-		{
-		// Loop all the groups and check if any of them matches to the given link.
-		for( TInt i = 0; i < iContactGroupsInStore->Count(); ++i )
-			{
-			if( (*iContactGroupsInStore)[i].IsSame(aLink) )
-				return ETrue;
-			}
-		}
-	return EFalse;
-	}
-
-TInt CCreatorVirtualPhonebook::CreateGroupEntryL(CCreatorModuleBaseParameters *aParameters)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::CreateGroupEntryL");
-    delete iParameters;
-    iParameters = 0;
-    
-    CVirtualPhonebookParameters* parameters = (CVirtualPhonebookParameters*) aParameters;
-    
-    if( !parameters )
-        {
-        iParameters = new (ELeave) CVirtualPhonebookParameters;
-        iParameters->iContactsInGroup = iContactsInGroup;
-        iParameters->iGroupName->Des().Copy( iEngine->RandomString(CCreatorEngine::EGroupName) );
-        iParameters->iGroupName->Des().Append( _L(" #") );
-        iParameters->iGroupName->Des().AppendNum( iEngine->RandomNumber(1000, 9999) );
-        parameters = iParameters;
-        }
-
-    TInt err = KErrNone;
- 
-    // create a new contact group    
-    MVPbkContactGroup* newGroup = iStore->CreateNewContactGroupLC();
-    
-    newGroup->SetGroupLabelL(parameters->iGroupName->Des());
-        
-    // define amounts of contacts to be added to the group
-    TInt amountOfContactsToBeAdded = 0;
-    if (parameters->iContactsInGroup == KCreateRandomAmountOfGroups)
-    	{
-        amountOfContactsToBeAdded = iEngine->RandomNumber(30);
-    	}
-    else 
-    	{
-        amountOfContactsToBeAdded = parameters->iContactsInGroup;
-    	}
-    
-    if( parameters->iLinkIds.Count() > 0 )
-        {
-        for( TInt i = 0; i < parameters->iLinkIds.Count(); ++i )
-            {
-            const CCreatorContactSet& set = ContactLinkCache::Instance()->ContactSet(parameters->iLinkIds[i].iLinkId);
-            
-            const RPointerArray<MVPbkContactLink>& links = set.ContactLinks();
-            TInt numberOfExplicitLinks = links.Count(); // Number of defined contacts in contact-set
-            TInt numberOfExistingContacts = set.NumberOfExistingContacts(); // Number of existing contacts in contact-set
-            TInt maxAmount = numberOfExplicitLinks + numberOfExistingContacts;
-            
-            if( parameters->iLinkIds[i].iLinkAmount > 0 )
-                maxAmount = parameters->iLinkIds[i].iLinkAmount; // Max amount is limited
-            
-            TInt addedMembers = 0;
-            
-            for( TInt j = 0; j < links.Count() && addedMembers < maxAmount; ++j )
-                {
-                MVPbkContactLink* link = links[j]; 
-                if( link && IsContactGroupL(*link) == EFalse )
-                    {
-                    TRAPD(err, newGroup->AddContactL(*link));
-                    if( err != KErrAlreadyExists )
-                    	{
-                    	// Ignore "allready exists" -error
-                    	User::LeaveIfError(err);
-                    	++addedMembers;
-                    	}                    
-                    }
-                }
-            if( addedMembers < maxAmount )
-            	{
-            	// Add existing contacts, withing the limits set by maxAmount:
-            	amountOfContactsToBeAdded += maxAmount - addedMembers;
-            	}
-            }
-        }
-    if( amountOfContactsToBeAdded > 0 )
-        {    
-        CVPbkContactViewDefinition* viewDef = CVPbkContactViewDefinition::NewL();
-        CleanupStack::PushL( viewDef );
-        viewDef->SetType( EVPbkContactsView );
-        MVPbkContactView* contactView = iStore->CreateViewLC( 
-                *viewDef, 
-                *this, 
-                iStore->StoreProperties().SupportedFields() );
-        iWaiter->StartAndWait();//Making asynchronous CreateViewLC to synchronous
-
-        TInt cnt = 0;
-        // assign some random contacts to the group
-        for ( TInt y = 0; cnt < amountOfContactsToBeAdded && y < contactView->ContactCountL(); ++y )
-            {
-            MVPbkContactLink* link = contactView->CreateLinkLC( y );
-            TRAPD( err, newGroup->AddContactL( *link ) );
-            CleanupStack::PopAndDestroy(); // link
-            if( err != KErrAlreadyExists )
-                {
-                // Ignore "allready exists" -error
-                User::LeaveIfError( err );
-                ++cnt;
-                }
-            }
-        CleanupStack::PopAndDestroy(); // contactView
-        CleanupStack::PopAndDestroy( viewDef );
-        }
-    
-    newGroup->CommitL(*this);
-    iWaiter->StartAndWait(); //Making asynchronous CommitL to synchronous
-
-    // store the link to contact, so that Creator is able to delete
-    // it when user requests deletion of contacts that were created with Creator 
-    MVPbkContactLink* linkToContact = newGroup->CreateLinkLC();
-    iContactGroupsToDelete->AppendL( linkToContact );
-    CleanupStack::Pop(); // linkToContact
-    
-    CleanupStack::PopAndDestroy(); // newGroup
-   
-    CompactPbkDatabaseL();
-
-    return err;
-
-    }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorVirtualPhonebook::CreateSubscribedContactEntryL(CCreatorModuleBaseParameters* /*aParameters*/)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::CreateSubscribedContactEntryL");
-
-    return KErrNotSupported;
-    }
-
-//----------------------------------------------------------------------------
-
-void CCreatorVirtualPhonebook::AddFieldToContactItemL(
-		MVPbkStoreContact& newContact, TPbkFieldId aFieldId, const TDesC& aFieldText)
-	{
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::AddFieldToContactItemL");
-
-    // Get field type object
-    const MVPbkFieldTypeList& fieldList = newContact.ParentStore().StoreProperties().SupportedFields();        
-    const MVPbkFieldType* fieldType = fieldList.Find(aFieldId);
-    if( fieldType == 0 )
-        return; // field type is not supported
-    
-    // Create a new field
-	MVPbkStoreContactField* newField = newContact.CreateFieldLC(*fieldType);	
-	if( !newField )
-	    {
-	    User::Leave(KErrNotSupported);
-	    }
-	
-	MVPbkContactFieldData& fieldData = newField->FieldData();
-	
-	//data type must be text in this case
-	TVPbkFieldStorageType dataType = fieldData.DataType();
-
-	if(dataType == EVPbkFieldStorageTypeText)
-	    {
-		//set text to field	
-		MVPbkContactFieldTextData& tmpData = MVPbkContactFieldTextData::Cast(fieldData);
-		tmpData.SetTextL(aFieldText);
-		//set field to contact		
-		newContact.AddFieldL(newField);//This object takes ownership of the field.
-		CleanupStack::Pop(newField);			
-	    }
-	else
-		{
-		User::Leave(KErrArgument);
-		}
-	
-    }
-
-//----------------------------------------------------------------------------
-
-void CCreatorVirtualPhonebook::AddFieldToContactItemL(
-		MVPbkStoreContact& newContact, TPbkFieldId aFieldId, const TDesC8& aFieldText)
-	{
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::AddFieldToContactItemL");
-
-	//get field types
-	const MVPbkFieldTypeList& fieldList = newContact.ParentStore().StoreProperties().SupportedFields();
-	
-	//get wanted field type
-	const MVPbkFieldType* fieldType = fieldList.Find(aFieldId);
-	
-	//create a new field
-	MVPbkStoreContactField* newField =
-	            newContact.CreateFieldLC(*fieldType);
-	//get field data	
-	MVPbkContactFieldData& fieldData = newField->FieldData();
-	
-	//data type must be text in this case
-	TVPbkFieldStorageType dataType = fieldData.DataType();
-
-	if(dataType == EVPbkFieldStorageTypeBinary){
-		//set bindata to field	
-		MVPbkContactFieldBinaryData& tmpData = MVPbkContactFieldBinaryData::Cast(fieldData);		
-		tmpData.SetBinaryDataL(aFieldText);
-		//set field to contact		
-		newContact.AddFieldL(newField);//This object takes ownership of the field.
-		CleanupStack::Pop(newField);			
-	}
-	else
-		{
-		CleanupStack::PopAndDestroy(newField);
-		}
-	
-    }
-
-void CCreatorVirtualPhonebook::AddFieldToContactItemL(
-        MVPbkStoreContact& newContact, TPbkFieldId aFieldId, const TTime& aFieldText)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::AddFieldToContactItemL");
-    //get field types
-    const MVPbkFieldTypeList& fieldList = newContact.ParentStore().StoreProperties().SupportedFields();
-        
-    //get wanted field type
-    const MVPbkFieldType* fieldType = fieldList.Find(aFieldId);
-        
-    //create a new field
-    MVPbkStoreContactField* newField = newContact.CreateFieldLC(*fieldType);
-    //get field data    
-    MVPbkContactFieldData& fieldData = newField->FieldData();
-        
-    //data type must be datetime in this case
-    TVPbkFieldStorageType dataType = fieldData.DataType();
-
-    if(dataType == EVPbkFieldStorageTypeDateTime)
-        {
-        //set bindata to field  
-        MVPbkContactFieldDateTimeData& tmpData = MVPbkContactFieldDateTimeData::Cast(fieldData);        
-        tmpData.SetDateTime(aFieldText);
-        //set field to contact      
-        newContact.AddFieldL(newField);//This object takes ownership of the field.
-        CleanupStack::Pop(newField);            
-        }
-    else
-        {
-        CleanupStack::PopAndDestroy(newField);
-        }
-    }
-
-//----------------------------------------------------------------------------
-
-void CCreatorVirtualPhonebook::CompactPbkDatabaseL(TBool aCompressImmediately)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::CompactPbkDatabase");
-
-    iOpCounter++;
-
-    // compress the database immediately or after each 100th operation
-    if (aCompressImmediately || iOpCounter%100 == 0)
-        {
-        MVPbkContactOperationBase* operation= iContactManager->CompressStoresL(*this);
-        if (operation)
-            {
-            CleanupDeletePushL( operation );
-            iWaiter->StartAndWait();//Making asynchronous CompressStoresL to synchronous
-            CleanupStack::Pop(operation);
-            delete operation;
-            }             		 
-        }
-    }
-
-//----------------------------------------------------------------------------
-//Observer implementations for MVPbkContactStoreListObserver 
-//(and it's super class MVPbkContactStoreObserver)
-
-void CCreatorVirtualPhonebook::OpenComplete()
-	{
-	LOGSTRING("Creator: CCreatorVirtualPhonebook::OpenComplete()");
-    iWaiter->Cancel();
-	}
-
-void CCreatorVirtualPhonebook::StoreReady(MVPbkContactStore& /*aContactStore*/)
-	{
-	LOGSTRING("Creator: CCreatorVirtualPhonebook::StoreReady()");
-	}
-
-
-void CCreatorVirtualPhonebook::StoreUnavailable(MVPbkContactStore& /*aContactStore*/, 
-        TInt /*aReason*/)
-	{
-	LOGSTRING("Creator: CCreatorVirtualPhonebook::StoreUnavailable()");
-	}
-
-
-void CCreatorVirtualPhonebook::HandleStoreEventL(
-        MVPbkContactStore& /*aContactStore*/, 
-        TVPbkContactStoreEvent /*aStoreEvent*/)
-	{
-	LOGSTRING("Creator: CCreatorVirtualPhonebook::HandleStoreEventL()");
-	}
-
-
- TAny* CCreatorVirtualPhonebook::ContactStoreObserverExtension(
-		 TUid /*aExtensionUid*/) 
-        
- { 
- LOGSTRING("Creator: CCreatorVirtualPhonebook::ContactStoreObserverExtension()");
- return NULL; 
- }
- 
- 
-//----------------------------------------------------------------------------
-//Observer implementation for MVPbkBatchOperationObserver
-
-void CCreatorVirtualPhonebook::StepComplete( 
-     MVPbkContactOperationBase& /*aOperation*/,
-     TInt /*aStepSize*/ )
-	{
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::StepComplete" );	
-	}
-
-
-TBool CCreatorVirtualPhonebook::StepFailed(
-     MVPbkContactOperationBase& /*aOperation*/,
-     TInt /*aStepSize*/, TInt /*aError*/ )
-{
-	LOGSTRING("Creator: CCreatorVirtualPhonebook::StepFailed" );
-	iWaiter->Cancel();
-	return EFalse;
-}
-
-
-void CCreatorVirtualPhonebook::OperationComplete( 
-     MVPbkContactOperationBase& /*aOperation*/ )
-	{
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::OperationComplete" );
-    //Canceling waiter when operation is done.
-    iWaiter->Cancel();
-	}
-
-
-TAny* CCreatorVirtualPhonebook::BatchOperationObserverExtension( 
-     TUid /*aExtensionUid*/ ) 
-     {
-     LOGSTRING("Creator: CCreatorVirtualPhonebook::BatchOperationObserverExtension" );
-     return NULL;
-     }
-
-//----------------------------------------------------------------------------
-//Observer implementation for MVPbkContactFindObserver
-void CCreatorVirtualPhonebook::FindCompleteL( MVPbkContactLinkArray* aResults )
-  	 {
-  	 LOGSTRING("Creator: CCreatorVirtualPhonebook::FindCompleteL" );
-  	 if(iContactResults)
-  		 {
-  		 delete iContactResults;
-  		 iContactResults = NULL;
-  		 }
-  	 iContactResults = aResults;
-  	 iWaiter->Cancel();
-   	 }
-
-void CCreatorVirtualPhonebook::FindFailed( TInt aError )
- 	 {
- 	LOGSTRING2("Creator: CCreatorVirtualPhonebook::FindFailed - Error: %d", aError );
- 	iWaiter->Cancel();
-  	 }
-
-TAny* CCreatorVirtualPhonebook::ContactFindObserverExtension( 
-	                TUid /*aExtensionUid*/ )
-	 {
-	 LOGSTRING("Creator: CCreatorVirtualPhonebook::ContactFindObserverExtension" );
-	 return NULL;
-	 }	                
-
-
-//Observer implementation for MVPbkContactObserver
-//----------------------------------------------------------------------------
-
-void CCreatorVirtualPhonebook::ContactOperationCompleted(TContactOpResult aResult)
-	{
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::ContactOperationCompleted" );
-            
-	TContactOp op = aResult.iOpCode; 		 
-    switch ( op )
-        {
-        case EContactCommit:
-        case EContactDelete:
-            {
-            iWaiter->Cancel();
-            break;
-            }
-        case EContactLock:
-        default: break;
-        }
-	}
-	
-void CCreatorVirtualPhonebook::ContactOperationFailed
-			(TContactOp /*aOpCode*/, TInt aErrorCode, TBool /*aErrorNotified*/)
-	{
-    LOGSTRING2("Creator: CCreatorVirtualPhonebook::ContactOperationFailed - Error: %d", aErrorCode );
-    iWaiter->Cancel();
-	}
-	
-TAny* CCreatorVirtualPhonebook::ContactObserverExtension(TUid /*aExtensionUid*/) 
-	{
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::ContactObserverExtension" );
-    return NULL;
-	}
-
-void CCreatorVirtualPhonebook::Pbk2ImageSetComplete(MPbk2ImageOperation& /*aOperation*/)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::Pbk2ImageSetComplete" );
-    //Canceling waiter when operation is done.
-    iWaiter->Cancel();
-    }
-
-void CCreatorVirtualPhonebook::Pbk2ImageSetFailed(MPbk2ImageOperation& /*aOperation*/, TInt /*aError*/)
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::Pbk2ImageSetFailed" );
-    //Canceling waiter when operation is done.
-    iWaiter->Cancel();
-    }
-
-
-//Observer implementation for MVPbkContactViewObserver
-//----------------------------------------------------------------------------
-void CCreatorVirtualPhonebook::ContactViewReady( MVPbkContactViewBase& /*aView*/ )
-    {
-    LOGSTRING("Creator: CCreatorVirtualPhonebook::ContactViewReady" );
-    iWaiter->Cancel();
-    }
-
-void CCreatorVirtualPhonebook::ContactViewUnavailable(
-        MVPbkContactViewBase& /*aView*/ )
-    {
-    iWaiter->Cancel();
-    }
-
-void CCreatorVirtualPhonebook::ContactAddedToView(
-        MVPbkContactViewBase& /*aView*/, 
-        TInt /*aIndex*/, 
-        const MVPbkContactLink& /*aContactLink*/ )
-    {
-    }
-
-void CCreatorVirtualPhonebook::ContactRemovedFromView(
-        MVPbkContactViewBase& /*aView*/, 
-        TInt /*aIndex*/, 
-        const MVPbkContactLink& /*aContactLink*/ )
-    {
-    }
-        
-void CCreatorVirtualPhonebook::ContactViewError(
-        MVPbkContactViewBase& /*aView*/, 
-        TInt /*aError*/, 
-        TBool /*aErrorNotified*/ )
-    {
-    iWaiter->Cancel();
-    }
-
-/**
- * CCreatorContactFieldImpl Base class for contact field implementations
- */
-class CCreatorContactFieldImpl : public CBase
-    {
-public:        
-    virtual ~CCreatorContactFieldImpl() {};
-    
-    virtual void AddToContactL(CCreatorEngine* aEngine, MVPbkStoreContact& aContact, CCreatorVirtualPhonebook* aVPbk);
-    virtual void SetRandomParametersL(CCreatorContactField::TRandomLengthType aRandomLenType = CCreatorContactField::ERandomLengthDefault, TInt aRandomLen = 0 );
-    virtual void ParseL(CCommandParser* parser);
-     
-    virtual TInt FieldType();
-protected:
-    CCreatorContactFieldImpl(TInt aFieldType);    
-    TInt iFieldType;    
-    CCreatorContactField::TRandomLengthType iRandomLenType;
-    TInt iRandomLen;
-    };
-    
-void CCreatorContactFieldImpl::AddToContactL(CCreatorEngine* /*aEngine*/, MVPbkStoreContact& /*aContact*/, CCreatorVirtualPhonebook* /*aVPbk*/ )
-    {}
-
-void CCreatorContactFieldImpl::SetRandomParametersL(CCreatorContactField::TRandomLengthType aRandomLenType, TInt aRandomLen )
-    {    
-    iRandomLenType = aRandomLenType;
-    iRandomLen = aRandomLen;
-    }
-
-void CCreatorContactFieldImpl::ParseL(CCommandParser* /*parser*/)
-    {}
-    
-CCreatorContactFieldImpl::CCreatorContactFieldImpl(TInt aFieldType)
-    {
-    iFieldType = aFieldType;
-    }
-
-TInt CCreatorContactFieldImpl::FieldType()
-    {
-    return iFieldType;    
-    }
-
-
-/**
- * CCreatorContactTextField Text field implementation
- */
-class CCreatorContactTextField : public CCreatorContactFieldImpl
-    {
-    public:
-    static CCreatorContactTextField* NewL(TInt aFieldType, const TDesC& aData);
-    ~CCreatorContactTextField();
-    virtual void AddToContactL(CCreatorEngine* aEngine, MVPbkStoreContact& aContact, CCreatorVirtualPhonebook* aVPbk);    
-    virtual void ParseL(CCommandParser* parser);
-    
-    protected:
-    virtual void SetDefaultRandomContentL(CCreatorEngine* aEngine);
-    virtual void SetExplicitRandomContentL(CCreatorEngine* aEngine, TInt aRandomLen);
-    
-    private:    
-    CCreatorContactTextField(TInt aFieldType);
-    void ConstructL(const TDesC& aData);
-    HBufC* iPtr;    
-    };
-    
-CCreatorContactTextField::CCreatorContactTextField(TInt aFieldType) 
-: CCreatorContactFieldImpl(aFieldType)
-    { }
-CCreatorContactTextField::~CCreatorContactTextField()
-    { 
-    delete iPtr; 
-    }
- void CCreatorContactTextField::AddToContactL(CCreatorEngine* aEngine, MVPbkStoreContact& aContact, CCreatorVirtualPhonebook* aVPbk)
-     {
-     LOGSTRING("Creator: CCreatorContactTextField::AddToContactL"); 
-     if( aVPbk == 0 )
-         User::Leave(KErrArgument);
-               
-     if( iPtr == 0 || iPtr->Length() == 0)
-         {
-         switch( iRandomLenType )
-         {
-         case CCreatorContactField::ERandomLengthDefault:
-             {
-             SetDefaultRandomContentL(aEngine);
-             break;
-             }
-         case CCreatorContactField::ERandomLengthMax:
-             {
-             const MVPbkFieldTypeList& fieldList = aContact.ParentStore().StoreProperties().SupportedFields();
-             const MVPbkFieldType* fieldType = fieldList.Find(iFieldType);
-             if( fieldType == 0 )
-                 return; // field type is not supported
-                 
-             // Create a new field
-             MVPbkStoreContactField* newField = aContact.CreateFieldLC(*fieldType);    
-             if( !newField )
-                 {
-                 User::Leave(KErrNotSupported);
-                 }
-                 
-             MVPbkContactFieldData& fieldData = newField->FieldData();  
-             //data type must be text in this case
-             TVPbkFieldStorageType dataType = fieldData.DataType();
-
-             if(dataType == EVPbkFieldStorageTypeText)
-                 {
-                 //set text to field 
-                 MVPbkContactFieldTextData& tmpData = MVPbkContactFieldTextData::Cast(fieldData);
-                 iRandomLen = tmpData.MaxLength();
-                 if( iRandomLen == KVPbkUnlimitedFieldLength )
-                     iRandomLen = 128;
-                 }
-             CleanupStack::PopAndDestroy(newField);       
-             SetExplicitRandomContentL(aEngine, iRandomLen);
-             break;
-             }
-         case CCreatorContactField::ERandomLengthExplicit:
-             {
-             SetExplicitRandomContentL(aEngine, iRandomLen);
-             break;
-             }
-         default:
-             break;
-         }
-         }
-     if( iPtr )
-         {
-         if( iFieldType == R_VPBK_FIELD_TYPE_THUMBNAILPIC )
-             {
-             if( iPtr && iPtr->Length() > 0 )
-            	 {
-            	 aVPbk->AddImageToContactL(aContact, iFieldType, iPtr->Des());
-            	 }
-             }
-         //Thumbnail id handling
-         /*else if( iFieldType == FIELD_TYPE_THUMBNAILPIC_ID )
-             {
-             if( iPtr && iPtr->Length() > 0 )
-                 {
-                 TInt id = aEngine->GetAttachmentIdL(iPtr->Des());
-                 if( id != KUndef )
-                     {
-                     //get picture path by id
-                     TFileName sourceFileName = aEngine->TestDataPathL((CCreatorEngine::TTestDataPath)id);// (CCreatorEngine::TTestDataPath) parameters.iAttachments->At(i)
-                     //set image to contact
-                     aVPbk->AddImageToContactL(aContact, R_VPBK_FIELD_TYPE_THUMBNAILPIC, sourceFileName);                     
-                     }
-                 }
-             }*/         
-         else
-             {
-             if( iPtr && iPtr->Length() > 0 )
-            	 {
-            	 aVPbk->AddFieldToContactItemL(aContact, iFieldType, iPtr->Des());
-            	 }
-             }
-         }
-     }
-
- void CCreatorContactTextField::SetDefaultRandomContentL(CCreatorEngine* aEngine)
-     {
-     LOGSTRING("Creator: CCreatorContactTextField::SetDefaultRandomContentL");
-     if( aEngine == 0 )
-         return;
-     
-     if( iPtr )
-         {
-         delete iPtr;
-         iPtr = 0;
-         }
-     TPtrC contentData;
-     
-     TInt textFieldCount = sizeof(CreatorVPbkMiscTextFields) / sizeof(FieldInfo);
-     TBool found = EFalse;
-     for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex )
-         {
-         if( iFieldType == CreatorVPbkMiscTextFields[tfIndex].iFieldCode )
-             {
-             found = ETrue;
-             if( CreatorVPbkMiscTextFields[tfIndex].iRandomType != RND_TYPE_UNDEF )
-                 {
-                 contentData.Set(aEngine->RandomString((CCreatorEngine::TRandomStringType) CreatorVPbkMiscTextFields[tfIndex].iRandomType));
-                 }
-             else
-                 {
-                 switch( iFieldType )
-                 {
-                 case R_VPBK_FIELD_TYPE_RINGTONE:
-                     {
-                     contentData.Set(aEngine->CreateRandomSoundFileL());
-                     break;                 
-                     }
-                 //Thumbnail (path) and thumbnailid handling with random is the same, only in script they have different handling
-                 case R_VPBK_FIELD_TYPE_THUMBNAILPIC:                 
-                     {
-                     contentData.Set(aEngine->RandomPictureFileL());
-                     break;
-                     }
-                 case R_VPBK_FIELD_TYPE_SYNCCLASS:
-                 case R_VPBK_FIELD_TYPE_LOCPRIVACY:
-                     {
-                     _LIT(KPublic, "Public");
-                     contentData.Set(KPublic);
-                     break;
-                     }
-                 default:
-                     break;
-                 }
-                 }
-             break;
-             }
-         }
-     
-     if( found == EFalse )
-         {
-         TInt phNumFieldCount = sizeof(CreatorVPbkPhoneNumberFields) / sizeof(TInt);
-         for( TInt phIndex = 0; phIndex < phNumFieldCount; ++phIndex )
-             {
-             if( iFieldType == CreatorVPbkPhoneNumberFields[phIndex] )
-                 {
-                 contentData.Set(aEngine->RandomString(CCreatorEngine::EPhoneNumber));
-                 found = ETrue;
-                 break;
-                 }
-             }
-         }
-     
-     if( found == EFalse )
-         {
-         TInt emailFieldCount = sizeof(CreatorVPbkEmailFields) / sizeof(TInt);
-         for( TInt eIndex = 0; eIndex < emailFieldCount; ++eIndex )
-             {
-             if( iFieldType == CreatorVPbkEmailFields[eIndex] )
-                 {
-                 iPtr = aEngine->CreateEmailAddressLC();
-                 CleanupStack::Pop();
-                 return;
-                 }
-             }
-         }
-     iPtr = HBufC::NewL(contentData.Length());
-     iPtr->Des().Copy(contentData);
-     }
- 
- void CCreatorContactTextField::SetExplicitRandomContentL(CCreatorEngine* aEngine, TInt aRandomLen)
-     {     
-     LOGSTRING("Creator: CCreatorContactTextField::SetExplicitRandomContentL");
-     if( iPtr )
-         {
-         delete iPtr;
-         iPtr = 0;
-         }
-     iPtr = aEngine->CreateRandomStringLC(aRandomLen);
-     CleanupStack::Pop(); // iPtr
-     }
- 
- void CCreatorContactTextField::ParseL(CCommandParser* parser)
-     {
-     parser->StrParserL(iPtr, '|');
-     }
- 
- void CCreatorContactTextField::ConstructL(const TDesC& aData)
-      {     
-      iPtr = HBufC::New(KPhonebookFieldLength);
-      iPtr->Des().Copy(aData);
-      }
- 
- CCreatorContactTextField* CCreatorContactTextField::NewL(TInt aFieldType, const TDesC& aData)
-     {
-     CCreatorContactTextField* self = new (ELeave) CCreatorContactTextField(aFieldType);
-     CleanupStack::PushL(self);
-     self->ConstructL(aData);
-     CleanupStack::Pop();
-     return self;
-     }
- /**
-  * CCreatorContactBinaryField Binary field implementation
-  */
- class CCreatorContactBinaryField : public CCreatorContactFieldImpl
-    {
-public:
-    static CCreatorContactBinaryField* NewL(TInt aFieldType, const TDesC8& aData);
-    ~CCreatorContactBinaryField();  
-    virtual void AddToContactL(CCreatorEngine* aEngine, MVPbkStoreContact& aContact, CCreatorVirtualPhonebook* aVPbk);
-    virtual void ParseL(CCommandParser* parser);
-    virtual void SetDefaultRandomContentL(CCreatorEngine* aEngine);
-private:
-    CCreatorContactBinaryField(TInt aFieldType);
-    void ConstructL(const TDesC8& aData);
-    HBufC8* iPtr;    
-    };
- 
- CCreatorContactBinaryField::CCreatorContactBinaryField(TInt aFieldType) 
- : CCreatorContactFieldImpl(aFieldType)
-     { }
- CCreatorContactBinaryField::~CCreatorContactBinaryField()
-     { 
-     delete iPtr; 
-     }
-   
- void CCreatorContactBinaryField::ConstructL(const TDesC8& aData)
-     {
-     iPtr = HBufC8::New(KPhonebookFieldLength);
-     iPtr->Des() = aData;
-     }
- 
- CCreatorContactBinaryField* CCreatorContactBinaryField::NewL(TInt aFieldType, const TDesC8& aData)
-      {
-      CCreatorContactBinaryField* self = new (ELeave) CCreatorContactBinaryField(aFieldType);
-      CleanupStack::PushL(self);
-      self->ConstructL(aData);
-      CleanupStack::Pop();
-      return self;
-      }
- 
-void CCreatorContactBinaryField::AddToContactL(CCreatorEngine* /*aEngine*/, MVPbkStoreContact& aContact, CCreatorVirtualPhonebook* aVPbk)
-    {
-    LOGSTRING("Creator: CCreatorContactBinaryField::AddToContactL");
-    if( aVPbk == 0 )
-        User::Leave(KErrArgument);
-    if( iPtr )
-        {
-            aVPbk->AddFieldToContactItemL(aContact, iFieldType, iPtr->Des());
-        }
-    }
-void CCreatorContactBinaryField::ParseL(CCommandParser* parser)
-     {
-     parser->StrParserL(iPtr, '&');
-     }
-
-void CCreatorContactBinaryField::SetDefaultRandomContentL(CCreatorEngine* /*aEngine*/)
-    {
-    LOGSTRING("Creator: CCreatorContactBinaryField::SetDefaultRandomContentL");
-    }
-
-/**
- * CCreatorContactDateTimeField
- */ 
-class CCreatorContactDateTimeField : public CCreatorContactFieldImpl
-    {
-public:
-    static CCreatorContactDateTimeField* NewL(TInt aFieldType, const TTime& aData);
-    ~CCreatorContactDateTimeField();  
-    virtual void AddToContactL(CCreatorEngine* aEngine, MVPbkStoreContact& aContact, CCreatorVirtualPhonebook* aVPbk);
-    virtual void ParseL(CCommandParser* parser);    
-private:
-CCreatorContactDateTimeField(TInt aFieldType);
-    void ConstructL(const TTime& aData);
-    TTime iPtr;    
-    };
- 
-CCreatorContactDateTimeField::CCreatorContactDateTimeField(TInt aFieldType) 
-: CCreatorContactFieldImpl(aFieldType)
-     { }
-CCreatorContactDateTimeField::~CCreatorContactDateTimeField()
-     {
-     }
-   
- void CCreatorContactDateTimeField::ConstructL(const TTime& aData)
-     {
-     iPtr = aData;
-     }
- 
- CCreatorContactDateTimeField* CCreatorContactDateTimeField::NewL(TInt aFieldType, const TTime& aData)
-      {
-      CCreatorContactDateTimeField* self = new (ELeave) CCreatorContactDateTimeField(aFieldType);
-      CleanupStack::PushL(self);
-      self->ConstructL(aData);
-      CleanupStack::Pop();
-      return self;
-      }
- 
-void CCreatorContactDateTimeField::AddToContactL(CCreatorEngine* aEngine, MVPbkStoreContact& aContact, CCreatorVirtualPhonebook* aVPbk)
-    {
-    LOGSTRING("Creator: CCreatorContactDateTimeField::AddToContactL");
-    if( aVPbk == 0 )
-        User::Leave(KErrArgument);
-    
-    //TTime undefTime();
-    if( iPtr == Time::NullTTime() )
-        {
-        iPtr = aEngine->RandomDate(CCreatorEngine::EDateFuture);
-        }
-    
-    aVPbk->AddFieldToContactItemL(aContact, iFieldType, iPtr);    
-    }
-void CCreatorContactDateTimeField::ParseL(CCommandParser* /*parser*/)
-     {
-     //parser->StrParserL(iPtr, '&');
-     }
-
-/**
- * CCreatorContactField Contact field API
- */
-CCreatorContactField* CCreatorContactField::NewL(TInt aFieldType, const TDesC& aData)
-    {
-    CCreatorContactField* self = new (ELeave) CCreatorContactField();
-    CleanupStack::PushL(self);
-    self->ConstructL(aFieldType, aData);
-    CleanupStack::Pop();
-    return self;
-    }
-
-CCreatorContactField* CCreatorContactField::NewL(TInt aFieldType, const TDesC8& aData)
-    {
-    CCreatorContactField* self = new (ELeave) CCreatorContactField();
-    CleanupStack::PushL(self);
-    self->ConstructL(aFieldType, aData);
-    CleanupStack::Pop();
-    return self;
-    }
-
-CCreatorContactField* CCreatorContactField::NewL(TInt aFieldType, const TTime& aData)
-    {
-    CCreatorContactField* self = new (ELeave) CCreatorContactField();
-    CleanupStack::PushL(self);
-    self->ConstructL(aFieldType, aData);
-    CleanupStack::Pop();
-    return self;
-    }
-
-void CCreatorContactField::ConstructL(TInt aFieldType, const TDesC& aData)
-    {
-    pImpl = CCreatorContactTextField::NewL(aFieldType, aData); 
-    }
-
-void CCreatorContactField::ConstructL(TInt aFieldType, const TDesC8& aData)
-    {
-    pImpl = CCreatorContactBinaryField::NewL(aFieldType, aData);    
-    }
-
-void CCreatorContactField::ConstructL(TInt aFieldType, const TTime& aData)
-    {
-    pImpl = CCreatorContactDateTimeField::NewL(aFieldType, aData);    
-    }
-
-CCreatorContactField::CCreatorContactField()
-    {}
-CCreatorContactField::~CCreatorContactField()
-    {
-    delete pImpl;
-    }
- 
-TInt CCreatorContactField::FieldType()
-    {
-    return pImpl->FieldType();
-    }
-void CCreatorContactField::AddToContactL(CCreatorEngine* aEngine, MVPbkStoreContact& aContact, CCreatorVirtualPhonebook* aVPbk)
-    {
-    pImpl->AddToContactL(aEngine, aContact, aVPbk);
-    }
-void CCreatorContactField::ParseL(CCommandParser* parser)
-    {
-    pImpl->ParseL(parser);
-    }
-
-void CCreatorContactField::SetRandomParametersL(TRandomLengthType aRandomLenType, TInt aRandomLen )
-    {
-    pImpl->SetRandomParametersL(aRandomLenType, aRandomLen);
-    }
--- a/creator/inc/engine.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/inc/engine.h	Thu Jun 24 14:55:55 2010 +0300
@@ -46,7 +46,7 @@
 class CCreatorCalendarBase;
 class CCreatorNotepad;
 class CCreatorLogs;
-class CCreatorAccessPoints;
+//class CCreatorAccessPoints;
 class CCreatorMailboxes;
 class CCreatorIMPS;
 class CCreatorFiles;
@@ -55,7 +55,7 @@
 class MCreatorModuleBase;
 class CCreatorPhonebookBase;
 class CCreatorModuleBaseParameters;
-class CCreatorConnectionSettingsBase;
+//class CCreatorConnectionSettingsBase;
 class CDictionaryFileStore;
 class CImageDecoder;
 class CFbsBitmap;
@@ -129,15 +129,18 @@
 class TMemoryDetails
 	{
 public:
-    TBuf<16> iCFree;
-    TBuf<16> iDFree;
-    TBuf<16> iEFree;
-    TBuf<16> iHFree;
-	TBuf<16> iCSize;
-    TBuf<16> iDSize;
+	
+	TBuf<16> iFree;
+	TBuf<16> iSize;
+	TChar iDriveLetter;
+
+    TBuf<16> iRamFree;
+    TBuf<16> iRomFree;
+    
 	TBool    iENotAvailable;
-    TBuf<16> iESize;
-	TBuf<16> iHSize;
+
+	TBuf<16> iRamSize;
+	TBuf<16> iRomSize;
 	};
 // Common constant for undefined integer value:
 const TInt KUndef = KErrNotFound;
@@ -238,6 +241,7 @@
     static CCreatorEngine* NewLC(EngineWrapper *aEngineWrapper);	
     ~CCreatorEngine();
 	
+    inline RPointerArray<TMemoryDetails> GetMemoryDetailsList(){ return iMemoryDetailsList; };
 	inline TMemoryDetails GetMemoryDetails(){ return iMemoryDetails; };
 	inline EngineWrapper* GetEngineWrapper(){ return iEngineWrapper; };
 	
@@ -406,7 +410,7 @@
     CCreatorPhonebookBase* iPhonebook;
     CCreatorNotepad* iNotepad;
     CCreatorLogs* iLogs;
-    CCreatorConnectionSettingsBase* iAccessPoints;
+//    CCreatorConnectionSettingsBase* iAccessPoints;
     CCreatorMailboxes* iMailboxes;
     CCreatorIMPS* iIMPS;
     CCreatorFiles* iFiles;
@@ -435,6 +439,9 @@
 
     EngineWrapper* iEngineWrapper; // Enginewrapper that is used for communicating between QT and Symbian
 	TMemoryDetails iMemoryDetails;
+	
+	RPointerArray<TMemoryDetails> iMemoryDetailsList;
+	
 	TInt iResourceFileId;
 
 	HBufC* iCommandLineScriptName;
--- a/creator/inc/enginewrapper.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/inc/enginewrapper.h	Thu Jun 24 14:55:55 2010 +0300
@@ -65,6 +65,11 @@
 	*/
 	MemoryDetails GetMemoryDetails();
 	
+	/**
+	 * Get memory details list
+	 */
+	QList<MemoryDetails> GetMemoryDetailsList();
+	
 public: 
     
     /* Functions that are called from UI */
--- a/creator/inc/mainview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/inc/mainview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -30,15 +30,13 @@
 class MemoryDetails
 {
 public:
-    QString         mCFree;
-    QString         mDFree;
-    QString         mEFree;
-    QString         mHFree;
-	QString         mCSize;
-	QString         mDSize;
+	QString 		mFree;
+	QString			mSize;
+	QString			mDriveLetter;
+	
+    QString         mRamFree;
 	bool			mENotAvailable;
-	QString         mESize;
-	QString         mHSize;
+	QString         mRamSize;
 };
 
 /**
@@ -195,6 +193,7 @@
 	
 	
 	MemoryDetails mMemoryDetails;
+	QList<MemoryDetails> mMemoryDetailsList;
     // signal mapper
     QSignalMapper *mSm;    
 };
--- a/creator/src/engine.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/src/engine.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -20,6 +20,8 @@
 #include <s32file.h> 
 #include <coemain.h>
 
+#include <driveinfo.h>
+
 #include <datacreator.rsg>
 
 #include "mainview.h"
@@ -31,12 +33,12 @@
 
 #include "creator_scriptentry.h"
 #include "creator_modulebase.h"
-#include "creator_browser.h"
+//#include "creator_browser.h"
 #include "creator_calendar.h"
 #include "creator_phonebookbase.h"
 #include "creator_note.h"
 #include "creator_log.h"
-#include "creator_connectionmethodbase.h"
+//#include "creator_connectionmethodbase.h"
 #include "creator_mailbox.h"
 //#include "creator_imps.h"
 #include "creator_message.h"
@@ -140,6 +142,7 @@
 
 	iEnv->DeleteResourceFile(iResourceFileId);
     
+	iMemoryDetailsList.Reset();
     delete iPictureFileArray;
     delete iSoundFileArray;
     delete iTempPath;
@@ -174,52 +177,49 @@
 	
 void CCreatorEngine::RequestMemoryDetails() 
     {
+
+	TDriveList dl;
     // variables for memory and disk handling
-    TDriveNumber cDrive=EDriveC;
-    TDriveNumber dDrive=EDriveD;
-    TDriveNumber eDrive=EDriveE;
     TVolumeInfo vinfo;
-    TBuf<16> cFree;
-    TBuf<16> dFree;
-    TBuf<16> eFree;
-    TBuf<16> cSize;
-    TBuf<16> dSize;
-    TBuf<16> eSize;
 
+    //*************************************************************************
+   
+    //*************************************************************************
     // get an access to file server
     RFs& fsSession = CEikonEnv::Static()->FsSession();
 
-    // check the C-drive
-    fsSession.Volume(vinfo, cDrive);
-    iMemoryDetails.iCFree.Num(TInt64(vinfo.iFree/1024));
-    iMemoryDetails.iCSize.Num(TInt64(vinfo.iSize/1024));
-
-    // the same thing for D-drive
-    fsSession.Volume(vinfo, dDrive);
-	iMemoryDetails.iDFree.Num(TInt64(vinfo.iFree/1024));
-	iMemoryDetails.iDSize.Num(TInt64(vinfo.iSize/1024));
-
-    // the same thing for E-drive (MMC), if it exists 
-    if (MMC_OK())
-        {
-        fsSession.Volume(vinfo, eDrive);
-        iMemoryDetails.iEFree.Num(TInt64(vinfo.iFree/1024));
-		iMemoryDetails.iESize.Num(TInt64(vinfo.iSize/1024));
-
-        }
-	
-	else {
-		iMemoryDetails.iEFree = KEDriveError;
-		iMemoryDetails.iENotAvailable = ETrue;
-		}
+    fsSession.DriveList(dl);
+    
+    for(TInt driveNum = EDriveC; driveNum <= EDriveZ ; driveNum ++ )
+    	{
+		if( dl[driveNum] )
+			{
+			TMemoryDetails *memDet = new TMemoryDetails;
+			if(fsSession.Volume(vinfo, driveNum) == KErrNone)
+				{
+				memDet->iFree.Num(TInt64(vinfo.iFree/1024));
+				memDet->iSize.Num(TInt64(vinfo.iSize/1024));
+				}
+			else
+				{
+				memDet->iFree.Num( 0 );
+				memDet->iSize.Num( 0 );
+				}
+			User::LeaveIfError(fsSession.DriveToChar(driveNum,memDet->iDriveLetter));
+			iMemoryDetailsList.AppendL( memDet );
+			}
+    	}
+  
     // available work memory
     TMemoryInfoV1Buf memory;
     UserHal::MemoryInfo(memory);
     TInt64 freeMemBytes=(TInt64)(memory().iFreeRamInBytes);
     TInt64 sizeMemBytes=(TInt64)(memory().iTotalRamInBytes);
     TInt64 sizeWorkMemBytes = sizeMemBytes; 
-    iMemoryDetails.iHFree.Num(TInt64(freeMemBytes/1024));
-    iMemoryDetails.iHSize.Num(TInt64(sizeWorkMemBytes/1024));
+    TInt64 sizeRomBytes = (TInt64)(memory().iTotalRomInBytes);
+    iMemoryDetails.iRamFree.Num(TInt64(freeMemBytes/1024));
+    iMemoryDetails.iRamSize.Num(TInt64(sizeWorkMemBytes/1024));
+    iMemoryDetails.iRomSize.Num(TInt64(sizeRomBytes/1024));
     }
 
 // ---------------------------------------------------------------------------
@@ -304,11 +304,12 @@
     TCreatorIds cmd = (TCreatorIds)iCommandArray->At(iCurrentEntry).iCommandId; 
     switch( cmd )
         {
+/*        
 	    case ECmdCreateBrowserBookmarkEntries: { iBrowser->CreateBookmarkEntryL(reinterpret_cast<CBrowserParameters*>(iCommandArray->At(iCurrentEntry).iParameters)); } break;
 	    case ECmdCreateBrowserBookmarkFolderEntries: { iBrowser->CreateBookmarkFolderEntryL(reinterpret_cast<CBrowserParameters*>(iCommandArray->At(iCurrentEntry).iParameters)); } break;
 	    case ECmdCreateBrowserSavedPageEntries: { iBrowser->CreateSavedDeckEntryL(reinterpret_cast<CBrowserParameters*>(iCommandArray->At(iCurrentEntry).iParameters)); } break;
 	    case ECmdCreateBrowserSavedPageFolderEntries: { iBrowser->CreateSavedDeckFolderEntryL(reinterpret_cast<CBrowserParameters*>(iCommandArray->At(iCurrentEntry).iParameters)); } break;
-	    
+*/	    
         case ECmdCreateCalendarEntryAppointments: { iCalendar->CreateAppointmentEntryL(iCommandArray->At(iCurrentEntry).iParameters); } break;
 	    case ECmdCreateCalendarEntryEvents: { iCalendar->CreateEventEntryL(iCommandArray->At(iCurrentEntry).iParameters); } break;
 	    case ECmdCreateCalendarEntryAnniversaries: { iCalendar->CreateAnniversaryEntryL(iCommandArray->At(iCurrentEntry).iParameters); } break;
@@ -325,11 +326,11 @@
 	    case ECmdCreateLogEntryMissedCalls: { iLogs->CreateMissedCallEntryL(reinterpret_cast<CLogsParameters*>(iCommandArray->At(iCurrentEntry).iParameters)); } break;
 	    case ECmdCreateLogEntryReceivedCalls: { iLogs->CreateReceivedCallEntryL(reinterpret_cast<CLogsParameters*>(iCommandArray->At(iCurrentEntry).iParameters)); } break;
 	    case ECmdCreateLogEntryDialledNumbers: { iLogs->CreateDialledNumberEntryL(reinterpret_cast<CLogsParameters*>(iCommandArray->At(iCurrentEntry).iParameters)); } break;
-
+/*
         case ECmdCreateMiscEntryAccessPoints: { iAccessPoints->CreateConnectionSettingsEntryL(iCommandArray->At(iCurrentEntry).iParameters); } break;
         case ECmdDeleteIAPs: { iAccessPoints->DeleteAllL(); } break;
         case ECmdDeleteCreatorIAPs: { iAccessPoints->DeleteAllCreatedByCreatorL(); } break;
-
+*/
         case ECmdCreateMiscEntryLandmarks: { iLandmarks->CreateLandmarkEntryL(reinterpret_cast<CLandmarkParameters*>(iCommandArray->At(iCurrentEntry).iParameters)); } break;
         
 	    case ECmdCreateMessagingEntryMailboxes: { iMailboxes->CreateMailboxEntryL(reinterpret_cast<CMailboxesParameters*>(iCommandArray->At(iCurrentEntry).iParameters)); } break;
@@ -494,7 +495,8 @@
             {
 //            iIMPS->DeleteAllCreatedByCreatorL();
             break;
-            }            
+            }
+/*            
         case ECmdDeleteBrowserBookmarks:
             {
             iBrowser->DeleteAllBookmarksL();
@@ -535,6 +537,7 @@
             iBrowser->DeleteAllSavedPageFoldersCreatedByCreatorL();
             break;
             }
+*/            
         case ECmdDeleteCreatorFiles:
             {
             iFiles->DeleteAllCreatedByCreatorL();
@@ -723,12 +726,12 @@
 
     // init all modules here
     TInt err(KErrNone);
-    TRAP(err, iBrowser = CCreatorBrowser::NewL(this));
+//    TRAP(err, iBrowser = CCreatorBrowser::NewL(this));
     TRAP(err, iCalendar = CCreatorInterimCalendar::NewL(this));
     TRAP(err, iPhonebook = (CCreatorPhonebookBase*)TCreatorFactory::CreatePhoneBookL(this)); 
     TRAP(err, iNotepad = CCreatorNotepad::NewL(this));
     TRAP(err, iLogs = CCreatorLogs::NewL(this));
-    TRAP(err, iAccessPoints = (CCreatorConnectionSettingsBase*)TCreatorFactory::CreateConnectionSettingsL(this));
+//    TRAP(err, iAccessPoints = (CCreatorConnectionSettingsBase*)TCreatorFactory::CreateConnectionSettingsL(this));
     TRAP(err, iMailboxes = CCreatorMailboxes::NewL(this));
     TRAP(err, iFiles = CCreatorFiles::NewL(this));
     TRAP(err, iMessages = CCreatorMessages::NewL(this));
@@ -767,8 +770,8 @@
     iFiles = NULL;
     delete iMailboxes;
     iMailboxes = NULL;
-    delete iAccessPoints;
-    iAccessPoints = NULL;
+ //   delete iAccessPoints;
+//    iAccessPoints = NULL;
     delete iLogs;
     iLogs = NULL;
     delete iNotepad;
@@ -777,8 +780,8 @@
     iPhonebook = NULL;
     delete iCalendar;
     iCalendar = NULL;
-    delete iBrowser;
-    iBrowser = NULL;
+ //   delete iBrowser;
+ //   iBrowser = NULL;
     delete iLandmarks;
     iLandmarks = NULL;
 
@@ -945,14 +948,14 @@
             AppendToCommandArrayL( ECmdDeleteContacts, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteContactGroups, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteCalendarEntries, NULL, 1 );
-            AppendToCommandArrayL( ECmdDeleteBrowserBookmarks, NULL, 1 );
-            AppendToCommandArrayL( ECmdDeleteBrowserBookmarkFolders, NULL, 1 );
-            AppendToCommandArrayL( ECmdDeleteBrowserSavedPages, NULL, 1 );
-            AppendToCommandArrayL( ECmdDeleteBrowserSavedPageFolders, NULL, 1 );
+            //AppendToCommandArrayL( ECmdDeleteBrowserBookmarks, NULL, 1 );
+            //AppendToCommandArrayL( ECmdDeleteBrowserBookmarkFolders, NULL, 1 );
+            //AppendToCommandArrayL( ECmdDeleteBrowserSavedPages, NULL, 1 );
+            //AppendToCommandArrayL( ECmdDeleteBrowserSavedPageFolders, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteLogs, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteMessages, NULL, 1 );
-            AppendToCommandArrayL( ECmdDeleteIAPs, NULL, 1 );
-            AppendToCommandArrayL( ECmdDeleteIMPSs, NULL, 1 );
+            //AppendToCommandArrayL( ECmdDeleteIAPs, NULL, 1 );
+            //AppendToCommandArrayL( ECmdDeleteIMPSs, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteNotes, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteLandmarks, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteCreatorFiles, NULL, 1 );
@@ -964,15 +967,17 @@
             AppendToCommandArrayL( ECmdDeleteCreatorContacts, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteCreatorContactGroups, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteCreatorCalendarEntries, NULL, 1 );
+            /*
             AppendToCommandArrayL( ECmdDeleteCreatorBrowserBookmarks, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteCreatorBrowserBookmarkFolders, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteCreatorBrowserSavedPages, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteCreatorBrowserSavedPageFolders, NULL, 1 );
+            */
             AppendToCommandArrayL( ECmdDeleteCreatorFiles, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteCreatorLogs, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteCreatorMessages, NULL, 1 );
-            AppendToCommandArrayL( ECmdDeleteCreatorIAPs, NULL, 1 );
-            AppendToCommandArrayL( ECmdDeleteCreatorIMPSs, NULL, 1 );
+            //AppendToCommandArrayL( ECmdDeleteCreatorIAPs, NULL, 1 );
+            //AppendToCommandArrayL( ECmdDeleteCreatorIMPSs, NULL, 1 );
             AppendToCommandArrayL( ECmdDeleteCreatorLandmarks, NULL, 1 );
             
             // started exucuting delete commands
@@ -997,7 +1002,8 @@
     // set the home module
     switch(aCommand)
         {
-	    case ECmdCreateBrowserBookmarkEntries:
+/*
+        case ECmdCreateBrowserBookmarkEntries:
 	    case ECmdCreateBrowserBookmarkFolderEntries:
 	    case ECmdCreateBrowserSavedPageEntries:
 	    case ECmdCreateBrowserSavedPageFolderEntries:
@@ -1013,7 +1019,7 @@
             iUsedOptionsMenuModule = iBrowser;
             }
             break;
-	    
+*/	    
         case ECmdCreateCalendarEntryAppointments:
 	    case ECmdCreateCalendarEntryEvents:
 	    case ECmdCreateCalendarEntryAnniversaries:
@@ -1054,7 +1060,7 @@
             iUsedOptionsMenuModule = iLogs;
             }
             break;
-
+/*
 	    case ECmdCreateMiscEntryAccessPoints:
 	    case ECmdDeleteIAPs:
 	    case ECmdDeleteCreatorIAPs:
@@ -1062,7 +1068,7 @@
             iUsedOptionsMenuModule = iAccessPoints;
             }
             break;
-
+*/
 	    case ECmdCreateMessagingEntryMailboxes:
 	    case ECmdDeleteMailboxes:
 	    case ECmdDeleteCreatorMailboxes:
@@ -1835,7 +1841,8 @@
     {
     LOGSTRING("Creator: CCreatorEngine::AccessPointNameToIdL");
     // Accespoint impl moved from engine to accespoint implementations for supporting 3.0-3.1 and 3.2->
-    return iAccessPoints->AccessPointNameToIdL(aAPName, aAnyIfNotFound );
+    //return iAccessPoints->AccessPointNameToIdL(aAPName, aAnyIfNotFound );
+    return 0;
     }
 
 static CCreatorEngine::TTestDataPath SoundFiles[] = {
--- a/creator/src/enginewrapper.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/src/enginewrapper.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -68,28 +68,37 @@
 
 // ---------------------------------------------------------------------------
 
+QList<MemoryDetails> EngineWrapper::GetMemoryDetailsList()
+	{
+	RPointerArray<TMemoryDetails> tMemDetList = iEngine->GetMemoryDetailsList();
+	QList<MemoryDetails> memDetList;
+	MemoryDetails memDet;
+		for(int i=0; i<tMemDetList.Count(); i++)
+			{
+			TMemoryDetails* temp = tMemDetList.operator [](i);
+			QString free = QString::fromUtf16(tMemDetList.operator [](i)->iFree.Ptr(), tMemDetList.operator [](i)->iFree.Length());//QString((QChar*) temp->iFree.Ptr(), temp->iFree.Length());
+			QString size = QString::fromUtf16(tMemDetList.operator [](i)->iSize.Ptr(), tMemDetList.operator [](i)->iSize.Length());//QString((QChar*) temp->iSize.Ptr(), temp->iSize.Length());
+			QString driveLetter = QString::fromUtf8((const char*) &tMemDetList.operator [](i)->iDriveLetter, (int) sizeof(char) );//QString((QChar*) &temp->iDriveLetter, (int) sizeof( char ) );
+			memDet.mFree = free; //QString((QChar*)tMemDetList[i]->iFree.Ptr(), tMemDetList[i]->iFree.Length());
+			memDet.mSize = size; //QString((QChar*) tMemDetList[i]->iSize.Ptr(), tMemDetList[i]->iSize.Length());
+			memDet.mDriveLetter = driveLetter;
+			
+			//memDetList[i].mDriveLetter = QString::fromUtf8( (char *) &tMemDetList[i]->iDriveLetter, (int) sizeof( char ) );
+			memDetList.append( memDet );
+			}
+	return memDetList;
+	}
+
 MemoryDetails EngineWrapper::GetMemoryDetails()
 {
+	
     TMemoryDetails tMemoryDetails = iEngine->GetMemoryDetails();
     MemoryDetails memoryDetails;
 
     // Convert TMemoryDetails to MemoryDetails 
-    memoryDetails.mCFree  = QString((QChar*)tMemoryDetails.iCFree.Ptr(), tMemoryDetails.iCFree.Length());
-	memoryDetails.mDFree  = QString((QChar*)tMemoryDetails.iDFree.Ptr(), tMemoryDetails.iDFree.Length());
-	memoryDetails.mEFree  = QString((QChar*)tMemoryDetails.iEFree.Ptr(), tMemoryDetails.iEFree.Length());
-	memoryDetails.mHFree  = QString((QChar*)tMemoryDetails.iHFree.Ptr(), tMemoryDetails.iHFree.Length());
-	
-	memoryDetails.mCSize  = QString((QChar*)tMemoryDetails.iCSize.Ptr(), tMemoryDetails.iCSize.Length());
-	memoryDetails.mDSize  = QString((QChar*)tMemoryDetails.iDSize.Ptr(), tMemoryDetails.iDSize.Length());
-		memoryDetails.mHSize  = QString((QChar*)tMemoryDetails.iHSize.Ptr(), tMemoryDetails.iHSize.Length());
-	
-	if (tMemoryDetails.iENotAvailable == EFalse) {
-		memoryDetails.mESize  = QString((QChar*)tMemoryDetails.iESize.Ptr(), tMemoryDetails.iESize.Length());
-		memoryDetails.mENotAvailable = false;
-	}
-	else {
-		memoryDetails.mENotAvailable = true;
-	}
+	memoryDetails.mRamFree  = QString((QChar*)tMemoryDetails.iRamFree.Ptr(), tMemoryDetails.iRamFree.Length());
+	memoryDetails.mRamSize  = QString((QChar*)tMemoryDetails.iRamSize.Ptr(), tMemoryDetails.iRamSize.Length());
+
 	return memoryDetails;
 }
 
--- a/creator/src/mainview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/src/mainview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -509,30 +509,31 @@
     // get memory details from engine;
     mMemoryDetails = mEngineWrapper.GetMemoryDetails();
 	
-    if (layout != NULL) {
-        HbTextEdit* edit = new HbTextEdit(this);
-        if(edit != NULL) {
-			if (mMemoryDetails.mENotAvailable == false) {
-            edit->setPlainText(QString("\n\nFree RAM Memory:\n %1 of %2 kB \n\nFree disk memory: \nC: %3 of %4 kB \nD: %5 of %6 kB \nE: %7 of %8 kB")
-					.arg(mMemoryDetails.mHFree).arg(mMemoryDetails.mHSize)
-					.arg(mMemoryDetails.mCFree).arg(mMemoryDetails.mCSize)
-					.arg(mMemoryDetails.mDFree).arg(mMemoryDetails.mDSize)
-					.arg(mMemoryDetails.mEFree).arg(mMemoryDetails.mESize));
-			}
-			else {
-			edit->setPlainText(QString("\n\nFree RAM Memory:\n %1 of %2 kB \n\nFree disk memory: \nC: %3 of %4 kB \nD: %5 of %6 kB \nE: %7")
-					.arg(mMemoryDetails.mHFree).arg(mMemoryDetails.mHSize)
-					.arg(mMemoryDetails.mCFree).arg(mMemoryDetails.mCSize)
-					.arg(mMemoryDetails.mDFree).arg(mMemoryDetails.mDSize)
-					.arg(mMemoryDetails.mEFree));
-			}
-            edit->setReadOnly(true);
+    QList<MemoryDetails> memDet = mEngineWrapper.GetMemoryDetailsList();
+    
+    if (layout != NULL) 
+    	{
+		HbLabel* edit = new HbLabel(this);
+        //HbTextEdit* edit = new HbTextEdit(this);
+        if(edit != NULL) 
+        	{
+        QString text = QString("<BR><BR>Free RAM Memory:<BR> %1 of %2 kB").arg(mMemoryDetails.mRamFree).arg(mMemoryDetails.mRamSize);	
+        //QString text = QString("\n\nFree RAM Memory:\n %1 of %2 kB").arg(mMemoryDetails.mRamFree).arg(mMemoryDetails.mRamSize);
+			for(int i=0 ; i < memDet.count() ; i++ )
+				{
+			text += QString("<BR><BR>Free %1: Memory:<BR> %2 of %3 kB").arg(memDet[i].mDriveLetter).arg(memDet[i].mFree).arg(memDet[i].mSize);//text += QString("\n\nFree %1: Memory:\n %2 of %3 kB").arg(memDet[i].mDriveLetter).arg(memDet[i].mFree).arg(memDet[i].mSize);
+				}
+			edit->setTextWrapping(Hb::TextWordWrap);
+			edit->setHtml(text);
+			//edit->setPlainText(text);
+                	
+            //edit->setReadOnly(true);
             //edit->setCursorHidden(true);
-            //edit->setAttribute(Qt::WA_InputMethodEnabled, false);
+            edit->setAttribute(Qt::WA_InputMethodEnabled, false);
             layout->addItem(edit);
             layout->setContentsMargins(5, 5, 5, 5);
             this->setLayout(layout);
-        }
+        	}
         
     }
     
--- a/creator/src/notifications.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/creator/src/notifications.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -54,7 +54,7 @@
 void Notifications::about()
 {
     showMessageBox(HbMessageBox::MessageTypeInformation,
-        "Version 6.0.1 - June 4th 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.",
+        "Version 6.1.0 - June 18th 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.",
         "About Creator", 
         HbPopup::NoTimeout
         );
--- a/filebrowser/engine/FBFileOps.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/engine/FBFileOps.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -254,6 +254,8 @@
                                 }
                             else
                                 {
+                                // ensure that root target folder exists
+                                BaflUtils::EnsurePathExistsL(iFs, iBuf2);
                                 // otherwise copy the file
                                 FileOpCopy(fullSourcePath, fullTargetPath, iUint1);
                                 }
@@ -331,7 +333,11 @@
                     {
                     path.Append(entry.iName);
                     path.Append(_L("\\"));
-                    DoFindEntries(aFileName, path);
+                    // test path.Left(iBuf2.Length()).Compare(iBuf2) - to prevent never ending recursive copy (in case of copy folder under itself)
+                    if( !(iRecursiveState == EFileOpCopy && !path.Left(iBuf2.Length()).Compare(iBuf2)) )
+                        {
+                        DoFindEntries(aFileName, path);
+                        }
                     }
                 }
             if ( iFileManObserverResult == MFileManObserver::ECancel )
@@ -380,17 +386,13 @@
         iBuf2.Copy(targetPath);
         iUint1 = newSwitch;
         
-        // create initial directory - if it does not succeed, do not even try to continue
-        err = FileOpMkDirAll(targetPath, aSourceEntry.iEntry.iAtt);
-        
-        if (iOperationError == KErrNone)
+        TRAP(err, DoFindEntries(_L("*"), sourcePath));              // entries under current directory entry
+        if ( iFileManObserverResult != MFileManObserver::ECancel )
             {
-            TRAP(err, DoFindEntries(_L("*"), sourcePath));              // entries under current directory entry
-            if ( iFileManObserverResult != MFileManObserver::ECancel )
-                {
-                TRAP(err, DoFindEntriesRecursiveL(_L("*"), sourcePath));    // recursively under directories of current directory entry
-                }
+            TRAP(err, DoFindEntriesRecursiveL(_L("*"), sourcePath));    // recursively under directories of current directory entry
             }
+        // a path has a trailing backslash so it needs to be removed before the call
+        err = FileOpAttribs(targetPath.Left(targetPath.Length()-1), aSourceEntry.iEntry.iAtt, 0, 0, 0);
         }
 
     else if (aSourceEntry.iEntry.IsDir())
--- a/filebrowser/engine/FBFileUtils.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/engine/FBFileUtils.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -24,7 +24,6 @@
 
 #include <textresolver.h> 
 #include <eikprogi.h>
-#include <f32file.h>
 #include <e32svr.h>
 #include <eikfutil.h>
 #include <apparc.h>
@@ -33,9 +32,8 @@
 #include <eikenv.h>
 #include <bautils.h>
 #include <gulicon.h>
-#include <aknconsts.h>
 #include <babackup.h> 
-#include <aknmemorycardui.mbg>
+//#include <aknmemorycardui.mbg>
 #include <sendui.h>
 #include <CMessageData.h>
 #include <ezgzip.h>
@@ -121,7 +119,7 @@
     iCurrentSelectionList = new(ELeave) CFileEntryList(64);
 
     iDocHandler = CDocumentHandler::NewL();
-    iDocHandler->SetExitObserver(this);
+//    iDocHandler->SetExitObserver(this);
     
     // set defaults to the search settings
     iSearchAttributes.iSearchDir = KNullDesC;
@@ -635,22 +633,6 @@
 
 //    if (iEngine->FileListContainer())
 //        {
-        // update navi pane text        
-//        if (iListingMode == ENormalEntries)
-//            iEngine->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
-//        else if (iListingMode == ESearchResults)
-//            iEngine->FileListContainer()->SetNaviPaneTextL(_L("Search results"));
-//        else if (iListingMode == EOpenFiles)
-//            iEngine->FileListContainer()->SetNaviPaneTextL(_L("Open files"));
-//        else if (iListingMode == EMsgAttachmentsInbox)
-//            iEngine->FileListContainer()->SetNaviPaneTextL(_L("Attachments in Inbox"));
-//        else if (iListingMode == EMsgAttachmentsDrafts)
-//            iEngine->FileListContainer()->SetNaviPaneTextL(_L("Attachments in Drafts"));
-//        else if (iListingMode == EMsgAttachmentsSentItems)
-//            iEngine->FileListContainer()->SetNaviPaneTextL(_L("Attachments in Sent Items"));
-//        else if (iListingMode == EMsgAttachmentsOutbox)
-//            iEngine->FileListContainer()->SetNaviPaneTextL(_L("Attachments in Outbox"));
-//
 //        // create a list box if it doesn't already exist
 //        if (!iEngine->FileListContainer()->ListBox())
 //            iEngine->FileListContainer()->CreateListBoxL(iEngine->Settings().iFileViewMode);
@@ -683,153 +665,153 @@
     
 // --------------------------------------------------------------------------------------------
 
-/*CAknIconArray* CFileBrowserFileUtils::GenerateIconArrayL(TBool aGenerateNewBasicIconArray)
-    {
-	// TODO
-	
-    CAknIconArray* iconArray = NULL;
-
-    if (aGenerateNewBasicIconArray)
-        {
-        iconArray = new(ELeave) CAknIconArray(16);    
-        }
-    else
-        {
-        if (iEngine->FileListContainer())
-            iconArray = iEngine->FileListContainer()->ListBoxIconArrayL();
-        
-        if (!iconArray)    
-            iconArray = new(ELeave) CAknIconArray(16);
-        }
-
-        
-    CleanupStack::PushL(iconArray);
-    
-    // generate basic items if not already existing
-    if (iconArray->Count() < EFixedIconListLength)
-        {
-        // reset arrays
-        iconArray->Reset();
-        iAppIconList->Reset();
-        
-        // get default control color
-        TRgb defaultColor;
-        defaultColor = iEngine->EikonEnv()->Color(EColorControlText);
-        
-        // create a color icon of the marking indicator
-        CFbsBitmap* markBitmap = NULL;
-        CFbsBitmap* markBitmapMask = NULL;
-
-        AknsUtils::CreateColorIconL(AknsUtils::SkinInstance(),
-                KAknsIIDQgnIndiMarkedAdd,
-                KAknsIIDQsnIconColors,
-                EAknsCIQsnIconColorsCG13,
-                markBitmap,
-                markBitmapMask,
-                AknIconUtils::AvkonIconFileName(),
-                EMbmAvkonQgn_indi_marked_add,
-                EMbmAvkonQgn_indi_marked_add_mask,
-                defaultColor
-                );
-         
-        // 0 marking indicator
-        CGulIcon* markIcon = CGulIcon::NewL(markBitmap, markBitmapMask);
-        iconArray->AppendL(markIcon);                       
-
-        // 1 empty
-        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
-                                  EMbmAvkonQgn_prop_empty, EMbmAvkonQgn_prop_empty_mask, KAknsIIDQgnPropEmpty);
-        // 2 phone memory
-        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
-                                  EMbmAvkonQgn_prop_phone_memc, EMbmAvkonQgn_prop_phone_memc_mask, KAknsIIDQgnPropPhoneMemc);
-        // 3 memory card
-        AppendGulIconToIconArrayL(iconArray, KMemoryCardUiBitmapFile,
-                                  EMbmAknmemorycarduiQgn_prop_mmc_memc, EMbmAknmemorycarduiQgn_prop_mmc_memc_mask, KAknsIIDQgnPropMmcMemc);
-        // 4 memory card disabled
-        AppendGulIconToIconArrayL(iconArray, KMemoryCardUiBitmapFile,
-                                  EMbmAknmemorycarduiQgn_prop_mmc_non, EMbmAknmemorycarduiQgn_prop_mmc_non_mask, KAknsIIDQgnPropMmcNon);
-        // 5 folder
-        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
-                                  EMbmAvkonQgn_prop_folder_small, EMbmAvkonQgn_prop_folder_small_mask, KAknsIIDQgnPropFolderSmall);
-        // 6 folder with subfolders
-        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
-                                  EMbmAvkonQgn_prop_folder_sub_small, EMbmAvkonQgn_prop_folder_sub_small_mask, KAknsIIDQgnPropFolderSubSmall);
-        // 7 current folder
-        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
-                                  EMbmAvkonQgn_prop_folder_current, EMbmAvkonQgn_prop_folder_current_mask, KAknsIIDQgnPropFolderCurrent);
-        }
-
-    // append custom icons if not in drive list view and setting is enabled
-    if (!aGenerateNewBasicIconArray && !IsDriveListViewActive() && iEngine->Settings().iShowAssociatedIcons)
-        {
-        // init id counter
-        TInt idCounter(EFixedIconListLength + iAppIconList->Count());
-        
-        // loop all items in the file list
-        for (TInt i=0; i<iFileEntryList->Count(); i++)
-            {
-            TFileEntry& fileEntry = iFileEntryList->At(i);
-
-            // just check for normal files            
-            if (!fileEntry.iEntry.IsDir())     
-                {
-                TUid appUid = GetAppUid(fileEntry);
-                TInt iconId = AppIconIdForUid(appUid);
-                
-                if (appUid != KNullUid && iconId == KErrNotFound)
-                    {
-                    // icon not found from the icon array, generate it
-                    CFbsBitmap* bitmap = NULL;
-                    CFbsBitmap* mask = NULL;
-                    CGulIcon* appIcon = NULL;
-        
-                    TRAPD(err, 
-                        AknsUtils::CreateAppIconLC(AknsUtils::SkinInstance(), appUid, EAknsAppIconTypeList, bitmap, mask);
-                        appIcon = CGulIcon::NewL(bitmap, mask);
-                        CleanupStack::Pop(2); //bitmap, mask
-                        );
-                         
-                    if (err == KErrNone)
-                        {
-                        TAppIcon appIconEntry;
-                        appIconEntry.iId = idCounter;
-                        appIconEntry.iUid = appUid;
-                        
-                        appIcon->SetBitmapsOwnedExternally(EFalse);
-                        iconArray->AppendL(appIcon);
-                        iAppIconList->AppendL(appIconEntry);
-
-                        fileEntry.iIconId = idCounter;
-                                                
-                        idCounter++;      
-                        }
-                    else
-                        {
-                        delete bitmap;
-                        delete mask;
-		
-                        TAppIcon appIconEntry;
-                        appIconEntry.iId = EFixedIconEmpty;
-                        appIconEntry.iUid = appUid;
-                        
-                        iAppIconList->AppendL(appIconEntry);
-                        }
-                    }
-
-                else if (appUid != KNullUid && iconId >= 0)
-                    {
-                    // we already have already generated an icon for this uid, use it
-                    fileEntry.iIconId = iconId;
-                    }
-                }
-            }
-        }
-
-    CleanupStack::Pop(); //iconArray
-	return iconArray;
-    
-	}
-*/
+//CAknIconArray* CFileBrowserFileUtils::GenerateIconArrayL(TBool aGenerateNewBasicIconArray)
+//    {
+//	// TODO
+//
+//    CAknIconArray* iconArray = NULL;
+//
+//    if (aGenerateNewBasicIconArray)
+//        {
+//        iconArray = new(ELeave) CAknIconArray(16);
+//        }
+//    else
+//        {
+//        if (iEngine->FileListContainer())
+//            iconArray = iEngine->FileListContainer()->ListBoxIconArrayL();
+//
+//        if (!iconArray)
+//            iconArray = new(ELeave) CAknIconArray(16);
+//        }
+//
+//
+//    CleanupStack::PushL(iconArray);
+//
+//    // generate basic items if not already existing
+//    if (iconArray->Count() < EFixedIconListLength)
+//        {
+//        // reset arrays
+//        iconArray->Reset();
+//        iAppIconList->Reset();
+//
+//        // get default control color
+//        TRgb defaultColor;
+//        defaultColor = iEngine->EikonEnv()->Color(EColorControlText);
+//
+//        // create a color icon of the marking indicator
+//        CFbsBitmap* markBitmap = NULL;
+//        CFbsBitmap* markBitmapMask = NULL;
+//
+//        AknsUtils::CreateColorIconL(AknsUtils::SkinInstance(),
+//                KAknsIIDQgnIndiMarkedAdd,
+//                KAknsIIDQsnIconColors,
+//                EAknsCIQsnIconColorsCG13,
+//                markBitmap,
+//                markBitmapMask,
+//                AknIconUtils::AvkonIconFileName(),
+//                EMbmAvkonQgn_indi_marked_add,
+//                EMbmAvkonQgn_indi_marked_add_mask,
+//                defaultColor
+//                );
+//
+//        // 0 marking indicator
+//        CGulIcon* markIcon = CGulIcon::NewL(markBitmap, markBitmapMask);
+//        iconArray->AppendL(markIcon);
+//
+//        // 1 empty
+//        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
+//                                  EMbmAvkonQgn_prop_empty, EMbmAvkonQgn_prop_empty_mask, KAknsIIDQgnPropEmpty);
+//        // 2 phone memory
+//        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
+//                                  EMbmAvkonQgn_prop_phone_memc, EMbmAvkonQgn_prop_phone_memc_mask, KAknsIIDQgnPropPhoneMemc);
+//        // 3 memory card
+//        AppendGulIconToIconArrayL(iconArray, KMemoryCardUiBitmapFile,
+//                                  EMbmAknmemorycarduiQgn_prop_mmc_memc, EMbmAknmemorycarduiQgn_prop_mmc_memc_mask, KAknsIIDQgnPropMmcMemc);
+//        // 4 memory card disabled
+//        AppendGulIconToIconArrayL(iconArray, KMemoryCardUiBitmapFile,
+//                                  EMbmAknmemorycarduiQgn_prop_mmc_non, EMbmAknmemorycarduiQgn_prop_mmc_non_mask, KAknsIIDQgnPropMmcNon);
+//        // 5 folder
+//        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
+//                                  EMbmAvkonQgn_prop_folder_small, EMbmAvkonQgn_prop_folder_small_mask, KAknsIIDQgnPropFolderSmall);
+//        // 6 folder with subfolders
+//        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
+//                                  EMbmAvkonQgn_prop_folder_sub_small, EMbmAvkonQgn_prop_folder_sub_small_mask, KAknsIIDQgnPropFolderSubSmall);
+//        // 7 current folder
+//        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
+//                                  EMbmAvkonQgn_prop_folder_current, EMbmAvkonQgn_prop_folder_current_mask, KAknsIIDQgnPropFolderCurrent);
+//        }
+//
+//    // append custom icons if not in drive list view and setting is enabled
+//    if (!aGenerateNewBasicIconArray && !IsDriveListViewActive() && iEngine->Settings().iShowAssociatedIcons)
+//        {
+//        // init id counter
+//        TInt idCounter(EFixedIconListLength + iAppIconList->Count());
+//
+//        // loop all items in the file list
+//        for (TInt i=0; i<iFileEntryList->Count(); i++)
+//            {
+//            TFileEntry& fileEntry = iFileEntryList->At(i);
+//
+//            // just check for normal files
+//            if (!fileEntry.iEntry.IsDir())
+//                {
+//                TUid appUid = GetAppUid(fileEntry);
+//                TInt iconId = AppIconIdForUid(appUid);
+//
+//                if (appUid != KNullUid && iconId == KErrNotFound)
+//                    {
+//                    // icon not found from the icon array, generate it
+//                    CFbsBitmap* bitmap = NULL;
+//                    CFbsBitmap* mask = NULL;
+//                    CGulIcon* appIcon = NULL;
+//
+//                    TRAPD(err,
+//                        AknsUtils::CreateAppIconLC(AknsUtils::SkinInstance(), appUid, EAknsAppIconTypeList, bitmap, mask);
+//                        appIcon = CGulIcon::NewL(bitmap, mask);
+//                        CleanupStack::Pop(2); //bitmap, mask
+//                        );
+//
+//                    if (err == KErrNone)
+//                        {
+//                        TAppIcon appIconEntry;
+//                        appIconEntry.iId = idCounter;
+//                        appIconEntry.iUid = appUid;
+//
+//                        appIcon->SetBitmapsOwnedExternally(EFalse);
+//                        iconArray->AppendL(appIcon);
+//                        iAppIconList->AppendL(appIconEntry);
+//
+//                        fileEntry.iIconId = idCounter;
+//
+//                        idCounter++;
+//                        }
+//                    else
+//                        {
+//                        delete bitmap;
+//                        delete mask;
+//
+//                        TAppIcon appIconEntry;
+//                        appIconEntry.iId = EFixedIconEmpty;
+//                        appIconEntry.iUid = appUid;
+//
+//                        iAppIconList->AppendL(appIconEntry);
+//                        }
+//                    }
+//
+//                else if (appUid != KNullUid && iconId >= 0)
+//                    {
+//                    // we already have already generated an icon for this uid, use it
+//                    fileEntry.iIconId = iconId;
+//                    }
+//                }
+//            }
+//        }
+//
+//    CleanupStack::Pop(); //iconArray
+//	return iconArray;
+//
+//	}
+//
 // --------------------------------------------------------------------------------------------
 
 //void CFileBrowserFileUtils::AppendGulIconToIconArrayL(CAknIconArray* aIconArray, const TDesC& aIconFile, TInt aIconId, TInt aMaskId, const TAknsItemID aAknsItemId)
@@ -1991,7 +1973,7 @@
 //        iEngine->EikonEnv()->BusyMsgL(_L("** Searching **"), TGulAlignment(EHCenterVTop));
 
 
-        iEngine->FileBrowserUI()->ShowWaitDialog(_L("** Searching  **"));
+        iEngine->FileBrowserUI()->ShowWaitDialog(_L("Searching"));
         iFileEntryList->Reset();
 
         // if search dir is empty, find from all drives
@@ -2771,15 +2753,15 @@
 	
 // --------------------------------------------------------------------------------------------
 
-void CFileBrowserFileUtils::HandleServerAppExit(TInt aReason)
-	{
+//void CFileBrowserFileUtils::HandleServerAppExit(TInt aReason)
+//	{
 //	if (iOpenFileService)
 //		{
 //		delete iOpenFileService;
 //		iOpenFileService = NULL;
 //		}
-	MAknServerAppExitObserver::HandleServerAppExit(aReason);
-	}
+//	MAknServerAppExitObserver::HandleServerAppExit(aReason);
+//	}
 
 // --------------------------------------------------------------------------------------------
 
@@ -3155,7 +3137,7 @@
         // update view
         RefreshViewL(); 
     
-        if (err == KErrNone)    
+        if (err == KErrNone)
             {
             iEngine->FileBrowserUI()->ShowConfirmationNote(_L("State changed"));
             }
@@ -3298,7 +3280,7 @@
         CleanupClosePushL(file);
         iFindFileEntryList->Reset();
         
-        iEngine->FileBrowserUI()->ShowWaitDialog(_L("** Generating **"));
+        iEngine->FileBrowserUI()->ShowWaitDialog(_L("Generating"));
         
         for (TInt i=0; i<iDriveEntryList->Count(); i++)
             {
@@ -3323,9 +3305,30 @@
             
             writeBuf.Copy(fileEntry.iPath);
             writeBuf.Append(fileEntry.iEntry.iName);
-            writeBuf.Append(_L(" - "));
+            writeBuf.Append(_L(","));
             writeBuf.AppendNum(fileEntry.iEntry.iSize);
             writeBuf.Append(_L(" B"));
+
+//            // date
+//            TTime entryModified = fileEntry.iEntry.iModified;
+//            // convert from universal time
+//            if ( iTz.ConvertToLocalTime( entryModified ) == KErrNone )
+//                {
+//                entryModified = fileEntry.iEntry.iModified; // use universal time
+//                }
+//
+//            _LIT(KDateFormat,               "%D%M%Y%/0%1%/1%2%/2%3%/3");
+//            TBuf<32> dateBuf;
+//            entryModified.FormatL(dateBuf, KDateFormat);
+//            writeBuf.Append(dateBuf);
+//
+//            writeBuf.Append(_L(" "));
+//            // time
+//            _LIT(KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B");
+//            TBuf<32> timeBuf;
+//            entryModified.FormatL(timeBuf, KTimeFormat);
+//            writeBuf.Append(timeBuf);
+//
             writeBuf.Append(KFileNewLine);
             file.Write(writeBuf);
             }
@@ -3339,7 +3342,7 @@
         TFileName noteMsg;
         noteMsg.Format(KMessage, &allFilesPath);
 
-        iEngine->FileBrowserUI()->ShowConfirmationNote(noteMsg, ETrue); // NoTimeout
+        iEngine->FileBrowserUI()->ShowConfirmationNote(noteMsg, EFalse); // NoTimeout
         }
     else
         {
--- a/filebrowser/engine/FBFileUtils.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/engine/FBFileUtils.h	Thu Jun 24 14:55:55 2010 +0300
@@ -24,9 +24,7 @@
 #include <w32std.h>
 #include <badesca.h>
 #include <coedef.h>
-#include <AknServerApp.h>
 #include <msvapi.h>
-#include <AknProgressDialog.h>
 #include <tz.h>
 #include "FB.hrh"
 
@@ -40,16 +38,10 @@
 // FORWARD DECLARATIONS
 class CEngine;
 class CFileBrowserFileOps;
-class CAknIconArray;
-class TAknsItemID;
 class CDocumentHandler;
-//class CAknWaitDialog;
-//class CAknProgressDialog;
 class CEikProgressInfo;
 class CFBFileOpClient;
-//class CAknProgressDialog;
 class CEikProgressInfo;
-class CAknOpenFileService;
 class CMessageDigest;
 
 // CLASS DECLARATIONS
@@ -182,7 +174,7 @@
 
 
 
-class CFileBrowserFileUtils : public CActive, public MAknServerAppExitObserver, public MMsvSessionObserver//, public MProgressDialogCallback
+class CFileBrowserFileUtils : public CActive, public MMsvSessionObserver
 	{
 private:
     enum TState // active object states
@@ -209,9 +201,6 @@
         TInt RunError(TInt aError);
 	void DoCancel();
 
-private: // from MAknServerAppExitObserver
-    void HandleServerAppExit(TInt aReason);
-
 private: // from MMsvSessionObserver
     void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3);
 
@@ -346,10 +335,10 @@
     TState                          iState;
     CEngine*                        iEngine;
     CFileBrowserFileOps*            iFileOps;
-//    CAknWaitDialog*                 iWaitDialog;
+
     TBool                           isWaitDialog;
     TBool                           isProgressDialog;
-//    CAknProgressDialog*             iProgressDialog;
+
     CEikProgressInfo*               iProgressInfo;
     CCommandArray*                  iCommandArray;
     TInt                            iCurrentEntry;
@@ -375,7 +364,7 @@
     CFileEntryList*                 iCurrentSelectionList;
     TSearchAttributes               iSearchAttributes;
     CDocumentHandler*               iDocHandler;
-    CAknOpenFileService*            iOpenFileService;
+
     RFile                           iMsgStoreWalkFile;
     TInt                            iPrevFolderIndex;
     TFileName                       iPrevFolderName;
--- a/filebrowser/engine/engine.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/engine/engine.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -154,20 +154,20 @@
     iSettings.iRememberLastPath = EFalse;
     iSettings.iLastPath = KNullDesC;
     iSettings.iRememberFolderSelection = ETrue;
-#if 0 // TODO
-#if(!defined __SERIES60_30__ && !defined __SERIES60_31__ && !defined __S60_32__)
-    if ( AknLayoutUtils::PenEnabled() )
-        {
-        iSettings.iEnableToolbar = ETrue;
-        }
-    else
-        {
-        iSettings.iEnableToolbar = EFalse;
-        }
-#else
-    iSettings.iEnableToolbar = EFalse;
-#endif
-#endif // TODO
+//#if 0 // TODO
+//#if(!defined __SERIES60_30__ && !defined __SERIES60_31__ && !defined __S60_32__)
+//    if ( AknLayoutUtils::PenEnabled() )
+//        {
+//        iSettings.iEnableToolbar = ETrue;
+//        }
+//    else
+//        {
+//        iSettings.iEnableToolbar = EFalse;
+//        }
+//#else
+//    iSettings.iEnableToolbar = EFalse;
+//#endif
+//#endif // TODO
 
     iSettings.iSupportNetworkDrives = EFalse;
     iSettings.iBypassPlatformSecurity = EFalse;
@@ -329,7 +329,7 @@
         User::RequestComplete( s, KErrCancel );
         }
 
-    //CAknEnv::StopSchedulerWaitWithBusyMessage( iWait );
+        //CAknEnv::StopSchedulerWaitWithBusyMessage( iWait );
 	iWait.AsyncStop();
 	}
 
--- a/filebrowser/engine/engine.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/engine/engine.h	Thu Jun 24 14:55:55 2010 +0300
@@ -22,7 +22,7 @@
 #include <e32std.h>
 #include <e32base.h>
 #include <apgcli.h>
-#include <CAknMemorySelectionSettingPage.h>
+
 #include "FBFileUtils.h"
 
 // setting keys (do not change uids of existing keys to maintain compatibility to older versions!)
@@ -48,7 +48,6 @@
 class CFileBrowserScreenCapture;
 class CFileBrowserFileUtils;
 class CEikonEnv;
-class CAknGlobalConfirmationQuery;
 class CDictionaryFileStore;
 class MFileBrowserUI;
 
--- a/filebrowser/group/ReleaseNotes_FileBrowser.txt	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/group/ReleaseNotes_FileBrowser.txt	Thu Jun 24 14:55:55 2010 +0300
@@ -1,7 +1,7 @@
 ===============================================================================
 
-RELEASE NOTES - FILEBROWSER v5.0.1
-RELEASED 21st May 2010
+RELEASE NOTES - FILEBROWSER v5.1.0
+RELEASED 18th June 2010
 
 SUPPORTS S60 3.0+
 
@@ -37,10 +37,10 @@
 
 ===============================================================================
 
-What's New in v5.0.1
+What's New in v5.1.0
 ====================
 - Error fixes
-- All files to text file with file sizes
+- File filtering
 - Usability improvements
 
 ===============================================================================
@@ -111,6 +111,12 @@
 Version History:
 ================
 
+Version 5.0.1 - 21th May 2010
+====================
+- Error fixes
+- All files to text file with file sizes
+- Usability improvements
+
 Version 5.0.0 - 23th April 2010
 -----------------------------
 - Orbit UI
--- a/filebrowser/ui/inc/editorview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/ui/inc/editorview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -19,8 +19,6 @@
 #define EDITORVIEW_H
 
 #include <hbview.h>
-#include <hbmainwindow.h>
-//#include <QtGui>
 
 class HbTextEdit;
 class HbAction;
@@ -30,7 +28,7 @@
     Q_OBJECT
 
 public:
-    EditorView(HbMainWindow &mainWindow);
+    EditorView();
     ~EditorView();
     void open(const QString& fileName, bool flagReadOnly);
 
@@ -56,8 +54,6 @@
     void loadFile(const QString &fileName);
     void createMenu();
 
-    /* Main Window of folderbrowser */
-    HbMainWindow &mMainWindow;
     // editor
     HbTextEdit *mTextEdit;
     // if flag true, file is currently in hex format
@@ -69,7 +65,6 @@
     HbAction* mToTextAction;
     HbAction* mToHexAction;
     HbAction* mExitAction;
-	
 };
 
 #endif // EDITORVIEW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/inc/fbdrivelistviewitem.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef FBDRIVELISTVIEWITEMS_H
+#define FBDRIVELISTVIEWITEMS_H
+
+#include <HbListViewItem>
+
+#include <QGraphicsWidget>
+#include <QtGlobal>
+
+class HbAbstractViewItem;
+class HbLabel;
+class HbCheckBox;
+class HbWidget;
+
+class QGraphicsLinearLayout;
+class QModelIndex;
+class QGraphicsItem;
+
+class FbDriveListViewItem : public HbListViewItem
+{
+    Q_OBJECT
+
+public:
+    FbDriveListViewItem( QGraphicsItem *parent = 0 );
+    ~FbDriveListViewItem();
+
+    virtual bool canSetModelIndex(const QModelIndex &index) const;
+    virtual HbAbstractViewItem *createItem();
+    virtual void updateChildItems();
+
+private slots:
+    void setCheckedState( int state );
+
+private:
+    virtual void polish(HbStyleParameters& params);
+
+private:
+    void init();
+
+    QGraphicsLinearLayout *hLayout;
+
+    HbLabel *mDiskNameLabel;
+    HbLabel *mSizeLabel;
+    HbLabel *mFreeLabel;
+    //HbCheckBox *mCheckBox;
+    HbLabel *mIconLabel;
+};
+
+#endif // FBDRIVELISTVIEWITEMS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/inc/fbdrivemodel.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef FBDRIVEMODELH_H_
+#define FBDRIVEMODELH_H_
+
+#include "driveentry.h"
+
+#include <QAbstractListModel>
+#include <QVariant>
+
+// Forward declarations
+class EngineWrapper;
+class QModelIndex;
+class QFileIconProvider;
+class QObject;
+
+class FbDriveModel : public QAbstractListModel
+{
+    Q_OBJECT
+
+public:
+    explicit FbDriveModel(EngineWrapper *engineWrapper, QObject *parent = 0);
+    virtual ~FbDriveModel();
+
+    int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    QVariant data(const QModelIndex &index, int role) const;
+    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+
+    DriveEntry driveEntry(const QModelIndex &index) const;
+    QString driveLetter( const QModelIndex &index ) const;
+    QString mediaTypeString(const QModelIndex &index) const;
+
+private:
+    EngineWrapper *mEngineWrapper;
+    QFileIconProvider *mFileIconProvider;
+};
+
+
+
+#endif /* FBDRIVEMODELH_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/inc/fbdriveview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef FBDRIVEVIEWH_H_
+#define FBDRIVEVIEWH_H_
+
+#include "menuaction.h"
+#include "enginewrapper.h"
+
+#include <HbView>
+#include <HbApplication>
+
+#include <QModelIndexList>
+
+// Forward declarations
+class QFileInfo;
+class QSignalMapper;
+class QItemSelection;
+class QString;
+class QGraphicsLinearLayout;
+
+class HbListView;
+class HbListWidget;
+class HbToolBar;
+class HbLabel;
+class HbDialog;
+class HbAbstractViewItem;
+class HbMenu;
+class HbSearchPanel;
+
+class EditorView;
+class SearchView;
+class SettingsView;
+class EngineWrapper;
+class FbDriveModel;
+class FileBrowserSortFilterProxyModel;
+
+class FbDriveView : public HbView
+{
+    Q_OBJECT
+
+public:
+    explicit FbDriveView();
+    virtual ~FbDriveView();
+    void init(EngineWrapper *engineWrapper);
+
+public slots:
+    void refreshList();
+
+private:
+    void openListDialog(const QStringList &items, const QString &titleText, QObject *receiver, const char *member);
+
+    void openPropertyDialog(const QStringList &propertyList, const QString &title);
+
+    QModelIndex currentItemIndex();
+    void storeSelectedItemsOrCurrentItem();
+
+    // Menu related methods
+    void createMenu();
+    void createFileMenu();
+    void createEditMenu();
+    void createViewMenu();
+    void createToolsMenu();
+
+    void createSettingsMenuItem();
+    void createAboutMenuItem();
+    void createExitMenuItem();
+
+    void createContextMenu();
+    void createFileContextMenu();
+    void createEditContextMenu();
+    void createViewContextMenu();
+    void createDiskAdminContextMenu();
+
+private slots:
+    // menu action slots
+    // file menu
+    void fileOpenDrive();
+    void fileSearch();
+
+    void fileProperties();
+
+    void fileSetAttributes();
+
+    // edit menu
+    void editSnapShotToE();
+
+    // view menu
+    void viewRefresh();
+
+    // disk admin menu
+    void diskAdminSetDrivePassword();
+    void diskAdminSetDrivePasswordNew(HbAction *);
+    void doDiskAdminSetDrivePassword(HbAction *);
+
+    void diskAdminUnlockDrive();
+    void doDiskAdminUnlockDrive(HbAction *);
+
+    void diskAdminClearDrivePassword();
+    void doDiskAdminClearDrivePassword(HbAction *);
+
+    void diskAdminEraseDrivePassword();
+    void doDiskAdminEraseDrivePassword(HbAction *);
+
+    void diskAdminFormatDrive();
+    void doDiskAdminFormatDrive(HbAction *);
+
+    void diskAdminQuickFormatDrive();
+    void doDiskAdminQuickFormatDrive(HbAction *);
+
+    void diskAdminCheckDisk();
+
+    void diskAdminScanDrive();
+    void doDiskAdminScanDrive(HbAction *);
+
+    void diskAdminSetDriveName();
+    void doDiskAdminSetDriveName(HbAction *);
+
+    void diskAdminSetDriveVolumeLabel();
+    void doDiskAdminSetDriveVolumeLabel(HbAction *);
+
+    void diskAdminEjectDrive();
+    void diskAdminDismountDrive();
+    void doDiskAdminDismountDrive(HbAction *);
+
+    void diskAdminEraseMBR();
+    void doDiskAdminEraseMBR(HbAction *);
+    void doDiskAdminReallyEraseMBR(HbAction *);
+    void doDiskAdminNotRemovableReallyEraseMBR(HbAction *);
+    
+    void diskAdminPartitionDrive();
+    void diskAdminPartitionDriveProceed(HbAction *);
+    void diskAdminPartitionDriveReallyProceed(HbAction *);
+    void diskAdminPartitionDriveIsNotRemovable(HbAction *);
+    void diskAdminPartitionDriveEraseMbr(HbAction *);
+    void diskAdminPartitionDriveGetCount(HbAction*);
+
+    // tools menu
+    void toolsAllAppsToTextFile();
+    void toolsAllFilesToTextFile();
+//    void toolsAvkonIconCacheEnable();
+//    void toolsAvkonIconCacheDisable();
+
+    void toolsDisableExtendedErrors();
+    void toolsDumpMsgStoreWalk();
+    void toolsEditDataTypes();
+    void toolsEnableExtendedErrors();
+
+    void toolsErrorSimulateLeave();
+    void doToolsErrorSimulateLeave(HbAction *);
+
+    void toolsErrorSimulatePanic();
+    void doToolsErrorSimulatePanicCode(HbAction *);
+    void doToolsErrorSimulatePanic(HbAction *);
+
+    void toolsErrorSimulateException();
+    void doToolsErrorSimulateException(HbAction *);
+
+//    void toolsLocalConnectivityActivateInfrared();
+//    void toolsLocalConnectivityLaunchBTUI();
+//    void toolsLocalConnectivityLaunchUSBUI();
+    void toolsMessageInbox();
+    void toolsMessageDrafts();
+    void toolsMessageSentItems();
+    void toolsMessageOutbox();
+    void toolsMemoryInfo();
+    void toolsSecureBackStart();
+    void toolsSecureBackRestore();
+    void toolsSecureBackStop();
+    void toolsSetDebugMaskQuestion();
+    void toolsSetDebugMask(HbAction *);
+    void toolsShowOpenFilesHere();
+
+    // main menu items
+    void about();
+    
+signals:
+    void aboutToShowFileView();
+    void aboutToShowSettingsView();
+    void aboutToShowEditorView(const QString &, bool);
+    void aboutToShowSearchView(const QString &);
+    void aboutToSimulateLeave(int);
+
+private slots:
+    void updateOptionMenu();
+    void updateContextMenu();
+    void selectionChanged(const QItemSelection &, const QItemSelection &);
+    void activated(const QModelIndex& index);
+
+    void onLongPressed(HbAbstractViewItem *, QPointF);
+
+private:
+    EngineWrapper *mEngineWrapper;
+
+    HbListView *mListView;
+    HbLabel *mNaviPane;
+
+    QGraphicsLinearLayout *mMainLayout;
+
+    // file info contains all needed information of selected file from file model
+    QModelIndexList mClipboardIndexes;
+    QModelIndexList mSelectionIndexes;
+
+    FbDriveModel *mFbDriveModel;
+    OptionMenuActions mOptionMenuActions;
+    ContextMenuActions mContextMenuActions;
+    HbMenu *mContextMenu;
+
+    // flags
+    bool mLocationChanged;
+    // flag for removing source file after copied to target file
+    bool mRemoveFileAfterCopied;
+    bool mClipBoardInUse;
+    bool mFolderContentChanged;
+    QModelIndex mCurrentIndex;
+
+    // temporarily storage
+    QString mOldPassword;
+    QString mPanicCategory;
+    QString mAbsoluteFilePath;
+    OverwriteOptions mOverwriteOptions;
+    QModelIndex mModelIndex;
+    QString mNewFileName;
+    bool mProceed;
+    bool mEraseMBR;
+};
+
+
+
+#endif /* FBDRIVEVIEWH_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/inc/fbfilelistviewitem.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef FBFILELISTVIEWITEM_H
+#define FBFILELISTVIEWITEM_H
+
+#include <HbListViewItem>
+
+#include <QGraphicsWidget>
+#include <QtGlobal>
+
+class HbAbstractViewItem;
+class HbLabel;
+class HbCheckBox;
+class HbWidget;
+
+class QGraphicsLinearLayout;
+class QModelIndex;
+class QGraphicsItem;
+
+class FbFileListViewItem : public HbListViewItem
+{
+    Q_OBJECT
+
+public:
+    FbFileListViewItem( QGraphicsItem *parent = 0 );
+    ~FbFileListViewItem();
+
+    virtual bool canSetModelIndex(const QModelIndex &) const;
+    virtual HbAbstractViewItem *createItem();
+    virtual void updateChildItems();
+
+private slots:
+    void setCheckedState(int state);
+
+private:
+    virtual void polish(HbStyleParameters &);
+
+private:
+    void init();
+
+    QGraphicsLinearLayout *hLayout;
+
+    HbLabel *mDiskNameLabel;
+    HbLabel *mSizeLabel;
+    HbLabel *mFreeLabel;
+    //HbCheckBox *mCheckBox;
+    HbLabel *mIconLabel;
+};
+
+#endif // FBFILELISTVIEWITEM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/inc/fbfilemodel.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef FBFILEMODELH_H_
+#define FBFILEMODELH_H_
+
+#include <QAbstractListModel>
+
+// Forward declarations
+class EngineWrapper;
+class QModelIndex;
+class QFileIconProvider;
+
+class FbFileModel : public QAbstractListModel
+{
+    Q_OBJECT
+
+public:
+    explicit FbFileModel(EngineWrapper *engineWrapper, QObject *parent = 0);
+    virtual ~FbFileModel();
+
+    int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    QVariant data(const QModelIndex &index, int role) const;
+    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+
+private:
+    EngineWrapper *mEngineWrapper;
+    QFileIconProvider *mFileIconProvider;
+};
+
+
+
+#endif /* FBFILEMODELH_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/inc/fbfileview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,248 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef FBFILEVIEWH_H_
+#define FBFILEVIEWH_H_
+
+#include "menuaction.h"
+#include "enginewrapper.h"
+
+#include <HbView>
+#include <HbApplication>
+
+#include <QModelIndexList>
+
+// Forward declarations
+class QFileInfo;
+class QSignalMapper;
+class QItemSelection;
+class QString;
+class QGraphicsLinearLayout;
+
+class HbListView;
+class HbListWidget;
+class HbToolBar;
+class HbLabel;
+class HbDialog;
+class HbAbstractViewItem;
+class HbMenu;
+class HbSearchPanel;
+
+class EditorView;
+class SearchView;
+class SettingsView;
+class EngineWrapper;
+class FbFileModel;
+class FileBrowserSortFilterProxyModel;
+
+class FbFileView : public HbView
+{
+    Q_OBJECT
+
+public:
+    explicit FbFileView();
+    virtual ~FbFileView();
+    void init(EngineWrapper *engineWrapper);
+
+public slots:
+    void refreshList();
+
+private:
+    void fileOverwriteDialog();
+    void openListDialog(const QStringList &items, const QString &titleText, QObject *receiver, const char *member);
+
+    void openPropertyDialog(const QStringList &propertyList, const QString &title);
+
+    QModelIndex currentItemIndex();
+    void storeSelectedItemsOrCurrentItem();
+
+    // Menu related methods
+    void createMenu();
+    void createFileMenu();
+    void createEditMenu();
+    void createViewMenu();
+    void createToolsMenu();
+
+    void createSelectionMenuItem();
+    void createSettingsMenuItem();
+    void createAboutMenuItem();
+    void createExitMenuItem();
+
+    void createContextMenu();
+    void createFileContextMenu();
+    void createEditContextMenu();
+    void createViewContextMenu();
+    void createToolBar();
+
+private slots:
+    // menu action slots
+    // file menu
+    void fileBackMoveUp();
+    void fileOpenDirectory();
+    void fileSearch();
+
+    void fileNewFile();
+    void doFileNewFile(HbAction *);
+
+    void fileNewDirectory();
+    void doFileNewDirectory(HbAction *);
+
+    void fileDelete();
+    void doFileDelete(HbAction *);
+
+    void fileRename();
+    void doFileRename(HbAction *);
+    void doFileRenameFileExist(HbAction *);
+
+    void fileTouch();
+    void doFileTouch(HbAction *);
+    void fileProperties();
+
+    void fileChecksumsMD5();
+    void fileChecksumsMD2();
+    void fileChecksumsSHA1();
+    void fileChecksums(TFileBrowserCmdFileChecksums checksumType);
+
+    void fileSetAttributes();
+
+    // edit menu
+    void editSnapShotToE();
+    void editCut();
+    void editCopy();
+    void editPaste();
+
+    void editCopyToFolder();
+    void doEditCopyToFolder(HbAction *);
+
+    void editMoveToFolder();
+    void doEditMoveToFolder(HbAction *);
+
+    void editSelect();
+    void editUnselect();
+    void editSelectAll();
+    void editUnselectAll();
+
+    // view menu
+    void viewFilterEntries();
+    void filterCriteriaChanged(const QString &);
+    void clearFilterCriteria();
+    void viewRefresh();
+
+    // tools menu
+    void toolsAllAppsToTextFile();
+    void toolsAllFilesToTextFile();
+//    void toolsAvkonIconCacheEnable();
+//    void toolsAvkonIconCacheDisable();
+
+    void toolsDisableExtendedErrors();
+    void toolsDumpMsgStoreWalk();
+    void toolsEditDataTypes();
+    void toolsEnableExtendedErrors();
+
+    void toolsErrorSimulateLeave();
+    void doToolsErrorSimulateLeave(HbAction *);
+
+    void toolsErrorSimulatePanic();
+    void doToolsErrorSimulatePanicCode(HbAction *);
+    void doToolsErrorSimulatePanic(HbAction *);
+
+    void toolsErrorSimulateException();
+    void doToolsErrorSimulateException(HbAction *);
+
+//    void toolsLocalConnectivityActivateInfrared();
+//    void toolsLocalConnectivityLaunchBTUI();
+//    void toolsLocalConnectivityLaunchUSBUI();
+    void toolsMessageInbox();
+    void toolsMessageDrafts();
+    void toolsMessageSentItems();
+    void toolsMessageOutbox();
+    void toolsMemoryInfo();
+    void toolsSecureBackStart();
+    void toolsSecureBackRestore();
+    void toolsSecureBackStop();
+    void toolsSetDebugMaskQuestion();
+    void toolsSetDebugMask(HbAction *);
+    void toolsShowOpenFilesHere();
+
+    // main menu items
+    void selectionModeChanged();
+    void about();
+    
+signals:
+    void aboutToShowDriveView();
+    void aboutToShowSettingsView();
+    void aboutToShowEditorView(const QString &, bool);
+    void aboutToShowSearchView(const QString &);
+    void aboutToSimulateLeave(int);
+
+private slots:
+    void updateOptionMenu();
+    void updateContextMenu();
+    void selectionChanged(const QItemSelection &, const QItemSelection &);
+    void activated(const QModelIndex& index);
+    void activateSelectionMode();
+    void deActivateSelectionMode();
+    void onLongPressed(HbAbstractViewItem *, QPointF);
+
+    void fileOpen(HbAction *);
+    void fileOverwrite(HbAction *);
+    void fileOverwritePostfix(HbAction *);
+
+private:
+    EngineWrapper *mEngineWrapper;
+
+    HbListView *mListView;
+    HbToolBar *mToolBar;
+    HbLabel *mNaviPane;
+    HbSearchPanel *mSearchPanel;
+
+    QGraphicsLinearLayout *mMainLayout;
+
+    // file info contains all needed information of selected file from file model
+    QModelIndexList mClipboardIndexes;
+    QModelIndexList mSelectionIndexes;
+
+    FbFileModel *mFbFileModel;
+    FileBrowserSortFilterProxyModel *mSortFilterProxyModel;
+    OptionMenuActions mOptionMenuActions;
+    ContextMenuActions mContextMenuActions;
+    HbMenu *mContextMenu;
+    HbAction *mToolbarBackAction;
+
+    // flags
+    bool mItemHighlighted;
+    bool mLocationChanged;
+    // flag for removing source file after copied to target file
+    bool mRemoveFileAfterCopied;
+    bool mClipBoardInUse;
+    bool mFolderContentChanged;
+    QModelIndex mCurrentIndex;
+
+    // temporarily storage
+    QString mOldPassword;
+    QString mPanicCategory;
+    QString mAbsoluteFilePath;
+    OverwriteOptions mOverwriteOptions;
+    QModelIndex mModelIndex;
+    QString mNewFileName;
+    bool mProceed;
+    bool mEraseMBR;
+};
+
+
+
+#endif /* FBFILEVIEWH_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/inc/fbmainwindow.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef FBMAINWINDOW_H_
+#define FBMAINWINDOW_H_
+
+#include <hbmainwindow.h>
+
+class HbApplication;
+class HbView;
+
+class EngineWrapper;
+class FbDriveView;
+class FbFileView;
+class SettingsView;
+class EditorView;
+class SearchView;
+
+class FbMainWindow : public HbMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit FbMainWindow(QWidget *parent = 0);
+    virtual ~FbMainWindow();
+    
+    void init();
+
+private slots:
+    void openPreviousBrowserView();
+    void openFileBrowserView(bool);
+    void openDriveView();
+    void openFileView();
+    void openSettingsView();
+    void openEditorView(const QString &, bool);
+    void openSearchView(const QString &);
+    
+private:
+    EngineWrapper *mEngineWrapper;
+    FbDriveView *mDriveView;
+    FbFileView *mFileView;
+    SettingsView *mSettingsView;
+    EditorView *mEditorView;
+    SearchView *mSearchView;
+    HbView *mPreviousView;
+};
+
+#endif /* FBMAINWINDOW_H_ */
--- a/filebrowser/ui/inc/filebrowsermainwindow.h	Thu Jun 17 15:34:52 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#ifndef FILEBROWSERMAINWINDOW_H_
-#define FILEBROWSERMAINWINDOW_H_
-
-#include <hbmainwindow.h>
-
-class HbApplication;
-class EngineWrapper;
-class FileBrowserView;
-class SettingsView;
-class EditorView;
-class SearchView;
-
-class FileBrowserMainWindow : public HbMainWindow
-    {
-    Q_OBJECT
-
-public:
-    explicit FileBrowserMainWindow(QWidget *parent = 0);
-    virtual ~FileBrowserMainWindow();
-    
-    void init();
-
-private slots:
-    void openFileBrowserView();
-    void openSettingsView();
-    void openEditorView(const QString &, bool);
-    void openSearchView(const QString &);
-    
-private:
-    EngineWrapper* mEngineWrapper;
-    FileBrowserView* mFileBrowserView;
-    SettingsView* mSettingsView;
-    EditorView* mEditorView;
-    SearchView* mSearchView;
-    };
-
-#endif /* FILEBROWSERMAINWINDOW_H_ */
--- a/filebrowser/ui/inc/filebrowsermodel.h	Thu Jun 17 15:34:52 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#ifndef FILEBROWSERMODELH_H_
-#define FILEBROWSERMODELH_H_
-
-#include <QAbstractListModel>
-
-// Forward declarations
-class EngineWrapper;
-class QModelIndex;
-class QFileIconProvider;
-
-class FileBrowserModel : public QAbstractListModel
-{
-    Q_OBJECT
-
-public:
-    explicit FileBrowserModel(EngineWrapper *engineWrapper, QObject *parent = 0);
-    virtual ~FileBrowserModel();
-
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    QVariant data(const QModelIndex &index, int role) const;
-    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
-
-private:
-    EngineWrapper *mEngineWrapper;
-    QFileIconProvider *mFileIconProvider;
-};
-
-
-
-#endif /* FILEBROWSERMODELH_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/inc/filebrowsersortfilterproxymodel.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef FILEBROWSERSORTFILTERPROXYMODEL_H
+#define FILEBROWSERSORTFILTERPROXYMODEL_H
+
+#include <QString>
+#include <QSortFilterProxyModel>
+
+class FileBrowserSortFilterProxyModel : public QSortFilterProxyModel
+{
+    Q_OBJECT
+
+public:
+    FileBrowserSortFilterProxyModel(QObject *parent = 0);
+
+    QString filterCriteria() const { return mFilterCriteria; }
+    void setFilterCriteria(const QString &criteria);
+
+protected:
+    bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
+
+private:
+    QString mFilterCriteria;
+};
+
+#endif // FILEBROWSERSORTFILTERPROXYMODEL_H
--- a/filebrowser/ui/inc/filebrowserview.h	Thu Jun 17 15:34:52 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,297 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#ifndef FILEBROWSERVIEWH_H_
-#define FILEBROWSERVIEWH_H_
-
-#include "menuaction.h"
-#include "enginewrapper.h"
-
-#include <HbView>
-#include <HbMainWindow>
-#include <HbApplication>
-
-#include <QModelIndexList>
-
-// Forward declarations
-class QFileInfo;
-class QSignalMapper;
-class QItemSelection;
-class QString;
-class QGraphicsLinearLayout;
-
-class HbListView;
-class HbListWidget;
-class HbToolBar;
-class HbLabel;
-class HbDialog;
-class HbAbstractViewItem;
-class HbMenu;
-
-class FileBrowserMainWindow;
-class EditorView;
-class SearchView;
-class SettingsView;
-class EngineWrapper;
-class FileBrowserModel;
-
-class FileBrowserView : public HbView
-{
-    Q_OBJECT
-
-public:
-    explicit FileBrowserView(FileBrowserMainWindow &mainWindow);
-    virtual ~FileBrowserView();
-    void init(EngineWrapper *engineWrapper);
-
-public slots:
-    void refreshList();
-
-private:
-    void fileOverwriteDialog();
-    void openListDialog(const QStringList &items, const QString &titleText, QObject *receiver, const char *member);
-
-    void openPropertyDialog(const QStringList &propertyList, const QString &title);
-
-    QModelIndex currentItemIndex();
-    void storeSelectedItemsOrCurrentItem();
-
-    // Menu related methods
-    void createMenu();
-    void createFileMenu();
-    void createEditMenu();
-    void createViewMenu();
-    void createToolsMenu();
-
-    void createSelectionMenuItem();
-    void createSettingsMenuItem();
-    void createAboutMenuItem();
-    void createExitMenuItem();
-
-    void createContextMenu();
-    void createFileContextMenu();
-    void createEditContextMenu();
-    void createViewContextMenu();
-    void createDiskAdminContextMenu();
-    void createToolBar();
-
-//    void refreshList();
-    void populateFolderContent();
-
-private slots:
-    // menu action slots
-    // file menu
-    void fileBackMoveUp();
-    void fileOpenDrive();
-    void fileOpenDirectory();
-    void fileSearch();
-
-    void fileNewFile();
-    void doFileNewFile(HbAction *);
-
-    void fileNewDirectory();
-    void doFileNewDirectory(HbAction *);
-
-    void fileDelete();
-    void doFileDelete(HbAction *);
-
-    void fileRename();
-    void doFileRename(HbAction *);
-    void doFileRenameFileExist(HbAction *);
-
-    void fileTouch();
-    void doFileTouch(HbAction *);
-    void fileProperties();
-
-    void fileChecksumsMD5();
-    void fileChecksumsMD2();
-    void fileChecksumsSHA1();
-    void fileChecksums(TFileBrowserCmdFileChecksums checksumType);
-
-    void fileSetAttributes();
-
-    // edit menu
-    void editSnapShotToE();
-    void editCut();
-    void editCopy();
-    void editPaste();
-
-    void editCopyToFolder();
-    void doEditCopyToFolder(HbAction *);
-
-    void editMoveToFolder();
-    void doEditMoveToFolder(HbAction *);
-
-    void editSelect();
-    void editUnselect();
-    void editSelectAll();
-    void editUnselectAll();
-
-    // view menu
-    void viewFilterEntries();
-    void viewRefresh();
-
-    // disk admin menu
-    void diskAdminSetDrivePassword();
-    void diskAdminSetDrivePasswordNew(HbAction *);
-    void doDiskAdminSetDrivePassword(HbAction *);
-
-    void diskAdminUnlockDrive();
-    void doDiskAdminUnlockDrive(HbAction *);
-
-    void diskAdminClearDrivePassword();
-    void doDiskAdminClearDrivePassword(HbAction *);
-
-    void diskAdminEraseDrivePassword();
-    void doDiskAdminEraseDrivePassword(HbAction *);
-
-    void diskAdminFormatDrive();
-    void doDiskAdminFormatDrive(HbAction *);
-
-    void diskAdminQuickFormatDrive();
-    void doDiskAdminQuickFormatDrive(HbAction *);
-
-    void diskAdminCheckDisk();
-
-    void diskAdminScanDrive();
-    void doDiskAdminScanDrive(HbAction *);
-
-    void diskAdminSetDriveName();
-    void doDiskAdminSetDriveName(HbAction *);
-
-    void diskAdminSetDriveVolumeLabel();
-    void doDiskAdminSetDriveVolumeLabel(HbAction *);
-
-    void diskAdminEjectDrive();
-    void diskAdminDismountDrive();
-    void doDiskAdminDismountDrive(HbAction *);
-
-    void diskAdminEraseMBR();
-    void doDiskAdminEraseMBR(HbAction *);
-    void doDiskAdminReallyEraseMBR(HbAction *);
-    void doDiskAdminNotRemovableReallyEraseMBR(HbAction *);
-    
-    void diskAdminPartitionDrive();
-    void diskAdminPartitionDriveProceed(HbAction *);
-    void diskAdminPartitionDriveReallyProceed(HbAction *);
-    void diskAdminPartitionDriveIsNotRemovable(HbAction *);
-    void diskAdminPartitionDriveEraseMbr(HbAction *);
-    void diskAdminPartitionDriveGetCount(HbAction*);
-
-    // tools menu
-    void toolsAllAppsToTextFile();
-    void toolsAllFilesToTextFile();
-    void toolsAvkonIconCacheEnable();
-    void toolsAvkonIconCacheDisable();
-
-    void toolsDisableExtendedErrors();
-    void toolsDumpMsgStoreWalk();
-    void toolsEditDataTypes();
-    void toolsEnableExtendedErrors();
-
-    void toolsErrorSimulateLeave();
-    void doToolsErrorSimulateLeave(HbAction *);
-
-    void toolsErrorSimulatePanic();
-    void doToolsErrorSimulatePanicCode(HbAction *);
-    void doToolsErrorSimulatePanic(HbAction *);
-
-    void toolsErrorSimulateException();
-    void doToolsErrorSimulateException(HbAction *);
-
-//    void toolsLocalConnectivityActivateInfrared();
-//    void toolsLocalConnectivityLaunchBTUI();
-//    void toolsLocalConnectivityLaunchUSBUI();
-    void toolsMessageInbox();
-    void toolsMessageDrafts();
-    void toolsMessageSentItems();
-    void toolsMessageOutbox();
-    void toolsMemoryInfo();
-    void toolsSecureBackStart();
-    void toolsSecureBackRestore();
-    void toolsSecureBackStop();
-    void toolsSetDebugMaskQuestion();
-    void toolsSetDebugMask(HbAction *);
-    void toolsShowOpenFilesHere();
-
-    // main menu items
-    void selectionModeChanged();
-    void about();
-    
-signals:
-    void aboutToShowSettingsView();
-    void aboutToShowEditorView(const QString &, bool);
-    void aboutToShowSearchView(const QString &);
-    void aboutToSimulateLeave(int);
-
-private slots:
-    void itemHighlighted(const QModelIndex &index);
-    //void itemSelected(const QModelIndex &index);
-    void updateOptionMenu();
-    void updateContextMenu();
-    void selectionChanged(const QItemSelection &, const QItemSelection &);
-    void activated(const QModelIndex& index);
-    void activateSelectionMode();
-    void deActivateSelectionMode();
-    void onLongPressed(HbAbstractViewItem *, QPointF);
-
-    void fileOpen(HbAction *);
-    void fileOverwrite(HbAction *);
-    void fileOverwritePostfix(HbAction *);
-
-private:
-    FileBrowserMainWindow &mMainWindow;
-    EngineWrapper *mEngineWrapper;
-
-    HbListView *mListView;
-    HbToolBar *mToolBar;
-    HbLabel *mNaviPane;
-    QGraphicsLinearLayout *mMainLayout;
-
-    // file info contains all needed information of selected file from file model
-    QModelIndexList mClipboardIndexes;
-    QModelIndexList mSelectionIndexes;
-
-    FileBrowserModel *mFileBrowserModel;
-    OptionMenuActions mOptionMenuActions;
-    ContextMenuActions mContextMenuActions;
-    HbMenu *mContextMenu;
-    HbAction *mToolbarBackAction;
-
-    // flags
-    bool mItemHighlighted;
-    bool mLocationChanged;
-    // flag for removing source file after copied to target file
-    bool mRemoveFileAfterCopied;
-    bool mClipBoardInUse;
-    bool mFolderContentChanged;
-    QModelIndex mCurrentIndex;
-
-    // temporarily storage
-    QString mOldPassword;
-    QString mPanicCategory;
-    QString mAbsoluteFilePath;
-    OverwriteOptions mOverwriteOptions;
-    QModelIndex mModelIndex;
-    QString mNewFileName;
-    bool mProceed;
-    bool mEraseMBR;
-};
-
-
-
-#endif /* FILEBROWSERVIEWH_H_ */
--- a/filebrowser/ui/inc/searchview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/ui/inc/searchview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -19,11 +19,9 @@
 #define SEARCHVIEW_H
 
 #include <HbView>
-#include <HbMainWindow>
 
 #include <QDateTime>
 
-class QDir;
 class QStringList;
 
 class EngineWrapper;
--- a/filebrowser/ui/inc/settingsview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/ui/inc/settingsview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -22,7 +22,6 @@
 
 class HbDataForm;
 class HbDataFormModelItem;
-class FileBrowserMainWindow;
 class EngineWrapper;
 class FileBrowserSettings;
 
@@ -31,9 +30,10 @@
     Q_OBJECT
 
 public:
-    SettingsView(FileBrowserMainWindow &mainWindow, EngineWrapper &engineWrapper);
+    SettingsView(EngineWrapper &engineWrapper);
     virtual ~SettingsView();
 
+    void initDataForm();
 signals:
     void finished(bool ok);
 
@@ -51,14 +51,12 @@
     void reject();
 
 private:
-    void initDataForm();
     void createToolbar();
     void constructMenu();
     void loadSettings(const FileBrowserSettings &settings);
     void saveSettings(FileBrowserSettings &settings);
 
 private:
-    FileBrowserMainWindow &mMainWindow;
     EngineWrapper &mEngineWrapper;
 
     HbDataForm *mForm;
--- a/filebrowser/ui/src/editorview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/ui/src/editorview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -16,7 +16,6 @@
 */
 
 #include <HbView>
-#include <HbMainWindow>
 #include <HbApplication>
 #include <HbAction>
 #include <HbMenu>
@@ -32,8 +31,7 @@
 
 #include "editorview.h"
 
-EditorView::EditorView(HbMainWindow &mainWindow)
-    : mMainWindow(mainWindow),
+EditorView::EditorView() :
     mTextEdit(0),
     mFileHex(false),
     mFlagReadOnly(),
--- a/filebrowser/ui/src/enginewrapper.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/ui/src/enginewrapper.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -19,7 +19,7 @@
 #include "engine.h"
 #include "FBFileUtils.h"
 #include "notifications.h"
-#include "filebrowserview.h"
+#include "fbfileview.h"
 #include "searchview.h"
 #include "filebrowsersettings.h"
 #include "settingsview.h"
@@ -739,7 +739,7 @@
     const QString qText = QString::fromUtf16(aDescText.Ptr(), aDescText.Length());
     if (!mProgressDialog) {
         mProgressDialog = new HbProgressDialog(HbProgressDialog::WaitDialog);
-        QObject::connect(mProgressDialog, SIGNAL(cancelled ()), this, SLOT(progressDialogCancelled()));
+        QObject::connect(mProgressDialog, SIGNAL(cancelled()), this, SLOT(progressDialogCancelled()));
     }
 
     mProgressDialog->setText(qText);
@@ -751,8 +751,11 @@
 
 void EngineWrapper::CancelProgressDialog()
 {
-    if (mProgressDialog)
+    if (mProgressDialog) {
+        QObject::disconnect(mProgressDialog, SIGNAL(cancelled()), this, SLOT(progressDialogCancelled()));
         mProgressDialog->cancel();
+        QObject::connect(mProgressDialog, SIGNAL(cancelled()), this, SLOT(progressDialogCancelled()));
+    }
 }
 
 void EngineWrapper::SetProgressValue(TInt aValue)
@@ -771,7 +774,7 @@
     const QString qText = QString::fromUtf16(aDescText.Ptr(), aDescText.Length());
     if (!mWaitDialog) {
         mWaitDialog = new HbProgressDialog(HbProgressDialog::WaitDialog);
-        QObject::connect(mWaitDialog, SIGNAL(cancelled ()), this, SLOT(waitDialogCancelled()));
+        QObject::connect(mWaitDialog, SIGNAL(cancelled()), this, SLOT(waitDialogCancelled()));
     }
 
     mWaitDialog->setText(qText);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/src/fbdrivelistviewitem.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "fbdrivelistviewitem.h"
+#include "driveentry.h"
+#include "fbdrivemodel.h"
+
+#include <hblabel.h>
+#include <hbcheckbox.h>
+#include <hbabstractitemview.h>
+
+#include <QString>
+#include <QStringList>
+#include <QFileIconProvider>
+#include <QGraphicsLinearLayout>
+#include <QRectF>
+#include <QPainter>
+
+FbDriveListViewItem::FbDriveListViewItem(QGraphicsItem *parent) :
+    HbListViewItem(parent),
+    hLayout(0),
+    mDiskNameLabel(0),
+    mSizeLabel(0),
+    mFreeLabel(0),
+    mIconLabel(0)
+{
+}
+
+FbDriveListViewItem::~FbDriveListViewItem()
+{
+}
+
+void FbDriveListViewItem::polish(HbStyleParameters& params)
+{
+    Q_UNUSED(params);
+}
+
+bool FbDriveListViewItem::canSetModelIndex(const QModelIndex &index) const
+{
+    Q_UNUSED(index);
+    return true;
+}
+
+
+HbAbstractViewItem *FbDriveListViewItem::createItem()
+{
+    return new FbDriveListViewItem(*this);
+}
+
+void FbDriveListViewItem::updateChildItems()
+{
+    if(!hLayout) {
+        init();
+    }
+
+    // Qt::DisplayRole
+//    QVariant displayRole = modelIndex().data(Qt::DisplayRole);
+//    QString diskName("default");
+    QStringList stringList;
+//    if (displayRole.isValid()) {
+//        if (displayRole.canConvert<QString>()) {                // EFileViewModeSimple
+//            stringList.append(displayRole.toString());
+//        } else if (displayRole.canConvert<QStringList>()) {     // EFileViewModeExtended
+//            stringList = displayRole.toStringList();
+//        }
+//        if (stringList.count() > 0)
+//            diskName = stringList[0]; //modelIndex().data( Qt::UserRole ).toString();
+//
+//        mDiskNameLabel->setPlainText(diskName/*displayString*/);
+//    }
+//    if (stringList.count() > 1)
+//        mSizeLabel->setPlainText( stringList[1] );
+
+
+    // Get the Drive Entry
+    const FbDriveModel* driveModel= qobject_cast<const FbDriveModel *>(modelIndex().model());
+    DriveEntry driveEntry = driveModel->driveEntry(modelIndex());
+
+    const QString SimpleDriveEntry("%1: <%2>");
+
+    QString diskName = SimpleDriveEntry.arg(driveEntry.driveLetter()).arg(driveEntry.mediaTypeString());
+    mDiskNameLabel->setPlainText(diskName);
+
+    const QString ExtendedDriveEntry("%1/%2 kB");
+    QString diskSize = ExtendedDriveEntry.arg(QString::number(driveEntry.volumeInfoFree()/1024))
+                                         .arg(QString::number(driveEntry.volumeInfoSize()/1024));
+    mSizeLabel->setPlainText( diskSize );
+
+    //mFreeLabel->setPlainText( stringList[2] );
+
+    //    mCheckBox->setCheckState( checkState() );
+
+    // Qt::DecorationRole
+    // QTBUG-11033 No Icon provided for QFileIconProvider::Desktop, Network, Drive on Symbian
+    QVariant decorationRole = modelIndex().data(Qt::DecorationRole);
+    if (decorationRole.isValid()) {
+        QIcon icon = qvariant_cast<QIcon>(decorationRole);
+    if( icon.isNull() ) {
+        QFileIconProvider fileIconProvider;
+        icon = fileIconProvider.icon(QFileIconProvider::File);
+    }
+    mIconLabel->setIcon(HbIcon(icon));
+    }
+}
+
+void FbDriveListViewItem::setCheckedState(int state)
+{
+    HbAbstractViewItem::setCheckState(static_cast<Qt::CheckState>(state));
+}
+
+void FbDriveListViewItem::init()
+{
+    hLayout = new QGraphicsLinearLayout();
+    hLayout->setContentsMargins(0, 0, 0, 0);
+
+    hLayout->setOrientation( Qt::Horizontal );
+    hLayout->addItem(layout());
+
+    mIconLabel = new HbLabel();
+    hLayout->addItem( mIconLabel );
+    hLayout->setAlignment( mIconLabel, Qt::AlignTop );
+    hLayout->setStretchFactor( mIconLabel, 0 );
+
+    QGraphicsLinearLayout *vLayout = new QGraphicsLinearLayout();
+    //vLayout->setContentsMargins(0, 0, 0, 0);
+    vLayout->setOrientation( Qt::Vertical );
+
+    mDiskNameLabel = new HbLabel();
+    HbFontSpec fontSpecPrimary(HbFontSpec::Primary);
+    //fontSpecPrimary.setTextHeight(18.0);
+    mDiskNameLabel->setFontSpec( fontSpecPrimary );
+    vLayout->addItem( mDiskNameLabel );
+    vLayout->setAlignment( mDiskNameLabel, Qt::AlignLeft );
+
+    mSizeLabel = new HbLabel();
+    HbFontSpec fontSpecSecondary(HbFontSpec::Secondary);
+    //fontSpecSecondary.setTextHeight(18.0);
+    mSizeLabel->setFontSpec(fontSpecSecondary);
+    vLayout->addItem( mSizeLabel );
+    vLayout->setAlignment(mSizeLabel, Qt::AlignLeft);
+
+//    mFreeLabel = new HbLabel();
+//    mFreeLabel->setFontSpec( HbFontSpec( HbFontSpec::Secondary ) );
+//    vLayout->addItem( mFreeLabel );
+//    vLayout->setAlignment( mFreeLabel, Qt::AlignLeft );
+
+    HbWidget *labelsWidget = new HbWidget();
+    labelsWidget->setLayout(vLayout);
+
+    hLayout->setAlignment( labelsWidget, Qt::AlignLeft );
+
+    hLayout->addItem( labelsWidget );
+    hLayout->setStretchFactor( labelsWidget, 1 );
+
+    //this->setMaximumHeight( mDiskNameLabel->preferredHeight() );
+    //setMaximumHeight( mIconLabel->preferredHeight() );
+
+    setLayout( hLayout );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/src/fbdrivemodel.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "fbdrivemodel.h"
+#include "enginewrapper.h"
+#include "driveentry.h"
+#include "settingsview.h"
+#include "filebrowsersettings.h"
+#include "FB.hrh"
+
+#include <QModelIndex>
+#include <QFileIconProvider>
+
+/**
+  Constructs a file browser custom system model with the given \a engineWrapper and \a parent.
+  */
+FbDriveModel::FbDriveModel(EngineWrapper *engineWrapper, QObject *parent) :
+    QAbstractListModel(parent),
+    mEngineWrapper(engineWrapper),
+    mFileIconProvider(0)
+{
+    mFileIconProvider = new QFileIconProvider();
+}
+
+/**
+  Destroys this file browser custom system model.
+  */
+FbDriveModel::~FbDriveModel()
+{  
+    if (mFileIconProvider) {
+        delete mFileIconProvider;
+    }
+}
+
+/**
+  \reimp
+  */
+int FbDriveModel::rowCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return mEngineWrapper->itemCount();
+}
+
+/**
+  \reimp
+  */
+QVariant FbDriveModel::data(const QModelIndex &index, int role) const
+{
+    if (!index.isValid() || index.model() != this)
+        return QVariant();
+
+    switch (role) {
+    case Qt::EditRole:
+    case Qt::DisplayRole: {
+            QStringList listItem;
+            DriveEntry driveEntry(mEngineWrapper->getDriveEntry(index));
+            if (mEngineWrapper->settings().fileViewMode() == EFileViewModeSimple)
+            {
+                const QString SimpleDriveEntry("%1: <%2>");
+                listItem /*<< driveEntry.IconId() */
+                        << SimpleDriveEntry.arg(driveEntry.driveLetter())
+                                           .arg(driveEntry.mediaTypeString());
+            } else if (mEngineWrapper->settings().fileViewMode() == EFileViewModeExtended) {
+                const QString SimpleDriveEntry("%1: <%2>");
+                const QString ExtendedDriveEntry("%1/%2 kB");
+                listItem /*<< driveEntry.IconId()*/
+                        << SimpleDriveEntry.arg(driveEntry.driveLetter())
+                                           .arg(driveEntry.mediaTypeString())
+                        << ExtendedDriveEntry.arg(QString::number(driveEntry.volumeInfoFree()/1024))
+                                             .arg(QString::number(driveEntry.volumeInfoSize()/1024));
+
+            }
+            return listItem;
+        }
+    case Qt::DecorationRole: {
+            if (mEngineWrapper) {
+                QIcon icon;
+                //TODO Drive ico has to be provided, for some reason it is not visible
+                icon = mFileIconProvider->icon(QFileIconProvider::Drive);
+                return QVariant(icon);
+            }
+        }
+    }
+    return QVariant();
+}
+
+/**
+  \reimp
+  */
+QVariant FbDriveModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+    Q_UNUSED(section);
+    Q_UNUSED(orientation);
+    Q_UNUSED(role);
+
+    // TODO, implement or remove
+    return QVariant();
+}
+
+
+DriveEntry FbDriveModel::driveEntry(const QModelIndex &index) const
+{
+    return mEngineWrapper->getDriveEntry(index);
+}
+
+QString FbDriveModel::driveLetter(const QModelIndex &index) const
+{
+    QString diskLetter;
+    if (index.row() >= 0 && index.row() < mEngineWrapper->itemCount()) {
+        DriveEntry driveEntry(mEngineWrapper->getDriveEntry(index));
+        diskLetter = driveEntry.driveLetter();
+    }
+    return diskLetter;
+}
+
+QString FbDriveModel::mediaTypeString(const QModelIndex &index) const
+{
+    QString mediaTypeString;
+    if (index.row() >= 0 && index.row() < mEngineWrapper->itemCount()) {
+        DriveEntry driveEntry(mEngineWrapper->getDriveEntry(index));
+        mediaTypeString = driveEntry.mediaTypeString();
+    }
+    return mediaTypeString;
+}
+
+// ---------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/src/fbdriveview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,1308 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "fbdriveview.h"
+#include "settingsview.h"
+#include "editorview.h"
+#include "searchview.h"
+#include "enginewrapper.h"
+#include "notifications.h"
+
+#include "fbdrivemodel.h"
+#include "filebrowsersortfilterproxymodel.h"
+#include "fbdrivelistviewitem.h"
+
+#include <HbMenu>
+#include <HbPopup>
+#include <HbView>
+#include <HbMessageBox>
+#include <HbAction>
+#include <HbLabel>
+#include <HbListView>
+#include <HbListViewItem>
+#include <HbListWidget>
+#include <HbLineEdit>
+#include <HbAbstractViewItem>
+#include <HbSelectionDialog>
+#include <HbValidator>
+#include <HbInputDialog>
+
+#include <QString>
+#include <QGraphicsLinearLayout>
+#include <QItemSelection>
+#include <QDebug>
+//TODO check if needed to do this way
+#include <FB.hrh>
+
+// ---------------------------------------------------------------------------
+
+FbDriveView::FbDriveView() :
+    mEngineWrapper(0),
+    mListView(0),
+    mNaviPane(0),
+    mMainLayout(0),
+    mFbDriveModel(0),
+    mOptionMenuActions(),
+    mContextMenuActions(),
+    mContextMenu(0),
+    mLocationChanged(false),
+    mRemoveFileAfterCopied(false),
+//    mClipBoardInUse(false),
+    mFolderContentChanged(false),
+    mCurrentIndex(),
+    mOldPassword(),
+    mPanicCategory(),
+    mAbsoluteFilePath(),
+    mOverwriteOptions(),
+    mModelIndex(),
+    mNewFileName(),
+    mProceed(false),
+    mEraseMBR(false)
+{
+    setTitle("File Browser");
+
+    createMenu();
+    createContextMenu();
+}
+
+// ---------------------------------------------------------------------------	
+
+void FbDriveView::init(EngineWrapper *engineWrapper)
+{
+    mEngineWrapper = engineWrapper;
+
+    mListView = new HbListView(this);
+    mListView->listItemPrototype()->setStretchingStyle(HbListViewItem::StretchLandscape);
+
+    mListView->setItemPrototype(new FbDriveListViewItem(mListView));
+
+    mFbDriveModel = new FbDriveModel(mEngineWrapper);
+    if (!mListView->model()) {
+        mEngineWrapper->refreshView();
+        mListView->setModel(mFbDriveModel);
+    }
+
+    //mListView->setRootIndex(mFileSystemModel->index(startPath));
+    //mListView->setRootIndex(model->index());
+
+//    mListView->setScrollingStyle(HbScrollArea::PanWithFollowOn);
+
+    connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex)));
+    connect(mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)),
+            this, SLOT(onLongPressed(HbAbstractViewItem*, QPointF)));
+
+    mNaviPane = new HbLabel(this);
+    mNaviPane->setPlainText(QString(" ")); // TODO get from settings or default
+    //mNaviPane->setPlainText(QString(mEngineWrapper->currentPath()));
+    HbFontSpec fontSpec(HbFontSpec::PrimarySmall);
+    mNaviPane->setFontSpec(fontSpec);
+
+    // Create layout and add list view and naviPane into layout:
+    mMainLayout = new QGraphicsLinearLayout(Qt::Vertical);
+    mMainLayout->addItem(mNaviPane);
+    mMainLayout->addItem(mListView);
+    setLayout(mMainLayout);
+}
+
+// ---------------------------------------------------------------------------
+
+FbDriveView::~FbDriveView()
+{  
+//    if (mEngineWrapper) {
+//        delete mEngineWrapper;
+//    }
+    if (mContextMenu) {
+        mContextMenu->deleteLater();
+    }
+
+    delete mFbDriveModel;
+    delete mListView;
+}
+
+/**
+  Initial setup for options menu.
+  Dynamic menu update during the runtime is performed by updateOptionMenu() which
+  to menu's aboutToShow() signal.
+  */
+void FbDriveView::createMenu()
+{
+    createFileMenu();
+    createEditMenu();
+    createViewMenu();
+    createToolsMenu();
+
+    createSettingsMenuItem();
+    createAboutMenuItem();
+    createExitMenuItem();
+
+    // menu dynamic update
+    connect(menu(), SIGNAL(aboutToShow()), this, SLOT(updateOptionMenu()));
+}
+
+/**
+  Initial setup for File submenu
+  */
+void FbDriveView::createFileMenu()
+{
+    mOptionMenuActions.mFileMenu = menu()->addMenu("File");
+
+//    mOptionMenuActions.mFileOpenDrive = mOptionMenuActions.mFileMenu->addAction("Open drive", this, SLOT(fileOpenDrive()));
+    mOptionMenuActions.mFileSearch = mOptionMenuActions.mFileMenu->addAction("Search...", this, SLOT(fileSearch()));
+    //mOptionMenuActions.mFileSearch->setVisible(false);
+
+    //mOptionMenuActions.mFileNewMenu = mOptionMenuActions.mFileMenu->addMenu("New");
+
+    mOptionMenuActions.mFileSetAttributes = mOptionMenuActions.mFileMenu->addAction("Set attributes...", this, SLOT(fileSetAttributes()));
+    mOptionMenuActions.mFileSetAttributes->setVisible(false);
+}
+
+/**
+  Initial setup for Edit submenu
+  */
+void FbDriveView::createEditMenu()
+{
+    mOptionMenuActions.mEditMenu = menu()->addMenu("Edit");
+
+    mOptionMenuActions.mEditSnapShotToE = mOptionMenuActions.mEditMenu->addAction("Snap shot to E:", this, SLOT(editSnapShotToE()));
+    mOptionMenuActions.mEditSnapShotToE->setVisible(false);
+}
+
+/**
+  Initial setup for View submenu
+  */
+void FbDriveView::createViewMenu()
+{
+    mOptionMenuActions.mViewMenu = menu()->addMenu("View");
+    //mOptionMenuActions.mViewMenu->menuAction()->setVisible(false);
+
+    //mOptionMenuActions.mViewFilterEntries = mOptionMenuActions.mViewMenu->addAction("Filter entries", this, SLOT(viewFilterEntries()));
+    mOptionMenuActions.mViewRefresh = mOptionMenuActions.mViewMenu->addAction("Refresh", this, SLOT(viewRefresh()));
+}
+
+/**
+  Initial setup for Tools submenu
+  */
+void FbDriveView::createToolsMenu()
+{
+    mOptionMenuActions.mToolsMenu = menu()->addMenu("Tools");
+
+    mOptionMenuActions.mToolsAllAppsToTextFile = mOptionMenuActions.mToolsMenu->addAction("All apps to a text file", this, SLOT(toolsAllAppsToTextFile()));
+    mOptionMenuActions.mToolsAllAppsToTextFile->setVisible(false);
+    mOptionMenuActions.mToolsAllFilesToTextFile = mOptionMenuActions.mToolsMenu->addAction("All files to a text file", this, SLOT(toolsAllFilesToTextFile()));
+    //mOptionMenuActions.mToolsAllFilesToTextFile->setVisible(false);
+
+//    mOptionMenuActions.mToolsAvkonIconCacheMenu = mOptionMenuActions.mToolsMenu->addMenu("Avkon icon cache");
+//    mOptionMenuActions.mToolsAvkonIconCacheMenu->menuAction()->setVisible(false);
+//    mOptionMenuActions.mToolsAvkonIconCacheEnable = mOptionMenuActions.mToolsAvkonIconCacheMenu->addAction("Enable", this, SLOT(toolsAvkonIconCacheEnable()));
+//    mOptionMenuActions.mToolsAvkonIconCacheDisable = mOptionMenuActions.mToolsAvkonIconCacheMenu->addAction("Clear and disable", this, SLOT(toolsAvkonIconCacheDisable()));
+
+    mOptionMenuActions.mToolsDisableExtendedErrors = mOptionMenuActions.mToolsMenu->addAction("Disable extended errors", this, SLOT(toolsDisableExtendedErrors()));
+    mOptionMenuActions.mToolsDumpMsgStoreWalk = mOptionMenuActions.mToolsMenu->addAction("Dump msg. store walk", this, SLOT(toolsDumpMsgStoreWalk()));
+    mOptionMenuActions.mToolsDumpMsgStoreWalk->setVisible(false);
+    mOptionMenuActions.mToolsEditDataTypes = mOptionMenuActions.mToolsMenu->addAction("Edit data types", this, SLOT(toolsEditDataTypes()));
+    mOptionMenuActions.mToolsEditDataTypes->setVisible(false);
+    mOptionMenuActions.mToolsEnableExtendedErrors = mOptionMenuActions.mToolsMenu->addAction("Enable extended errors", this, SLOT(toolsEnableExtendedErrors()));
+
+    mOptionMenuActions.mToolsErrorSimulateMenu = mOptionMenuActions.mToolsMenu->addMenu("Error simulate");
+    mOptionMenuActions.mToolsErrorSimulateLeave = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Leave", this, SLOT(toolsErrorSimulateLeave()));
+    mOptionMenuActions.mToolsErrorSimulatePanic = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Panic", this, SLOT(toolsErrorSimulatePanic()));
+    mOptionMenuActions.mToolsErrorSimulatePanic->setVisible(false);
+    mOptionMenuActions.mToolsErrorSimulateException = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Exception", this, SLOT(toolsErrorSimulateException()));
+
+//    mOptionMenuActions.mLocalConnectivityMenu = mOptionMenuActions.mToolsMenu->addMenu("Local connectivity");
+//    mOptionMenuActions.mToolsLocalConnectivityActivateInfrared = mOptionMenuActions.mLocalConnectivityMenu->addAction("Activate infrared", this, SLOT(toolsLocalConnectivityActivateInfrared()));
+//    mOptionMenuActions.mToolsLocalConnectivityLaunchBTUI = mOptionMenuActions.mLocalConnectivityMenu->addAction("Launch BT UI", this, SLOT(toolsLocalConnectivityLaunchBTUI()));
+//    mOptionMenuActions.mToolsLocalConnectivityLaunchUSBUI = mOptionMenuActions.mLocalConnectivityMenu->addAction("Launch USB UI", this, SLOT(toolsLocalConnectivityLaunchUSBUI()));
+
+    mOptionMenuActions.mToolsMessageAttachmentsMenu = mOptionMenuActions.mToolsMenu->addMenu("Message attachments");
+    mOptionMenuActions.mToolsMessageAttachmentsMenu->menuAction()->setVisible(false);
+    mOptionMenuActions.mToolsMessageInbox = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Inbox", this, SLOT(toolsMessageInbox()));
+    mOptionMenuActions.mToolsMessageDrafts = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Drafts", this, SLOT(toolsMessageDrafts()));
+    mOptionMenuActions.mToolsMessageSentItems = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Sent items", this, SLOT(toolsMessageSentItems()));
+    mOptionMenuActions.mToolsMessageOutbox = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Outbox", this, SLOT(toolsMessageOutbox()));
+
+    mOptionMenuActions.mToolsMemoryInfo = mOptionMenuActions.mToolsMenu->addAction("Memory info", this, SLOT(toolsMemoryInfo()));
+    mOptionMenuActions.mToolsMemoryInfo->setVisible(false);
+
+    mOptionMenuActions.mToolsSecureBackupMenu = mOptionMenuActions.mToolsMenu->addMenu("Secure backup");
+    mOptionMenuActions.mToolsSecureBackupMenu->menuAction()->setVisible(false);
+    mOptionMenuActions.mToolsSecureBackStart = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Start backup", this, SLOT(toolsSecureBackStart()));
+    mOptionMenuActions.mToolsSecureBackRestore = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Start restore", this, SLOT(toolsSecureBackRestore()));
+    mOptionMenuActions.mToolsSecureBackStop = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Stop", this, SLOT(toolsSecureBackStop()));
+
+    mOptionMenuActions.mToolsSetDebugMask = mOptionMenuActions.mToolsMenu->addAction("Set debug mask", this, SLOT(toolsSetDebugMaskQuestion()));
+    mOptionMenuActions.mToolsShowOpenFilesHere = mOptionMenuActions.mToolsMenu->addAction("Show open files here", this, SLOT(toolsShowOpenFilesHere()));
+    mOptionMenuActions.mToolsShowOpenFilesHere->setVisible(false);
+}
+
+/**
+  Creates Setting menu item in option menu
+  */
+void FbDriveView::createSettingsMenuItem()
+{
+    mOptionMenuActions.mSetting = menu()->addAction("Settings...");
+    connect(mOptionMenuActions.mSetting, SIGNAL(triggered()), this, SIGNAL(aboutToShowSettingsView()));
+}
+
+
+/**
+  Creates About menu item in option menu
+  */
+void FbDriveView::createAboutMenuItem()
+{
+    // about note
+    mOptionMenuActions.mAbout = menu()->addAction("About");
+    connect(mOptionMenuActions.mAbout, SIGNAL(triggered()), this, SLOT(about()));
+}
+
+/**
+  Creates Exit menu item in option menu
+  */
+void FbDriveView::createExitMenuItem()
+{
+    // application exit
+    mOptionMenuActions.mExit = menu()->addAction("Exit");
+    connect(mOptionMenuActions.mExit, SIGNAL(triggered()), qApp, SLOT(quit()));
+}
+
+/**
+  update menu: disk admin available only in device root view. edit available only in folder view
+  when file or folder content exist in current folder, or clipboard has copied item.
+  file and view menus updated every time regarding the folder content.
+  tools, settings, about, exit always available.
+  If there's remove and add operations at same time, always remove first
+  to keep to the correct menu items order.
+  */
+void FbDriveView::updateOptionMenu()
+{
+    bool isFileItemListEmpty = mFbDriveModel->rowCount() == 0;
+//    bool isDriveListViewActive = true; //mEngineWrapper->isDriveListViewActive();
+    bool isNormalModeActive = true;       //iModel->FileUtils()->IsNormalModeActive();
+//    bool isCurrentDriveReadOnly = mEngineWrapper->isCurrentDriveReadOnly();   //iModel->FileUtils()->IsCurrentDriveReadOnly();
+//    bool isCurrentItemDirectory = mEngineWrapper->getFileEntry(currentItemIndex()).isDir();
+    // bool currentSelected = true;    //iContainer->ListBox()->View()->ItemIsSelected(iContainer->ListBox()->View()->CurrentItemIndex());
+//    bool isAllSelected = mListView->selectionModel()->selection().count() == mFbDriveModel->rowCount();
+    //bool isNoneSelected = mListView->selectionModel()->selection().count() != 0;
+//    bool hasSelectedItems = mListView->selectionModel()->selection().count() != 0;
+    //bool isSelectionMode = mOptionMenuActions.mSelection && mOptionMenuActions.mSelection->isChecked();
+    bool isClipBoardEmpty = !mEngineWrapper->isClipBoardListInUse();
+    bool showSnapShot = false;           //iModel->FileUtils()->DriveSnapShotPossible();
+
+    bool showEditMenu(true);
+    if (!showSnapShot || isFileItemListEmpty && isClipBoardEmpty)
+        showEditMenu = false;
+    else
+        showEditMenu = true;
+
+    mOptionMenuActions.mEditMenu->menuAction()->setVisible(showEditMenu);
+
+    //aMenuPane->SetItemDimmed(EFileBrowserCmdFileOpen, isFileItemListEmpty || isDriveListViewActive || isCurrentItemDirectory);
+//    mOptionMenuActions.mFileOpenDrive->setVisible( !(isFileItemListEmpty || !isDriveListViewActive));
+
+    //aMenuPane->SetItemDimmed(EFileBrowserCmdFileView, isFileItemListEmpty || !hasSelectedItems || isCurrentItemDirectory || isDriveListViewActive);
+    //aMenuPane->SetItemDimmed(EFileBrowserCmdFileEdit, isFileItemListEmpty || !hasSelectedItems || isCurrentItemDirectory || isDriveListViewActive);
+    //aMenuPane->SetItemDimmed(EFileBrowserCmdFileSendTo, isFileItemListEmpty || driveListActive || isCurrentItemDirectory);
+
+    // TODO mOptionMenuActions.mFileCompress->setVisible(!(isCurrentDriveReadOnly || isFileItemListEmpty || !hasSelectedItems || isCurrentItemDirectory || isDriveListViewActive));
+    // TODO mOptionMenuActions.mFileDecompress->setVisible(!(isCurrentDriveReadOnly || isFileItemListEmpty || !hasSelectedItems || isCurrentItemDirectory || isDriveListViewActive));
+
+    // TODO mOptionMenuActions.mEditSnapShotToE->setVisible(isDriveListViewActive);
+
+    // TODO mOptionMenuActions.mViewSort->setVisible(!(!isNormalModeActive || isDriveListViewActive || isFileItemListEmpty));
+    // TODO mOptionMenuActions.mViewOrder->setVisible(!(!isNormalModeActive || isDriveListViewActive || isFileItemListEmpty));
+    mOptionMenuActions.mViewRefresh->setVisible(isNormalModeActive);
+    //mOptionMenuActions.mViewFilterEntries->setVisible(!isFileItemListEmpty);
+
+    // TODO R_FILEBROWSER_VIEW_SORT_SUBMENU
+    // aMenuPane->SetItemButtonState(iModel->FileUtils()->SortMode(), EEikMenuItemSymbolOn);
+
+    // TODO R_FILEBROWSER_VIEW_ORDER_SUBMENU
+    // aMenuPane->SetItemButtonState(iModel->FileUtils()->OrderMode(), EEikMenuItemSymbolOn);
+
+    // aResourceId == R_FILEBROWSER_TOOLS_SUBMENU
+    bool noExtendedErrorsAllowed = mEngineWrapper->ErrRdFileExists();
+    mOptionMenuActions.mToolsDisableExtendedErrors->setVisible(noExtendedErrorsAllowed);
+    mOptionMenuActions.mToolsEnableExtendedErrors->setVisible(!noExtendedErrorsAllowed);
+
+//    bool infraRedAllowed = mEngineWrapper->FileExists(KIRAppPath);
+//    bool bluetoothAllowed = mEngineWrapper->FileExists(KBTAppPath);
+//    bool usbAllowed = mEngineWrapper->FileExists(KUSBAppPath);
+//
+//    bool noLocalCon = !infraRedAllowed && !bluetoothAllowed && !usbAllowed;
+//    mOptionMenuActions.mToolsLocalConnectivityMenu->menuAction()->setVisible(!noLocalCon);
+//
+//    mOptionMenuActions.mToolsLocalConnectivityActivateInfrared->setVisible(infraRedAllowed);
+//    mOptionMenuActions.mToolsLocalConnectivityLaunchBTUI->setVisible(bluetoothAllowed);
+//    mOptionMenuActions.mToolsLocalConnectivityLaunchUSBUI->setVisible(usbAllowed);
+}
+
+void FbDriveView::createContextMenu()
+{
+    mContextMenu = new HbMenu();
+    connect(mContextMenu, SIGNAL(aboutToShow()), this, SLOT(updateContextMenu()));
+
+    createFileContextMenu();
+    createEditContextMenu();
+    createViewContextMenu();
+    createDiskAdminContextMenu();
+}
+
+
+void FbDriveView::createFileContextMenu()
+{
+    //mContextMenuActions.mFileMenu = mContextMenu->addMenu("File");
+
+    //mContextMenuActions.mFileOpenDrive = mContextMenuActions.mFileMenu->addAction("Open drive (->)", this, SLOT(fileOpenDrive()));
+//    mContextMenuActions.mFileSearch = mContextMenuActions.mFileMenu->addAction("Search...", this, SLOT(fileSearch()));
+    //mContextMenuActions.mFileSearch->setVisible(false);
+
+    //mContextMenuActions.mFileProperties = mContextMenuActions.mFileMenu->addAction("Properties", this, SLOT(fileProperties()));
+    mContextMenuActions.mFileProperties = mContextMenu->addAction("Properties", this, SLOT(fileProperties()));
+    mContextMenuActions.mFileSearch = mContextMenu->addAction("Search...", this, SLOT(fileSearch()));
+
+//    mContextMenuActions.mFileSetAttributes = mContextMenuActions.mFileMenu->addAction("Set attributes...", this, SLOT(fileSetAttributes()));
+//    mContextMenuActions.mFileSetAttributes->setVisible(false);
+}
+
+void FbDriveView::createEditContextMenu()
+{
+//    mContextMenuActions.mEditMenu = mContextMenu->addMenu("Edit");
+
+    //mContextMenuActions.mEditSnapShotToE = mContextMenuActions.mEditMenu->addAction("Snap shot to E:", this, SLOT(editSnapShotToE()));
+//    mContextMenuActions.mEditSnapShotToE->setVisible(false);
+//    mContextMenuActions.mEditCut = mContextMenuActions.mEditMenu->addAction("Cut", this, SLOT(editCut()));
+//    mContextMenuActions.mEditCopy = mContextMenuActions.mEditMenu->addAction("Copy", this, SLOT(editCopy()));
+//    mContextMenuActions.mEditPaste = mContextMenuActions.mEditMenu->addAction("Paste", this, SLOT(editPaste()));
+//    mContextMenuActions.mEditCopyToFolder = mContextMenuActions.mEditMenu->addAction("Copy to folder...", this, SLOT(editCopyToFolder()));
+//    mContextMenuActions.mEditMoveToFolder = mContextMenuActions.mEditMenu->addAction("Move to folder...", this, SLOT(editMoveToFolder()));
+}
+
+void FbDriveView::createViewContextMenu()
+{
+
+}
+
+/**
+  Initial setup for Disk Admin submenu
+  */
+void FbDriveView::createDiskAdminContextMenu()
+{
+    mContextMenuActions.mDiskAdminMenu = mContextMenu->addMenu("Disk admin");
+    //mContextMenuActions.mDiskAdminMenu->menuAction()->setVisible(false);
+
+    mContextMenuActions.mDiskAdminSetDrivePassword = mContextMenuActions.mDiskAdminMenu->addAction("Set drive password", this, SLOT(diskAdminSetDrivePassword()));
+    mContextMenuActions.mDiskAdminUnlockDrive = mContextMenuActions.mDiskAdminMenu->addAction("Unlock drive", this, SLOT(diskAdminUnlockDrive()));
+    mContextMenuActions.mDiskAdminClearDrivePassword = mContextMenuActions.mDiskAdminMenu->addAction("Clear drive password", this, SLOT(diskAdminClearDrivePassword()));
+    mContextMenuActions.mDiskAdminEraseDrivePassword = mContextMenuActions.mDiskAdminMenu->addAction("Erase drive password", this, SLOT(diskAdminEraseDrivePassword()));
+
+    mContextMenuActions.mDiskAdminFormatDrive = mContextMenuActions.mDiskAdminMenu->addAction("Format drive", this, SLOT(diskAdminFormatDrive()));
+    mContextMenuActions.mDiskAdminFormatDrive->setVisible(false);
+    mContextMenuActions.mDiskAdminQuickFormatDrive = mContextMenuActions.mDiskAdminMenu->addAction("Quick format drive", this, SLOT(diskAdminQuickFormatDrive()));
+    mContextMenuActions.mDiskAdminQuickFormatDrive->setVisible(false);
+
+    mContextMenuActions.mDiskAdminCheckDisk = mContextMenuActions.mDiskAdminMenu->addAction("Check disk", this, SLOT(diskAdminCheckDisk()));
+    mContextMenuActions.mDiskAdminScanDrive = mContextMenuActions.mDiskAdminMenu->addAction("Scan drive", this, SLOT(diskAdminScanDrive()));
+    mContextMenuActions.mDiskAdminSetDriveName = mContextMenuActions.mDiskAdminMenu->addAction("Set drive name", this, SLOT(diskAdminSetDriveName()));
+    mContextMenuActions.mDiskAdminSetDriveVolumeLabel = mContextMenuActions.mDiskAdminMenu->addAction("Set drive volume label", this, SLOT(diskAdminSetDriveVolumeLabel()));
+    mContextMenuActions.mDiskAdminEjectDrive = mContextMenuActions.mDiskAdminMenu->addAction("Eject drive", this, SLOT(diskAdminEjectDrive()));
+    mContextMenuActions.mDiskAdminDismountDrive = mContextMenuActions.mDiskAdminMenu->addAction("Dismount drive", this, SLOT(diskAdminDismountDrive()));
+    mContextMenuActions.mDiskAdminEraseMBR = mContextMenuActions.mDiskAdminMenu->addAction("Erase MBR", this, SLOT(diskAdminEraseMBR()));
+    mContextMenuActions.mDiskAdminPartitionDrive = mContextMenuActions.mDiskAdminMenu->addAction("Partition drive", this, SLOT(diskAdminPartitionDrive()));
+}
+
+void FbDriveView::updateContextMenu()
+{
+    bool isFileItemListEmpty = mFbDriveModel->rowCount() == 0;
+    mContextMenuActions.mFileProperties->setVisible(!isFileItemListEmpty);
+}
+
+// ---------------------------------------------------------------------------
+
+void FbDriveView::onLongPressed(HbAbstractViewItem *listViewItem, QPointF coords)
+{
+    mCurrentIndex = listViewItem->modelIndex();
+
+    mContextMenu->setPreferredPos(coords);
+    mContextMenu->show();
+}
+
+/**
+  Refresh FileBrowser view
+  */
+void FbDriveView::refreshList()
+{
+    mEngineWrapper->refreshView();
+    mListView->reset();
+
+    TListingMode listingMode = mEngineWrapper->listingMode();
+    if (listingMode == ENormalEntries)
+        mNaviPane->setPlainText(QString(mEngineWrapper->currentPath()));
+    else if (listingMode == ESearchResults)
+        mNaviPane->setPlainText(QString(tr("Search results")));
+    else if (listingMode == EOpenFiles)
+        mNaviPane->setPlainText(QString(tr("Open files")));
+    else if (listingMode == EMsgAttachmentsInbox)
+        mNaviPane->setPlainText(QString(tr("Attachments in Inbox")));
+    else if (listingMode == EMsgAttachmentsDrafts)
+        mNaviPane->setPlainText(QString(tr("Attachments in Drafts")));
+    else if (listingMode == EMsgAttachmentsSentItems)
+        mNaviPane->setPlainText(QString(tr("Attachments in Sent Items")));
+    else if (listingMode == EMsgAttachmentsOutbox)
+        mNaviPane->setPlainText(QString(tr("Attachments in Outbox")));
+}
+
+// ---------------------------------------------------------------------------
+/**
+  Show a list dialog
+  \param List aList of item to select item from.
+  \param Title text titleText of a dialog heading widget
+  \return None
+  */
+void FbDriveView::openListDialog(const QStringList& items, const QString &titleText, QObject* receiver, const char* member)
+{
+    // Create a list and some simple content for it
+    HbSelectionDialog *dlg = new HbSelectionDialog();
+    dlg->setAttribute(Qt::WA_DeleteOnClose);
+    // Set items to be popup's content
+    dlg->setStringItems(items);
+    dlg->setSelectionMode(HbAbstractItemView::SingleSelection);
+
+    HbLabel *title = new HbLabel(dlg);
+    title->setPlainText(titleText);
+    dlg->setHeadingWidget(title);
+
+    // Launch popup and handle the user response:
+    dlg->open(receiver, member);
+}
+
+// ---------------------------------------------------------------------------
+
+void FbDriveView::openPropertyDialog(const QStringList& propertyList, const QString& title)
+{
+    HbDialog *dialog = new HbDialog();
+    dialog->setDismissPolicy(HbPopup::TapOutside);
+    dialog->setTimeout(HbPopup::NoTimeout);
+
+    HbLabel *titleWidget = new HbLabel();
+    titleWidget->setPlainText(title);
+    dialog->setHeadingWidget(titleWidget);
+
+    // Create a list and some simple content for it
+    HbListWidget *list = new HbListWidget();
+    QString str;
+    foreach (str, propertyList) {
+        list->addItem(str);
+    }
+
+    // Connect list item activation signal to close the popup
+    connect(list, SIGNAL(activated(HbListWidgetItem*)), dialog, SLOT(close()));
+
+    HbAction *cancelAction = new HbAction("Close");
+    dialog->setPrimaryAction(cancelAction);
+
+    // Set listwidget to be popup's content
+    dialog->setContentWidget(list);
+    // Launch popup and handle the user response:
+    dialog->open();
+}
+
+void FbDriveView::storeSelectedItemsOrCurrentItem()
+{
+    QItemSelectionModel *selectionIndexes = mListView->selectionModel();
+
+    // by default use selected items
+    if (selectionIndexes) {
+        if (selectionIndexes->hasSelection()) {
+            mSelectionIndexes = mListView->selectionModel()->selectedIndexes();
+        } else { // or if none selected, use the current item index
+            mSelectionIndexes.clear();
+            mSelectionIndexes.append(mCurrentIndex);
+//            QModelIndex currentIndex = currentItemIndex();
+//            if (mFbDriveModel->rowCount(currentItemIndex) > currentItemIndex && currentItemIndex >= 0)
+//            {
+//                modelIndexList.append(currentIndex);
+//            }
+        }
+    }
+//    mClipBoardInUse = true;
+}
+
+// ---------------------------------------------------------------------------
+
+QModelIndex FbDriveView::currentItemIndex()
+{
+    return mCurrentIndex;//mListView->selectionModel()->currentIndex();
+}
+
+// ---------------------------------------------------------------------------
+// operations in File Menu
+// ---------------------------------------------------------------------------
+
+void FbDriveView::fileOpenDrive()
+{
+    // TODO make a separate function to be called from here and fileOpenDirectory()
+    mLocationChanged = true;
+    // get selected drive or directory from list view model and open it:
+    //if (mListView->selectionModel()->hasSelection()) {
+//    if (mListView->selectionModel()->selection().count() != 0) {
+//        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->moveDownToDirectory(mCurrentIndex);
+        mListView->setRootIndex(mCurrentIndex);
+        refreshList();
+//    } else {
+//        Notifications::showErrorNote("not selected item!");
+//    }
+}
+
+void FbDriveView::fileSearch()
+{
+    QString searchPath;
+    HbAction *contextrMenuAction = static_cast<HbAction *>(sender());
+    if (contextrMenuAction
+        && contextrMenuAction->text().compare(QString("Search..."), Qt::CaseInsensitive) == 0
+        && contextrMenuAction == mContextMenuActions.mFileSearch) {
+        DriveEntry driveEntry(mEngineWrapper->getDriveEntry(currentItemIndex()));
+        searchPath = driveEntry.driveLetter() + QString(":\\");
+    } else {
+        searchPath = mEngineWrapper->currentPath();
+    }
+    emit aboutToShowSearchView(searchPath);
+}
+
+/**
+  Show file properties
+  */
+void FbDriveView::fileProperties()
+{
+    QModelIndex currentIndex = currentItemIndex();
+    QStringList propertyList;
+    QString titleText;
+    mEngineWrapper->properties(currentIndex, propertyList, titleText);
+    openPropertyDialog(propertyList, titleText);
+}
+
+void FbDriveView::fileSetAttributes()
+{
+
+}
+
+// edit menu
+void FbDriveView::editSnapShotToE()
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// view menu
+// ---------------------------------------------------------------------------
+
+/**
+  Refresh view
+  */
+void FbDriveView::viewRefresh()
+{
+    refreshList();
+}
+
+// ---------------------------------------------------------------------------
+// disk admin menu
+// ---------------------------------------------------------------------------
+
+/**
+  Open old password for the selected drive dialog.
+  */
+void FbDriveView::diskAdminSetDrivePassword()
+{
+    QModelIndex currentIndex = currentItemIndex();
+    // check if the drive has a password
+    if (mEngineWrapper->hasDrivePassword(currentIndex)) {
+        QString heading = QString("Existing password");
+        HbInputDialog::getText(heading, this, SLOT(diskAdminSetDrivePasswordNew(HbAction*)), QString(), scene());
+    } else {
+        QString heading = QString("New password");
+        HbInputDialog::getText(heading, this, SLOT(doDiskAdminSetDrivePassword(HbAction*)), mOldPassword, scene());
+    }
+}
+
+/**
+   Open new password for the selected drive dialog.
+  */
+void FbDriveView::diskAdminSetDrivePasswordNew(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        mOldPassword = dlg->value().toString();
+        QString heading = QString("New password");
+        HbInputDialog::getText(heading, this, SLOT(doDiskAdminSetDrivePassword(HbAction*)), mOldPassword, scene());
+    }
+}
+
+/**
+   Set password for the selected drive.
+  */
+void FbDriveView::doDiskAdminSetDrivePassword(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString newPassword = dlg->value().toString();
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminSetDrivePassword(currentIndex, mOldPassword, newPassword);
+        refreshList();
+        mOldPassword = QString();
+        newPassword = QString();
+    }
+}
+
+/**
+  Open Unlock the selected drive dialog.
+  */
+void FbDriveView::diskAdminUnlockDrive()
+{
+    QModelIndex currentIndex = currentItemIndex();
+    // check if the drive is locked
+    if (mEngineWrapper->isDriveLocked(currentIndex)) {
+        QString heading = QString("Existing password");
+        HbInputDialog::getText(heading, this, SLOT(doDiskAdminUnlockDrive(HbAction*)), QString(), scene());
+    } else {
+        Notifications::showInformationNote(QString("This drive is not locked"));
+    }
+}
+
+/**
+  Unlock the selected drive.
+  */
+void FbDriveView::doDiskAdminUnlockDrive(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString oldPassword = dlg->value().toString();
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminUnlockDrive(currentIndex, oldPassword);
+        refreshList();
+    }
+}
+
+/**
+  Open clear password of the selected drive dialog.
+  */
+void FbDriveView::diskAdminClearDrivePassword()
+{
+    QModelIndex currentIndex = currentItemIndex();
+    // check if the drive has a password
+    if (mEngineWrapper->hasDrivePassword(currentIndex)) {
+        QString heading = QString("Existing password");
+        HbInputDialog::getText(heading, this, SLOT(doDiskAdminClearDrivePassword(HbAction*)), QString(), scene());
+    } else {
+        Notifications::showInformationNote(QString("This drive has no password"));
+    }
+}
+
+/**
+  Clear password of the selected drive.
+  */
+void FbDriveView::doDiskAdminClearDrivePassword(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString oldPassword = dlg->value().toString();
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminClearDrivePassword(currentIndex, oldPassword);
+        refreshList();
+    }
+}
+
+
+/**
+  Question for erase password of the selected drive
+  */
+void FbDriveView::diskAdminEraseDrivePassword()
+{
+    // check if the drive has a password
+    QModelIndex currentIndex = currentItemIndex();
+    if (mEngineWrapper->hasDrivePassword(currentIndex)) {
+        HbMessageBox::question(QString("Are you sure? All data can be lost!"), this, SLOT(doDiskAdminEraseDrivePassword(HbAction*)));
+    } else {
+        Notifications::showInformationNote(QString("This drive has no password"));
+    }
+}
+
+/**
+  Erase password of the selected drive
+  */
+void FbDriveView::doDiskAdminEraseDrivePassword(HbAction* action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminEraseDrivePassword(currentIndex);
+        refreshList();
+    }
+}
+
+/**
+  Performs format on the selected drive
+  */
+void FbDriveView::diskAdminFormatDrive()
+{
+    HbMessageBox::question(QString("Are you sure? All data will be lost!"), this, SLOT(doDiskAdminFormatDrive(HbAction*)));
+}
+
+/**
+  Performs format on the selected drive
+  */
+void FbDriveView::doDiskAdminFormatDrive(HbAction* action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminFormatDrive(currentIndex, false);
+    }
+}
+
+/**
+  Performs quick format on the selected drive
+  */
+void FbDriveView::diskAdminQuickFormatDrive()
+{
+    HbMessageBox::question(QString("Are you sure? All data will be lost!"), this, SLOT(doDiskAdminQuickFormatDrive(HbAction*)));
+}
+
+/**
+  Performs quick format on the selected drive
+  */
+void FbDriveView::doDiskAdminQuickFormatDrive(HbAction* action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminFormatDrive(currentIndex, true);
+    }
+}
+
+/**
+    Checks the disk integrity on the selected drive
+  */
+void FbDriveView::diskAdminCheckDisk()
+{
+    QModelIndex currentIndex = currentItemIndex();
+    mEngineWrapper->DiskAdminCheckDisk(currentIndex);
+}
+
+/**
+  Checks the selected drive for errors and corrects them
+  */
+void FbDriveView::diskAdminScanDrive()
+{
+    HbMessageBox::question(QString("This finds errors on disk and corrects them. Proceed?"), this, SLOT(doDiskAdminScanDrive(HbAction*)));
+}
+
+/**
+  Checks the selected drive for errors and corrects them
+  */
+void FbDriveView::doDiskAdminScanDrive(HbAction* action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminScanDrive(currentIndex);
+        refreshList();
+    }
+}
+
+/**
+  Open drive name dialog
+  */
+void FbDriveView::diskAdminSetDriveName()
+{
+    QString driveName;
+
+    // get existing drive name
+    QModelIndex currentIndex = currentItemIndex();
+    mEngineWrapper->GetDriveName(currentIndex, driveName);
+
+    QString heading = QString("New name");
+    HbInputDialog::getText(heading, this, SLOT(doDiskAdminSetDriveName(HbAction*)), driveName, scene());
+}
+
+/**
+  Set drive name.
+  */
+void FbDriveView::doDiskAdminSetDriveName(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString driveName = dlg->value().toString();
+
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminSetDriveName(currentIndex, driveName);
+
+        refreshList();
+    }
+}
+
+/**
+  Open drive volume label dialog
+  */
+void FbDriveView::diskAdminSetDriveVolumeLabel()
+{
+    QString volumeLabel;
+
+    // get existing drive name
+    QModelIndex currentIndex = currentItemIndex();
+    mEngineWrapper->GetDriveVolumeLabel(currentIndex, volumeLabel);
+
+    QString heading = QString("New volume label");
+    HbInputDialog::getText(heading, this, SLOT(doDiskAdminSetDriveVolumeLabel(HbAction*)), volumeLabel, scene());
+}
+
+/**
+  Set drive volume label.
+  */
+void FbDriveView::doDiskAdminSetDriveVolumeLabel(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString volumeLabel = dlg->value().toString();
+
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminSetDriveVolumeLabel(currentIndex, volumeLabel);
+
+        refreshList();
+    }
+}
+
+/**
+  Eject the selected drive
+  */
+void FbDriveView::diskAdminEjectDrive()
+{
+    QModelIndex currentIndex = currentItemIndex();
+    mEngineWrapper->DiskAdminEjectDrive(currentIndex);
+    refreshList();
+}
+
+/**
+  Dismount the selected drive
+  */
+void FbDriveView::diskAdminDismountDrive()
+{
+    HbMessageBox::question(QString("Are you sure you know what are you doing?"), this, SLOT(doDiskAdminDismountDrive(HbAction*)));
+}
+
+void FbDriveView::doDiskAdminDismountDrive(HbAction* action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminDismountDrive(currentIndex);
+        refreshList();
+    }
+}
+
+/**
+  Erase Master Boot Record of the selected drive
+  */
+void FbDriveView::diskAdminEraseMBR()
+{
+    // TODO What to do with FB LITE macros?
+    HbMessageBox::question(QString("Are you sure? Your media driver must support this!"), this, SLOT(doDiskAdminEraseMBR(HbAction*)));
+}
+
+void FbDriveView::doDiskAdminEraseMBR(HbAction* action)
+{
+    // TODO What to do with FB LITE macros?
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        HbMessageBox::question(QString("Are you really sure you know what are you doing ?!?"), this, SLOT(doDiskAdminReallyEraseMBR(HbAction*)));
+    }
+}
+
+void FbDriveView::doDiskAdminReallyEraseMBR(HbAction* action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        QModelIndex currentIndex = currentItemIndex();
+        // warn if the selected drive is not detected as removable
+        if (mEngineWrapper->isDriveRemovable(currentIndex)) {
+            mEngineWrapper->DiskAdminEraseMBR(currentIndex);
+            refreshList();
+        } else {
+            HbMessageBox::question(QString("Selected drive is not removable, really continue?"), this, SLOT(doDiskAdminNotRemovableReallyEraseMBR(HbAction*)));
+        }
+    }
+}
+
+void FbDriveView::doDiskAdminNotRemovableReallyEraseMBR(HbAction* action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->DiskAdminEraseMBR(currentIndex);
+        refreshList();
+    }
+
+}
+
+/**
+  Partition the selected drive
+  */
+void FbDriveView::diskAdminPartitionDrive()
+{
+    const QString message("Are you sure? Your media driver must support this!");
+    HbMessageBox::question(message, this, SLOT(diskAdminPartitionDriveProceed(HbAction *)));
+}
+
+/**
+  Partition the selected drive if user is sure
+  */
+void FbDriveView::diskAdminPartitionDriveProceed(HbAction *action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        const QString message("Are you really sure you know what are you doing ?!?");
+        HbMessageBox::question(message, this, SLOT(diskAdminPartitionDriveReallyProceed(HbAction *)));
+    }
+}
+
+/**
+  Partition the selected drive if user is really sure
+  */
+void FbDriveView::diskAdminPartitionDriveReallyProceed(HbAction *action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        QModelIndex currentIndex = currentItemIndex();
+        mEraseMBR = false;
+        // warn if the selected drive is not detected as removable
+        mProceed = false;
+        if (mEngineWrapper->isDriveRemovable(currentIndex)) {
+            mProceed = true;
+        } else {
+            const QString message("Selected drive is not removable, really continue?");
+            HbMessageBox::question(message, this, SLOT(diskAdminPartitionDriveIsNotRemovable(HbAction *)));
+        }
+
+        if (mProceed) {
+            // query if erase mbr
+            mEraseMBR = false;
+
+            QString message("Erase MBR first (normally needed)?");
+            HbMessageBox::question(message, this, SLOT(diskAdminPartitionDriveEraseMbr(HbAction *)));
+
+            // TODO use HbListDialog
+            QStringList list;
+            list << "1" << "2" << "3" << "4";
+            openListDialog(list, QString("Partitions?"), this, SLOT(diskAdminPartitionDriveGetCount(HbAction*)));
+        }
+    }
+}
+
+/**
+  Store result of user query about proceeding when drive is not removable.
+  */
+void FbDriveView::diskAdminPartitionDriveIsNotRemovable(HbAction *action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        mProceed = true;
+    } else {
+        mProceed = false;
+    }
+}
+
+/**
+  Store result of user query about erase MBR
+  */
+void FbDriveView::diskAdminPartitionDriveEraseMbr(HbAction *action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        mEraseMBR = true;
+    }
+}
+
+/**
+  Partition the selected drive
+  */
+void FbDriveView::diskAdminPartitionDriveGetCount(HbAction* action)
+{
+    HbSelectionDialog *dlg = static_cast<HbSelectionDialog*>(sender());
+    if(!action && dlg && dlg->selectedItems().count()){
+        int selectionIndex = dlg->selectedItems().at(0).toInt();
+        QModelIndex currentIndex = currentItemIndex();
+        int amountOfPartitions = selectionIndex + 1;
+        mEngineWrapper->DiskAdminPartitionDrive(currentIndex, mEraseMBR, amountOfPartitions);
+        refreshList();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// tools menu
+// ---------------------------------------------------------------------------
+void FbDriveView::toolsAllAppsToTextFile()
+{
+
+}
+
+/**
+  Write all files to text file
+  */
+void FbDriveView::toolsAllFilesToTextFile()
+{
+    mEngineWrapper->toolsWriteAllFiles();
+}
+
+//void FbDriveView::toolsAvkonIconCacheEnable()
+//{
+//
+//}
+//void FbDriveView::toolsAvkonIconCacheDisable()
+//{
+//
+//}
+
+/**
+  Disable extended errors
+  */
+void FbDriveView::toolsDisableExtendedErrors()
+{
+    mEngineWrapper->ToolsSetErrRd(false);
+}
+
+void FbDriveView::toolsDumpMsgStoreWalk()
+{
+
+}
+void FbDriveView::toolsEditDataTypes()
+{
+
+}
+
+/**
+  Enable extended errors
+  */
+void FbDriveView::toolsEnableExtendedErrors()
+{
+    mEngineWrapper->ToolsSetErrRd(true);
+}
+
+/**
+  Open simulate leave dialog
+  */
+void FbDriveView::toolsErrorSimulateLeave()
+{
+    int leaveCode = -6;
+    QString heading = QString("Leave code");
+    //HbInputDialog::getInteger(heading, this, SLOT(doToolsErrorSimulateLeave(HbAction*)), leaveCode, scene());
+    HbInputDialog::getText(heading, this, SLOT(doToolsErrorSimulateLeave(HbAction*)), QString::number(leaveCode), scene());
+}
+
+
+/**
+  Simulate leave.
+  */
+void FbDriveView::doToolsErrorSimulateLeave(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        bool ok;
+        int leaveCode = dlg->value().toString().toInt(&ok);
+        if (leaveCode != 0 || ok) {
+            mEngineWrapper->ToolsErrorSimulateLeave(leaveCode);
+        }
+    }
+}
+
+/**
+  Open simulate panic dialog.
+  */
+void FbDriveView::toolsErrorSimulatePanic()
+{
+    mPanicCategory = QString ("Test Category");
+    QString heading = QString("Panic category");
+    HbInputDialog::getText(heading, this, SLOT(doToolsErrorSimulatePanicCode(HbAction*)), mPanicCategory, scene());
+}
+
+/**
+  Simulate panic.
+  */
+void FbDriveView::doToolsErrorSimulatePanicCode(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        mPanicCategory = dlg->value().toString();
+        int panicCode(555);
+        QString heading = QString("Panic code");
+        HbInputDialog::getInteger(heading, this, SLOT(doToolsErrorSimulatePanic(HbAction*)), panicCode, scene());
+    }
+}
+
+/**
+  Simulate panic.
+  */
+void FbDriveView::doToolsErrorSimulatePanic(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        bool ok;
+        int panicCode = dlg->value().toInt(&ok);
+        if (panicCode != 0 || ok) {
+            mEngineWrapper->ToolsErrorSimulatePanic(mPanicCategory, panicCode);
+        }
+    }
+}
+
+/**
+  Open simulate exception dialog.
+  */
+void FbDriveView::toolsErrorSimulateException()
+{
+    int exceptionCode = 0;
+    QString heading = QString("Exception code");
+    HbInputDialog::getInteger(heading, this, SLOT(doToolsErrorSimulateException(HbAction*)), exceptionCode, scene());
+}
+
+/**
+  Simulate exception.
+  */
+void FbDriveView::doToolsErrorSimulateException(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        bool ok;
+        int exceptionCode = dlg->value().toInt(&ok);
+        if (exceptionCode != 0 || ok) {
+            mEngineWrapper->ToolsErrorSimulateException(exceptionCode);
+        }
+    }
+}
+
+//    void FbDriveView::toolsLocalConnectivityActivateInfrared()
+//{
+//
+//}
+//    void FbDriveView::toolsLocalConnectivityLaunchBTUI()
+//{
+//
+//}
+//    void FbDriveView::toolsLocalConnectivityLaunchUSBUI()
+//{
+//
+//}
+void FbDriveView::toolsMessageInbox()
+{
+
+}
+void FbDriveView::toolsMessageDrafts()
+{
+
+}
+void FbDriveView::toolsMessageSentItems()
+{
+
+}
+void FbDriveView::toolsMessageOutbox()
+{
+
+}
+void FbDriveView::toolsMemoryInfo()
+{
+
+}
+void FbDriveView::toolsSecureBackStart()
+{
+
+}
+void FbDriveView::toolsSecureBackRestore()
+{
+
+}
+void FbDriveView::toolsSecureBackStop()
+{
+
+}
+
+/**
+  Open debug mask dialog
+  */
+void FbDriveView::toolsSetDebugMaskQuestion()
+{
+    quint32 dbgMask = mEngineWrapper->getDebugMask();
+    QString dbgMaskText = QString("0x").append(QString::number(dbgMask, 16));
+    QString heading = QString("Kernel debug mask in hex format");
+    HbInputDialog::getText(heading, this, SLOT(toolsSetDebugMask(HbAction*)), dbgMaskText, scene());
+}
+
+/**
+  Set debug mask
+  */
+void FbDriveView::toolsSetDebugMask(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString dbgMaskText = dlg->value().toString();
+        if (dbgMaskText.length() > 2 && dbgMaskText[0]=='0' && dbgMaskText[1]=='x') {
+            bool ok;
+            quint32 dbgMask = dbgMaskText.toUInt(&ok, 16);
+            if (dbgMask != 0 || ok) {
+                mEngineWrapper->toolsSetDebugMask(dbgMask);
+                Notifications::showConfirmationNote(QString("Changed"));
+            } else {
+                Notifications::showErrorNote(QString("Cannot convert value"));
+            }
+        } else {
+            Notifications::showErrorNote(QString("Not in hex format"));
+        }
+    }
+}
+
+void FbDriveView::toolsShowOpenFilesHere()
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// main menu items
+// ---------------------------------------------------------------------------
+
+/**
+  Show about note
+  */
+void FbDriveView::about()
+{
+    Notifications::showAboutNote();
+}
+
+// ---------------------------------------------------------------------------
+// End of operations
+// ---------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------
+
+/**
+  Item is selected from list when selection mode is activated from menu
+  */
+void FbDriveView::selectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/)
+{
+    //QItemSelectionModel *selectionModel = mListView->selectionModel();
+}
+
+/**
+  An item is clicked from navigation item list. Navigation item list contains
+  drive-, folder- or file items. Opens selected drive, folder or file popup menu
+  */
+void FbDriveView::activated(const QModelIndex& index)
+{
+    if (mFbDriveModel) {
+//        if (mEngineWrapper->isDriveListViewActive()) {
+            mEngineWrapper->moveDownToDirectory(index);
+            //emit aboutToShowFileView(QString(mEngineWrapper->currentPath()));
+            emit aboutToShowFileView();
+            //refreshList();
+//        }
+    }
+}
+
+// ---------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/src/fbfilelistviewitem.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,160 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "fbfilelistviewitem.h"
+
+#include <QString>
+#include <QStringList>
+#include <QGraphicsLinearLayout>
+#include <QRectF>
+#include <QPainter>
+
+#include <hblabel.h>
+#include <hbcheckbox.h>
+#include <hbabstractitemview.h>
+
+FbFileListViewItem::FbFileListViewItem(QGraphicsItem *parent) :
+    HbListViewItem(parent),
+    hLayout(0),
+    mDiskNameLabel(0),
+    mSizeLabel(0),
+    mFreeLabel(0),
+    mIconLabel(0)
+{
+}
+
+FbFileListViewItem::~FbFileListViewItem()
+{
+}
+
+void FbFileListViewItem::polish(HbStyleParameters &params)
+{
+    Q_UNUSED(params);
+}
+
+bool FbFileListViewItem::canSetModelIndex(const QModelIndex &index) const
+{
+    Q_UNUSED(index);
+    return true;
+}
+
+
+HbAbstractViewItem *FbFileListViewItem::createItem()
+{
+    return new FbFileListViewItem(*this);
+}
+
+void FbFileListViewItem::updateChildItems()
+{
+    if(!hLayout) {
+        init();
+    }
+
+    // Qt::DisplayRole
+    QVariant displayRole = modelIndex().data(Qt::DisplayRole);
+    QString diskName("default");
+    QStringList stringList;
+    if (displayRole.isValid()) {
+        if (displayRole.canConvert<QString>()) {                // EFileViewModeSimple
+            stringList.append(displayRole.toString());
+        } else if (displayRole.canConvert<QStringList>()) {     // EFileViewModeExtended
+            stringList = displayRole.toStringList();
+        }
+        if (stringList.count() > 0)
+            diskName = stringList[0]; //modelIndex().data( Qt::UserRole ).toString();
+
+        mDiskNameLabel->setPlainText(diskName/*displayString*/);
+    }
+
+//    mSizeLabel->setPlainText( hbTrId ( "Size: " ) /*+ FmUtils::formatStorageSize( driverInfo.size() )*/ );
+//    mFreeLabel->setPlainText( hbTrId ( "Free: " ) /*+ FmUtils::formatStorageSize( driverInfo.freeSize() )*/ );
+    if (stringList.count() > 1)
+        mSizeLabel->setPlainText( stringList[1] );
+
+    //mStorageSizeDiagram->setFreeSizePercentage();
+    //mFreeLabel->setPlainText( stringList[2] );
+
+    //    mCheckBox->setCheckState( checkState() );
+
+    // Qt::DecorationRole
+    QVariant decorationRole = modelIndex().data(Qt::DecorationRole);
+    if (decorationRole.isValid()) {
+        QIcon icon = qvariant_cast<QIcon>(decorationRole);
+//    if( icon.isNull() ) {
+//        QFileIconProvider fileIconProvider;
+//        icon = fileIconProvider.icon(QFileIconProvider::Drive);
+//    }
+    mIconLabel->setIcon(HbIcon(icon));
+    }
+}
+
+void FbFileListViewItem::setCheckedState(int state)
+{
+    HbAbstractViewItem::setCheckState(static_cast<Qt::CheckState>(state));
+}
+
+void FbFileListViewItem::init()
+{
+    hLayout = new QGraphicsLinearLayout();
+
+    hLayout->setOrientation( Qt::Horizontal );
+    hLayout->addItem(layout());
+
+    mIconLabel = new HbLabel();
+    hLayout->addItem( mIconLabel );
+    hLayout->setAlignment( mIconLabel, Qt::AlignTop );
+    hLayout->setStretchFactor( mIconLabel, 0 );
+
+//    mStorageSizeDiagram = new FbDriveStorageSizeDiagram(this);
+//    hLayout->addItem( mStorageSizeDiagram );
+//    hLayout->setAlignment( mIconLabel, Qt::AlignTop );
+//    hLayout->setStretchFactor( mStorageSizeDiagram, 0 );
+
+    QGraphicsLinearLayout *vLayout = new QGraphicsLinearLayout();
+    vLayout->setOrientation( Qt::Vertical );
+
+    mDiskNameLabel = new HbLabel();
+    //HbFontSpec fontSpecPrimary(HbFontSpec::Primary);
+    //fontSpecPrimary.setTextHeight(18.0);
+    //mDiskNameLabel->setFontSpec( fontSpecPrimary );
+    vLayout->addItem( mDiskNameLabel );
+    vLayout->setAlignment( mDiskNameLabel, Qt::AlignLeft );
+
+    mSizeLabel = new HbLabel();
+    //HbFontSpec fontSpecSecondary(HbFontSpec::Secondary);
+    //fontSpecSecondary.setTextHeight(18.0);
+    //mSizeLabel->setFontSpec(fontSpecSecondary);
+    vLayout->addItem( mSizeLabel );
+    vLayout->setAlignment(mSizeLabel, Qt::AlignLeft);
+
+//    mFreeLabel = new HbLabel();
+//    mFreeLabel->setFontSpec( HbFontSpec( HbFontSpec::Secondary ) );
+//    vLayout->addItem( mFreeLabel );
+//    vLayout->setAlignment( mFreeLabel, Qt::AlignLeft );
+
+    HbWidget *labelsWidget = new HbWidget();
+    labelsWidget->setLayout(vLayout);
+
+    hLayout->setAlignment( labelsWidget, Qt::AlignLeft );
+
+    hLayout->addItem( labelsWidget );
+    hLayout->setStretchFactor( labelsWidget, 1 );
+
+//    this->setMaximumHeight(80);
+
+    setLayout( hLayout );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/src/fbfilemodel.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "fbfilemodel.h"
+#include "enginewrapper.h"
+#include "fileentry.h"
+#include "driveentry.h"
+#include "settingsview.h"
+#include "filebrowsersettings.h"
+#include "FB.hrh"
+
+#include <QModelIndex>
+#include <QFileIconProvider>
+
+/**
+  Constructs a file browser custom system model with the given \a engineWrapper and \a parent.
+  */
+FbFileModel::FbFileModel(EngineWrapper *engineWrapper, QObject *parent) :
+    QAbstractListModel(parent),
+    mEngineWrapper(engineWrapper),
+    mFileIconProvider(0)
+{
+    mFileIconProvider = new QFileIconProvider();
+}
+
+/**
+  Destroys this file browser custom system model.
+  */
+FbFileModel::~FbFileModel()
+{  
+    if (mFileIconProvider) {
+        delete mFileIconProvider;
+    }
+}
+
+/**
+  \reimp
+  */
+int FbFileModel::rowCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return mEngineWrapper->itemCount();
+}
+
+/**
+  \reimp
+  */
+QVariant FbFileModel::data(const QModelIndex &index, int role) const
+{
+    if (!index.isValid() || index.model() != this)
+        return QVariant();
+
+    switch (role) {
+    case Qt::EditRole:
+    case Qt::DisplayRole: {
+            QStringList listItem;
+//            if (mEngineWrapper->isDriveListViewActive()) {
+//                DriveEntry driveEntry(mEngineWrapper->getDriveEntry(index));
+//                if (mEngineWrapper->settings().fileViewMode() == EFileViewModeSimple)
+//                {
+//                    const QString SimpleDriveEntry("%1: <%2>");
+//                    listItem /*<< driveEntry.IconId() */
+//                            << SimpleDriveEntry.arg(driveEntry.driveLetter())
+//                                               .arg(driveEntry.mediaTypeString());
+//                } else if (mEngineWrapper->settings().fileViewMode() == EFileViewModeExtended) {
+//                    const QString SimpleDriveEntry("%1: <%2>");
+//                    const QString ExtendedDriveEntry("%1/%2 kB");
+//                    listItem /*<< driveEntry.IconId()*/
+//                            << SimpleDriveEntry.arg(driveEntry.driveLetter())
+//                                               .arg(driveEntry.mediaTypeString())
+//                            << ExtendedDriveEntry.arg(QString::number(driveEntry.volumeInfoFree()/1024))
+//                                                 .arg(QString::number(driveEntry.volumeInfoSize()/1024));
+//
+//                }
+//            } else {
+                FileEntry fileEntry(mEngineWrapper->getFileEntry(index));
+                if (mEngineWrapper->settings().fileViewMode() == EFileViewModeSimple)
+                {
+                    listItem /*<< fileEntry.IconId()*/
+                            << fileEntry.name();
+                } else if (mEngineWrapper->settings().fileViewMode() == EFileViewModeExtended) {
+                    QString extraData;
+                    extraData.append(fileEntry.modifiedString());
+                    if (fileEntry.isDir() && fileEntry.dirEntries() >= 0) {
+                        extraData.append(" - ");
+                        extraData.append(fileEntry.dirEntriesString());
+                    } else if (!fileEntry.isDir()) {
+                        extraData.append(" - ");
+                        extraData.append(fileEntry.sizeString());
+                    }
+                    listItem /*<< fileEntry.IconId()*/
+                            << fileEntry.name() << extraData << fileEntry.attributesString();
+                }
+//            }
+            return listItem;
+        }
+    case Qt::DecorationRole: {
+            if (mEngineWrapper) {
+                QIcon icon;
+//                if (mEngineWrapper->isDriveListViewActive()) {
+//                    icon = mFileIconProvider->icon(QFileIconProvider::Drive);
+//                } else {
+                    FileEntry fileEntry(mEngineWrapper->getFileEntry(index));
+                    if (fileEntry.isDir()) {
+                        icon = mFileIconProvider->icon(QFileIconProvider::Folder);
+                    } else {
+                        icon = mFileIconProvider->icon(QFileIconProvider::File);
+                    }
+//                }
+                return QVariant(icon);
+            }
+        }
+    }
+
+    return QVariant();
+}
+
+/**
+  \reimp
+  */
+QVariant FbFileModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+    Q_UNUSED(section)
+    Q_UNUSED(orientation)
+    Q_UNUSED(role)
+
+    // TODO, implement or remove
+    return QVariant();
+}
+
+// ---------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/src/fbfileview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,1535 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "fbfileview.h"
+#include "settingsview.h"
+#include "editorview.h"
+#include "searchview.h"
+#include "enginewrapper.h"
+#include "notifications.h"
+
+#include "fbfilemodel.h"
+#include "filebrowsersortfilterproxymodel.h"
+//#include "fbfilelistviewitem.h"
+
+#include <HbMenu>
+#include <HbPopup>
+#include <HbView>
+#include <HbMessageBox>
+#include <HbAction>
+#include <HbLabel>
+#include <HbListView>
+#include <HbListViewItem>
+#include <HbListWidget>
+#include <HbLineEdit>
+#include <HbAbstractViewItem>
+#include <HbSelectionDialog>
+#include <HbValidator>
+#include <HbInputDialog>
+#include <HbToolBar>
+#include <HbToolBarExtension>
+#include <HbSearchPanel>
+
+#include <QString>
+#include <QGraphicsLinearLayout>
+#include <QItemSelection>
+#include <QDebug>
+//TODO check if needed to do this way
+#include <FB.hrh>
+
+// ---------------------------------------------------------------------------
+
+FbFileView::FbFileView() :
+    mEngineWrapper(0),
+    mListView(0),
+    mToolBar(0),
+    mNaviPane(0),
+    mSearchPanel(0),
+    mMainLayout(0),
+    mFbFileModel(0),
+    mSortFilterProxyModel(0),
+    mOptionMenuActions(),
+    mContextMenuActions(),
+    mContextMenu(0),
+    mToolbarBackAction(0),
+    mItemHighlighted(false),
+    mLocationChanged(false),
+    mRemoveFileAfterCopied(false),
+//    mClipBoardInUse(false),
+    mFolderContentChanged(false),
+    mCurrentIndex(),
+    mOldPassword(),
+    mPanicCategory(),
+    mAbsoluteFilePath(),
+    mOverwriteOptions(),
+    mModelIndex(),
+    mNewFileName(),
+    mProceed(false),
+    mEraseMBR(false)
+{
+    setTitle("File Browser");
+
+    createMenu();
+    createContextMenu();
+    createToolBar();
+}
+
+// ---------------------------------------------------------------------------	
+
+void FbFileView::init(EngineWrapper *engineWrapper)
+{
+    mEngineWrapper = engineWrapper;
+
+    mListView = new HbListView(this);
+    mListView->listItemPrototype()->setStretchingStyle(HbListViewItem::StretchLandscape);
+
+//    mListView->setItemPrototype(new FbDiskListViewItem(mListView));
+
+    mFbFileModel = new FbFileModel(mEngineWrapper);
+    if (!mListView->model()) {
+
+        mEngineWrapper->refreshView();
+
+        mSortFilterProxyModel = new FileBrowserSortFilterProxyModel(this);
+        mSortFilterProxyModel->setSourceModel(mFbFileModel);
+        mSortFilterProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
+        mSearchPanel->setPlaceholderText(QString("Type filter criteria"));
+
+        mListView->setModel(mSortFilterProxyModel);
+    }
+
+    //mListView->setRootIndex(mFileSystemModel->index(startPath));
+    //mListView->setRootIndex(model->index());
+
+    //setItemVisible(Hb::ToolBarItem, !mEngineWrapper->isDriveListViewActive());
+//    mListView->setScrollingStyle(HbScrollArea::PanWithFollowOn);
+
+    connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex)));
+    connect(mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)),
+            this, SLOT(onLongPressed(HbAbstractViewItem*, QPointF)));
+
+    mNaviPane = new HbLabel(this);
+    mNaviPane->setPlainText(QString(" ")); // TODO get from settings or default
+    //mNaviPane->setPlainText(QString(mEngineWrapper->currentPath()));
+    HbFontSpec fontSpec(HbFontSpec::PrimarySmall);
+    mNaviPane->setFontSpec(fontSpec);
+
+    // Create layout and add list view and toolbar into layout:
+    mMainLayout = new QGraphicsLinearLayout(Qt::Vertical);
+    mMainLayout->addItem(mNaviPane);
+    mMainLayout->addItem(mListView);
+    setLayout(mMainLayout);
+}
+
+// ---------------------------------------------------------------------------
+
+FbFileView::~FbFileView()
+{  
+//    if (mEngineWrapper) {
+//        delete mEngineWrapper;
+//    }
+    if (mContextMenu) {
+        mContextMenu->deleteLater();
+    }
+
+    delete mSortFilterProxyModel;
+    delete mFbFileModel;
+    delete mListView;
+    delete mToolBar;
+}
+
+/**
+  Initial setup for options menu.
+  Dynamic menu update during the runtime is performed by updateOptionMenu() which
+  to menu's aboutToShow() signal.
+  */
+void FbFileView::createMenu()
+{
+    createFileMenu();
+    createEditMenu();
+    createViewMenu();
+    createToolsMenu();
+
+    createSelectionMenuItem();
+    createSettingsMenuItem();
+    createAboutMenuItem();
+    createExitMenuItem();
+
+    // menu dynamic update
+    connect(menu(), SIGNAL(aboutToShow()), this, SLOT(updateOptionMenu()));
+}
+
+/**
+  Initial setup for File submenu
+  */
+void FbFileView::createFileMenu()
+{
+    mOptionMenuActions.mFileMenu = menu()->addMenu("File");
+
+    mOptionMenuActions.mFileBackMoveUp = mOptionMenuActions.mFileMenu->addAction("Back/Move up", this, SLOT(fileBackMoveUp()));
+    mOptionMenuActions.mFileSearch = mOptionMenuActions.mFileMenu->addAction("Search...", this, SLOT(fileSearch()));
+    //mOptionMenuActions.mFileSearch->setVisible(false);
+
+    mOptionMenuActions.mFileNewMenu = mOptionMenuActions.mFileMenu->addMenu("New");
+    mOptionMenuActions.mFileNewFile = mOptionMenuActions.mFileNewMenu->addAction("File", this, SLOT(fileNewFile()));
+    mOptionMenuActions.mFileNewDirectory = mOptionMenuActions.mFileNewMenu->addAction("Directory", this, SLOT(fileNewDirectory()));
+
+    mOptionMenuActions.mFileDelete = mOptionMenuActions.mFileMenu->addAction("Delete", this, SLOT(fileDelete()));
+    mOptionMenuActions.mFileRename = mOptionMenuActions.mFileMenu->addAction("Rename", this, SLOT(fileRename()));
+    mOptionMenuActions.mFileTouch = mOptionMenuActions.mFileMenu->addAction("Touch", this, SLOT(fileTouch()));
+
+//    mOptionMenuActions.mFileChecksumsMenu = mOptionMenuActions.mFileMenu->addMenu("Checksums");
+//    mOptionMenuActions.mFileChecksumsMD5 = mOptionMenuActions.mFileChecksumsMenu->addAction("MD5", this, SLOT(fileChecksumsMD5()));
+//    mOptionMenuActions.mFileChecksumsMD2 = mOptionMenuActions.mFileChecksumsMenu->addAction("MD2", this, SLOT(fileChecksumsMD2()));
+//    mOptionMenuActions.mFileChecksumsSHA1 = mOptionMenuActions.mFileChecksumsMenu->addAction("SHA-1", this, SLOT(fileChecksumsSHA1()));
+
+    mOptionMenuActions.mFileSetAttributes = mOptionMenuActions.mFileMenu->addAction("Set attributes...", this, SLOT(fileSetAttributes()));
+    mOptionMenuActions.mFileSetAttributes->setVisible(false);
+}
+
+/**
+  Initial setup for Edit submenu
+  */
+void FbFileView::createEditMenu()
+{
+    mOptionMenuActions.mEditMenu = menu()->addMenu("Edit");
+
+    mOptionMenuActions.mEditSnapShotToE = mOptionMenuActions.mEditMenu->addAction("Snap shot to E:", this, SLOT(editSnapShotToE()));
+    mOptionMenuActions.mEditSnapShotToE->setVisible(false);
+    mOptionMenuActions.mEditCut = mOptionMenuActions.mEditMenu->addAction("Cut", this, SLOT(editCut()));
+    mOptionMenuActions.mEditCopy = mOptionMenuActions.mEditMenu->addAction("Copy", this, SLOT(editCopy()));
+    mOptionMenuActions.mEditPaste = mOptionMenuActions.mEditMenu->addAction("Paste", this, SLOT(editPaste()));
+
+    mOptionMenuActions.mEditCopyToFolder = mOptionMenuActions.mEditMenu->addAction("Copy to folder...", this, SLOT(editCopyToFolder()));
+    mOptionMenuActions.mEditMoveToFolder = mOptionMenuActions.mEditMenu->addAction("Move to folder...", this, SLOT(editMoveToFolder()));
+
+    mOptionMenuActions.mEditSelect = mOptionMenuActions.mEditMenu->addAction("Select", this, SLOT(editSelect()));
+    mOptionMenuActions.mEditUnselect = mOptionMenuActions.mEditMenu->addAction("Unselect", this, SLOT(editUnselect()));
+    mOptionMenuActions.mEditSelectAll = mOptionMenuActions.mEditMenu->addAction("Select all", this, SLOT(editSelectAll()));
+    mOptionMenuActions.mEditUnselectAll = mOptionMenuActions.mEditMenu->addAction("Unselect all", this, SLOT(editUnselectAll()));
+}
+
+/**
+  Initial setup for View submenu
+  */
+void FbFileView::createViewMenu()
+{
+    mOptionMenuActions.mViewMenu = menu()->addMenu("View");
+    //mOptionMenuActions.mViewMenu->menuAction()->setVisible(false);
+
+    mOptionMenuActions.mViewFilterEntries = mOptionMenuActions.mViewMenu->addAction("Filter entries", this, SLOT(viewFilterEntries()));
+    mOptionMenuActions.mViewRefresh = mOptionMenuActions.mViewMenu->addAction("Refresh", this, SLOT(viewRefresh()));
+}
+
+/**
+  Initial setup for Tools submenu
+  */
+void FbFileView::createToolsMenu()
+{
+    mOptionMenuActions.mToolsMenu = menu()->addMenu("Tools");
+
+    mOptionMenuActions.mToolsAllAppsToTextFile = mOptionMenuActions.mToolsMenu->addAction("All apps to a text file", this, SLOT(toolsAllAppsToTextFile()));
+    mOptionMenuActions.mToolsAllAppsToTextFile->setVisible(false);
+    mOptionMenuActions.mToolsAllFilesToTextFile = mOptionMenuActions.mToolsMenu->addAction("All files to a text file", this, SLOT(toolsAllFilesToTextFile()));
+    //mOptionMenuActions.mToolsAllFilesToTextFile->setVisible(false);
+
+//    mOptionMenuActions.mToolsAvkonIconCacheMenu = mOptionMenuActions.mToolsMenu->addMenu("Avkon icon cache");
+//    mOptionMenuActions.mToolsAvkonIconCacheMenu->menuAction()->setVisible(false);
+//    mOptionMenuActions.mToolsAvkonIconCacheEnable = mOptionMenuActions.mToolsAvkonIconCacheMenu->addAction("Enable", this, SLOT(toolsAvkonIconCacheEnable()));
+//    mOptionMenuActions.mToolsAvkonIconCacheDisable = mOptionMenuActions.mToolsAvkonIconCacheMenu->addAction("Clear and disable", this, SLOT(toolsAvkonIconCacheDisable()));
+
+    mOptionMenuActions.mToolsDisableExtendedErrors = mOptionMenuActions.mToolsMenu->addAction("Disable extended errors", this, SLOT(toolsDisableExtendedErrors()));
+    mOptionMenuActions.mToolsDumpMsgStoreWalk = mOptionMenuActions.mToolsMenu->addAction("Dump msg. store walk", this, SLOT(toolsDumpMsgStoreWalk()));
+    mOptionMenuActions.mToolsDumpMsgStoreWalk->setVisible(false);
+    mOptionMenuActions.mToolsEditDataTypes = mOptionMenuActions.mToolsMenu->addAction("Edit data types", this, SLOT(toolsEditDataTypes()));
+    mOptionMenuActions.mToolsEditDataTypes->setVisible(false);
+    mOptionMenuActions.mToolsEnableExtendedErrors = mOptionMenuActions.mToolsMenu->addAction("Enable extended errors", this, SLOT(toolsEnableExtendedErrors()));
+
+    mOptionMenuActions.mToolsErrorSimulateMenu = mOptionMenuActions.mToolsMenu->addMenu("Error simulate");
+    mOptionMenuActions.mToolsErrorSimulateLeave = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Leave", this, SLOT(toolsErrorSimulateLeave()));
+    mOptionMenuActions.mToolsErrorSimulatePanic = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Panic", this, SLOT(toolsErrorSimulatePanic()));
+    mOptionMenuActions.mToolsErrorSimulatePanic->setVisible(false);
+    mOptionMenuActions.mToolsErrorSimulateException = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Exception", this, SLOT(toolsErrorSimulateException()));
+
+//    mOptionMenuActions.mLocalConnectivityMenu = mOptionMenuActions.mToolsMenu->addMenu("Local connectivity");
+//    mOptionMenuActions.mToolsLocalConnectivityActivateInfrared = mOptionMenuActions.mLocalConnectivityMenu->addAction("Activate infrared", this, SLOT(toolsLocalConnectivityActivateInfrared()));
+//    mOptionMenuActions.mToolsLocalConnectivityLaunchBTUI = mOptionMenuActions.mLocalConnectivityMenu->addAction("Launch BT UI", this, SLOT(toolsLocalConnectivityLaunchBTUI()));
+//    mOptionMenuActions.mToolsLocalConnectivityLaunchUSBUI = mOptionMenuActions.mLocalConnectivityMenu->addAction("Launch USB UI", this, SLOT(toolsLocalConnectivityLaunchUSBUI()));
+
+    mOptionMenuActions.mToolsMessageAttachmentsMenu = mOptionMenuActions.mToolsMenu->addMenu("Message attachments");
+    mOptionMenuActions.mToolsMessageAttachmentsMenu->menuAction()->setVisible(false);
+    mOptionMenuActions.mToolsMessageInbox = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Inbox", this, SLOT(toolsMessageInbox()));
+    mOptionMenuActions.mToolsMessageDrafts = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Drafts", this, SLOT(toolsMessageDrafts()));
+    mOptionMenuActions.mToolsMessageSentItems = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Sent items", this, SLOT(toolsMessageSentItems()));
+    mOptionMenuActions.mToolsMessageOutbox = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Outbox", this, SLOT(toolsMessageOutbox()));
+
+    mOptionMenuActions.mToolsMemoryInfo = mOptionMenuActions.mToolsMenu->addAction("Memory info", this, SLOT(toolsMemoryInfo()));
+    mOptionMenuActions.mToolsMemoryInfo->setVisible(false);
+
+    mOptionMenuActions.mToolsSecureBackupMenu = mOptionMenuActions.mToolsMenu->addMenu("Secure backup");
+    mOptionMenuActions.mToolsSecureBackupMenu->menuAction()->setVisible(false);
+    mOptionMenuActions.mToolsSecureBackStart = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Start backup", this, SLOT(toolsSecureBackStart()));
+    mOptionMenuActions.mToolsSecureBackRestore = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Start restore", this, SLOT(toolsSecureBackRestore()));
+    mOptionMenuActions.mToolsSecureBackStop = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Stop", this, SLOT(toolsSecureBackStop()));
+
+    mOptionMenuActions.mToolsSetDebugMask = mOptionMenuActions.mToolsMenu->addAction("Set debug mask", this, SLOT(toolsSetDebugMaskQuestion()));
+    mOptionMenuActions.mToolsShowOpenFilesHere = mOptionMenuActions.mToolsMenu->addAction("Show open files here", this, SLOT(toolsShowOpenFilesHere()));
+    mOptionMenuActions.mToolsShowOpenFilesHere->setVisible(false);
+}
+
+/**
+  Creates Selection mode menu item in option menu
+  */
+void FbFileView::createSelectionMenuItem()
+{
+    if (!mOptionMenuActions.mSelection) {
+        mOptionMenuActions.mSelection = menu()->addAction("Selection mode");
+        mOptionMenuActions.mSelection->setToolTip("Selection mode");
+        mOptionMenuActions.mSelection->setCheckable(true);
+        connect(mOptionMenuActions.mSelection, SIGNAL(triggered()), this, SLOT(selectionModeChanged()));
+    }
+}
+
+/**
+  Creates Setting menu item in option menu
+  */
+void FbFileView::createSettingsMenuItem()
+{
+    mOptionMenuActions.mSetting = menu()->addAction("Settings...");
+    connect(mOptionMenuActions.mSetting, SIGNAL(triggered()), this, SIGNAL(aboutToShowSettingsView()));
+}
+
+
+/**
+  Creates About menu item in option menu
+  */
+void FbFileView::createAboutMenuItem()
+{
+    // about note
+    mOptionMenuActions.mAbout = menu()->addAction("About");
+    connect(mOptionMenuActions.mAbout, SIGNAL(triggered()), this, SLOT(about()));
+}
+
+/**
+  Creates Exit menu item in option menu
+  */
+void FbFileView::createExitMenuItem()
+{
+    // application exit
+    mOptionMenuActions.mExit = menu()->addAction("Exit");
+    connect(mOptionMenuActions.mExit, SIGNAL(triggered()), qApp, SLOT(quit()));
+}
+
+/**
+  update menu: disk admin available only in device root view. edit available only in folder view
+  when file or folder content exist in current folder, or clipboard has copied item.
+  file and view menus updated every time regarding the folder content.
+  tools, settings, about, exit always available.
+  If there's remove and add operations at same time, always remove first
+  to keep to the correct menu items order.
+  */
+void FbFileView::updateOptionMenu()
+{
+    bool isFileItemListEmpty = mFbFileModel->rowCount() == 0;
+    bool isNormalModeActive = true;       //iModel->FileUtils()->IsNormalModeActive();
+    bool isCurrentDriveReadOnly = mEngineWrapper->isCurrentDriveReadOnly();   //iModel->FileUtils()->IsCurrentDriveReadOnly();
+    bool isCurrentItemDirectory = mEngineWrapper->getFileEntry(currentItemIndex()).isDir();
+    // bool currentSelected = true;    //iContainer->ListBox()->View()->ItemIsSelected(iContainer->ListBox()->View()->CurrentItemIndex());
+    bool isAllSelected = mListView->selectionModel()->selection().count() == mFbFileModel->rowCount();
+    //bool isNoneSelected = mListView->selectionModel()->selection().count() != 0;
+    bool hasSelectedItems = mListView->selectionModel()->selection().count() != 0;
+    bool isSelectionMode = mOptionMenuActions.mSelection && mOptionMenuActions.mSelection->isChecked();
+    bool isClipBoardEmpty = !mEngineWrapper->isClipBoardListInUse();
+    //bool showSnapShot = false;           //iModel->FileUtils()->DriveSnapShotPossible();
+
+    bool showEditMenu(true);
+    if (isFileItemListEmpty && isClipBoardEmpty)
+        showEditMenu = false;
+    else
+        showEditMenu = true;
+
+    mOptionMenuActions.mEditMenu->menuAction()->setVisible(showEditMenu);
+
+    //mOptionMenuActions.mFileBackMoveUp->setVisible( !isDriveListViewActive);
+
+    //aMenuPane->SetItemDimmed(EFileBrowserCmdFileView, isFileItemListEmpty || !hasSelectedItems || isCurrentItemDirectory);
+    //aMenuPane->SetItemDimmed(EFileBrowserCmdFileEdit, isFileItemListEmpty || !hasSelectedItems || isCurrentItemDirectory);
+    //aMenuPane->SetItemDimmed(EFileBrowserCmdFileSendTo, isFileItemListEmpty || driveListActive || isCurrentItemDirectory);
+
+    mOptionMenuActions.mFileNewMenu->menuAction()->setVisible(!isCurrentDriveReadOnly);
+    mOptionMenuActions.mFileDelete->setVisible(!isFileItemListEmpty && !isCurrentDriveReadOnly && hasSelectedItems/*isSelectionMode*/);
+    mOptionMenuActions.mFileRename->setVisible(!isFileItemListEmpty && !isCurrentDriveReadOnly && hasSelectedItems/*&& isSelectionMode*/);
+    mOptionMenuActions.mFileTouch->setVisible(!isFileItemListEmpty && !isCurrentDriveReadOnly && hasSelectedItems);
+
+    // TODO mOptionMenuActions.mFileChecksumsMenu->setVisible(!(isFileItemListEmpty || !hasSelectedItems || isCurrentItemDirectory));
+    // TODO mOptionMenuActions.mFileSetAttributes->setVisible(!(isFileItemListEmpty || isCurrentDriveReadOnly));
+    // TODO mOptionMenuActions.mFileCompress->setVisible(!(isCurrentDriveReadOnly || isFileItemListEmpty || !hasSelectedItems || isCurrentItemDirectory));
+    // TODO mOptionMenuActions.mFileDecompress->setVisible(!(isCurrentDriveReadOnly || isFileItemListEmpty || !hasSelectedItems || isCurrentItemDirectory));
+
+    mOptionMenuActions.mEditCut->setVisible(!isFileItemListEmpty && !isCurrentDriveReadOnly && isSelectionMode);
+    mOptionMenuActions.mEditCopy->setVisible(!isFileItemListEmpty && isSelectionMode);
+    mOptionMenuActions.mEditPaste->setVisible(!(isClipBoardEmpty || isCurrentDriveReadOnly));
+    mOptionMenuActions.mEditCopyToFolder->setVisible(!isFileItemListEmpty);
+    mOptionMenuActions.mEditMoveToFolder->setVisible(!(isCurrentDriveReadOnly || isFileItemListEmpty));
+
+    mOptionMenuActions.mEditSelect->setVisible(false/*!currentSelected && !isFileItemListEmpty*/);
+    mOptionMenuActions.mEditUnselect->setVisible(false/*currentSelected && !isFileItemListEmpty*/);
+    mOptionMenuActions.mEditSelectAll->setVisible(isSelectionMode && !isAllSelected && !isFileItemListEmpty);
+    mOptionMenuActions.mEditUnselectAll->setVisible(hasSelectedItems && !isFileItemListEmpty);
+
+    // TODO mOptionMenuActions.mViewSort->setVisible(!(!isNormalModeActive || isFileItemListEmpty));
+    // TODO mOptionMenuActions.mViewOrder->setVisible(!(!isNormalModeActive  || isFileItemListEmpty));
+    mOptionMenuActions.mViewRefresh->setVisible(isNormalModeActive);
+    mOptionMenuActions.mViewFilterEntries->setVisible(!isFileItemListEmpty);
+
+    // TODO R_FILEBROWSER_VIEW_SORT_SUBMENU
+    // aMenuPane->SetItemButtonState(iModel->FileUtils()->SortMode(), EEikMenuItemSymbolOn);
+
+    // TODO R_FILEBROWSER_VIEW_ORDER_SUBMENU
+    // aMenuPane->SetItemButtonState(iModel->FileUtils()->OrderMode(), EEikMenuItemSymbolOn);
+
+    // aResourceId == R_FILEBROWSER_TOOLS_SUBMENU
+    bool noExtendedErrorsAllowed = mEngineWrapper->ErrRdFileExists();
+    mOptionMenuActions.mToolsDisableExtendedErrors->setVisible(noExtendedErrorsAllowed);
+    mOptionMenuActions.mToolsEnableExtendedErrors->setVisible(!noExtendedErrorsAllowed);
+
+//    bool infraRedAllowed = mEngineWrapper->FileExists(KIRAppPath);
+//    bool bluetoothAllowed = mEngineWrapper->FileExists(KBTAppPath);
+//    bool usbAllowed = mEngineWrapper->FileExists(KUSBAppPath);
+//
+//    bool noLocalCon = !infraRedAllowed && !bluetoothAllowed && !usbAllowed;
+//    mOptionMenuActions.mToolsLocalConnectivityMenu->menuAction()->setVisible(!noLocalCon);
+//
+//    mOptionMenuActions.mToolsLocalConnectivityActivateInfrared->setVisible(infraRedAllowed);
+//    mOptionMenuActions.mToolsLocalConnectivityLaunchBTUI->setVisible(bluetoothAllowed);
+//    mOptionMenuActions.mToolsLocalConnectivityLaunchUSBUI->setVisible(usbAllowed);
+}
+
+void FbFileView::createContextMenu()
+{
+    mContextMenu = new HbMenu();
+    connect(mContextMenu, SIGNAL(aboutToShow()), this, SLOT(updateContextMenu()));
+
+    createFileContextMenu();
+    createEditContextMenu();
+    createViewContextMenu();
+}
+
+
+void FbFileView::createFileContextMenu()
+{
+    mContextMenuActions.mFileMenu = mContextMenu->addMenu("File");
+
+    //mContextMenuActions.mFileBackMoveUp = mContextMenuActions.mFileMenu->addAction("Back/Move up (<-)", this, SLOT(fileBackMoveUp()));
+    mContextMenuActions.mFileOpenDirectory = mContextMenuActions.mFileMenu->addAction("Open directory (->)", this, SLOT(fileOpenDirectory()));
+//    mContextMenuActions.mFileSearch = mContextMenuActions.mFileMenu->addAction("Search...", this, SLOT(fileSearch()));
+    //mContextMenuActions.mFileSearch->setVisible(false);
+
+    mContextMenuActions.mFileDelete = mContextMenuActions.mFileMenu->addAction("Delete", this, SLOT(fileDelete()));
+    mContextMenuActions.mFileRename = mContextMenuActions.mFileMenu->addAction("Rename", this, SLOT(fileRename()));
+    mContextMenuActions.mFileTouch = mContextMenuActions.mFileMenu->addAction("Touch", this, SLOT(fileTouch()));
+    mContextMenuActions.mFileProperties = mContextMenuActions.mFileMenu->addAction("Properties", this, SLOT(fileProperties()));
+
+    mContextMenuActions.mFileChecksumsMenu = mContextMenuActions.mFileMenu->addMenu("Checksums");
+    mContextMenuActions.mFileChecksumsMD5 = mContextMenuActions.mFileChecksumsMenu->addAction("MD5", this, SLOT(fileChecksumsMD5()));
+    mContextMenuActions.mFileChecksumsMD2 = mContextMenuActions.mFileChecksumsMenu->addAction("MD2", this, SLOT(fileChecksumsMD2()));
+    mContextMenuActions.mFileChecksumsSHA1 = mContextMenuActions.mFileChecksumsMenu->addAction("SHA-1", this, SLOT(fileChecksumsSHA1()));
+
+//    mContextMenuActions.mFileSetAttributes = mContextMenuActions.mFileMenu->addAction("Set attributes...", this, SLOT(fileSetAttributes()));
+//    mContextMenuActions.mFileSetAttributes->setVisible(false);
+}
+
+void FbFileView::createEditContextMenu()
+{
+    mContextMenuActions.mEditMenu = mContextMenu->addMenu("Edit");
+
+    //mContextMenuActions.mEditSnapShotToE = mContextMenuActions.mEditMenu->addAction("Snap shot to E:", this, SLOT(editSnapShotToE()));
+//    mContextMenuActions.mEditSnapShotToE->setVisible(false);
+    mContextMenuActions.mEditCut = mContextMenuActions.mEditMenu->addAction("Cut", this, SLOT(editCut()));
+    mContextMenuActions.mEditCopy = mContextMenuActions.mEditMenu->addAction("Copy", this, SLOT(editCopy()));
+    mContextMenuActions.mEditPaste = mContextMenuActions.mEditMenu->addAction("Paste", this, SLOT(editPaste()));
+
+    mContextMenuActions.mEditCopyToFolder = mContextMenuActions.mEditMenu->addAction("Copy to folder...", this, SLOT(editCopyToFolder()));
+    mContextMenuActions.mEditMoveToFolder = mContextMenuActions.mEditMenu->addAction("Move to folder...", this, SLOT(editMoveToFolder()));
+}
+
+void FbFileView::createViewContextMenu()
+{
+
+}
+
+void FbFileView::updateContextMenu()
+{
+    bool isFileItemListEmpty = mFbFileModel->rowCount() == 0;
+    bool isDriveListViewActive = mEngineWrapper->isDriveListViewActive();
+//    bool isNormalModeActive = true;       //iModel->FileUtils()->IsNormalModeActive();
+    bool isCurrentDriveReadOnly = mEngineWrapper->isCurrentDriveReadOnly();
+    bool isCurrentItemDirectory = mEngineWrapper->getFileEntry(currentItemIndex()).isDir();
+    bool hasSelectedItems = mListView->selectionModel()->selection().count() != 0;
+    bool isSelectionMode = mOptionMenuActions.mSelection && mOptionMenuActions.mSelection->isChecked();
+    bool isClipBoardEmpty = !mEngineWrapper->isClipBoardListInUse();
+
+    // File submenu
+    //mContextMenuActions.mFileBackMoveUp->setVisible( !isDriveListViewActive);
+    mContextMenuActions.mFileOpenDirectory->setVisible( !isFileItemListEmpty && !isDriveListViewActive && isCurrentItemDirectory);
+
+    mContextMenuActions.mFileDelete->setVisible(!isFileItemListEmpty && !isDriveListViewActive && !isCurrentDriveReadOnly);
+    mContextMenuActions.mFileRename->setVisible(!isFileItemListEmpty && !isDriveListViewActive && !isCurrentDriveReadOnly);
+    mContextMenuActions.mFileTouch->setVisible(!isFileItemListEmpty && !isDriveListViewActive && !isCurrentDriveReadOnly);
+    mContextMenuActions.mFileProperties->setVisible(!isFileItemListEmpty && !isSelectionMode);
+
+    mContextMenuActions.mFileChecksumsMenu->menuAction()->setVisible(!(isFileItemListEmpty || isSelectionMode /*|| !hasSelectedItems*/ || isCurrentItemDirectory || isDriveListViewActive));
+    // Edit submenu
+    mContextMenuActions.mEditMenu->menuAction()->setVisible(!isDriveListViewActive);
+    mContextMenuActions.mEditCut->setVisible(!(isDriveListViewActive || isCurrentDriveReadOnly || isFileItemListEmpty));
+    mContextMenuActions.mEditCopy->setVisible(!(isDriveListViewActive || isFileItemListEmpty));
+    mContextMenuActions.mEditPaste->setVisible(!isDriveListViewActive && !isClipBoardEmpty && !isCurrentDriveReadOnly);
+    mContextMenuActions.mEditCopyToFolder->setVisible(!(isDriveListViewActive || isFileItemListEmpty));
+    mContextMenuActions.mEditMoveToFolder->setVisible(!(isDriveListViewActive || isCurrentDriveReadOnly || isFileItemListEmpty));
+}
+
+// ---------------------------------------------------------------------------
+
+void FbFileView::onLongPressed(HbAbstractViewItem *listViewItem, QPointF coords)
+{
+    QModelIndex proxyIndex = listViewItem->modelIndex();
+    //map to source model
+    mCurrentIndex = mSortFilterProxyModel->mapToSource(proxyIndex);
+
+    mContextMenu->setPreferredPos(coords);
+    mContextMenu->show();
+}
+
+/**
+  Create a file browser tool bar
+  */
+void FbFileView::createToolBar()
+{
+    mToolBar = toolBar();
+
+    mToolbarBackAction = new HbAction(mToolBar);
+    mToolbarBackAction->setToolTip("Back");
+    mToolbarBackAction->setIcon(HbIcon(QString(":/qgn_indi_tb_filebrowser_folder_parent.svg")));
+    connect(mToolbarBackAction, SIGNAL(triggered()), this, SLOT(fileBackMoveUp()));
+    mToolBar->addAction(mToolbarBackAction);
+
+    // Find button and its extension
+    HbToolBarExtension* filterExtension = new HbToolBarExtension();
+    // Set search panel widget
+    mSearchPanel = new HbSearchPanel(filterExtension);
+    mSearchPanel->setMinimumWidth( 360 ); // TODO should be based on layout, screen width
+    connect(mSearchPanel, SIGNAL(criteriaChanged(const QString &)), this, SLOT(filterCriteriaChanged(const QString &)));
+    connect(mSearchPanel, SIGNAL(exitClicked()), filterExtension, SLOT(close()));
+    connect(mSearchPanel, SIGNAL(exitClicked()), this, SLOT(clearFilterCriteria()));
+    filterExtension->setContentWidget(mSearchPanel);
+
+    HbAction* mToolbarFilterAction = mToolBar->addExtension(filterExtension);
+//    mToolbarFilterAction->setText("Filter");
+    mToolbarFilterAction->setToolTip("Filter");
+    mToolbarFilterAction->setIcon(HbIcon(QString(":/qgn_indi_tb_filebrowser_find.svg")));
+    //connect(mToolbarFilterAction, SIGNAL(triggered()), this, SLOT(viewFilterEntries()));
+
+    if (mOptionMenuActions.mSelection) {
+        //mOptionMenuActions.mSelection->setIcon(HbIcon(QString(":/qgn_indi_tb_filebrowser_selection_active.svg")));
+        mToolBar->addAction(mOptionMenuActions.mSelection);
+    }
+
+//    // TODO Paste to be added
+//    if (mOptionMenuActions.mEditPaste) {
+//        //mOptionMenuActions.mEditPaste->setIcon(HbIcon(QString(":/qgn_indi_tb_filebrowser_selection_active.svg")));
+//        mToolBar->addAction(mOptionMenuActions.mEditPaste);
+//    }
+}
+
+/**
+  Refresh FileBrowser view
+  */
+void FbFileView::refreshList()
+{
+    editUnselectAll();
+    mEngineWrapper->refreshView();
+    mSearchPanel->setCriteria(QString(""));
+    mListView->model()->revert();
+    mListView->reset();
+
+    if (mListView->model() && mListView->model()->rowCount() > 0) {
+        QModelIndex firstIndex = mListView->model()->index(0, 0);
+        mListView->scrollTo(firstIndex);
+    }
+
+    TListingMode listingMode = mEngineWrapper->listingMode();
+    if (listingMode == ENormalEntries)
+        mNaviPane->setPlainText(QString(mEngineWrapper->currentPath()));
+    else if (listingMode == ESearchResults)
+        mNaviPane->setPlainText(QString(tr("Search results")));
+    else if (listingMode == EOpenFiles)
+        mNaviPane->setPlainText(QString(tr("Open files")));
+    else if (listingMode == EMsgAttachmentsInbox)
+        mNaviPane->setPlainText(QString(tr("Attachments in Inbox")));
+    else if (listingMode == EMsgAttachmentsDrafts)
+        mNaviPane->setPlainText(QString(tr("Attachments in Drafts")));
+    else if (listingMode == EMsgAttachmentsSentItems)
+        mNaviPane->setPlainText(QString(tr("Attachments in Sent Items")));
+    else if (listingMode == EMsgAttachmentsOutbox)
+        mNaviPane->setPlainText(QString(tr("Attachments in Outbox")));
+}
+
+// ---------------------------------------------------------------------------	
+
+void FbFileView::fileOpen(HbAction *action)
+{
+//    Q_UNUSED(action);
+    HbSelectionDialog *dlg = static_cast<HbSelectionDialog*>(sender());
+    if(!action && dlg && dlg->selectedItems().count()){
+        int selectionIndex = dlg->selectedItems().at(0).toInt();
+
+        if (selectionIndex == 0) {
+            // open editor view
+            emit aboutToShowEditorView(mAbsoluteFilePath, true);
+        } else if (selectionIndex == 1) {
+            // AppArc
+            mEngineWrapper->openAppArc(mAbsoluteFilePath);
+        } else {
+            // DocHandler
+            mEngineWrapper->openDocHandler(mAbsoluteFilePath, true);
+        }
+    }
+}
+
+/**
+  Open overwrite dialog
+  */
+void FbFileView::fileOverwriteDialog()
+{
+    mOverwriteOptions = OverwriteOptions();
+    // open user-dialog to select: view as text/hex,  open w/AppArc or open w/DocH. embed
+    QStringList list;
+    list << QString("Overwrite all")
+         << QString("Skip all existing")
+         << QString("Gen. unique filenames")
+         << QString("Query postfix");
+    openListDialog(list, QString("Overwrite?"), this, SLOT(fileOverwrite(HbAction *)));
+}
+
+/**
+  File overwrite
+  */
+void FbFileView::fileOverwrite(HbAction *action)
+{
+    HbSelectionDialog *dlg = static_cast<HbSelectionDialog*>(sender());
+    if(!action && dlg && dlg->selectedItems().count()) {
+        mOverwriteOptions.queryIndex = dlg->selectedItems().at(0).toInt();
+        if (mOverwriteOptions.queryIndex == EFileActionQueryPostFix) {
+            QString heading = QString("Postfix");
+            HbInputDialog::getText(heading, this, SLOT(fileOverwritePostfix(HbAction *)), QString(), scene());
+        } else if (mOverwriteOptions.queryIndex == EFileActionSkipAllExisting) {
+            mOverwriteOptions.overWriteFlags = 0;
+        }
+    } else {
+        mOverwriteOptions.doFileOperations = false;
+    }
+}
+
+/**
+  File overwrite postfix query dialog
+  */
+void FbFileView::fileOverwritePostfix(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        mOverwriteOptions.postFix = dlg->value().toString();
+    } else {
+        mOverwriteOptions.doFileOperations = false;
+    }
+}
+
+// ---------------------------------------------------------------------------
+/**
+  Show a list dialog
+  \param List aList of item to select item from.
+  \param Title text titleText of a dialog heading widget
+  \return None
+  */
+void FbFileView::openListDialog(const QStringList& items, const QString &titleText, QObject* receiver, const char* member)
+{
+    // Create a list and some simple content for it
+    HbSelectionDialog *dlg = new HbSelectionDialog();
+    dlg->setAttribute(Qt::WA_DeleteOnClose);
+    // Set items to be popup's content
+    dlg->setStringItems(items);
+    dlg->setSelectionMode(HbAbstractItemView::SingleSelection);
+
+    HbLabel *title = new HbLabel(dlg);
+    title->setPlainText(titleText);
+    dlg->setHeadingWidget(title);
+
+    // Launch popup and handle the user response:
+    dlg->open(receiver, member);
+}
+
+// ---------------------------------------------------------------------------
+
+void FbFileView::openPropertyDialog(const QStringList& propertyList, const QString& title)
+{
+    HbDialog *dialog = new HbDialog();
+    dialog->setDismissPolicy(HbPopup::TapOutside);
+    dialog->setTimeout(HbPopup::NoTimeout);
+
+    HbLabel *titleWidget = new HbLabel();
+    titleWidget->setPlainText(title);
+    dialog->setHeadingWidget(titleWidget);
+
+    // Create a list and some simple content for it
+    HbListWidget *list = new HbListWidget();
+    QString str;
+    foreach (str, propertyList) {
+        list->addItem(str);
+    }
+
+    // Connect list item activation signal to close the popup
+    connect(list, SIGNAL(activated(HbListWidgetItem*)), dialog, SLOT(close()));
+
+    HbAction *cancelAction = new HbAction("Close");
+    dialog->setPrimaryAction(cancelAction);
+
+    // Set listwidget to be popup's content
+    dialog->setContentWidget(list);
+    // Launch popup and handle the user response:
+    dialog->open();
+}
+
+/**
+  Stores selection or current index mapped to source model
+  */
+void FbFileView::storeSelectedItemsOrCurrentItem()
+{
+    QItemSelectionModel *selectionIndexes = mListView->selectionModel();
+
+    // by default use selected items
+    if (selectionIndexes) {
+        if (selectionIndexes->hasSelection()) {
+            QItemSelection proxyItemSelection = mListView->selectionModel()->selection();
+            QItemSelection itemSelection = mSortFilterProxyModel->mapSelectionToSource(proxyItemSelection);
+            mSelectionIndexes = itemSelection.indexes();
+        } else { // or if none selected, use the current item index
+            mSelectionIndexes.clear();
+            QModelIndex currentIndex = currentItemIndex();  //alreade mapped to source model
+            mSelectionIndexes.append(currentIndex);
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+
+QModelIndex FbFileView::currentItemIndex()
+{
+    return mCurrentIndex;
+}
+
+// ---------------------------------------------------------------------------
+// operations in File Menu
+// ---------------------------------------------------------------------------
+
+/**
+  Move back/up in folder browsing history
+  */
+void FbFileView::fileBackMoveUp()
+{
+    mLocationChanged = true;
+    mEngineWrapper->moveUpOneLevel();
+    //mListView->setRootIndex(currentItemIndex());
+    refreshList();
+    if (mEngineWrapper->isDriveListViewActive()) {
+        emit aboutToShowDriveView();
+    }
+}
+
+void FbFileView::fileOpenDirectory()
+{
+    mLocationChanged = true;
+    // get selected drive or directory from list view model and open it:
+    //if (mListView->selectionModel()->hasSelection()) {
+//    if (mListView->selectionModel()->selection().count() != 0) {
+//        QModelIndex currentIndex = currentItemIndex();
+        mEngineWrapper->moveDownToDirectory(currentItemIndex());
+//        mListView->setRootIndex(currentItemIndex());
+        refreshList();
+//    } else {
+//        Notifications::showErrorNote("not selected item!");
+//    }
+}
+
+void FbFileView::fileSearch()
+{
+    QString searchPath;
+//    if (mEngineWrapper->currentPath() != mInitDirPath.path()) {
+//        searchPath = mDirectory;
+//        searchPath.replace("/", "\\");
+//        searchPath+="\\";
+//    }
+    searchPath = mEngineWrapper->currentPath();
+//    mSearch->open(searchPath);
+    emit aboutToShowSearchView(searchPath);
+}
+
+/**
+  Open new file dialog
+  */
+void FbFileView::fileNewFile()
+{
+    QString heading = QString("Enter filename");
+    HbInputDialog::getText(heading, this, SLOT(doFileNewFile(HbAction*)), QString(), scene());
+}
+
+/**
+  Create a new file in current directory with a name queried from user
+  */
+void FbFileView::doFileNewFile(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString newFileName = dlg->value().toString();
+        mEngineWrapper->createNewFile(newFileName);
+        refreshList();
+    }
+}
+
+/**
+  Open new directory dialog
+  */
+void FbFileView::fileNewDirectory()
+{
+    QString heading = QString("Enter directory name");
+    HbInputDialog::getText(heading, this, SLOT(doFileNewDirectory(HbAction*)), QString(), scene());
+}
+
+/**
+  Create a new directory in current directory with a name queried from user
+  */
+void FbFileView::doFileNewDirectory(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString newDirectoryName = dlg->value().toString();
+        mEngineWrapper->createNewDirectory(newDirectoryName);
+        refreshList();
+    }
+}
+
+/**
+  Question for Delete actually selected files
+  */
+void FbFileView::fileDelete()
+{
+    storeSelectedItemsOrCurrentItem();
+    const QString messageFormat = "Delete %1 entries?";
+    QString message = messageFormat.arg(mSelectionIndexes.count());
+    HbMessageBox::question(message, this, SLOT(doFileDelete(HbAction*)));
+}
+
+/**
+  Delete actually selected files
+  */
+void FbFileView::doFileDelete(HbAction* action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        //storeSelectedItemsOrCurrentItem();
+        mEngineWrapper->deleteItems(mSelectionIndexes);
+        refreshList();
+    }
+}
+
+/**
+  Open rename dialog for actually selected files
+  */
+void FbFileView::fileRename()
+{
+    storeSelectedItemsOrCurrentItem();
+    mEngineWrapper->setCurrentSelection(mSelectionIndexes);
+
+    for (int i(0), ie(mSelectionIndexes.count()); i < ie; ++i ) {
+        mProceed = (i == ie-1); // if the last item
+        mModelIndex = mSelectionIndexes.at(i);
+        FileEntry entry = mEngineWrapper->getFileEntry(mModelIndex);
+
+        QString heading = QString("Enter new name");
+        HbInputDialog::getText(heading, this, SLOT(doFileRename(HbAction*)), entry.name(), scene());
+    }
+}
+
+/**
+  Rename actually selected files
+  */
+void FbFileView::doFileRename(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        mNewFileName = dlg->value().toString();
+
+        if (mEngineWrapper->targetExists(mModelIndex, mNewFileName)) {
+            const QString messageTemplate = QString("%1 already exists, overwrite?");
+            QString message = messageTemplate.arg(mNewFileName);
+            HbMessageBox::question(message, this, SLOT(doFileRenameFileExist(HbAction *)));
+        } else {
+            mEngineWrapper->rename(mModelIndex, mNewFileName);
+            if (mProceed) {
+                mEngineWrapper->startExecutingCommands(QString("Renaming"));
+                refreshList();
+            }
+        }
+    }
+}
+
+/**
+  Rename actually selected files
+  */
+void FbFileView::doFileRenameFileExist(HbAction *action)
+{
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        mEngineWrapper->rename(mModelIndex, mNewFileName);
+        if (mProceed) {
+            mEngineWrapper->startExecutingCommands(QString("Renaming"));
+            refreshList();
+        }
+    }
+}
+
+/**
+  Touch actually selected files
+  */
+void FbFileView::fileTouch()
+{
+    storeSelectedItemsOrCurrentItem();
+    mEngineWrapper->setCurrentSelection(mSelectionIndexes);
+
+    if (mEngineWrapper->selectionHasDirs()) {
+        const QString message = "Recurse touch for all selected dirs?";
+        HbMessageBox::question(message, this, SLOT(doFileTouch(HbAction*)));
+    }
+    else{
+        mEngineWrapper->touch(false);
+        refreshList();
+    }
+}
+
+/**
+  Touch actually selected files
+  */
+void FbFileView::doFileTouch(HbAction* action)
+{
+    bool recurse = false;
+    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
+        recurse = true;
+        }
+    mEngineWrapper->touch(recurse);
+    refreshList();
+}
+
+void FbFileView::fileChecksumsMD5()
+{
+    fileChecksums(EFileChecksumsMD5);
+}
+
+void FbFileView::fileChecksumsMD2()
+{
+    fileChecksums(EFileChecksumsMD2);
+}
+
+void FbFileView::fileChecksumsSHA1()
+{
+    fileChecksums(EFileChecksumsSHA1);
+}
+
+void FbFileView::fileChecksums(TFileBrowserCmdFileChecksums checksumType)
+{
+    mEngineWrapper->showFileCheckSums(currentItemIndex(), checksumType);
+}
+
+/**
+  Show file properties
+  */
+void FbFileView::fileProperties()
+{
+    QModelIndex currentIndex = currentItemIndex();
+    QStringList propertyList;
+    QString titleText;
+    mEngineWrapper->properties(currentIndex, propertyList, titleText);
+    openPropertyDialog(propertyList, titleText);
+}
+
+void FbFileView::fileSetAttributes()
+{
+
+}
+
+// edit menu
+void FbFileView::editSnapShotToE()
+{
+
+}
+
+/**
+  Set selected files into clipboard.
+  Selected item will be removed after paste operation.
+  */
+void FbFileView::editCut()
+{
+    storeSelectedItemsOrCurrentItem();
+
+    // Store indices to clipboard
+    mClipboardIndexes.clear();
+    for (int i = 0; i < mSelectionIndexes.size(); ++i) {
+        mClipboardIndexes.append(mSelectionIndexes.at(i));
+    }
+
+    mEngineWrapper->clipboardCut(mClipboardIndexes);
+
+    int operations = mClipboardIndexes.count();
+    const QString message = QString ("%1 entries cut to clipboard");
+    QString noteMsg = message.arg(operations);
+
+    Notifications::showInformationNote(noteMsg);
+}
+
+/**
+  Set selected files into clipboard.
+  Selected item will not be removed after paste operation.
+  */
+void FbFileView::editCopy()
+{
+    storeSelectedItemsOrCurrentItem();
+
+    // Store indices to clipboard
+    mClipboardIndexes.clear();
+    for (int i = 0; i < mSelectionIndexes.size(); ++i) {
+        mClipboardIndexes.append(mSelectionIndexes.at(i));
+    }
+
+    mEngineWrapper->clipboardCopy(mClipboardIndexes);
+
+    int operations = mClipboardIndexes.count();
+
+    const QString message = QString ("%1 entries copied to clipboard");
+    QString noteMsg = message.arg(operations);
+
+    Notifications::showInformationNote(noteMsg);
+}
+
+/**
+  Moves or copies file selection stored in clipboard to a actual directory.
+  Removing files depend on previous operation, i.e. Cut or Copy
+  */
+void FbFileView::editPaste()
+{
+    bool someEntryExists(false);
+
+    // TODO Set entry items here
+
+    someEntryExists = mEngineWrapper->isDestinationEntriesExists(mClipboardIndexes, mEngineWrapper->currentPath());
+    if (someEntryExists) {
+        fileOverwriteDialog();
+    }
+    
+    mEngineWrapper->clipboardPaste(mOverwriteOptions);
+}
+
+/**
+  Open copy to folder new filename dialog
+  */
+void FbFileView::editCopyToFolder()
+{
+    QString heading = QString("Enter new name");
+    HbInputDialog::getText(heading, this, SLOT(doEditCopyToFolder(HbAction*)), mEngineWrapper->currentPath(), scene());
+}
+
+/**
+  Copies current file selection to a queried directory.
+  */
+void FbFileView::doEditCopyToFolder(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString targetDir = dlg->value().toString();
+        bool someEntryExists(false);
+
+        // TODO Set entry items here
+        storeSelectedItemsOrCurrentItem();
+        mEngineWrapper->setCurrentSelection(mSelectionIndexes);
+
+        someEntryExists = mEngineWrapper->isDestinationEntriesExists(mSelectionIndexes, targetDir);
+        if (someEntryExists) {
+            fileOverwriteDialog();
+        }
+        mEngineWrapper->copyToFolder(targetDir, mOverwriteOptions, false);
+        refreshList();
+    }
+}
+
+/**
+  Open move to folder new filename dialog.
+  */
+void FbFileView::editMoveToFolder()
+{
+    QString heading = QString("Enter new name");
+    HbInputDialog::getText(heading, this, SLOT(doEditMoveToFolder(HbAction*)), mEngineWrapper->currentPath(), scene());
+}
+
+/**
+  Moves current file selection to a queried directory.
+  */
+void FbFileView::doEditMoveToFolder(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString targetDir = dlg->value().toString();
+        bool someEntryExists(false);
+
+        // TODO Set entry items here
+        storeSelectedItemsOrCurrentItem();
+        mEngineWrapper->setCurrentSelection(mSelectionIndexes);
+
+        someEntryExists = mEngineWrapper->isDestinationEntriesExists(mSelectionIndexes, targetDir);
+        if (someEntryExists) {
+            fileOverwriteDialog();
+        }
+        mEngineWrapper->copyToFolder(targetDir, mOverwriteOptions, true);
+        refreshList();
+    }
+}
+
+/**
+  Select current file
+  */
+void FbFileView::editSelect()
+{
+    QItemSelectionModel *selectionModel = mListView->selectionModel();
+    if (selectionModel) {
+        selectionModel->select(selectionModel->currentIndex(), QItemSelectionModel::SelectCurrent);
+        selectionModel->select(selectionModel->currentIndex(), QItemSelectionModel::Select);
+//        itemHighlighted(selectionModel->currentIndex());
+        refreshList();
+    }
+}
+
+/**
+  Unselect current file
+  */
+void FbFileView::editUnselect()
+{
+    QItemSelectionModel *selectionModel = mListView->selectionModel();
+    if (selectionModel) {
+        selectionModel->select(selectionModel->currentIndex(), QItemSelectionModel::Deselect);
+//        itemHighlighted(selectionModel->currentIndex());
+    }
+}
+
+/**
+  Select all files
+  */
+void FbFileView::editSelectAll()
+{
+    QItemSelectionModel *selectionModel = mListView->selectionModel();
+    if (selectionModel) {
+
+        //if (mFileBrowserModel->rowCount() > 0) {
+        if (mListView->model() && mListView->model()->rowCount() > 0) {
+            QModelIndex firstIndex = mListView->model()->index(0, 0);
+            QModelIndex lastIndex = mListView->model()->index( (mListView->model()->rowCount() - 1), 0);
+
+            QItemSelection itemSelection(firstIndex, lastIndex);
+            selectionModel->select(itemSelection, QItemSelectionModel::SelectCurrent);
+        }
+    }
+}
+
+/**
+  Unselect all files
+  */
+void FbFileView::editUnselectAll()
+{
+    QItemSelectionModel *selectionModel = mListView->selectionModel();
+    if (selectionModel) {
+        selectionModel->clearSelection();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// view menu
+// ---------------------------------------------------------------------------
+void FbFileView::viewFilterEntries()
+{
+    if (mToolBar && mToolBar->actions().count() > 1 && mToolBar->actions().at(1)) {
+        HbAction* tbeFilterAction = qobject_cast<HbAction*>(mToolBar->actions().at(1));
+        if (tbeFilterAction && tbeFilterAction->toolBarExtension()) {
+            HbToolBarExtension *tbeFilter = tbeFilterAction->toolBarExtension();
+            tbeFilter->open();
+        }
+    }
+}
+
+/**
+  Set filter criteria to proxy model
+  */
+void FbFileView::filterCriteriaChanged(const QString &criteria)
+{
+    mSortFilterProxyModel->setFilterCriteria(criteria);
+}
+
+/**
+  Set filter criteria to proxy model
+  */
+void FbFileView::clearFilterCriteria()
+{
+    mSearchPanel->setCriteria(QString(""));
+}
+
+/**
+  Refresh view
+  */
+void FbFileView::viewRefresh()
+{
+    refreshList();
+}
+
+// ---------------------------------------------------------------------------
+// tools menu
+// ---------------------------------------------------------------------------
+void FbFileView::toolsAllAppsToTextFile()
+{
+
+}
+
+/**
+  Write all files to text file
+  */
+void FbFileView::toolsAllFilesToTextFile()
+{
+    mEngineWrapper->toolsWriteAllFiles();
+}
+
+//void FbFileView::toolsAvkonIconCacheEnable()
+//{
+//
+//}
+//void FbFileView::toolsAvkonIconCacheDisable()
+//{
+//
+//}
+
+/**
+  Disable extended errors
+  */
+void FbFileView::toolsDisableExtendedErrors()
+{
+    mEngineWrapper->ToolsSetErrRd(false);
+}
+
+void FbFileView::toolsDumpMsgStoreWalk()
+{
+
+}
+void FbFileView::toolsEditDataTypes()
+{
+
+}
+
+/**
+  Enable extended errors
+  */
+void FbFileView::toolsEnableExtendedErrors()
+{
+    mEngineWrapper->ToolsSetErrRd(true);
+}
+
+/**
+  Open simulate leave dialog
+  */
+void FbFileView::toolsErrorSimulateLeave()
+{
+    int leaveCode = -6;
+    QString heading = QString("Leave code");
+    //HbInputDialog::getInteger(heading, this, SLOT(doToolsErrorSimulateLeave(HbAction*)), leaveCode, scene());
+    HbInputDialog::getText(heading, this, SLOT(doToolsErrorSimulateLeave(HbAction*)), QString::number(leaveCode), scene());
+}
+
+
+/**
+  Simulate leave.
+  */
+void FbFileView::doToolsErrorSimulateLeave(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        bool ok;
+        int leaveCode = dlg->value().toString().toInt(&ok);
+        if (leaveCode != 0 || ok) {
+            mEngineWrapper->ToolsErrorSimulateLeave(leaveCode);
+        }
+    }
+}
+
+/**
+  Open simulate panic dialog.
+  */
+void FbFileView::toolsErrorSimulatePanic()
+{
+    mPanicCategory = QString ("Test Category");
+    QString heading = QString("Panic category");
+    HbInputDialog::getText(heading, this, SLOT(doToolsErrorSimulatePanicCode(HbAction*)), mPanicCategory, scene());
+}
+
+/**
+  Simulate panic.
+  */
+void FbFileView::doToolsErrorSimulatePanicCode(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        mPanicCategory = dlg->value().toString();
+        int panicCode(555);
+        QString heading = QString("Panic code");
+        HbInputDialog::getInteger(heading, this, SLOT(doToolsErrorSimulatePanic(HbAction*)), panicCode, scene());
+    }
+}
+
+/**
+  Simulate panic.
+  */
+void FbFileView::doToolsErrorSimulatePanic(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        bool ok;
+        int panicCode = dlg->value().toInt(&ok);
+        if (panicCode != 0 || ok) {
+            mEngineWrapper->ToolsErrorSimulatePanic(mPanicCategory, panicCode);
+        }
+    }
+}
+
+/**
+  Open simulate exception dialog.
+  */
+void FbFileView::toolsErrorSimulateException()
+{
+    int exceptionCode = 0;
+    QString heading = QString("Exception code");
+    HbInputDialog::getInteger(heading, this, SLOT(doToolsErrorSimulateException(HbAction*)), exceptionCode, scene());
+}
+
+/**
+  Simulate exception.
+  */
+void FbFileView::doToolsErrorSimulateException(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        bool ok;
+        int exceptionCode = dlg->value().toInt(&ok);
+        if (exceptionCode != 0 || ok) {
+            mEngineWrapper->ToolsErrorSimulateException(exceptionCode);
+        }
+    }
+}
+
+//    void FbFileView::toolsLocalConnectivityActivateInfrared()
+//{
+//
+//}
+//    void FbFileView::toolsLocalConnectivityLaunchBTUI()
+//{
+//
+//}
+//    void FbFileView::toolsLocalConnectivityLaunchUSBUI()
+//{
+//
+//}
+void FbFileView::toolsMessageInbox()
+{
+
+}
+void FbFileView::toolsMessageDrafts()
+{
+
+}
+void FbFileView::toolsMessageSentItems()
+{
+
+}
+void FbFileView::toolsMessageOutbox()
+{
+
+}
+void FbFileView::toolsMemoryInfo()
+{
+
+}
+void FbFileView::toolsSecureBackStart()
+{
+
+}
+void FbFileView::toolsSecureBackRestore()
+{
+
+}
+void FbFileView::toolsSecureBackStop()
+{
+
+}
+
+/**
+  Open debug mask dialog
+  */
+void FbFileView::toolsSetDebugMaskQuestion()
+{
+    quint32 dbgMask = mEngineWrapper->getDebugMask();
+    QString dbgMaskText = QString("0x").append(QString::number(dbgMask, 16));
+    QString heading = QString("Kernel debug mask in hex format");
+    HbInputDialog::getText(heading, this, SLOT(toolsSetDebugMask(HbAction*)), dbgMaskText, scene());
+}
+
+/**
+  Set debug mask
+  */
+void FbFileView::toolsSetDebugMask(HbAction *action)
+{
+    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
+    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
+        QString dbgMaskText = dlg->value().toString();
+        if (dbgMaskText.length() > 2 && dbgMaskText[0]=='0' && dbgMaskText[1]=='x') {
+            bool ok;
+            quint32 dbgMask = dbgMaskText.toUInt(&ok, 16);
+            if (dbgMask != 0 || ok) {
+                mEngineWrapper->toolsSetDebugMask(dbgMask);
+                Notifications::showConfirmationNote(QString("Changed"));
+            } else {
+                Notifications::showErrorNote(QString("Cannot convert value"));
+            }
+        } else {
+            Notifications::showErrorNote(QString("Not in hex format"));
+        }
+    }
+}
+
+void FbFileView::toolsShowOpenFilesHere()
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// main menu items
+// ---------------------------------------------------------------------------
+void FbFileView::selectionModeChanged()
+{
+    if (mOptionMenuActions.mSelection->isChecked()) {
+         activateSelectionMode();
+     } else {
+         deActivateSelectionMode();
+     }
+}
+
+/**
+  Show about note
+  */
+void FbFileView::about()
+{
+    Notifications::showAboutNote();
+}
+
+// ---------------------------------------------------------------------------
+// End of operations
+// ---------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------
+
+/**
+  Item is selected from list when selection mode is activated from menu
+  */
+void FbFileView::selectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/)
+{
+    //QItemSelectionModel *selectionModel = mListView->selectionModel();
+    //itemHighlighted(selectionModel->currentIndex());
+}
+
+/**
+  An item is clicked from navigation item list. Navigation item list contains
+  drive-, folder- or file items. Opens selected drive, folder or file popup menu
+  */
+void FbFileView::activated(const QModelIndex& index)
+{
+    if (mFbFileModel) {
+        //map to source model
+        QModelIndex activatedIndex = mSortFilterProxyModel->mapToSource(index);
+
+        if (mEngineWrapper->getFileEntry(activatedIndex).isDir()) {
+            // populate new content of changed navigation view.
+            // mLocationChanged = true;
+            // mDirectory = filePath;
+            mEngineWrapper->moveDownToDirectory(activatedIndex);
+            refreshList();
+        } else {  // file item
+            // mSelectedFilePath = filePath;
+            FileEntry fileEntry = mEngineWrapper->getFileEntry(activatedIndex);
+            mAbsoluteFilePath = fileEntry.path() + fileEntry.name();
+
+            // open user-dialog to select: view as text/hex,  open w/AppArc or open w/DocH. embed
+            QStringList list;
+            list << QString("View as text/hex") << QString("Open w/ AppArc") << QString("Open w/ DocH. embed");
+            openListDialog(list, QString("Open file"), this, SLOT(fileOpen(HbAction *)));
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+
+void FbFileView::activateSelectionMode()
+{
+    QString path;
+    disconnect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex)));
+    mListView->setSelectionMode(HbListView::MultiSelection);
+
+//    QModelIndex index = mFileSystemModel->index(path,0);
+//    mListView->selectionModel()->setCurrentIndex(index, QItemSelectionModel::SelectCurrent);
+//    mListView->selectionModel()->select(index, QItemSelectionModel::Select);
+//    //mListView->setHighlightMode(HbItemHighlight::HighlightAlwaysVisible);
+//    mListView->setFocus();    // TODO use focus in
+    if (mListView->selectionModel()) {
+        connect(mListView->selectionModel(),
+                SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
+                this,
+                SLOT(selectionChanged(QItemSelection, QItemSelection)));
+//        // flag to indicate that selection mode changed, "edit" sub-menu update needed
+//        mFolderContentChanged = true;
+    }
+}
+
+// ---------------------------------------------------------------------------
+
+void FbFileView::deActivateSelectionMode()
+{
+    disconnect(mListView->selectionModel(),
+               SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
+               this,
+               SLOT(selectionChanged(QItemSelection, QItemSelection)));
+    mListView->setSelectionMode(HbListView::NoSelection);
+    connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex)));
+    editUnselectAll();
+    // flag to indicate that selection mode changed, "edit" sub-menu update needed
+    mFolderContentChanged = true;
+}
+
+// ---------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/src/fbmainwindow.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include <HbApplication>
+#include <HbMainWindow>
+
+#include "fbmainwindow.h"
+#include "enginewrapper.h"
+#include "fbfileview.h"
+#include "fbdriveview.h"
+#include "settingsview.h"
+#include "editorview.h"
+#include "searchview.h"
+
+FbMainWindow::FbMainWindow(QWidget *parent)
+    : HbMainWindow(parent),
+    mEngineWrapper(0),
+    mDriveView(0),
+    mFileView(0),
+    mSettingsView(0),
+    mEditorView(0),
+    mSearchView(0),
+    mPreviousView(0)
+{
+}
+
+FbMainWindow::~FbMainWindow ()
+{
+    if (mEngineWrapper) {
+        delete mEngineWrapper;
+    }
+}
+
+void FbMainWindow::init()
+{
+    // Create Engine Wrapper and initialize it
+    mEngineWrapper = new EngineWrapper();
+    int error = mEngineWrapper->init();
+    Q_ASSERT_X(error == 1, "FileBrowser", "Engine initialization failed");
+
+    // Create drive view
+    mDriveView = new FbDriveView();
+    connect(mDriveView, SIGNAL(aboutToShowSettingsView()), this, SLOT(openSettingsView()));
+    connect(mDriveView, SIGNAL(aboutToShowFileView()), this, SLOT(openFileView()));
+    mDriveView->init(mEngineWrapper);
+    addView(mDriveView);
+
+    // Create file view
+    mFileView = new FbFileView();
+    connect(mFileView, SIGNAL(aboutToShowSettingsView()), this, SLOT(openSettingsView()));
+    connect(mFileView, SIGNAL(aboutToShowDriveView()), this, SLOT(openDriveView()));
+    mFileView->init(mEngineWrapper);
+    addView(mFileView);
+
+    // Create settings view
+    mSettingsView = new SettingsView(*mEngineWrapper);
+    connect(mSettingsView, SIGNAL(finished(bool)), this, SLOT(openPreviousBrowserView()));
+    addView(mSettingsView);
+
+    // Create editor view
+    mEditorView = new EditorView();
+    connect(mFileView, SIGNAL(aboutToShowEditorView(const QString &, bool)), this, SLOT(openEditorView(const QString &, bool)));
+    connect(mEditorView, SIGNAL(finished(bool)), this, SLOT(openFileView()));
+    addView(mEditorView);
+
+    // Create Search view
+    mSearchView = new SearchView(*mEngineWrapper);
+    connect(mDriveView, SIGNAL(aboutToShowSearchView(QString)), this, SLOT(openSearchView(QString)));
+    connect(mFileView, SIGNAL(aboutToShowSearchView(QString)), this, SLOT(openSearchView(QString)));
+    connect(mSearchView, SIGNAL(finished(bool)), this, SLOT(openFileBrowserView(bool)));
+    addView(mSearchView);
+
+    // Show ApplicationView at startup
+    setCurrentView(mDriveView);
+    mPreviousView = mDriveView;
+
+    // Show HbMainWindow
+    show();
+}
+
+
+void FbMainWindow::openPreviousBrowserView()
+{
+    mDriveView->refreshList();
+    mFileView->refreshList();
+    setCurrentView(mPreviousView);
+}
+
+void FbMainWindow::openFileBrowserView(bool accepted)
+{
+    mDriveView->refreshList();
+    mFileView->refreshList();
+    if (accepted) {
+        setCurrentView(mFileView);
+    } else {
+        setCurrentView(mPreviousView);
+    }
+}
+
+void FbMainWindow::openDriveView()
+{
+    mDriveView->refreshList();
+    setCurrentView(mDriveView);
+    mPreviousView = mDriveView;
+}
+
+void FbMainWindow::openFileView()
+{
+    mDriveView->refreshList();
+//    mFileView->setCurrentpath(path);
+    mFileView->refreshList();
+    setCurrentView(mFileView);
+    mPreviousView = mFileView;
+}
+
+void FbMainWindow::openSettingsView()
+{
+    mSettingsView->initDataForm();
+    setCurrentView(mSettingsView);
+}
+
+void FbMainWindow::openEditorView(const QString &fileName, bool flagReadOnly)
+{
+    mEditorView->open(fileName, flagReadOnly);
+    setCurrentView(mEditorView);
+}
+
+void FbMainWindow::openSearchView(const QString &path)
+{
+    mSearchView->open(path);
+    setCurrentView(mSearchView);
+}
--- a/filebrowser/ui/src/filebrowsermainwindow.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-
-#include <HbApplication>
-#include <HbMainWindow>
-
-#include "filebrowsermainwindow.h"
-#include "enginewrapper.h"
-#include "filebrowserview.h"
-#include "settingsview.h"
-#include "editorview.h"
-#include "searchview.h"
-
-FileBrowserMainWindow::FileBrowserMainWindow(QWidget *parent)
-    : HbMainWindow(parent),
-    mEngineWrapper(0),
-    mFileBrowserView(0),
-    mSettingsView(0),
-    mEditorView(0),
-    mSearchView(0)
-{
-}
-
-FileBrowserMainWindow::~FileBrowserMainWindow ()
-{
-    if (mEngineWrapper) {
-        delete mEngineWrapper;
-    }
-}
-
-void FileBrowserMainWindow::init()
-{
-    // Create Engine Wrapper and initialize it
-    mEngineWrapper = new EngineWrapper();
-    int error = mEngineWrapper->init();
-    Q_ASSERT_X(error == 1, "FileBrowser", "Engine initialization failed");
-
-    // Create file browser view
-    mFileBrowserView = new FileBrowserView(*this);
-    connect(mFileBrowserView, SIGNAL(aboutToShowSettingsView()), this, SLOT(openSettingsView()));
-    mFileBrowserView->init(mEngineWrapper);
-    addView(mFileBrowserView);
-
-    // Create settings view
-    mSettingsView = new SettingsView(*this, *mEngineWrapper);
-    connect(mSettingsView, SIGNAL(finished(bool)), this, SLOT(openFileBrowserView()));
-    addView(mSettingsView);
-
-    // Create settings view
-    mEditorView = new EditorView(*this);
-    connect(mFileBrowserView, SIGNAL(aboutToShowEditorView(const QString &, bool)), this, SLOT(openEditorView(const QString &, bool)));
-    connect(mEditorView, SIGNAL(finished(bool)), this, SLOT(openFileBrowserView()));
-    addView(mEditorView);
-
-    // Create Search view
-    mSearchView = new SearchView(*mEngineWrapper);
-    connect(mFileBrowserView, SIGNAL(aboutToShowSearchView(QString)), this, SLOT(openSearchView(QString)));
-    connect(mSearchView, SIGNAL(finished(bool)), this, SLOT(openFileBrowserView()));
-    addView(mSearchView);
-
-    // Show ApplicationView at startup
-    setCurrentView(mFileBrowserView);
-
-    // Show HbMainWindow
-    show();
-}
-
-void FileBrowserMainWindow::openFileBrowserView()
-{
-    mFileBrowserView->refreshList();
-    setCurrentView(mFileBrowserView);
-}
-
-void FileBrowserMainWindow::openSettingsView()
-{
-    setCurrentView(mSettingsView);
-}
-
-void FileBrowserMainWindow::openEditorView(const QString &fileName, bool flagReadOnly)
-{
-    mEditorView->open(fileName, flagReadOnly);
-    setCurrentView(mEditorView);
-}
-
-void FileBrowserMainWindow::openSearchView(const QString &path)
-{
-    mSearchView->open(path);
-    setCurrentView(mSearchView);
-}
--- a/filebrowser/ui/src/filebrowsermodel.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#include "filebrowsermodel.h"
-#include "enginewrapper.h"
-#include "fileentry.h"
-#include "driveentry.h"
-#include "settingsview.h"
-#include "filebrowsersettings.h"
-#include "FB.hrh"
-
-#include <QModelIndex>
-#include <QFileIconProvider>
-
-/**
-  Constructs a file browser custom system model with the given \a engineWrapper and \a parent.
-  */
-FileBrowserModel::FileBrowserModel(EngineWrapper *engineWrapper, QObject *parent) :
-    QAbstractListModel(parent),
-    mEngineWrapper(engineWrapper),
-    mFileIconProvider(0)
-{
-    mFileIconProvider = new QFileIconProvider();
-}
-
-/**
-  Destroys this file browser custom system model.
-  */
-FileBrowserModel::~FileBrowserModel()
-{  
-    if (mFileIconProvider) {
-        delete mFileIconProvider;
-    }
-}
-
-/**
-  \reimp
-  */
-int FileBrowserModel::rowCount(const QModelIndex &parent) const
-{
-    Q_UNUSED(parent);
-    return mEngineWrapper->itemCount();
-}
-
-/**
-  \reimp
-  */
-QVariant FileBrowserModel::data(const QModelIndex &index, int role) const
-{
-    if (!index.isValid() || index.model() != this)
-        return QVariant();
-
-    switch (role) {
-    case Qt::EditRole:
-    case Qt::DisplayRole: {
-            QStringList listItem;
-            if (mEngineWrapper->isDriveListViewActive()) {
-                DriveEntry driveEntry(mEngineWrapper->getDriveEntry(index));
-                if (mEngineWrapper->settings().fileViewMode() == EFileViewModeSimple)
-                {
-                    const QString SimpleDriveEntry("%1: <%2>");
-                    listItem /*<< driveEntry.IconId() */
-                            << SimpleDriveEntry.arg(driveEntry.driveLetter())
-                                               .arg(driveEntry.mediaTypeString());
-                } else if (mEngineWrapper->settings().fileViewMode() == EFileViewModeExtended) {
-                    const QString SimpleDriveEntry("%1: <%2>");
-                    const QString ExtendedDriveEntry("%1/%2 kB");
-                    listItem /*<< driveEntry.IconId()*/
-                            << SimpleDriveEntry.arg(driveEntry.driveLetter())
-                                               .arg(driveEntry.mediaTypeString())
-                            << ExtendedDriveEntry.arg(QString::number(driveEntry.volumeInfoFree()/1024))
-                                                 .arg(QString::number(driveEntry.volumeInfoSize()/1024));
-
-                }
-            } else {
-                FileEntry fileEntry(mEngineWrapper->getFileEntry(index));
-                if (mEngineWrapper->settings().fileViewMode() == EFileViewModeSimple)
-                {
-                    listItem /*<< fileEntry.IconId()*/
-                            << fileEntry.name();
-                } else if (mEngineWrapper->settings().fileViewMode() == EFileViewModeExtended) {
-                    QString extraData;
-                    extraData.append(fileEntry.modifiedString());
-                    if (fileEntry.isDir() && fileEntry.dirEntries() >= 0) {
-                        extraData.append(" - ");
-                        extraData.append(fileEntry.dirEntriesString());
-                    } else if (!fileEntry.isDir()) {
-                        extraData.append(" - ");
-                        extraData.append(fileEntry.sizeString());
-                    }
-                    listItem /*<< fileEntry.IconId()*/
-                            << fileEntry.name() << extraData << fileEntry.attributesString();
-                }
-            }
-            return listItem;
-        }
-    case Qt::DecorationRole: {
-            if (mEngineWrapper) {
-                QIcon icon;
-                if (mEngineWrapper->isDriveListViewActive()) {
-                    icon = mFileIconProvider->icon(QFileIconProvider::Drive);
-                } else {
-                    FileEntry fileEntry(mEngineWrapper->getFileEntry(index));
-                    if (fileEntry.isDir()) {
-                        icon = mFileIconProvider->icon(QFileIconProvider::Folder);
-                    } else {
-                        icon = mFileIconProvider->icon(QFileIconProvider::File);
-                    }
-                }
-                return QVariant(icon);
-            }
-        }
-    }
-
-    return QVariant();
-}
-
-/**
-  \reimp
-  */
-QVariant FileBrowserModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    Q_UNUSED(section)
-    Q_UNUSED(orientation)
-    Q_UNUSED(role)
-
-    // TODO, implement or remove
-    return QVariant();
-}
-
-// ---------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/src/filebrowsersortfilterproxymodel.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "filebrowsersortfilterproxymodel.h"
+
+#include <QString>
+#include <QStringList>
+
+FileBrowserSortFilterProxyModel::FileBrowserSortFilterProxyModel(QObject *parent)
+    : QSortFilterProxyModel(parent)
+{
+}
+
+bool FileBrowserSortFilterProxyModel::filterAcceptsRow(int sourceRow,
+                                                       const QModelIndex &sourceParent) const
+{
+    QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
+
+    QVariant displayRole = index.data(Qt::DisplayRole);
+    QStringList stringList;
+    if (displayRole.isValid()) {
+        if (displayRole.canConvert<QString>()) {
+            stringList.append(displayRole.toString());
+        } else if (displayRole.canConvert<QStringList>()) {
+            stringList = displayRole.toStringList();
+        }
+        QString itemName = stringList.at(0);
+        //QString criteria = filterRegExp().pattern();
+        QString criteria = filterCriteria();
+        if (!criteria.isEmpty()) {
+            bool contains = itemName.contains(criteria, Qt::CaseInsensitive);
+            return contains;
+        } else {
+            //invalidateFilter();
+            return true;
+        }
+    }
+    return true;
+}
+
+void FileBrowserSortFilterProxyModel::setFilterCriteria(const QString &criteria)
+{
+    mFilterCriteria = criteria;
+    invalidate();
+}
+
+
+// End of File
--- a/filebrowser/ui/src/filebrowserview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2034 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#include "filebrowserview.h"
-#include "filebrowsermainwindow.h"
-#include "settingsview.h"
-#include "editorview.h"
-#include "searchview.h"
-#include "enginewrapper.h"
-#include "notifications.h"
-
-#include "filebrowsermodel.h"
-
-#include <HbMainWindow>
-#include <HbMenu>
-#include <HbPopup>
-#include <HbView>
-#include <HbMessageBox>
-#include <HbAction>
-#include <HbLabel>
-#include <HbListView>
-#include <HbListViewItem>
-#include <HbListWidget>
-#include <HbLineEdit>
-#include <HbAbstractViewItem>
-#include <HbSelectionDialog>
-#include <HbValidator>
-#include <HbInputDialog>
-#include <HbToolBar>
-
-#include <QString>
-#include <QGraphicsLinearLayout>
-#include <QItemSelection>
-#include <QDebug>
-//TODO check if needed to do this way
-#include <FB.hrh>
-
-//const int DRIVEPATHLENGTH = 4;
-const QString okActionText("OK");
-const QString cancelActionText("Cancel");
-
-// ---------------------------------------------------------------------------
-
-FileBrowserView::FileBrowserView(FileBrowserMainWindow &mainWindow)
-    : mMainWindow(mainWindow),
-    mEngineWrapper(0),
-    mListView(0),
-    mToolBar(0),
-    mNaviPane(0),
-    mMainLayout(0),
-    mFileBrowserModel(0),
-    mOptionMenuActions(),
-    mContextMenuActions(),
-    mContextMenu(0),
-    mToolbarBackAction(0),
-    mItemHighlighted(false),
-    mLocationChanged(false),
-    mRemoveFileAfterCopied(false),
-//    mClipBoardInUse(false),
-    mFolderContentChanged(false),
-    mCurrentIndex(),
-    mOldPassword(),
-    mPanicCategory(),
-    mAbsoluteFilePath(),
-    mOverwriteOptions(),
-    mModelIndex(),
-    mNewFileName(),
-    mProceed(false),
-    mEraseMBR(false)
-{
-    setTitle("File Browser");
-
-    createMenu();
-    createContextMenu();
-    createToolBar();
-}
-
-// ---------------------------------------------------------------------------	
-
-void FileBrowserView::init(EngineWrapper *engineWrapper)
-{
-    mEngineWrapper = engineWrapper;
-
-    mListView = new HbListView(this);
-    mFileBrowserModel = new FileBrowserModel(mEngineWrapper);
-    if (!mListView->model()) {
-        mListView->setModel(mFileBrowserModel);
-        mListView->listItemPrototype()->setStretchingStyle(HbListViewItem::StretchLandscape);
-        mEngineWrapper->refreshView();
-        mToolbarBackAction->setEnabled(!mEngineWrapper->isDriveListViewActive());
-    }
-
-    //mListView->setRootIndex(mFileSystemModel->index(startPath));
-    //mListView->setRootIndex(model->index());
-
-    mListView->setScrollingStyle(HbScrollArea::PanWithFollowOn);
-
-    connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex)));
-    connect(mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)),
-            this, SLOT(onLongPressed(HbAbstractViewItem*, QPointF)));
-
-    mNaviPane = new HbLabel(this);
-    mNaviPane->setPlainText(QString(" ")); // TODO get from settings or default
-    //mNaviPane->setPlainText(QString(mEngineWrapper->currentPath()));
-    HbFontSpec fontSpec(HbFontSpec::PrimarySmall);
-    mNaviPane->setFontSpec(fontSpec);
-
-    // Create layout and add list view and toolbar into layout:
-    mMainLayout = new QGraphicsLinearLayout(Qt::Vertical);
-    mMainLayout->addItem(mNaviPane);
-    mMainLayout->addItem(mListView);
-    //mMainLayout->addItem(mToolBar);
-    setLayout(mMainLayout);
-}
-
-// ---------------------------------------------------------------------------
-
-FileBrowserView::~FileBrowserView()
-{  
-//    if (mEngineWrapper) {
-//        delete mEngineWrapper;
-//    }
-    if (mContextMenu) {
-        mContextMenu->deleteLater();
-    }
-
-    delete mFileBrowserModel;
-    delete mListView;
-    delete mToolBar;
-}
-
-/**
-  Initial setup for options menu.
-  Dynamic menu update during the runtime is performed by updateOptionMenu() which
-  to menu's aboutToShow() signal.
-  */
-void FileBrowserView::createMenu()
-{
-    createFileMenu();
-    createEditMenu();
-    createViewMenu();
-    createToolsMenu();
-
-    createSelectionMenuItem();
-    createSettingsMenuItem();
-    createAboutMenuItem();
-    createExitMenuItem();
-
-    // menu dynamic update
-    connect(menu(), SIGNAL(aboutToShow()), this, SLOT(updateOptionMenu()));
-}
-
-/**
-  Initial setup for File submenu
-  */
-void FileBrowserView::createFileMenu()
-{
-    mOptionMenuActions.mFileMenu = menu()->addMenu("File");
-
-    mOptionMenuActions.mFileBackMoveUp = mOptionMenuActions.mFileMenu->addAction("Back/Move up (<-)", this, SLOT(fileBackMoveUp()));
-    mOptionMenuActions.mFileOpenDrive = mOptionMenuActions.mFileMenu->addAction("Open drive (->)", this, SLOT(fileOpenDrive()));
-    mOptionMenuActions.mFileOpenDirectory = mOptionMenuActions.mFileMenu->addAction("Open directory (->)", this, SLOT(fileOpenDirectory()));
-    mOptionMenuActions.mFileSearch = mOptionMenuActions.mFileMenu->addAction("Search...", this, SLOT(fileSearch()));
-    //mOptionMenuActions.mFileSearch->setVisible(false);
-
-    mOptionMenuActions.mFileNewMenu = mOptionMenuActions.mFileMenu->addMenu("New");
-    mOptionMenuActions.mFileNewFile = mOptionMenuActions.mFileNewMenu->addAction("File", this, SLOT(fileNewFile()));
-    mOptionMenuActions.mFileNewDirectory = mOptionMenuActions.mFileNewMenu->addAction("Directory", this, SLOT(fileNewDirectory()));
-
-    mOptionMenuActions.mFileDelete = mOptionMenuActions.mFileMenu->addAction("Delete", this, SLOT(fileDelete()));
-    mOptionMenuActions.mFileRename = mOptionMenuActions.mFileMenu->addAction("Rename", this, SLOT(fileRename()));
-    mOptionMenuActions.mFileTouch = mOptionMenuActions.mFileMenu->addAction("Touch", this, SLOT(fileTouch()));
-    mOptionMenuActions.mFileProperties = mOptionMenuActions.mFileMenu->addAction("Properties", this, SLOT(fileProperties()));
-
-//    mOptionMenuActions.mFileChecksumsMenu = mOptionMenuActions.mFileMenu->addMenu("Checksums");
-//    mOptionMenuActions.mFileChecksumsMD5 = mOptionMenuActions.mFileChecksumsMenu->addAction("MD5", this, SLOT(fileChecksumsMD5()));
-//    mOptionMenuActions.mFileChecksumsMD2 = mOptionMenuActions.mFileChecksumsMenu->addAction("MD2", this, SLOT(fileChecksumsMD2()));
-//    mOptionMenuActions.mFileChecksumsSHA1 = mOptionMenuActions.mFileChecksumsMenu->addAction("SHA-1", this, SLOT(fileChecksumsSHA1()));
-
-    mOptionMenuActions.mFileSetAttributes = mOptionMenuActions.mFileMenu->addAction("Set attributes...", this, SLOT(fileSetAttributes()));
-    mOptionMenuActions.mFileSetAttributes->setVisible(false);
-}
-
-/**
-  Initial setup for Edit submenu
-  */
-void FileBrowserView::createEditMenu()
-{
-    mOptionMenuActions.mEditMenu = menu()->addMenu("Edit");
-
-    mOptionMenuActions.mEditSnapShotToE = mOptionMenuActions.mEditMenu->addAction("Snap shot to E:", this, SLOT(editSnapShotToE()));
-    mOptionMenuActions.mEditSnapShotToE->setVisible(false);
-    mOptionMenuActions.mEditCut = mOptionMenuActions.mEditMenu->addAction("Cut", this, SLOT(editCut()));
-    mOptionMenuActions.mEditCopy = mOptionMenuActions.mEditMenu->addAction("Copy", this, SLOT(editCopy()));
-    mOptionMenuActions.mEditPaste = mOptionMenuActions.mEditMenu->addAction("Paste", this, SLOT(editPaste()));
-
-    mOptionMenuActions.mEditCopyToFolder = mOptionMenuActions.mEditMenu->addAction("Copy to folder...", this, SLOT(editCopyToFolder()));
-    mOptionMenuActions.mEditMoveToFolder = mOptionMenuActions.mEditMenu->addAction("Move to folder...", this, SLOT(editMoveToFolder()));
-
-    mOptionMenuActions.mEditSelect = mOptionMenuActions.mEditMenu->addAction("Select", this, SLOT(editSelect()));
-    mOptionMenuActions.mEditUnselect = mOptionMenuActions.mEditMenu->addAction("Unselect", this, SLOT(editUnselect()));
-    mOptionMenuActions.mEditSelectAll = mOptionMenuActions.mEditMenu->addAction("Select all", this, SLOT(editSelectAll()));
-    mOptionMenuActions.mEditUnselectAll = mOptionMenuActions.mEditMenu->addAction("Unselect all", this, SLOT(editUnselectAll()));
-}
-
-/**
-  Initial setup for View submenu
-  */
-void FileBrowserView::createViewMenu()
-{
-    mOptionMenuActions.mViewMenu = menu()->addMenu("View");
-    mOptionMenuActions.mViewMenu->menuAction()->setVisible(false);
-
-    mOptionMenuActions.mViewFilterEntries = mOptionMenuActions.mViewMenu->addAction("Filter entries", this, SLOT(viewFilterEntries()));
-    mOptionMenuActions.mViewRefresh = mOptionMenuActions.mViewMenu->addAction("Refresh", this, SLOT(viewRefresh()));
-}
-
-/**
-  Initial setup for Tools submenu
-  */
-void FileBrowserView::createToolsMenu()
-{
-    mOptionMenuActions.mToolsMenu = menu()->addMenu("Tools");
-
-    mOptionMenuActions.mToolsAllAppsToTextFile = mOptionMenuActions.mToolsMenu->addAction("All apps to a text file", this, SLOT(toolsAllAppsToTextFile()));
-    mOptionMenuActions.mToolsAllAppsToTextFile->setVisible(false);
-    mOptionMenuActions.mToolsAllFilesToTextFile = mOptionMenuActions.mToolsMenu->addAction("All files to a text file", this, SLOT(toolsAllFilesToTextFile()));
-    //mOptionMenuActions.mToolsAllFilesToTextFile->setVisible(false);
-
-    mOptionMenuActions.mToolsAvkonIconCacheMenu = mOptionMenuActions.mToolsMenu->addMenu("Avkon icon cache");
-    mOptionMenuActions.mToolsAvkonIconCacheMenu->menuAction()->setVisible(false);
-    mOptionMenuActions.mToolsAvkonIconCacheEnable = mOptionMenuActions.mToolsAvkonIconCacheMenu->addAction("Enable", this, SLOT(toolsAvkonIconCacheEnable()));
-    mOptionMenuActions.mToolsAvkonIconCacheDisable = mOptionMenuActions.mToolsAvkonIconCacheMenu->addAction("Clear and disable", this, SLOT(toolsAvkonIconCacheDisable()));
-
-    mOptionMenuActions.mToolsDisableExtendedErrors = mOptionMenuActions.mToolsMenu->addAction("Disable extended errors", this, SLOT(toolsDisableExtendedErrors()));
-    mOptionMenuActions.mToolsDumpMsgStoreWalk = mOptionMenuActions.mToolsMenu->addAction("Dump msg. store walk", this, SLOT(toolsDumpMsgStoreWalk()));
-    mOptionMenuActions.mToolsDumpMsgStoreWalk->setVisible(false);
-    mOptionMenuActions.mToolsEditDataTypes = mOptionMenuActions.mToolsMenu->addAction("Edit data types", this, SLOT(toolsEditDataTypes()));
-    mOptionMenuActions.mToolsEditDataTypes->setVisible(false);
-    mOptionMenuActions.mToolsEnableExtendedErrors = mOptionMenuActions.mToolsMenu->addAction("Enable extended errors", this, SLOT(toolsEnableExtendedErrors()));
-
-    mOptionMenuActions.mToolsErrorSimulateMenu = mOptionMenuActions.mToolsMenu->addMenu("Error simulate");
-    mOptionMenuActions.mToolsErrorSimulateLeave = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Leave", this, SLOT(toolsErrorSimulateLeave()));
-    mOptionMenuActions.mToolsErrorSimulatePanic = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Panic", this, SLOT(toolsErrorSimulatePanic()));
-    mOptionMenuActions.mToolsErrorSimulatePanic->setVisible(false);
-    mOptionMenuActions.mToolsErrorSimulateException = mOptionMenuActions.mToolsErrorSimulateMenu->addAction("Exception", this, SLOT(toolsErrorSimulateException()));
-
-//    mOptionMenuActions.mLocalConnectivityMenu = mOptionMenuActions.mToolsMenu->addMenu("Local connectivity");
-//    mOptionMenuActions.mToolsLocalConnectivityActivateInfrared = mOptionMenuActions.mLocalConnectivityMenu->addAction("Activate infrared", this, SLOT(toolsLocalConnectivityActivateInfrared()));
-//    mOptionMenuActions.mToolsLocalConnectivityLaunchBTUI = mOptionMenuActions.mLocalConnectivityMenu->addAction("Launch BT UI", this, SLOT(toolsLocalConnectivityLaunchBTUI()));
-//    mOptionMenuActions.mToolsLocalConnectivityLaunchUSBUI = mOptionMenuActions.mLocalConnectivityMenu->addAction("Launch USB UI", this, SLOT(toolsLocalConnectivityLaunchUSBUI()));
-
-    mOptionMenuActions.mToolsMessageAttachmentsMenu = mOptionMenuActions.mToolsMenu->addMenu("Message attachments");
-    mOptionMenuActions.mToolsMessageAttachmentsMenu->menuAction()->setVisible(false);
-    mOptionMenuActions.mToolsMessageInbox = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Inbox", this, SLOT(toolsMessageInbox()));
-    mOptionMenuActions.mToolsMessageDrafts = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Drafts", this, SLOT(toolsMessageDrafts()));
-    mOptionMenuActions.mToolsMessageSentItems = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Sent items", this, SLOT(toolsMessageSentItems()));
-    mOptionMenuActions.mToolsMessageOutbox = mOptionMenuActions.mToolsMessageAttachmentsMenu->addAction("Outbox", this, SLOT(toolsMessageOutbox()));
-
-    mOptionMenuActions.mToolsMemoryInfo = mOptionMenuActions.mToolsMenu->addAction("Memory info", this, SLOT(toolsMemoryInfo()));
-    mOptionMenuActions.mToolsMemoryInfo->setVisible(false);
-
-    mOptionMenuActions.mToolsSecureBackupMenu = mOptionMenuActions.mToolsMenu->addMenu("Secure backup");
-    mOptionMenuActions.mToolsSecureBackupMenu->menuAction()->setVisible(false);
-    mOptionMenuActions.mToolsSecureBackStart = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Start backup", this, SLOT(toolsSecureBackStart()));
-    mOptionMenuActions.mToolsSecureBackRestore = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Start restore", this, SLOT(toolsSecureBackRestore()));
-    mOptionMenuActions.mToolsSecureBackStop = mOptionMenuActions.mToolsSecureBackupMenu->addAction("Stop", this, SLOT(toolsSecureBackStop()));
-
-    mOptionMenuActions.mToolsSetDebugMask = mOptionMenuActions.mToolsMenu->addAction("Set debug mask", this, SLOT(toolsSetDebugMaskQuestion()));
-    mOptionMenuActions.mToolsShowOpenFilesHere = mOptionMenuActions.mToolsMenu->addAction("Show open files here", this, SLOT(toolsShowOpenFilesHere()));
-    mOptionMenuActions.mToolsShowOpenFilesHere->setVisible(false);
-}
-
-/**
-  Creates Selection mode menu item in option menu
-  */
-void FileBrowserView::createSelectionMenuItem()
-{
-    if (!mOptionMenuActions.mSelection) {
-        mOptionMenuActions.mSelection = menu()->addAction("Selection mode");
-        mOptionMenuActions.mSelection->setToolTip("Selection mode");
-        mOptionMenuActions.mSelection->setCheckable(true);
-        connect(mOptionMenuActions.mSelection, SIGNAL(triggered()), this, SLOT(selectionModeChanged()));
-    }
-}
-
-/**
-  Creates Setting menu item in option menu
-  */
-void FileBrowserView::createSettingsMenuItem()
-{
-    mOptionMenuActions.mSetting = menu()->addAction("Settings...");
-    connect(mOptionMenuActions.mSetting, SIGNAL(triggered()), this, SIGNAL(aboutToShowSettingsView()));
-}
-
-
-/**
-  Creates About menu item in option menu
-  */
-void FileBrowserView::createAboutMenuItem()
-{
-    // about note
-    mOptionMenuActions.mAbout = menu()->addAction("About");
-    connect(mOptionMenuActions.mAbout, SIGNAL(triggered()), this, SLOT(about()));
-}
-
-/**
-  Creates Exit menu item in option menu
-  */
-void FileBrowserView::createExitMenuItem()
-{
-    // application exit
-    mOptionMenuActions.mExit = menu()->addAction("Exit");
-    connect(mOptionMenuActions.mExit, SIGNAL(triggered()), qApp, SLOT(quit()));
-}
-
-/**
-  update menu: disk admin available only in device root view. edit available only in folder view
-  when file or folder content exist in current folder, or clipboard has copied item.
-  file and view menus updated every time regarding the folder content.
-  tools, settings, about, exit always available.
-  If there's remove and add operations at same time, always remove first
-  to keep to the correct menu items order.
-  */
-void FileBrowserView::updateOptionMenu()
-{
-    bool isFileItemListEmpty = mFileBrowserModel->rowCount() == 0;
-    bool isDriveListActive = mEngineWrapper->isDriveListViewActive();
-    bool isNormalModeActive = true;       //iModel->FileUtils()->IsNormalModeActive();
-    bool currentDriveReadOnly = mEngineWrapper->isCurrentDriveReadOnly();   //iModel->FileUtils()->IsCurrentDriveReadOnly();
-    bool currentItemDirectory = mEngineWrapper->getFileEntry(currentItemIndex()).isDir();
-    bool listBoxSelections = mListView->selectionModel()->selection().count() == 0;
-    bool isSelectionMode = mOptionMenuActions.mSelection && mOptionMenuActions.mSelection->isChecked();
-    bool emptyClipBoard = !mEngineWrapper->isClipBoardListInUse();
-    bool showSnapShot = false;           //iModel->FileUtils()->DriveSnapShotPossible();
-
-    bool showEditMenu(true);
-    if (isDriveListActive) {
-        if (!showSnapShot || isFileItemListEmpty && emptyClipBoard)
-            showEditMenu = false;
-        else
-            showEditMenu = true;
-    } else {
-        if (isFileItemListEmpty && emptyClipBoard)
-            showEditMenu = false;
-        else
-            showEditMenu = true;
-    }
-
-    mOptionMenuActions.mEditMenu->menuAction()->setVisible(showEditMenu);
-    // TODO mContextMenuActions.mDiskAdminMenu->menuAction()->setVisible(isDriveListActive);
-
-    mOptionMenuActions.mFileBackMoveUp->setVisible( !isDriveListActive);
-
-    //aMenuPane->SetItemDimmed(EFileBrowserCmdFileOpen, isFileItemListEmpty || isDriveListActive || currentItemDirectory);
-    mOptionMenuActions.mFileOpenDrive->setVisible( !(isFileItemListEmpty || !isDriveListActive));
-    mOptionMenuActions.mFileOpenDirectory->setVisible( !(isFileItemListEmpty || isDriveListActive || !currentItemDirectory));
-
-    //aMenuPane->SetItemDimmed(EFileBrowserCmdFileView, isFileItemListEmpty || listBoxSelections || currentItemDirectory || isDriveListActive);
-    //aMenuPane->SetItemDimmed(EFileBrowserCmd FileEdit, isFileItemListEmpty || listBoxSelections || currentItemDirectory || isDriveListActive);
-    //aMenuPane->SetItemDimmed(EFileBrowserCmdFileSendTo, isFileItemListEmpty || driveListActive || currentItemDirectory);
-
-    mOptionMenuActions.mFileNewMenu->menuAction()->setVisible(!(isDriveListActive || currentDriveReadOnly));
-    mOptionMenuActions.mFileDelete->setVisible(!isFileItemListEmpty && !isDriveListActive && !currentDriveReadOnly && isSelectionMode);
-    mOptionMenuActions.mFileRename->setVisible(!isFileItemListEmpty && !isDriveListActive && !currentDriveReadOnly && !listBoxSelections && isSelectionMode);
-    mOptionMenuActions.mFileTouch->setVisible(!(isFileItemListEmpty || isDriveListActive || currentDriveReadOnly));
-    mOptionMenuActions.mFileProperties->setVisible(!(isFileItemListEmpty || listBoxSelections));
-    // TODO mOptionMenuActions.mFileChecksumsMenu->setVisible(!(isFileItemListEmpty || listBoxSelections || currentItemDirectory || isDriveListActive));
-    // TODO mOptionMenuActions.mFileSetAttributes->setVisible(!(isFileItemListEmpty || isDriveListActive || currentDriveReadOnly));
-    // TODO mOptionMenuActions.mFileCompress->setVisible(!(currentDriveReadOnly || isFileItemListEmpty || listBoxSelections || currentItemDirectory || isDriveListActive));
-    // TODO mOptionMenuActions.mFileDecompress->setVisible(!(currentDriveReadOnly || isFileItemListEmpty || listBoxSelections || currentItemDirectory || isDriveListActive));
-
-//    bool currentSelected = true;    //iContainer->ListBox()->View()->ItemIsSelected(iContainer->ListBox()->View()->CurrentItemIndex());
-    bool allSelected = mListView->selectionModel()->selection().count() == mFileBrowserModel->rowCount();
-    bool noneSelected = mListView->selectionModel()->selection().count() != 0;
-
-    //mOptionMenuActions.mEditSnapShotToE->setVisible(isDriveListActive); // TODO
-    mOptionMenuActions.mEditCut->setVisible(!isDriveListActive && !currentDriveReadOnly && !isFileItemListEmpty && !isSelectionMode);
-    mOptionMenuActions.mEditCopy->setVisible(!isDriveListActive && !isFileItemListEmpty);
-    mOptionMenuActions.mEditPaste->setVisible(!(isDriveListActive || emptyClipBoard || currentDriveReadOnly));
-    mOptionMenuActions.mEditCopyToFolder->setVisible(!(isDriveListActive || isFileItemListEmpty));
-    mOptionMenuActions.mEditMoveToFolder->setVisible(!(isDriveListActive || currentDriveReadOnly || isFileItemListEmpty));
-
-    mOptionMenuActions.mEditSelect->setVisible(false/*!isDriveListActive && !currentSelected && !isFileItemListEmpty*/);
-    mOptionMenuActions.mEditUnselect->setVisible(false/*!isDriveListActive && currentSelected && !isFileItemListEmpty*/);
-    mOptionMenuActions.mEditSelectAll->setVisible(!isDriveListActive && !allSelected && !isFileItemListEmpty);
-    mOptionMenuActions.mEditUnselectAll->setVisible(!isDriveListActive && !noneSelected && !isFileItemListEmpty);
-
-    // TODO mOptionMenuActions.mViewSort->setVisible(!(!isNormalModeActive || isDriveListActive || isFileItemListEmpty));
-    // TODO mOptionMenuActions.mViewOrder->setVisible(!(!isNormalModeActive || isDriveListActive || isFileItemListEmpty));
-    mOptionMenuActions.mViewRefresh->setVisible(isNormalModeActive);
-    mOptionMenuActions.mViewFilterEntries->setVisible(!isFileItemListEmpty);
-
-    // TODO R_FILEBROWSER_VIEW_SORT_SUBMENU
-    // aMenuPane->SetItemButtonState(iModel->FileUtils()->SortMode(), EEikMenuItemSymbolOn);
-
-    // TODO R_FILEBROWSER_VIEW_ORDER_SUBMENU
-    // aMenuPane->SetItemButtonState(iModel->FileUtils()->OrderMode(), EEikMenuItemSymbolOn);
-
-    // aResourceId == R_FILEBROWSER_TOOLS_SUBMENU
-    bool noExtendedErrorsAllowed = mEngineWrapper->ErrRdFileExists();
-    mOptionMenuActions.mToolsDisableExtendedErrors->setVisible(noExtendedErrorsAllowed);
-    mOptionMenuActions.mToolsEnableExtendedErrors->setVisible(!noExtendedErrorsAllowed);
-
-//    bool infraRedAllowed = mEngineWrapper->FileExists(KIRAppPath);
-//    bool bluetoothAllowed = mEngineWrapper->FileExists(KBTAppPath);
-//    bool usbAllowed = mEngineWrapper->FileExists(KUSBAppPath);
-//
-//    bool noLocalCon = !infraRedAllowed && !bluetoothAllowed && !usbAllowed;
-//    mOptionMenuActions.mToolsLocalConnectivityMenu->menuAction()->setVisible(!noLocalCon);
-//
-//    mOptionMenuActions.mToolsLocalConnectivityActivateInfrared->setVisible(infraRedAllowed);
-//    mOptionMenuActions.mToolsLocalConnectivityLaunchBTUI->setVisible(bluetoothAllowed);
-//    mOptionMenuActions.mToolsLocalConnectivityLaunchUSBUI->setVisible(usbAllowed);
-}
-
-void FileBrowserView::createContextMenu()
-{
-    mContextMenu = new HbMenu();
-    connect(mContextMenu, SIGNAL(aboutToShow()), this, SLOT(updateContextMenu()));
-
-    createFileContextMenu();
-    createEditContextMenu();
-    createViewContextMenu();
-    createDiskAdminContextMenu();
-}
-
-
-void FileBrowserView::createFileContextMenu()
-{
-    mContextMenuActions.mFileMenu = mContextMenu->addMenu("File");
-
-    mContextMenuActions.mFileBackMoveUp = mContextMenuActions.mFileMenu->addAction("Back/Move up (<-)", this, SLOT(fileBackMoveUp()));
-    mContextMenuActions.mFileOpenDrive = mContextMenuActions.mFileMenu->addAction("Open drive (->)", this, SLOT(fileOpenDrive()));
-    mContextMenuActions.mFileOpenDirectory = mContextMenuActions.mFileMenu->addAction("Open directory (->)", this, SLOT(fileOpenDirectory()));
-//    mContextMenuActions.mFileSearch = mContextMenuActions.mFileMenu->addAction("Search...", this, SLOT(fileSearch()));
-    //mContextMenuActions.mFileSearch->setVisible(false);
-
-//    mContextMenuActions.mFileNewMenu = mContextMenuActions.mFileMenu->addMenu("New");
-//    mContextMenuActions.mFileNewFile = mContextMenuActions.mFileNewMenu->addAction("File", this, SLOT(fileNewFile()));
-//    mContextMenuActions.mFileNewDirectory = mContextMenuActions.mFileNewMenu->addAction("Directory", this, SLOT(fileNewDirectory()));
-
-    mContextMenuActions.mFileDelete = mContextMenuActions.mFileMenu->addAction("Delete", this, SLOT(fileDelete()));
-    mContextMenuActions.mFileRename = mContextMenuActions.mFileMenu->addAction("Rename", this, SLOT(fileRename()));
-    mContextMenuActions.mFileTouch = mContextMenuActions.mFileMenu->addAction("Touch", this, SLOT(fileTouch()));
-    mContextMenuActions.mFileProperties = mContextMenuActions.mFileMenu->addAction("Properties", this, SLOT(fileProperties()));
-
-    mContextMenuActions.mFileChecksumsMenu = mContextMenuActions.mFileMenu->addMenu("Checksums");
-    mContextMenuActions.mFileChecksumsMD5 = mContextMenuActions.mFileChecksumsMenu->addAction("MD5", this, SLOT(fileChecksumsMD5()));
-    mContextMenuActions.mFileChecksumsMD2 = mContextMenuActions.mFileChecksumsMenu->addAction("MD2", this, SLOT(fileChecksumsMD2()));
-    mContextMenuActions.mFileChecksumsSHA1 = mContextMenuActions.mFileChecksumsMenu->addAction("SHA-1", this, SLOT(fileChecksumsSHA1()));
-
-//    mContextMenuActions.mFileSetAttributes = mContextMenuActions.mFileMenu->addAction("Set attributes...", this, SLOT(fileSetAttributes()));
-//    mContextMenuActions.mFileSetAttributes->setVisible(false);
-}
-
-void FileBrowserView::createEditContextMenu()
-{
-    mContextMenuActions.mEditMenu = mContextMenu->addMenu("Edit");
-
-    //mContextMenuActions.mEditSnapShotToE = mContextMenuActions.mEditMenu->addAction("Snap shot to E:", this, SLOT(editSnapShotToE()));
-//    mContextMenuActions.mEditSnapShotToE->setVisible(false);
-    mContextMenuActions.mEditCut = mContextMenuActions.mEditMenu->addAction("Cut", this, SLOT(editCut()));
-    mContextMenuActions.mEditCopy = mContextMenuActions.mEditMenu->addAction("Copy", this, SLOT(editCopy()));
-    mContextMenuActions.mEditPaste = mContextMenuActions.mEditMenu->addAction("Paste", this, SLOT(editPaste()));
-
-    mContextMenuActions.mEditCopyToFolder = mContextMenuActions.mEditMenu->addAction("Copy to folder...", this, SLOT(editCopyToFolder()));
-    mContextMenuActions.mEditMoveToFolder = mContextMenuActions.mEditMenu->addAction("Move to folder...", this, SLOT(editMoveToFolder()));
-}
-
-void FileBrowserView::createViewContextMenu()
-{
-
-}
-
-/**
-  Initial setup for Disk Admin submenu
-  */
-void FileBrowserView::createDiskAdminContextMenu()
-{
-    mContextMenuActions.mDiskAdminMenu = mContextMenu->addMenu("Disk admin");
-    //mContextMenuActions.mDiskAdminMenu->menuAction()->setVisible(false);
-
-    mContextMenuActions.mDiskAdminSetDrivePassword = mContextMenuActions.mDiskAdminMenu->addAction("Set drive password", this, SLOT(diskAdminSetDrivePassword()));
-    mContextMenuActions.mDiskAdminUnlockDrive = mContextMenuActions.mDiskAdminMenu->addAction("Unlock drive", this, SLOT(diskAdminUnlockDrive()));
-    mContextMenuActions.mDiskAdminClearDrivePassword = mContextMenuActions.mDiskAdminMenu->addAction("Clear drive password", this, SLOT(diskAdminClearDrivePassword()));
-    mContextMenuActions.mDiskAdminEraseDrivePassword = mContextMenuActions.mDiskAdminMenu->addAction("Erase drive password", this, SLOT(diskAdminEraseDrivePassword()));
-
-    mContextMenuActions.mDiskAdminFormatDrive = mContextMenuActions.mDiskAdminMenu->addAction("Format drive", this, SLOT(diskAdminFormatDrive()));
-    mContextMenuActions.mDiskAdminFormatDrive->setVisible(false);
-    mContextMenuActions.mDiskAdminQuickFormatDrive = mContextMenuActions.mDiskAdminMenu->addAction("Quick format drive", this, SLOT(diskAdminQuickFormatDrive()));
-    mContextMenuActions.mDiskAdminQuickFormatDrive->setVisible(false);
-
-    mContextMenuActions.mDiskAdminCheckDisk = mContextMenuActions.mDiskAdminMenu->addAction("Check disk", this, SLOT(diskAdminCheckDisk()));
-    mContextMenuActions.mDiskAdminScanDrive = mContextMenuActions.mDiskAdminMenu->addAction("Scan drive", this, SLOT(diskAdminScanDrive()));
-    mContextMenuActions.mDiskAdminSetDriveName = mContextMenuActions.mDiskAdminMenu->addAction("Set drive name", this, SLOT(diskAdminSetDriveName()));
-    mContextMenuActions.mDiskAdminSetDriveVolumeLabel = mContextMenuActions.mDiskAdminMenu->addAction("Set drive volume label", this, SLOT(diskAdminSetDriveVolumeLabel()));
-    mContextMenuActions.mDiskAdminEjectDrive = mContextMenuActions.mDiskAdminMenu->addAction("Eject drive", this, SLOT(diskAdminEjectDrive()));
-    mContextMenuActions.mDiskAdminDismountDrive = mContextMenuActions.mDiskAdminMenu->addAction("Dismount drive", this, SLOT(diskAdminDismountDrive()));
-    mContextMenuActions.mDiskAdminEraseMBR = mContextMenuActions.mDiskAdminMenu->addAction("Erase MBR", this, SLOT(diskAdminEraseMBR()));
-    mContextMenuActions.mDiskAdminPartitionDrive = mContextMenuActions.mDiskAdminMenu->addAction("Partition drive", this, SLOT(diskAdminPartitionDrive()));
-}
-
-void FileBrowserView::updateContextMenu()
-{
-    bool isFileItemListEmpty = mFileBrowserModel->rowCount() == 0;
-    bool isDriveListActive = mEngineWrapper->isDriveListViewActive();
-//    bool isNormalModeActive = true;       //iModel->FileUtils()->IsNormalModeActive();
-    bool currentDriveReadOnly = mEngineWrapper->isCurrentDriveReadOnly();
-    bool currentItemDirectory = mEngineWrapper->getFileEntry(mCurrentIndex /*currentItemIndex()*/).isDir();
-    bool listBoxSelections = mListView->selectionModel()->selection().count() == 0;
-    bool isSelectionMode = mOptionMenuActions.mSelection && mOptionMenuActions.mSelection->isChecked();
-    bool emptyClipBoard = !mEngineWrapper->isClipBoardListInUse();
-//    bool showSnapShot = false;           //iModel->FileUtils()->DriveSnapShotPossible();
-
-//    bool showEditMenu(true);
-//    if (isDriveListActive) {
-//        if (!showSnapShot || isFileItemListEmpty && emptyClipBoard)
-//            showEditMenu = false;
-//        else
-//            showEditMenu = true;
-//    } else {
-//        if (isFileItemListEmpty && emptyClipBoard)
-//            showEditMenu = false;
-//        else
-//            showEditMenu = true;
-//    }
-
-    // File submenu
-    mContextMenuActions.mFileBackMoveUp->setVisible( !isDriveListActive);
-    mContextMenuActions.mFileOpenDrive->setVisible( !isFileItemListEmpty && isDriveListActive);
-    mContextMenuActions.mFileOpenDirectory->setVisible( !isFileItemListEmpty && !isDriveListActive && currentItemDirectory);
-
-//    mContextMenuActions.mFileNewMenu->menuAction()->setVisible(!(isDriveListActive || currentDriveReadOnly));
-    mContextMenuActions.mFileDelete->setVisible(!isFileItemListEmpty && !isDriveListActive && !currentDriveReadOnly);
-    mContextMenuActions.mFileRename->setVisible(!isFileItemListEmpty && !isDriveListActive && !currentDriveReadOnly && !listBoxSelections);
-    mContextMenuActions.mFileTouch->setVisible(!isFileItemListEmpty && !isDriveListActive && !currentDriveReadOnly);
-    mContextMenuActions.mFileProperties->setVisible(!isFileItemListEmpty && !listBoxSelections && !isSelectionMode);
-
-    mContextMenuActions.mFileChecksumsMenu->menuAction()->setVisible(!(isFileItemListEmpty || isSelectionMode /*|| listBoxSelections*/ || currentItemDirectory || isDriveListActive));
-    // Edit submenu
-    mContextMenuActions.mEditMenu->menuAction()->setVisible(!isDriveListActive);
-    mContextMenuActions.mEditCut->setVisible(!(isDriveListActive || currentDriveReadOnly || isFileItemListEmpty));
-    mContextMenuActions.mEditCopy->setVisible(!(isDriveListActive || isFileItemListEmpty));
-    mContextMenuActions.mEditPaste->setVisible(!isDriveListActive && !emptyClipBoard && !currentDriveReadOnly);
-    mContextMenuActions.mEditCopyToFolder->setVisible(!(isDriveListActive || isFileItemListEmpty));
-    mContextMenuActions.mEditMoveToFolder->setVisible(!(isDriveListActive || currentDriveReadOnly || isFileItemListEmpty));
-    //DiskAdmin submenu
-    mContextMenuActions.mDiskAdminMenu->menuAction()->setVisible(isDriveListActive);
-}
-
-// ---------------------------------------------------------------------------
-
-void FileBrowserView::onLongPressed(HbAbstractViewItem *listViewItem, QPointF coords)
-{
-    //Q_UNUSED(listViewItem);
-
-//    QItemSelectionModel *selectionIndexes = mListView->selectionModel();
-
-    // by default use selected items
-//    if (selectionIndexes && selectionIndexes->hasSelection()) {
-//        mSelectionIndexes = mListView->selectionModel()->selectedIndexes();
-//    } else {
-        mCurrentIndex = listViewItem->modelIndex();
-//        mSelectionIndexes.clear();
-//        mSelectionIndexes.append(mModelIndex);
-//    }
-    mContextMenu->setPreferredPos(coords);
-    mContextMenu->show();
-}
-
-
-/**
-  Create a file browser tool bar
-  */
-void FileBrowserView::createToolBar()
-{
-    mToolBar = new HbToolBar(this);
-
-    mToolbarBackAction = new HbAction(/*"Back"*/);
-    mToolbarBackAction->setToolTip("Back");
-    mToolbarBackAction->setIcon(HbIcon(QString(":/qgn_indi_tb_filebrowser_folder_parent.svg")));
-    connect(mToolbarBackAction, SIGNAL(triggered()), this, SLOT(fileBackMoveUp()));
-    mToolBar->addAction(mToolbarBackAction);
-
-    if (mOptionMenuActions.mSelection) {
-        mToolBar->addAction(mOptionMenuActions.mSelection);
-    }
-
-    setToolBar(mToolBar);
-}
-
-/**
-  Refresh FileBrowser view
-  */
-void FileBrowserView::refreshList()
-{
-    mEngineWrapper->refreshView();
-//    mNaviPane->setPlainText(QString(mEngineWrapper->currentPath()));
-    mListView->reset();
-    mListView->setModel(mFileBrowserModel);
-    mToolbarBackAction->setEnabled(!mEngineWrapper->isDriveListViewActive());
-
-    TListingMode listingMode = mEngineWrapper->listingMode();
-    if (listingMode == ENormalEntries)
-        mNaviPane->setPlainText(QString(mEngineWrapper->currentPath()));
-    else if (listingMode == ESearchResults)
-        mNaviPane->setPlainText(QString(tr("Search results")));
-    else if (listingMode == EOpenFiles)
-        mNaviPane->setPlainText(QString(tr("Open files")));
-    else if (listingMode == EMsgAttachmentsInbox)
-        mNaviPane->setPlainText(QString(tr("Attachments in Inbox")));
-    else if (listingMode == EMsgAttachmentsDrafts)
-        mNaviPane->setPlainText(QString(tr("Attachments in Drafts")));
-    else if (listingMode == EMsgAttachmentsSentItems)
-        mNaviPane->setPlainText(QString(tr("Attachments in Sent Items")));
-    else if (listingMode == EMsgAttachmentsOutbox)
-        mNaviPane->setPlainText(QString(tr("Attachments in Outbox")));
-}
-
-/**
-  Populate changed folder content, i.e. in practice navigation list items
-  */
-void FileBrowserView::populateFolderContent()
-{
-    // update the file browser by setting up the model with current directory as root path
-    if(mListView->model() == 0)  {
-        mFileBrowserModel = new FileBrowserModel(mEngineWrapper);
-        mListView->setModel(mFileBrowserModel);
-    }
-
-    refreshList();
-    //mFileSystemModel->setFilter(mFileSystemModel->filter() | QDir::System | QDir::Hidden);
-    //mFileSystemModel->setRootPath(directory);
-    //mListView->setRootIndex(mFileSystemModel->index(directory));
-}
-
-// ---------------------------------------------------------------------------	
-
-void FileBrowserView::fileOpen(HbAction *action)
-{
-//    Q_UNUSED(action);
-    HbSelectionDialog *dlg = static_cast<HbSelectionDialog*>(sender());
-    if(!action && dlg && dlg->selectedItems().count()){
-        int selectionIndex = dlg->selectedItems().at(0).toInt();
-
-        if (selectionIndex == 0) {
-            // open editor view
-            emit aboutToShowEditorView(mAbsoluteFilePath, true);
-        } else if (selectionIndex == 1) {
-            // AppArc
-            mEngineWrapper->openAppArc(mAbsoluteFilePath);
-        } else {
-            // DocHandler
-            mEngineWrapper->openDocHandler(mAbsoluteFilePath, true);
-        }
-    }
-}
-
-/**
-  Open overwrite dialog
-  */
-void FileBrowserView::fileOverwriteDialog()
-{
-    mOverwriteOptions = OverwriteOptions();
-    // open user-dialog to select: view as text/hex,  open w/AppArc or open w/DocH. embed
-    QStringList list;
-    list << QString("Overwrite all")
-            << QString("Skip all existing")
-            << QString("Gen. unique filenames")
-            << QString("Query postfix");
-    openListDialog(list, QString("Overwrite?"), this, SLOT(fileOverwrite(HbAction *)));
-}
-
-/**
-  File overwrite
-  */
-void FileBrowserView::fileOverwrite(HbAction *action)
-{
-//    Q_UNUSED(action);
-    HbSelectionDialog *dlg = static_cast<HbSelectionDialog*>(sender());
-    if(!action && dlg && dlg->selectedItems().count()) {
-        mOverwriteOptions.queryIndex = dlg->selectedItems().at(0).toInt();
-        if (mOverwriteOptions.queryIndex == EFileActionQueryPostFix) {
-            QString heading = QString("Postfix");
-            HbInputDialog::getText(heading, this, SLOT(fileOverwritePostfix(HbAction *)), QString(), scene());
-        } else if (mOverwriteOptions.queryIndex == EFileActionSkipAllExisting) {
-            mOverwriteOptions.overWriteFlags = 0;
-        }
-    } else {
-        mOverwriteOptions.doFileOperations = false;
-    }
-}
-
-/**
-  File overwrite postfix query dialog
-  */
-void FileBrowserView::fileOverwritePostfix(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        mOverwriteOptions.postFix = dlg->value().toString();
-    } else {
-        mOverwriteOptions.doFileOperations = false;
-    }
-}
-
-// ---------------------------------------------------------------------------
-/**
-  Show a list dialog
-  \param List aList of item to select item from.
-  \param Title text titleText of a dialog heading widget
-  \return None
-  */
-void FileBrowserView::openListDialog(const QStringList& items, const QString &titleText, QObject* receiver, const char* member)
-{
-//    Q_UNUSED(items);
-//    Q_UNUSED(titleText);
-//    Q_UNUSED(receiver);
-//    Q_UNUSED(member);
-    // Create a list and some simple content for it
-    HbSelectionDialog *dlg = new HbSelectionDialog();
-    dlg->setAttribute(Qt::WA_DeleteOnClose);
-    // Set items to be popup's content
-    dlg->setStringItems(items);
-    dlg->setSelectionMode(HbAbstractItemView::SingleSelection);
-    //dlg->setDismissPolicy(HbPopup::TapOutside);
-
-    HbLabel *title = new HbLabel(dlg);
-    title->setPlainText(titleText);
-    dlg->setHeadingWidget(title);
-
-    // Launch popup and handle the user response:
-    dlg->open(receiver, member);
-}
-
-// ---------------------------------------------------------------------------
-
-void FileBrowserView::openPropertyDialog(const QStringList& propertyList, const QString& title)
-{
-    HbDialog *dialog = new HbDialog();
-    dialog->setDismissPolicy(HbPopup::TapOutside);
-    dialog->setTimeout(HbPopup::NoTimeout);
-
-    HbLabel *titleWidget = new HbLabel();
-    titleWidget->setPlainText(title);
-    dialog->setHeadingWidget(titleWidget);
-
-    // Create a list and some simple content for it
-    HbListWidget *list = new HbListWidget();
-    QString str;
-    foreach (str, propertyList) {
-        list->addItem(str);
-    }
-
-    // Connect list item activation signal to close the popup
-    connect(list, SIGNAL(activated(HbListWidgetItem*)), dialog, SLOT(close()));
-
-    HbAction *cancelAction = new HbAction("Close");
-    dialog->setPrimaryAction(cancelAction);
-
-    // Set listwidget to be popup's content
-    dialog->setContentWidget(list);
-    // Launch popup and handle the user response:
-    dialog->open();
-}
-
-void FileBrowserView::storeSelectedItemsOrCurrentItem()
-{
-    QItemSelectionModel *selectionIndexes = mListView->selectionModel();
-
-    // by default use selected items
-    if (selectionIndexes) {
-        if (selectionIndexes->hasSelection()) {
-            mSelectionIndexes = mListView->selectionModel()->selectedIndexes();
-        } else { // or if none selected, use the current item index
-            mSelectionIndexes.clear();
-            mSelectionIndexes.append(mCurrentIndex);
-//            QModelIndex currentIndex = currentItemIndex();
-//            if (mFileBrowserModel->rowCount(currentItemIndex) > currentItemIndex && currentItemIndex >= 0)
-//            {
-//                modelIndexList.append(currentIndex);
-//            }
-        }
-    }
-//    mClipBoardInUse = true;
-}
-
-// ---------------------------------------------------------------------------
-
-QModelIndex FileBrowserView::currentItemIndex()
-{
-    return mCurrentIndex;//mListView->selectionModel()->currentIndex();
-}
-
-// ---------------------------------------------------------------------------
-// operations in File Menu
-// ---------------------------------------------------------------------------
-
-/**
-  Move back/up in folder browsing history
-  */
-void FileBrowserView::fileBackMoveUp()
-{
-    mLocationChanged = true;
-//    if(mDirectory.length() < DRIVEPATHLENGTH) {
-//        // location in the root of any drive -> move back/up to root of device
-//        QModelIndex index = currentItemIndex();
-//        const QString filePath = mFileSystemModel->filePath(index);
-//        qDebug() << "handleBackButton filePath" << filePath;
-//        mDirectory = mInitDirPath.path();
-//        populateFolderContent(mDirectory);
-//    }
-//    else if(mDirectory != mInitDirPath.path()) {
-//        // location in any folder in any drive -> move back/up
-//        QDir dir(mDirectory);
-//        dir.cdUp();
-//        const QString currentPath = dir.absolutePath();
-//        mDirectory = currentPath;
-//        populateFolderContent(currentPath);
-//        mSelectedFilePath = "";
-//    } else {
-//        // location already in the device root, no way up.
-//        // do nothing.
-//    }
-    mEngineWrapper->moveUpOneLevel();
-    populateFolderContent();
-}
-
-void FileBrowserView::fileOpenDrive()
-{
-    // TODO make a separate function to be called from here and fileOpenDirectory()
-    mLocationChanged = true;
-    // get selected drive or directory from list view model and open it:
-    //if (mListView->selectionModel()->hasSelection()) {
-//    if (mListView->selectionModel()->selection().count() != 0) {
-//        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->moveDownToDirectory(mCurrentIndex);
-        populateFolderContent();
-//    } else {
-//        Notifications::showErrorNote("not selected item!");
-//    }
-}
-
-void FileBrowserView::fileOpenDirectory()
-{
-    mLocationChanged = true;
-    // get selected drive or directory from list view model and open it:
-    //if (mListView->selectionModel()->hasSelection()) {
-//    if (mListView->selectionModel()->selection().count() != 0) {
-//        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->moveDownToDirectory(mCurrentIndex);
-        populateFolderContent();
-//    } else {
-//        Notifications::showErrorNote("not selected item!");
-//    }
-}
-
-void FileBrowserView::fileSearch()
-{
-    QString searchPath;
-//    if (mEngineWrapper->currentPath() != mInitDirPath.path()) {
-//        searchPath = mDirectory;
-//        searchPath.replace("/", "\\");
-//        searchPath+="\\";
-//    }
-    searchPath = mEngineWrapper->currentPath();
-//    mSearch->open(searchPath);
-    emit aboutToShowSearchView(searchPath);
-}
-
-/**
-  Open new file dialog
-  */
-void FileBrowserView::fileNewFile()
-{
-    QString heading = QString("Enter filename");
-    HbInputDialog::getText(heading, this, SLOT(doFileNewFile(HbAction*)), QString(), scene());
-}
-
-/**
-  Create a new file in current directory with a name queried from user
-  */
-void FileBrowserView::doFileNewFile(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        QString newFileName = dlg->value().toString();
-        mEngineWrapper->createNewFile(newFileName);
-        refreshList();
-    }
-}
-
-/**
-  Open new directory dialog
-  */
-void FileBrowserView::fileNewDirectory()
-{
-    QString heading = QString("Enter directory name");
-    HbInputDialog::getText(heading, this, SLOT(doFileNewDirectory(HbAction*)), QString(), scene());
-}
-
-/**
-  Create a new directory in current directory with a name queried from user
-  */
-void FileBrowserView::doFileNewDirectory(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        QString newDirectoryName = dlg->value().toString();
-        mEngineWrapper->createNewDirectory(newDirectoryName);
-        refreshList();
-    }
-}
-
-/**
-  Question for Delete actually selected files
-  */
-void FileBrowserView::fileDelete()
-{
-    storeSelectedItemsOrCurrentItem();
-    const QString messageFormat = "Delete %1 entries?";
-    QString message = messageFormat.arg(mSelectionIndexes.count());
-    HbMessageBox::question(message, this, SLOT(doFileDelete(HbAction*)));
-}
-
-/**
-  Delete actually selected files
-  */
-void FileBrowserView::doFileDelete(HbAction* action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        //storeSelectedItemsOrCurrentItem();
-        mEngineWrapper->deleteItems(mSelectionIndexes);
-        refreshList();
-    }
-}
-
-/**
-  Open rename dialog for actually selected files
-  */
-void FileBrowserView::fileRename()
-{
-    storeSelectedItemsOrCurrentItem();
-    mEngineWrapper->setCurrentSelection(mSelectionIndexes);
-
-    for (int i(0), ie(mSelectionIndexes.count()); i < ie; ++i ) {
-        mProceed = (i == ie-1); // if the last item
-        mModelIndex = mSelectionIndexes.at(i);
-        FileEntry entry = mEngineWrapper->getFileEntry(mModelIndex);
-
-        QString heading = QString("Enter new name");
-        HbInputDialog::getText(heading, this, SLOT(doFileRename(HbAction*)), entry.name(), scene());
-    }
-}
-
-/**
-  Rename actually selected files
-  */
-void FileBrowserView::doFileRename(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        mNewFileName = dlg->value().toString();
-
-        if (mEngineWrapper->targetExists(mModelIndex, mNewFileName)) {
-            const QString messageTemplate = QString("%1 already exists, overwrite?");
-            QString message = messageTemplate.arg(mNewFileName);
-            HbMessageBox::question(message, this, SLOT(doFileRenameFileExist(HbAction *)));
-        } else {
-            mEngineWrapper->rename(mModelIndex, mNewFileName);
-            if (mProceed) {
-                mEngineWrapper->startExecutingCommands(QString("Renaming"));
-                refreshList();
-            }
-        }
-    }
-}
-
-/**
-  Rename actually selected files
-  */
-void FileBrowserView::doFileRenameFileExist(HbAction *action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        mEngineWrapper->rename(mModelIndex, mNewFileName);
-        if (mProceed) {
-            mEngineWrapper->startExecutingCommands(QString("Renaming"));
-            refreshList();
-        }
-    }
-}
-
-/**
-  Touch actually selected files
-  */
-void FileBrowserView::fileTouch()
-{
-    storeSelectedItemsOrCurrentItem();
-    mEngineWrapper->setCurrentSelection(mSelectionIndexes);
-
-    if (mEngineWrapper->selectionHasDirs()) {
-        const QString message = "Recurse touch for all selected dirs?";
-        HbMessageBox::question(message, this, SLOT(doFileTouch(HbAction*)));
-    }
-    else{
-        mEngineWrapper->touch(false);
-        refreshList();
-    }
-}
-
-/**
-  Touch actually selected files
-  */
-void FileBrowserView::doFileTouch(HbAction* action)
-{
-    bool recurse = false;
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        recurse = true;
-        }
-    mEngineWrapper->touch(recurse);
-    refreshList();
-}
-
-void FileBrowserView::fileChecksumsMD5()
-{
-    fileChecksums(EFileChecksumsMD5);
-}
-
-void FileBrowserView::fileChecksumsMD2()
-{
-    fileChecksums(EFileChecksumsMD2);
-}
-
-void FileBrowserView::fileChecksumsSHA1()
-{
-    fileChecksums(EFileChecksumsSHA1);
-}
-
-void FileBrowserView::fileChecksums(TFileBrowserCmdFileChecksums checksumType)
-{
-//    QModelIndex currentIndex = currentItemIndex();
-    mEngineWrapper->showFileCheckSums(mCurrentIndex, checksumType);
-}
-
-/**
-  Show file properties
-  */
-void FileBrowserView::fileProperties()
-{
-    QModelIndex currentIndex = currentItemIndex();
-    QStringList propertyList;
-    QString titleText;
-    mEngineWrapper->properties(currentIndex, propertyList, titleText);
-    openPropertyDialog(propertyList, titleText);
-}
-
-void FileBrowserView::fileSetAttributes()
-{
-
-}
-
-// edit menu
-void FileBrowserView::editSnapShotToE()
-{
-
-}
-
-/**
-  Set selected files into clipboard.
-  Selected item will be removed after paste operation.
-  */
-void FileBrowserView::editCut()
-{
-    storeSelectedItemsOrCurrentItem();
-    mClipboardIndexes = mSelectionIndexes;
-
-    mEngineWrapper->clipboardCut(mClipboardIndexes);
-
-    int operations = mClipboardIndexes.count();
-    const QString message = QString ("%1 entries cut to clipboard");
-    QString noteMsg = message.arg(operations);
-
-    Notifications::showInformationNote(noteMsg);
-}
-
-/**
-  Set selected files into clipboard.
-  Selected item will not be removed after paste operation.
-  */
-void FileBrowserView::editCopy()
-{
-    storeSelectedItemsOrCurrentItem();
-    mClipboardIndexes = mSelectionIndexes;
-
-    mEngineWrapper->clipboardCopy(mClipboardIndexes);
-
-    int operations = mClipboardIndexes.count();
-
-    const QString message = QString ("%1 entries copied to clipboard");
-    QString noteMsg = message.arg(operations);
-
-    Notifications::showInformationNote(noteMsg);
-}
-
-/**
-  Moves or copies file selection stored in clipboard to a actual directory.
-  Removing files depend on previous operation, i.e. Cut or Copy
-  */
-void FileBrowserView::editPaste()
-{
-    bool someEntryExists(false);
-
-    // TODO Set entry items here
-
-    someEntryExists = mEngineWrapper->isDestinationEntriesExists(mClipboardIndexes, mEngineWrapper->currentPath());
-    if (someEntryExists) {
-        fileOverwriteDialog();
-    }
-    mEngineWrapper->clipboardPaste(mOverwriteOptions);
-}
-
-/**
-  Open copy to folder new filename dialog
-  */
-void FileBrowserView::editCopyToFolder()
-{
-    QString heading = QString("Enter new name");
-    HbInputDialog::getText(heading, this, SLOT(doEditCopyToFolder(HbAction*)), mEngineWrapper->currentPath(), scene());
-}
-
-/**
-  Copies current file selection to a queried directory.
-  */
-void FileBrowserView::doEditCopyToFolder(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        QString targetDir = dlg->value().toString();
-        bool someEntryExists(false);
-
-        // TODO Set entry items here
-        storeSelectedItemsOrCurrentItem();
-        mEngineWrapper->setCurrentSelection(mSelectionIndexes);
-
-        someEntryExists = mEngineWrapper->isDestinationEntriesExists(mSelectionIndexes, targetDir);
-        if (someEntryExists) {
-            fileOverwriteDialog();
-        }
-        mEngineWrapper->copyToFolder(targetDir, mOverwriteOptions, false);
-        refreshList();
-    }
-}
-
-/**
-  Open move to folder new filename dialog.
-  */
-void FileBrowserView::editMoveToFolder()
-{
-    QString heading = QString("Enter new name");
-    HbInputDialog::getText(heading, this, SLOT(doEditCopyToFolder(HbAction*)), mEngineWrapper->currentPath(), scene());
-}
-
-/**
-  Moves current file selection to a queried directory.
-  */
-void FileBrowserView::doEditMoveToFolder(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        QString targetDir = dlg->value().toString();
-        bool someEntryExists(false);
-
-        // TODO Set entry items here
-        storeSelectedItemsOrCurrentItem();
-        mEngineWrapper->setCurrentSelection(mSelectionIndexes);
-
-        someEntryExists = mEngineWrapper->isDestinationEntriesExists(mSelectionIndexes, targetDir);
-        if (someEntryExists) {
-            fileOverwriteDialog();
-        }
-        mEngineWrapper->copyToFolder(targetDir, mOverwriteOptions, true);
-        refreshList();
-    }
-}
-
-/**
-  Select current file
-  */
-void FileBrowserView::editSelect()
-{
-    QItemSelectionModel *selectionModel = mListView->selectionModel();
-    if (selectionModel) {
-        selectionModel->select(selectionModel->currentIndex(), QItemSelectionModel::SelectCurrent);
-        selectionModel->select(selectionModel->currentIndex(), QItemSelectionModel::Select);
-        itemHighlighted(selectionModel->currentIndex());
-        refreshList();
-    }
-}
-
-/**
-  Unselect current file
-  */
-void FileBrowserView::editUnselect()
-{
-    QItemSelectionModel *selectionModel = mListView->selectionModel();
-    if (selectionModel) {
-        selectionModel->select(selectionModel->currentIndex(), QItemSelectionModel::Deselect);
-        itemHighlighted(selectionModel->currentIndex());
-    }
-}
-
-/**
-  Select all files
-  */
-void FileBrowserView::editSelectAll()
-{
-    QItemSelectionModel *selectionModel = mListView->selectionModel();
-    if (selectionModel) {
-
-        if (mFileBrowserModel->rowCount() > 0) {
-            QModelIndex firstIndex = mFileBrowserModel->index(0, 0);
-            QModelIndex lastIndex = mFileBrowserModel->index( (mFileBrowserModel->rowCount() - 1), 0);
-
-            QItemSelection itemSelection(firstIndex, lastIndex);
-            //selectionModel->select(itemSelection, QItemSelectionModel::SelectCurrent);
-            selectionModel->select(itemSelection, QItemSelectionModel::Select);
-        }
-    }
-}
-
-/**
-  Unselect all files
-  */
-void FileBrowserView::editUnselectAll()
-{
-    QItemSelectionModel *selectionModel = mListView->selectionModel();
-    if (selectionModel) {
-        selectionModel->clearSelection();
-    }
-}
-
-// ---------------------------------------------------------------------------
-// view menu
-// ---------------------------------------------------------------------------
-void FileBrowserView::viewFilterEntries()
-{
-
-}
-void FileBrowserView::viewRefresh()
-{
-    refreshList();
-}
-
-// ---------------------------------------------------------------------------
-// disk admin menu
-// ---------------------------------------------------------------------------
-
-/**
-  Open old password for the selected drive dialog.
-  */
-void FileBrowserView::diskAdminSetDrivePassword()
-{
-    QModelIndex currentIndex = currentItemIndex();
-    // check if the drive has a password
-    if (mEngineWrapper->hasDrivePassword(currentIndex)) {
-        QString heading = QString("Existing password");
-        HbInputDialog::getText(heading, this, SLOT(diskAdminSetDrivePasswordNew(HbAction*)), QString(), scene());
-    }
-}
-
-/**
-   Open new password for the selected drive dialog.
-  */
-void FileBrowserView::diskAdminSetDrivePasswordNew(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        mOldPassword = dlg->value().toString();
-    }
-
-    QString heading = QString("New password");
-    HbInputDialog::getText(heading, this, SLOT(doDiskAdminSetDrivePassword(HbAction*)), mOldPassword, scene());
-}
-
-/**
-   Set password for the selected drive.
-  */
-void FileBrowserView::doDiskAdminSetDrivePassword(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        QString newPassword = dlg->value().toString();
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminSetDrivePassword(currentIndex, mOldPassword, newPassword);
-        refreshList();
-    }
-}
-
-/**
-  Open Unlock the selected drive dialog.
-  */
-void FileBrowserView::diskAdminUnlockDrive()
-{
-    QModelIndex currentIndex = currentItemIndex();
-    // check if the drive is locked
-    if (mEngineWrapper->isDriveLocked(currentIndex)) {
-        QString heading = QString("Existing password");
-        HbInputDialog::getText(heading, this, SLOT(doDiskAdminUnlockDrive(HbAction*)), QString(), scene());
-    } else {
-        Notifications::showInformationNote(QString("This drive is not locked"));
-    }
-}
-
-/**
-  Unlock the selected drive.
-  */
-void FileBrowserView::doDiskAdminUnlockDrive(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        QString oldPassword = dlg->value().toString();
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminUnlockDrive(currentIndex, oldPassword);
-        refreshList();
-    }
-}
-
-/**
-  Open clear password of the selected drive dialog.
-  */
-void FileBrowserView::diskAdminClearDrivePassword()
-{
-    QModelIndex currentIndex = currentItemIndex();
-    // check if the drive has a password
-    if (mEngineWrapper->hasDrivePassword(currentIndex)) {
-        QString heading = QString("Existing password");
-        HbInputDialog::getText(heading, this, SLOT(doDiskAdminClearDrivePassword(HbAction*)), QString(), scene());
-    } else {
-        Notifications::showInformationNote(QString("This drive has no password"));
-    }
-}
-
-/**
-  Clear password of the selected drive.
-  */
-void FileBrowserView::doDiskAdminClearDrivePassword(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        QString oldPassword = dlg->value().toString();
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminClearDrivePassword(currentIndex, oldPassword);
-        refreshList();
-    }
-}
-
-
-/**
-  Question for erase password of the selected drive
-  */
-void FileBrowserView::diskAdminEraseDrivePassword()
-{
-    // check if the drive has a password
-    QModelIndex currentIndex = currentItemIndex();
-    if (mEngineWrapper->hasDrivePassword(currentIndex)) {
-        HbMessageBox::question(QString("Are you sure? All data can be lost!"), this, SLOT(doDiskAdminEraseDrivePassword(HbAction*)));
-    } else {
-        Notifications::showInformationNote(QString("This drive has no password"));
-    }
-}
-
-/**
-  Erase password of the selected drive
-  */
-void FileBrowserView::doDiskAdminEraseDrivePassword(HbAction* action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminEraseDrivePassword(currentIndex);
-        refreshList();
-    }
-}
-
-/**
-  Performs format on the selected drive
-  */
-void FileBrowserView::diskAdminFormatDrive()
-{
-    HbMessageBox::question(QString("Are you sure? All data will be lost!"), this, SLOT(doDiskAdminFormatDrive(HbAction*)));
-}
-
-/**
-  Performs format on the selected drive
-  */
-void FileBrowserView::doDiskAdminFormatDrive(HbAction* action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminFormatDrive(currentIndex, false);
-    }
-}
-
-/**
-  Performs quick format on the selected drive
-  */
-void FileBrowserView::diskAdminQuickFormatDrive()
-{
-    HbMessageBox::question(QString("Are you sure? All data will be lost!"), this, SLOT(doDiskAdminQuickFormatDrive(HbAction*)));
-}
-
-/**
-  Performs quick format on the selected drive
-  */
-void FileBrowserView::doDiskAdminQuickFormatDrive(HbAction* action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminFormatDrive(currentIndex, true);
-    }
-}
-
-/**
-    Checks the disk integrity on the selected drive
-  */
-void FileBrowserView::diskAdminCheckDisk()
-{
-    QModelIndex currentIndex = currentItemIndex();
-    mEngineWrapper->DiskAdminCheckDisk(currentIndex);
-}
-
-/**
-  Checks the selected drive for errors and corrects them
-  */
-void FileBrowserView::diskAdminScanDrive()
-{
-    HbMessageBox::question(QString("This finds errors on disk and corrects them. Proceed?"), this, SLOT(doDiskAdminScanDrive(HbAction*)));
-}
-
-/**
-  Checks the selected drive for errors and corrects them
-  */
-void FileBrowserView::doDiskAdminScanDrive(HbAction* action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminScanDrive(currentIndex);
-        refreshList();
-    }
-}
-
-/**
-  Open drive name dialog
-  */
-void FileBrowserView::diskAdminSetDriveName()
-{
-    QString driveName;
-
-    // get existing drive name
-    QModelIndex currentIndex = currentItemIndex();
-    mEngineWrapper->GetDriveName(currentIndex, driveName);
-
-    QString heading = QString("New name");
-    HbInputDialog::getText(heading, this, SLOT(doDiskAdminSetDriveName(HbAction*)), driveName, scene());
-}
-
-/**
-  Set drive name.
-  */
-void FileBrowserView::doDiskAdminSetDriveName(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        QString driveName = dlg->value().toString();
-
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminSetDriveName(currentIndex, driveName);
-
-        refreshList();
-    }
-}
-
-/**
-  Open drive volume label dialog
-  */
-void FileBrowserView::diskAdminSetDriveVolumeLabel()
-{
-    QString volumeLabel;
-
-    // get existing drive name
-    QModelIndex currentIndex = currentItemIndex();
-    mEngineWrapper->GetDriveVolumeLabel(currentIndex, volumeLabel);
-
-    QString heading = QString("New volume label");
-    HbInputDialog::getText(heading, this, SLOT(doDiskAdminSetDriveVolumeLabel(HbAction*)), volumeLabel, scene());
-}
-
-/**
-  Set drive volume label.
-  */
-void FileBrowserView::doDiskAdminSetDriveVolumeLabel(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        QString volumeLabel = dlg->value().toString();
-
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminSetDriveVolumeLabel(currentIndex, volumeLabel);
-
-        refreshList();
-    }
-}
-
-/**
-  Eject the selected drive
-  */
-void FileBrowserView::diskAdminEjectDrive()
-{
-    QModelIndex currentIndex = currentItemIndex();
-    mEngineWrapper->DiskAdminEjectDrive(currentIndex);
-    refreshList();
-}
-
-/**
-  Dismount the selected drive
-  */
-void FileBrowserView::diskAdminDismountDrive()
-{
-    HbMessageBox::question(QString("Are you sure you know what are you doing?"), this, SLOT(doDiskAdminDismountDrive(HbAction*)));
-}
-
-void FileBrowserView::doDiskAdminDismountDrive(HbAction* action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminDismountDrive(currentIndex);
-        refreshList();
-    }
-}
-
-/**
-  Erase Master Boot Record of the selected drive
-  */
-void FileBrowserView::diskAdminEraseMBR()
-{
-    // TODO What to do with FB LITE macros?
-    HbMessageBox::question(QString("Are you sure? Your media driver must support this!"), this, SLOT(doDiskAdminEraseMBR(HbAction*)));
-}
-
-void FileBrowserView::doDiskAdminEraseMBR(HbAction* action)
-{
-    // TODO What to do with FB LITE macros?
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        HbMessageBox::question(QString("Are you really sure you know what are you doing ?!?"), this, SLOT(doDiskAdminReallyEraseMBR(HbAction*)));
-    }
-}
-
-void FileBrowserView::doDiskAdminReallyEraseMBR(HbAction* action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        QModelIndex currentIndex = currentItemIndex();
-        // warn if the selected drive is not detected as removable
-        if (mEngineWrapper->isDriveRemovable(currentIndex)) {
-            mEngineWrapper->DiskAdminEraseMBR(currentIndex);
-            refreshList();
-        } else {
-            HbMessageBox::question(QString("Selected drive is not removable, really continue?"), this, SLOT(doDiskAdminNotRemovableReallyEraseMBR(HbAction*)));
-        }
-    }
-}
-
-void FileBrowserView::doDiskAdminNotRemovableReallyEraseMBR(HbAction* action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        QModelIndex currentIndex = currentItemIndex();
-        mEngineWrapper->DiskAdminEraseMBR(currentIndex);
-        refreshList();
-    }
-
-}
-
-/**
-  Partition the selected drive
-  */
-void FileBrowserView::diskAdminPartitionDrive()
-{
-    const QString message("Are you sure? Your media driver must support this!");
-    HbMessageBox::question(message, this, SLOT(diskAdminPartitionDriveProceed(HbAction *)));
-}
-
-/**
-  Partition the selected drive if user is sure
-  */
-void FileBrowserView::diskAdminPartitionDriveProceed(HbAction *action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        const QString message("Are you really sure you know what are you doing ?!?");
-        HbMessageBox::question(message, this, SLOT(diskAdminPartitionDriveReallyProceed(HbAction *)));
-    }
-}
-
-/**
-  Partition the selected drive if user is really sure
-  */
-void FileBrowserView::diskAdminPartitionDriveReallyProceed(HbAction *action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        QModelIndex currentIndex = currentItemIndex();
-        mEraseMBR = false;
-        // warn if the selected drive is not detected as removable
-        mProceed = false;
-        if (mEngineWrapper->isDriveRemovable(currentIndex)) {
-            mProceed = true;
-        } else {
-            const QString message("Selected drive is not removable, really continue?");
-            HbMessageBox::question(message, this, SLOT(diskAdminPartitionDriveIsNotRemovable(HbAction *)));
-        }
-
-        if (mProceed) {
-            // query if erase mbr
-            mEraseMBR = false;
-
-            QString message("Erase MBR first (normally needed)?");
-            HbMessageBox::question(message, this, SLOT(diskAdminPartitionDriveEraseMbr(HbAction *)));
-
-            // TODO use HbListDialog
-            QStringList list;
-            list << "1" << "2" << "3" << "4";
-            openListDialog(list, QString("Partitions?"), this, SLOT(diskAdminPartitionDriveGetCount(HbAction*)));
-        }
-    }
-}
-
-/**
-  Store result of user query about proceeding when drive is not removable.
-  */
-void FileBrowserView::diskAdminPartitionDriveIsNotRemovable(HbAction *action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        mProceed = true;
-    } else {
-        mProceed = false;
-    }
-}
-
-/**
-  Store result of user query about erase MBR
-  */
-void FileBrowserView::diskAdminPartitionDriveEraseMbr(HbAction *action)
-{
-    if (action && action->text().compare(QString("Yes"), Qt::CaseInsensitive) == 0) {
-        mEraseMBR = true;
-    }
-}
-
-/**
-  Partition the selected drive
-  */
-void FileBrowserView::diskAdminPartitionDriveGetCount(HbAction* action)
-{
-//    Q_UNUSED(action);
-    HbSelectionDialog *dlg = static_cast<HbSelectionDialog*>(sender());
-    if(!action && dlg && dlg->selectedItems().count()){
-        int selectionIndex = dlg->selectedItems().at(0).toInt();
-        QModelIndex currentIndex = currentItemIndex();
-        int amountOfPartitions = selectionIndex + 1;
-        mEngineWrapper->DiskAdminPartitionDrive(currentIndex, mEraseMBR, amountOfPartitions);
-        refreshList();
-    }
-}
-
-// ---------------------------------------------------------------------------
-// tools menu
-// ---------------------------------------------------------------------------
-void FileBrowserView::toolsAllAppsToTextFile()
-{
-
-}
-
-/**
-  Write all files to text file
-  */
-void FileBrowserView::toolsAllFilesToTextFile()
-{
-    mEngineWrapper->toolsWriteAllFiles();
-}
-
-void FileBrowserView::toolsAvkonIconCacheEnable()
-{
-
-}
-void FileBrowserView::toolsAvkonIconCacheDisable()
-{
-
-}
-
-/**
-  Disable extended errors
-  */
-void FileBrowserView::toolsDisableExtendedErrors()
-{
-    mEngineWrapper->ToolsSetErrRd(false);
-}
-
-void FileBrowserView::toolsDumpMsgStoreWalk()
-{
-
-}
-void FileBrowserView::toolsEditDataTypes()
-{
-
-}
-
-/**
-  Enable extended errors
-  */
-void FileBrowserView::toolsEnableExtendedErrors()
-{
-    mEngineWrapper->ToolsSetErrRd(true);
-}
-
-/**
-  Open simulate leave dialog
-  */
-void FileBrowserView::toolsErrorSimulateLeave()
-{
-    int leaveCode = -6;
-    QString heading = QString("Leave code");
-    //HbInputDialog::getInteger(heading, this, SLOT(doToolsErrorSimulateLeave(HbAction*)), leaveCode, scene());
-    HbInputDialog::getText(heading, this, SLOT(doToolsErrorSimulateLeave(HbAction*)), QString::number(leaveCode), scene());
-}
-
-
-/**
-  Simulate leave.
-  */
-void FileBrowserView::doToolsErrorSimulateLeave(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        bool ok;
-        int leaveCode = dlg->value().toString().toInt(&ok);
-        if (leaveCode != 0 || ok) {
-            mEngineWrapper->ToolsErrorSimulateLeave(leaveCode);
-        }
-    }
-}
-
-/**
-  Open simulate panic dialog.
-  */
-void FileBrowserView::toolsErrorSimulatePanic()
-{
-    mPanicCategory = QString ("Test Category");
-    QString heading = QString("Panic category");
-    HbInputDialog::getText(heading, this, SLOT(doToolsErrorSimulatePanicCode(HbAction*)), mPanicCategory, scene());
-}
-
-/**
-  Simulate panic.
-  */
-void FileBrowserView::doToolsErrorSimulatePanicCode(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        mPanicCategory = dlg->value().toString();
-        int panicCode(555);
-        QString heading = QString("Panic code");
-        HbInputDialog::getInteger(heading, this, SLOT(doToolsErrorSimulatePanic(HbAction*)), panicCode, scene());
-    }
-}
-
-/**
-  Simulate panic.
-  */
-void FileBrowserView::doToolsErrorSimulatePanic(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        bool ok;
-        int panicCode = dlg->value().toInt(&ok);
-        if (panicCode != 0 || ok) {
-            mEngineWrapper->ToolsErrorSimulatePanic(mPanicCategory, panicCode);
-        }
-    }
-}
-
-/**
-  Open simulate exception dialog.
-  */
-void FileBrowserView::toolsErrorSimulateException()
-{
-    int exceptionCode = 0;
-    QString heading = QString("Exception code");
-    HbInputDialog::getInteger(heading, this, SLOT(doToolsErrorSimulateException(HbAction*)), exceptionCode, scene());
-}
-
-/**
-  Simulate exception.
-  */
-void FileBrowserView::doToolsErrorSimulateException(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        bool ok;
-        int exceptionCode = dlg->value().toInt(&ok);
-        if (exceptionCode != 0 || ok) {
-            mEngineWrapper->ToolsErrorSimulateException(exceptionCode);
-        }
-    }
-}
-
-//    void FileBrowserView::toolsLocalConnectivityActivateInfrared()
-//{
-//
-//}
-//    void FileBrowserView::toolsLocalConnectivityLaunchBTUI()
-//{
-//
-//}
-//    void FileBrowserView::toolsLocalConnectivityLaunchUSBUI()
-//{
-//
-//}
-void FileBrowserView::toolsMessageInbox()
-{
-
-}
-void FileBrowserView::toolsMessageDrafts()
-{
-
-}
-void FileBrowserView::toolsMessageSentItems()
-{
-
-}
-void FileBrowserView::toolsMessageOutbox()
-{
-
-}
-void FileBrowserView::toolsMemoryInfo()
-{
-
-}
-void FileBrowserView::toolsSecureBackStart()
-{
-
-}
-void FileBrowserView::toolsSecureBackRestore()
-{
-
-}
-void FileBrowserView::toolsSecureBackStop()
-{
-
-}
-
-/**
-  Open debug mask dialog
-  */
-void FileBrowserView::toolsSetDebugMaskQuestion()
-{
-    quint32 dbgMask = mEngineWrapper->getDebugMask();
-    QString dbgMaskText = QString("0x").append(QString::number(dbgMask, 16));
-    QString heading = QString("Kernel debug mask in hex format");
-    HbInputDialog::getText(heading, this, SLOT(toolsSetDebugMask(HbAction*)), dbgMaskText, scene());
-}
-
-/**
-  Set debug mask
-  */
-void FileBrowserView::toolsSetDebugMask(HbAction *action)
-{
-    HbInputDialog *dlg = static_cast<HbInputDialog*>(sender());
-    if (dlg && action && action->text().compare(QString("Ok"), Qt::CaseInsensitive) == 0) {
-        QString dbgMaskText = dlg->value().toString();
-        if (dbgMaskText.length() > 2 && dbgMaskText[0]=='0' && dbgMaskText[1]=='x') {
-            bool ok;
-            quint32 dbgMask = dbgMaskText.toUInt(&ok, 16);
-            if (dbgMask != 0 || ok) {
-                mEngineWrapper->toolsSetDebugMask(dbgMask);
-                Notifications::showConfirmationNote(QString("Changed"));
-            } else {
-                Notifications::showErrorNote(QString("Cannot convert value"));
-            }
-        } else {
-            Notifications::showErrorNote(QString("Not in hex format"));
-        }
-    }
-}
-
-void FileBrowserView::toolsShowOpenFilesHere()
-{
-
-}
-
-// ---------------------------------------------------------------------------
-// main menu items
-// ---------------------------------------------------------------------------
-void FileBrowserView::selectionModeChanged()
-{
-    if (mOptionMenuActions.mSelection->isChecked()) {
-         activateSelectionMode();
-     } else {
-         deActivateSelectionMode();
-     }
-}
-
-/**
-  Show about note
-  */
-void FileBrowserView::about()
-{
-    Notifications::showAboutNote();
-}
-
-// ---------------------------------------------------------------------------
-// End of operations
-// ---------------------------------------------------------------------------
-
-// ---------------------------------------------------------------------------
-
-/**
-  Item is selected from list when selection mode is activated from menu
-  */
-void FileBrowserView::selectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/)
-{
-    //QItemSelectionModel *selectionModel = mListView->selectionModel();
-    //itemHighlighted(selectionModel->currentIndex());
-}
-
-/**
-  An item is highlighted = single-clicked from file/folder list.
-  */
-void FileBrowserView::itemHighlighted(const QModelIndex& index)
-{
-    Q_UNUSED(index)
-//    mItemHighlighted = true;
-//    mFileInfo = mFileSystemModel->fileInfo(index);
-}
-
-
-/**
-  An item is clicked from navigation item list. Navigation item list contains
-  drive-, folder- or file items. Opens selected drive, folder or file popup menu
-  */
-void FileBrowserView::activated(const QModelIndex& index)
-{
-    if (mFileBrowserModel) {
-        if (mEngineWrapper->isDriveListViewActive()) {
-            mEngineWrapper->moveDownToDirectory(index);
-            populateFolderContent();
-        } else if (mEngineWrapper->getFileEntry(index).isDir()) {
-            // populate new content of changed navigation view.
-            // mLocationChanged = true;
-            // mDirectory = filePath;
-            mEngineWrapper->moveDownToDirectory(index);
-            populateFolderContent();
-        } else {  // file item
-            // mSelectedFilePath = filePath;
-            FileEntry fileEntry = mEngineWrapper->getFileEntry(index);
-            mAbsoluteFilePath = fileEntry.path() + fileEntry.name();
-
-            // open user-dialog to select: view as text/hex,  open w/AppArc or open w/DocH. embed
-            QStringList list;
-            list << QString("View as text/hex") << QString("Open w/ AppArc") << QString("Open w/ DocH. embed");
-            openListDialog(list, QString("Open file"), this, SLOT(fileOpen(HbAction *)));
-        }
-    }
-}
-
-// ---------------------------------------------------------------------------
-
-void FileBrowserView::activateSelectionMode()
-{
-    QString path;
-    disconnect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex)));
-    mListView->setSelectionMode(HbListView::MultiSelection);
-
-//    if (mDirectory != mInitDirPath.path()) {
-//        QDir dir(mDirectory);
-//        path = mDirectory;
-//        QStringList dirs = dir.entryList(QDir::AllDirs | QDir::System | QDir::Hidden);
-//        if (dirs.count() > 0) {
-//            path.append("\\" + dirs.at(0) + "\\");
-//        }
-//    } else {
-//        path = ("C:\\");
-//    }
-//    QModelIndex index = mFileSystemModel->index(path,0);
-//    mListView->selectionModel()->setCurrentIndex(index, QItemSelectionModel::SelectCurrent);
-//    mListView->selectionModel()->select(index, QItemSelectionModel::Select);
-//    //mListView->setHighlightMode(HbItemHighlight::HighlightAlwaysVisible);
-//    mListView->setFocus();    // TODO use focus in
-    if (mListView->selectionModel()) {
-        connect(mListView->selectionModel(),
-                SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
-                this,
-                SLOT(selectionChanged(QItemSelection, QItemSelection)));
-//        // flag to indicate that selection mode changed, "edit" sub-menu update needed
-//        mFolderContentChanged = true;
-    }
-}
-
-// ---------------------------------------------------------------------------
-
-void FileBrowserView::deActivateSelectionMode()
-{
-    disconnect(mListView->selectionModel(),
-               SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
-               this,
-               SLOT(selectionChanged(QItemSelection, QItemSelection)));
-    mListView->setSelectionMode(HbListView::NoSelection);
-    connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex)));
-    editUnselectAll();
-    // flag to indicate that selection mode changed, "edit" sub-menu update needed
-    mFolderContentChanged = true;
-}
-
-// ---------------------------------------------------------------------------
--- a/filebrowser/ui/src/main.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/ui/src/main.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -18,13 +18,13 @@
 #include <HbApplication>
 #include <HbMainWindow>
 
-#include "filebrowsermainwindow.h"
+#include "fbmainwindow.h"
 
 
 int main(int argc, char *argv[])
 {
     HbApplication app(argc, argv);
-    FileBrowserMainWindow window;
+    FbMainWindow window;
     window.init();
     int result = app.exec();
 
--- a/filebrowser/ui/src/notifications.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/ui/src/notifications.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -38,7 +38,7 @@
 void Notifications::showAboutNote()
 {
     showMessageBox(HbMessageBox::MessageTypeInformation,
-                   "Version 5.0.1 - 21st May 2010. Copyright © 2010 Nokia Corporation"
+                   "Version 5.1.0 - 18th June 2010. Copyright © 2010 Nokia Corporation"
                         "and/or its subsidiary(-ies). All rights reserved."
                         "Licensed under Eclipse Public License v1.0.",
                    "About File Browser"
@@ -49,21 +49,23 @@
 
 void Notifications::showInformationNote(const QString &text, const QString &title)
 {
-    showMessageBox(HbMessageBox::MessageTypeInformation, text, title, false);
+    showMessageBox(HbMessageBox::MessageTypeInformation, text, title, 3000);
 }
 
 // ---------------------------------------------------------------------------
 
 void Notifications::showErrorNote(const QString &text, bool noTimeout)
 {
-    showMessageBox(HbMessageBox::MessageTypeWarning, text, "", noTimeout ? HbPopup::NoTimeout : HbPopup::StandardTimeout);
+    showMessageBox(HbMessageBox::MessageTypeWarning, text, "",
+                   noTimeout ? HbPopup::NoTimeout : 3000 /*HbPopup::StandardTimeout*/);
 }
 
 // ---------------------------------------------------------------------------
 
 void Notifications::showConfirmationNote(const QString &text, bool noTimeout)
 {
-    showMessageBox(HbMessageBox::MessageTypeWarning, text, "", noTimeout ? HbPopup::NoTimeout : HbPopup::ConfirmationNoteTimeout);
+    showMessageBox(HbMessageBox::MessageTypeInformation, text, "",
+                   noTimeout ? HbPopup::NoTimeout : 3000 /*HbPopup::ConfirmationNoteTimeout*/);
 }
 
 // ---------------------------------------------------------------------------
--- a/filebrowser/ui/src/settingsview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/ui/src/settingsview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -16,7 +16,6 @@
 */
 
 #include "settingsview.h"
-#include "filebrowsermainwindow.h"
 #include "enginewrapper.h"
 #include "filebrowsersettings.h"
 
@@ -37,8 +36,7 @@
 const QString acceptActionText = "OK";
 const QString rejectActionText = "Cancel";
 
-SettingsView::SettingsView(FileBrowserMainWindow &mainWindow, EngineWrapper &engineWrapper) :
-    mMainWindow(mainWindow),
+SettingsView::SettingsView(EngineWrapper &engineWrapper) :
     mEngineWrapper(engineWrapper),
     mForm(0),
     mDisplayModeItem(0),
@@ -229,35 +227,6 @@
 {
     
 }
-//
-//void SettingsView::displayModeChanged()
-//{
-//}
-//
-//void SettingsView::fileViewChanged()
-//{
-//
-//}
-//
-//void SettingsView::subDirectoryInfoChanged()
-//{
-//}
-//
-//void SettingsView::associatedIconsChanged()
-//{
-//}
-//
-//void SettingsView::rememberFolderOnExitChanged()
-//{
-//}
-//
-//void SettingsView::rememberLastFolderChanged()
-//{
-//}
-//
-//void SettingsView::showToolbarChanged()
-//{
-//}
 
 void SettingsView::accept()
 {
--- a/filebrowser/ui/ui.pro	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/ui/ui.pro	Thu Jun 24 14:55:55 2010 +0300
@@ -21,9 +21,14 @@
 load(hb.prf)
 symbian:CONFIG -= symbian_i18n
 
-HEADERS += ./inc/filebrowsermainwindow.h \
-           ./inc/filebrowserview.h \
-           ./inc/filebrowsermodel.h \
+HEADERS += ./inc/fbmainwindow.h \
+           ./inc/fbdrivelistviewitem.h \
+           ./inc/fbdrivemodel.h \
+           ./inc/fbdriveview.h \
+           ./inc/fbfilelistviewitem.h \
+           ./inc/fbfilemodel.h \
+           ./inc/fbfileview.h \
+           ./inc/filebrowsersortfilterproxymodel.h \
            ./inc/menuaction.h \
            ./inc/filebrowsersettings.h \
            ./inc/settingsview.h \
@@ -34,9 +39,14 @@
            ./inc/fileentry.h \
            ./inc/driveentry.h
 SOURCES += ./src/main.cpp \
-           ./src/filebrowsermainwindow.cpp \
-           ./src/filebrowserview.cpp \
-           ./src/filebrowsermodel.cpp \
+           ./src/fbmainwindow.cpp \
+           ./src/fbdrivelistviewitem.cpp \
+           ./src/fbdrivemodel.cpp \
+           ./src/fbdriveview.cpp \
+           ./src/fbfilelistviewitem.cpp \
+           ./src/fbfilemodel.cpp \
+           ./src/fbfileview.cpp \
+           ./src/filebrowsersortfilterproxymodel.cpp \
            ./src/settingsview.cpp \
            ./src/editorview.cpp \
            ./src/searchview.cpp \
--- a/filebrowser/ui/ui.qrc	Thu Jun 17 15:34:52 2010 +0300
+++ b/filebrowser/ui/ui.qrc	Thu Jun 24 14:55:55 2010 +0300
@@ -2,5 +2,6 @@
     <qresource prefix="/">
         <file alias="qgn_indi_tb_filebrowser_folder_parent.svg" >../icons/qgn_indi_tb_filebrowser_folder_parent.svg</file>
         <file alias="qgn_indi_tb_filebrowser_find.svg" >../icons/qgn_indi_tb_filebrowser_find.svg</file>
+        <file alias="qgn_indi_tb_filebrowser_selection_active.svg" >../icons/qgn_indi_tb_filebrowser_selection_active.svg</file>
     </qresource>
 </RCC>
--- a/htiui/HtiAdmin/inc/HtiAdminAppUi.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/HtiAdmin/inc/HtiAdminAppUi.h	Thu Jun 24 14:55:55 2010 +0300
@@ -135,6 +135,8 @@
     	void HandleBtSearch();
     	void HandleIPConnect();
     	void HandleIPListen();
+    	
+    	void StartTimer();
 
     private:
 
--- a/htiui/HtiAdmin/src/HtiAdminAppUi.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/HtiAdmin/src/HtiAdminAppUi.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -109,6 +109,7 @@
     iAppView->SetSelectedCommCaption( KHtiSelectedCommCaption );
     UpdateVersion();
     UpdateStatusL();
+    StartTimer();
     iHtiCfg = CHtiCfg::NewL();
     UpdateAutoStartStatus(); // uses iHtiCfg
     UpdateSelectedComm(); // uses iHtiCfg
@@ -810,6 +811,7 @@
         {
         UpdateStatusL();
         UpdateAutoStartStatus();
+        StartTimer();
         }
     else
         {
@@ -889,15 +891,6 @@
                 {
                 _LIT( KTxt, "Running" );
                 iAppView->SetStatus( KTxt );
-
-                // start timer to watch the status
-                if ( !iPeriodic )
-                    {
-                    iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard );
-                    iPeriodic->Start( 5 * 1000 * 1000,
-                                      5 * 1000 * 1000,
-                                      TCallBack( TimerCallBackL, this ) );
-                    }
                 }
                 break;
 
@@ -906,7 +899,6 @@
                 {
                 _LIT( KTxt, "Stopped" );
                 iAppView->SetStatus( KTxt );
-                KillTimer();
                 }
                 break;
 
@@ -914,16 +906,11 @@
                 {
                 _LIT( KTxt, "Panic" );
                 iAppView->SetStatus( KTxt );
-                KillTimer();
                 }
                 break;
             };
         prs.Close();
         }
-    else
-        {
-        KillTimer();
-        }
     }
 
 void CHtiAdminAppUi::UpdateAutoStartStatus()
@@ -1083,6 +1070,18 @@
         }
     }
 
+void CHtiAdminAppUi::StartTimer()
+    {
+    // start timer to watch the status
+    if ( !iPeriodic )
+        {
+        iPeriodic = CPeriodic::NewL( CActive::EPriorityIdle );
+        iPeriodic->Start( 1 * 1000 * 1000,
+                          10 * 1000 * 1000,
+                          TCallBack( TimerCallBackL, this ) );
+        }
+    }
+
 void CHtiAdminAppUi::KillTimer()
     {
     if ( iPeriodic )
--- a/htiui/HtiAdminQt/chtiadminengine.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/HtiAdminQt/chtiadminengine.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -121,6 +121,7 @@
     iHtiCfg = CHtiCfg::NewL();
     
     CheckStatusesL();
+    StartTimer();
     }
 
 // ---------------------------------------------------------------------------
@@ -594,15 +595,6 @@
             case EExitPending:
                 {
                 iEngineWrapper->updateStatus(HtiEngineWrapper::Running);
-		
-                // start timer to watch the status
-                if ( !iPeriodic )
-                    {
-                    iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard );
-                    iPeriodic->Start( 5 * 1000 * 1000,
-                                      5 * 1000 * 1000,
-                                      TCallBack( TimerCallBackL, this ) );
-                    }
                 }
                 break;
 
@@ -610,23 +602,17 @@
             case EExitTerminate:
                 {
                 iEngineWrapper->updateStatus(HtiEngineWrapper::Stopped);
-                KillTimer();
                 }
                 break;
 
             case EExitPanic:
                 {
                 iEngineWrapper->updateStatus(HtiEngineWrapper::Panic);
-                KillTimer();
                 }
                 break;
             };
         prs.Close();
         }
-    else
-        {
-        KillTimer();
-        }
     }
 
 // ---------------------------------------------------------------------------
@@ -647,6 +633,18 @@
     }
 
 // ---------------------------------------------------------------------------
+void CHtiAdminEngine::StartTimer()
+    {
+    // start timer to watch the status
+    if ( !iPeriodic )
+        {
+        iPeriodic = CPeriodic::NewL( CActive::EPriorityIdle );
+        iPeriodic->Start( 1 * 1000 * 1000,
+                          10 * 1000 * 1000,
+                          TCallBack( TimerCallBackL, this ) );
+        }
+    }
+// ---------------------------------------------------------------------------
 void CHtiAdminEngine::KillTimer()
     {
     if ( iPeriodic )
--- a/htiui/HtiAdminQt/chtiadminengine.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/HtiAdminQt/chtiadminengine.h	Thu Jun 24 14:55:55 2010 +0300
@@ -160,6 +160,8 @@
 		void SetCfgParamL(const TDesC& aParamName, const TDesC& aParamValue, const TDesC& aFileName);
 		void GetCfgParamL(const TDesC& aParamName, TDes& aParamValue, const TDesC& aFileName);
 		
+		void StartTimer();
+		
 	private:
 		// Enginewrapper that is used for communicating between QT and Symbian
 		HtiEngineWrapper* iEngineWrapper;             
--- a/htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/inc/EngineVideoRecording.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/inc/EngineVideoRecording.h	Thu Jun 24 14:55:55 2010 +0300
@@ -356,12 +356,12 @@
             TInt aError );
 
         void ViewFinderFrameReady( 
-            CFbsBitmap& aFrame ){};
+            CFbsBitmap& /*aFrame*/ ){};
 
         void ImageReady( 
-            CFbsBitmap* aBitmap, 
-            HBufC8*     aData, 
-            TInt        aError ){};
+            CFbsBitmap* /*aBitmap*/, 
+            HBufC8*     /*aData*/, 
+            TInt        /*aError*/ ){};
 
         void FrameBufferReady( 
             MFrameBuffer* /*aFrameBuffer*/, 
@@ -371,11 +371,11 @@
         
         void HandleEvent(const TECAMEvent& aEvent);
 
-        void ViewFinderReady(MCameraBuffer& aCameraBuffer,TInt aError){};
+        void ViewFinderReady(MCameraBuffer& /*aCameraBuffer*/,TInt /*aError*/){};
 
-        void ImageBufferReady(MCameraBuffer& aCameraBuffer,TInt aError){};
+        void ImageBufferReady(MCameraBuffer& /*aCameraBuffer*/,TInt /*aError*/){};
     
-        void VideoBufferReady(MCameraBuffer& aCameraBuffer,TInt aError){};
+        void VideoBufferReady(MCameraBuffer& /*aCameraBuffer*/,TInt /*aError*/){};
     protected:  
 
         /**
--- a/htiui/HtiServicePlugins/HtiCameraServicePlugin/inc/HtiCameraServicePlugin.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/inc/HtiCameraServicePlugin.h	Thu Jun 24 14:55:55 2010 +0300
@@ -49,7 +49,7 @@
         // commands
         enum TCommands
             {
-            ECmdInit                    = 0x01,
+            ECmdInitialize              = 0x01,
             ECmdPrepareVideoRecording   = 0x02,
             ECmdStartVideoRecording     = 0x05,
             ECmdPausingVideoRecording   = 0x06,
@@ -59,8 +59,8 @@
             ECmdGetZoom                 = 0x0a,
             ECmdSetZoom                 = 0x0b,
             
-            
-            EResultOk               = 0xFF // only for response message
+            ECmdUninitialize            = 0x51,
+            EResultOk                   = 0xFF // only for response message
             };
 
 
@@ -168,7 +168,8 @@
         virtual void MevroVideoRecordingComplete(TInt aError);
     
     private:
-        void HandleInitCmdL(const TDesC8& aData);
+        void HandleInitializeCmdL(const TDesC8& aData);
+        void HandleUninitializeCmdL(const TDesC8& aData);
         void HandlePrepareVideoRecordingCmdL(const TDesC8& aData);
         void HandleStartVideoRecordingCmdL( const TDesC8& aData );
         void HandlePausingVideoRecordingCmdL( const TDesC8& aData );
--- a/htiui/HtiServicePlugins/HtiCameraServicePlugin/src/HtiCameraServicePlugin.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/HtiServicePlugins/HtiCameraServicePlugin/src/HtiCameraServicePlugin.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -44,6 +44,7 @@
 _LIT8( KErrorNoCommand, "ERROR: No command given" );
 _LIT8( KErrorUnknownCmd, "ERROR: Unknown Camera Service command" );
 _LIT8( KErrorInitFailed, "ERROR: Failed to init");
+_LIT8( KErrorUninitialized, "ERROR: Uninitialized");
 _LIT8( KErrInvalidateParameters, "ERROR: Invalidate parameters");
 _LIT8( KErrQualityLevel, "ERROR: Invalidate quality level");
 _LIT8( KErrorPrepareVideoRecordingFailed, "ERROR: Prepare video recording failed");
@@ -83,7 +84,6 @@
 void CHtiCameraServicePlugin::ConstructL()
     {
     HTI_LOG_TEXT( "CHtiCameraServicePlugin::ConstructL" );
-    iVideoRecordingEngine = CEngineVideoRecording::NewL(*this, 0);
     iWaiter = new ( ELeave ) CActiveSchedulerWait;
     }
 
@@ -106,8 +106,11 @@
 // Destructor
 CHtiCameraServicePlugin::~CHtiCameraServicePlugin()
     {
-    delete iVideoRecordingEngine;
-    iVideoRecordingEngine = NULL;
+    if(iVideoRecordingEngine)
+        {
+        delete iVideoRecordingEngine;
+        iVideoRecordingEngine = NULL;
+        }
     
     delete iWaiter;
     iWaiter = NULL;
@@ -146,8 +149,11 @@
 
     switch (command)
         {
-        case ECmdInit:
-            TRAP(err, HandleInitCmdL(aMessage.Right( aMessage.Length() - 1 )));
+        case ECmdInitialize:
+            TRAP(err, HandleInitializeCmdL(aMessage.Right( aMessage.Length() - 1 )));
+            break;
+        case ECmdUninitialize:
+            TRAP(err, HandleUninitializeCmdL(aMessage.Right( aMessage.Length() - 1 )));
             break;
         case ECmdPrepareVideoRecording:
             TRAP(err, HandlePrepareVideoRecordingCmdL(aMessage.Right( aMessage.Length() - 1 )));
@@ -187,9 +193,9 @@
     HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::ProcessMessageL" );
     }
 
-void CHtiCameraServicePlugin::HandleInitCmdL( const TDesC8& aData )
+void CHtiCameraServicePlugin::HandleInitializeCmdL( const TDesC8& aData )
     {
-    HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandleInitCmdL" );
+    HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandleInitializeCmdL" );
     if(aData.Length() != 0)
         {
         SendErrorMessageL(KErrArgument, KErrInvalidateParameters);
@@ -197,6 +203,13 @@
         }
     
     HTI_LOG_TEXT("Initializes Camera Application Engine");
+    if(iVideoRecordingEngine)
+        {
+        delete iVideoRecordingEngine;
+        iVideoRecordingEngine = NULL;
+        }
+    
+    iVideoRecordingEngine = CEngineVideoRecording::NewL(*this, 0);
     iVideoRecordingEngine->InitL();
     iWaiter->Start();
     if(iError != KErrNone)
@@ -211,9 +224,30 @@
         SendOkMsgL(KNullDesC8);
         }
 
-    HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandleInitCmdL" );
+    HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandleInitializeCmdL" );
     }
 
+void CHtiCameraServicePlugin::HandleUninitializeCmdL(const TDesC8& aData)
+    {
+    HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::HandleUninitializeCmdL" );
+    if(aData.Length() != 0)
+        {
+        SendErrorMessageL(KErrArgument, KErrInvalidateParameters);
+        return;
+        }
+    
+    if(iVideoRecordingEngine == NULL)
+        {
+        SendErrorMessageL(KErrNotReady, KErrorUninitialized);
+        return;
+        }
+    
+    delete iVideoRecordingEngine;
+    iVideoRecordingEngine = NULL;
+    
+    SendOkMsgL(KNullDesC8);
+    HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::HandleUninitializeCmdL" );
+    }
 
 void CHtiCameraServicePlugin::HandlePrepareVideoRecordingCmdL( const TDesC8& aData )
     {
@@ -224,6 +258,12 @@
         return;
         }
     
+    if(iVideoRecordingEngine == NULL)
+        {
+        SendErrorMessageL(KErrNotReady, KErrorUninitialized);
+        return;
+        }
+    
     TInt qualityLevelIndex = aData[0];
     if(qualityLevelIndex < 0 || qualityLevelIndex > iVideoRecordingEngine->VideoQualityCount() -1)
         {
@@ -267,6 +307,12 @@
         return;
         }
     
+    if(iVideoRecordingEngine == NULL)
+        {
+        SendErrorMessageL(KErrNotReady, KErrorUninitialized);
+        return;
+        }
+    
     HTI_LOG_TEXT("Start video recording...");
     iVideoRecordingEngine->StartVideoRecording();
     
@@ -291,6 +337,12 @@
         return;
         }
     
+    if(iVideoRecordingEngine == NULL)
+        {
+        SendErrorMessageL(KErrNotReady, KErrorUninitialized);
+        return;
+        }
+    
     HTI_LOG_TEXT("Pausing video recording");
     iVideoRecordingEngine->PauseVideoRecording();
     if(iError != KErrNone)
@@ -313,6 +365,12 @@
         return;
         }
     
+    if(iVideoRecordingEngine == NULL)
+        {
+        SendErrorMessageL(KErrNotReady, KErrorUninitialized);
+        return;
+        }
+    
     HTI_LOG_TEXT("Resume video recording...");
     iVideoRecordingEngine->ResumeVideoRecording();
     
@@ -336,6 +394,12 @@
         return;
         }
     
+    if(iVideoRecordingEngine == NULL)
+        {
+        SendErrorMessageL(KErrNotReady, KErrorUninitialized);
+        return;
+        }
+    
     HTI_LOG_TEXT("Stop video recording");
     iVideoRecordingEngine->StopVideoRecording();
     if(iError != KErrNone)
@@ -358,6 +422,12 @@
         return;
         }
     
+    if(iVideoRecordingEngine == NULL)
+        {
+        SendErrorMessageL(KErrNotReady, KErrorUninitialized);
+        return;
+        }
+    
     HTI_LOG_TEXT("Close video recording");
     iVideoRecordingEngine->CloseVideoRecording();
     SendOkMsgL(KNullDesC8);
@@ -373,6 +443,12 @@
         return;
         }
     
+    if(iVideoRecordingEngine == NULL)
+        {
+        SendErrorMessageL(KErrNotReady, KErrorUninitialized);
+        return;
+        }
+    
     TUint8 zoomMode = (TUint8)iVideoRecordingEngine->ZoomMode();
     HTI_LOG_FORMAT("Current zoom mode: %d", zoomMode);
     
@@ -404,6 +480,12 @@
         return;
         }
     
+    if(iVideoRecordingEngine == NULL)
+        {
+        SendErrorMessageL(KErrNotReady, KErrorUninitialized);
+        return;
+        }
+    
     CEngineVideoRecording::TZoomMode zoomMode = (CEngineVideoRecording::TZoomMode)aData[0];
     HTI_LOG_FORMAT("Set zoom mode: %d", zoomMode);
     TRAPD(err, iVideoRecordingEngine->SetZoomModeL(zoomMode));
@@ -515,7 +597,7 @@
     {
     HTI_LOG_FUNC_IN( "CHtiCameraServicePlugin::MevroInitComplete" );
     HTI_LOG_FORMAT("aError = %d", aError);
-    iError = aError;
+    iError = aError; 
     iWaiter->AsyncStop();
     HTI_LOG_FUNC_OUT( "CHtiCameraServicePlugin::MevroInitComplete" );
     }
--- a/htiui/HtiServicePlugins/HtiSysInfoServicePlugin/group/HtiSysInfoServicePlugin.mmp	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/HtiServicePlugins/HtiSysInfoServicePlugin/group/HtiSysInfoServicePlugin.mmp	Thu Jun 24 14:55:55 2010 +0300
@@ -65,6 +65,7 @@
 LIBRARY         sysutil.lib
 LIBRARY         tzclient.lib
 LIBRARY         flogger.lib
+LIBRARY	        featmgr.lib // Chinese support
 
 SMPSAFE
 
--- a/htiui/HtiServicePlugins/HtiSysInfoServicePlugin/inc/HtiSysInfoServicePlugin.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/HtiServicePlugins/HtiSysInfoServicePlugin/inc/HtiSysInfoServicePlugin.h	Thu Jun 24 14:55:55 2010 +0300
@@ -98,7 +98,9 @@
         void HandleHsdpaCommandL( const TDesC8& aMessage );
         void HandleUpdateMediaGalleryL( const TDesC8& aMessage );
         void HandleActivateSkinL( const TDesC8& aMessage );
+        void HandleSetLanguageL( const TDesC8& aMessage );
 
+        void SetDefaultNumberModeL(TInt aMode, TInt aNbrModeType);
         void ParseTimeDataL( const TDesC8& aTimeData, TTime& aResult );
         TInt CleanUpTempFiles();
         TBool CanTurnBluetoothOnL( const TBool aUseForce );
--- a/htiui/HtiServicePlugins/HtiSysInfoServicePlugin/src/HtiSysInfoServicePlugin.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/HtiServicePlugins/HtiSysInfoServicePlugin/src/HtiSysInfoServicePlugin.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -31,6 +31,10 @@
 #include <AknSkinsInternalCRKeys.h>
 #include <AknsSkinUID.h>
 #include <AknsSrvClient.h>
+#include <AknFepInternalCRKeys.h>
+#include <AknFepGlobalEnums.h> //For chinese input modes
+#include <CommonEngineDomainCRKeys.h>
+#include <featmgr.h>
 #include <bautils.h>
 #include <btengsettings.h>
 #include <btengdomaincrkeys.h>
@@ -61,6 +65,8 @@
 const TInt KMaxBtNameLength = 30;
 const TInt KDateTimeFormatCmdLength = 6;
 
+const TInt KFepChineseInputModeLength = 10;
+
 _LIT( KTempFilePath, "\\" );
 _LIT( KTempFileName, "HtiTempFile.tmp" );
 _LIT( KMatchFileName, "HtiTempFile.tmp*" );
@@ -83,6 +89,7 @@
 _LIT8( KErrDescrSysUtil, "SysUtil failed" );
 _LIT8( KErrDescrSetTime, "Setting time failed" );
 _LIT8( KErrDescrDateTimeFormat, "Setting date and time formats failed" );
+_LIT8( KErrDescrSetLanguage, "Setting language failed");
 _LIT8( KErrDescrGetNetworkModes, "Getting network modes failed" );
 _LIT8( KErrDescrSetNetworkMode, "Setting network mode failed" );
 _LIT8( KErrDescrIrActivation, "IR activation failed" );
@@ -130,6 +137,8 @@
     ESysInfoSetHomeTime =     0x20,
     ESysInfoGetHomeTime =     0x21,
     ESetDateTimeFormat =      0x22,
+    
+    ESetLanguage =            0x25,
 
     ELightStatus =            0x30,
     ELightOn =                0x31,
@@ -164,6 +173,17 @@
     EActivateSkin =           0x80
     };
 
+enum TGSNumberModes
+    {
+    EGSNbrModeLatin, EGSNbrModeArabic = 1, EGSNbrModeIndic = 1
+    };
+
+// Number mode type
+enum TGSNumberModeType
+    {
+    EGSNbrModeTypeArabic, EGSNbrModeTypeIndic, EGSNbrModeTypeEasternArabic
+    // for Urdu & Farsi languages
+    };
 
 //------------------------------------------------------------------------------
 // Create instance of concrete ECOM interface implementation
@@ -211,6 +231,8 @@
     iAllowSSProperty.Close();
 #endif 
     delete iAllowSSSubscriber;
+    
+    FeatureManager::UnInitializeLib();
     }
 
 //------------------------------------------------------------------------------
@@ -221,6 +243,8 @@
     HTI_LOG_TEXT( "CHtiSysInfoServicePlugin::ConstructL" );
     User::LeaveIfError( iFs.Connect() );
     iFileMan = CFileMan::NewL( iFs );
+    
+    FeatureManager::InitializeLibL();
     }
 
 //------------------------------------------------------------------------------
@@ -352,6 +376,12 @@
                 HandleSetDateTimeFormatL( aMessage );
                 }
                 break;
+            case ESetLanguage:
+                {
+                HTI_LOG_TEXT("ESetLanguage");
+                HandleSetLanguageL( aMessage);
+                }
+                break;
             case ELightStatus:
             case ELightOn:
             case ELightOff:
@@ -2851,6 +2881,160 @@
     }
 
 //------------------------------------------------------------------------------
+// CHtiSysInfoServicePlugin::HandleSetLanguageL
+//------------------------------------------------------------------------------
+void CHtiSysInfoServicePlugin::HandleSetLanguageL( const TDesC8& aMessage )
+    {
+    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleSetLanguageL" );
+    if ( aMessage.Length() != 3 )
+        {
+        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
+                KErrDescrArgument, KSysInfoServiceUid );
+        return;
+        }
+    
+    TInt language = aMessage[1] + ( aMessage[2] << 8 );
+    if(language < 0)
+        {
+        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
+                KErrDescrSetLanguage, KSysInfoServiceUid );
+        return;
+        }
+    HTI_LOG_FORMAT( "Set language to %d", language );
+    
+    // Never set Language code 0 to HAL
+    if (language != 0)
+        {
+        User::LeaveIfError(HAL::Set(HAL::ELanguageIndex, language));
+        }
+    
+    CRepository* commonEngineRepository = CRepository::NewL(
+            KCRUidCommonEngineKeys);
+    CleanupStack::PushL(commonEngineRepository);
+    
+    User::LeaveIfError(commonEngineRepository->Set(KGSDisplayTxtLang, language));
+
+    CleanupStack::PopAndDestroy();
+
+    TBool nbrModeSaved = EFalse;
+    if (language == ELangArabic || User::Language() == ELangArabic)
+        {
+        //numberMode = EGSNumberModeArabicIndic;
+        SetDefaultNumberModeL(EGSNbrModeArabic, EGSNbrModeTypeArabic);
+        nbrModeSaved = ETrue;
+        }
+    else if ((language == ELangUrdu || User::Language() == ELangUrdu)
+            || (language == ELangFarsi || User::Language() == ELangFarsi))
+        {
+        //numberMode = EGSNumberModeEasternArabicIndic;
+        SetDefaultNumberModeL(EGSNbrModeLatin, EGSNbrModeTypeEasternArabic);
+        nbrModeSaved = ETrue;
+        }
+    else if (language == ELangHindi || User::Language() == ELangHindi
+            || language == ELangMarathi || User::Language() == ELangMarathi)
+        {
+        //numberMode = EGSNumberModeIndic;
+        SetDefaultNumberModeL(EGSNbrModeLatin, EGSNbrModeTypeIndic);
+        nbrModeSaved = ETrue;
+        }
+
+    //if number mode is not set above, then set it to Latin with respective
+    //number mode types. This part might be executed when Automatic is
+    //selected and the SIM card does not support the language.
+    if (!nbrModeSaved)
+        {
+        TInt nbrModeType = EGSNbrModeTypeIndic;
+        if (language == ELangArabic || User::Language() == ELangArabic)
+            {
+            nbrModeType = EGSNbrModeTypeArabic;
+            }
+        else if ((language == ELangUrdu || User::Language() == ELangUrdu)
+                || (language == ELangFarsi || User::Language() == ELangFarsi))
+            {
+            nbrModeType = EGSNbrModeTypeEasternArabic;
+            }
+
+        //EGSNumberModeLatin is true in both cases;
+        SetDefaultNumberModeL(EGSNbrModeLatin, nbrModeType);
+        }
+    
+    // Change input language
+    CRepository* aknFepRepository = CRepository::NewL( KCRUidAknFep );
+    CleanupStack::PushL(aknFepRepository);
+    User::LeaveIfError(  aknFepRepository->Set( KAknFepInputTxtLang,
+                                                language ));
+    // Change input method for Chinese variants
+    if( FeatureManager::FeatureSupported( KFeatureIdChinese ) )
+        {
+        TBuf<KFepChineseInputModeLength> conversion;
+        if( language == ELangPrcChinese )
+            {
+            conversion.Num( EPinyin, EHex );
+            User::LeaveIfError( aknFepRepository->Set( KAknFepChineseInputMode, conversion ) );
+            }
+        else if( language == ELangHongKongChinese )
+            {
+            conversion.Num( EStroke, EHex );
+            User::LeaveIfError( aknFepRepository->Set( KAknFepChineseInputMode, conversion ) );
+            }
+        else if( language == ELangTaiwanChinese )
+            {
+            conversion.Num( EZhuyin, EHex );
+            User::LeaveIfError( aknFepRepository->Set( KAknFepChineseInputMode, conversion ) );
+            }
+        }
+    CleanupStack::PopAndDestroy();
+    
+    iReply = HBufC8::NewL( 1 );
+    iReply->Des().Append( 0 );
+    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleSetLanguageL" );
+    }
+
+void CHtiSysInfoServicePlugin::SetDefaultNumberModeL(TInt aMode, TInt aNbrModeType)
+    {
+
+    CRepository* localeRepository = CRepository::NewL(KCRUidLocaleSettings);
+    CleanupStack::PushL(localeRepository);
+    if (aNbrModeType == EGSNbrModeTypeArabic || aNbrModeType
+            == EGSNbrModeTypeEasternArabic)
+        {
+        localeRepository->Set(KSettingsDefaultNumberMode, aMode);
+        }
+    else
+        {
+        localeRepository->Set(KSettingsIndicDefaultNumberMode, aMode);
+        }
+    CleanupStack::PopAndDestroy();
+
+    TLocale locale;
+    if (aMode == EGSNbrModeLatin)
+        {
+        locale.SetDigitType(EDigitTypeWestern);
+        }
+    else
+        {
+        //if aMode <> EGSNbrModeLatin, then it should be either latin or arabic. However
+        //as EGSNbrModeArabic and EGsNbrModeIndic both have a value = 1, we can't use
+        //that constant for below comparison. Hence, need to depend on the 2nd param.
+        switch (aNbrModeType)
+            {
+            case EGSNbrModeTypeArabic:
+                locale.SetDigitType(EDigitTypeArabicIndic);
+                break;
+            case EGSNbrModeTypeIndic:
+                locale.SetDigitType(EDigitTypeDevanagari);
+                break;
+            case EGSNbrModeTypeEasternArabic:
+                locale.SetDigitType(EDigitTypeEasternArabicIndic);
+                break;
+            default:
+                break;
+            }
+        }
+
+    locale.Set();
+    }
+//------------------------------------------------------------------------------
 // CHtiSysInfoServicePlugin::ParseTimeDataL
 //------------------------------------------------------------------------------
 void CHtiSysInfoServicePlugin::ParseTimeDataL( const TDesC8& aTimeData,
--- a/htiui/sis/HTI_S60-10_1.pkg	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/sis/HTI_S60-10_1.pkg	Thu Jun 24 14:55:55 2010 +0300
@@ -18,7 +18,7 @@
 &EN
 
 ; Using UID of HtiFramework project
-#{"HTI"},(0x1020DEB6),2,24,0
+#{"HTI"},(0x1020DEB6),2,25,0
 
 ; Series60 product id for S60 5.2
 [0x20022E6D], 0, 0, 0, {"Series60ProductID"}
@@ -96,6 +96,9 @@
 ; HTI watchdog
 "\epoc32\release\armv5\urel\HtiWatchDog.exe"                     - "!:\sys\bin\HtiWatchDog.exe"
 
+; HTI Restart
+"\epoc32\release\armv5\urel\HtiRestart.exe"                      - "!:\sys\bin\HtiRestart.exe"
+
 ; HTI device reboot
 "\epoc32\release\armv5\urel\HtiDeviceRebootUI.exe"               - "!:\sys\bin\HtiDeviceRebootUI.exe"
 
--- a/htiui/sis/HTI_S60-52.pkg	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/sis/HTI_S60-52.pkg	Thu Jun 24 14:55:55 2010 +0300
@@ -18,7 +18,7 @@
 &EN
 
 ; Using UID of HtiFramework project
-#{"HTI"},(0x1020DEB6),2,24,0
+#{"HTI"},(0x1020DEB6),2,25,0
 
 ; Series60 product id for S60 5.2
 [0x20022E6D], 0, 0, 0, {"Series60ProductID"}
@@ -99,6 +99,9 @@
 ; HTI watchdog
 "\epoc32\release\armv5\urel\HtiWatchDog.exe"                     - "!:\sys\bin\HtiWatchDog.exe"
 
+; HTI Restart
+"\epoc32\release\armv5\urel\HtiRestart.exe"                      - "!:\sys\bin\HtiRestart.exe"
+
 ; HTI device reboot
 "\epoc32\release\armv5\urel\HtiDeviceRebootUI.exe"               - "!:\sys\bin\HtiDeviceRebootUI.exe"
 
--- a/htiui/sis/HTI_S60_Upgrade-10_1.pkg	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/sis/HTI_S60_Upgrade-10_1.pkg	Thu Jun 24 14:55:55 2010 +0300
@@ -18,7 +18,7 @@
 &EN
 
 ; Using UID of HtiFramework project
-#{"HTI"},(0x1020DEB6),2,24,0,TYPE=SA,RU
+#{"HTI"},(0x1020DEB6),2,25,0,TYPE=SA,RU
 
 ; Series60 product id for S60 5.2
 [0x20022E6D], 0, 0, 0, {"Series60ProductID"}
@@ -96,6 +96,9 @@
 ; HTI watchdog
 "\epoc32\release\armv5\urel\HtiWatchDog.exe"                     - "!:\sys\bin\HtiWatchDog.exe"
 
+; HTI Restart
+"\epoc32\release\armv5\urel\HtiRestart.exe"                      - "!:\sys\bin\HtiRestart.exe"
+
 ; HTI device reboot
 "\epoc32\release\armv5\urel\HtiDeviceRebootUI.exe"               - "!:\sys\bin\HtiDeviceRebootUI.exe"
 
--- a/htiui/sis/HTI_S60_Upgrade-52.pkg	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/sis/HTI_S60_Upgrade-52.pkg	Thu Jun 24 14:55:55 2010 +0300
@@ -18,7 +18,7 @@
 &EN
 
 ; Using UID of HtiFramework project
-#{"HTI"},(0x1020DEB6),2,24,0,TYPE=SA,RU
+#{"HTI"},(0x1020DEB6),2,25,0,TYPE=SA,RU
 
 ; Series60 product id for S60 5.2
 [0x20022E6D], 0, 0, 0, {"Series60ProductID"}
@@ -99,6 +99,9 @@
 ; HTI watchdog
 "\epoc32\release\armv5\urel\HtiWatchDog.exe"                     - "!:\sys\bin\HtiWatchDog.exe"
 
+; HTI Restart
+"\epoc32\release\armv5\urel\HtiRestart.exe"                      - "!:\sys\bin\HtiRestart.exe"
+
 ; HTI device reboot
 "\epoc32\release\armv5\urel\HtiDeviceRebootUI.exe"               - "!:\sys\bin\HtiDeviceRebootUI.exe"
 
--- a/htiui/sis/HTI_stub.pkg	Thu Jun 17 15:34:52 2010 +0300
+++ b/htiui/sis/HTI_stub.pkg	Thu Jun 24 14:55:55 2010 +0300
@@ -18,7 +18,7 @@
 &EN
 
 ; Using UID of HtiFramework project
-#{"HTI"},(0x1020DEB6),2,24,0
+#{"HTI"},(0x1020DEB6),2,25,0
 
 ; Localised Vendor name
 %{"Nokia"}
@@ -96,6 +96,9 @@
 ; HTI watchdog
 ""- "z:\sys\bin\HtiWatchDog.exe"
 
+; HTI Restart
+""- "z:\sys\bin\HtiRestart.exe"
+
 ; HTI device reboot
 ""- "z:\sys\bin\HtiDeviceRebootUI.exe"
 
--- a/launcher/launcher.pro	Thu Jun 17 15:34:52 2010 +0300
+++ b/launcher/launcher.pro	Thu Jun 24 14:55:55 2010 +0300
@@ -45,7 +45,8 @@
 		
 		RSS_RULES += "group_name = \"RnD Tools\"";
 		
-		LIBS += -lapgrfx -lPlatformEnv -lxqutils -lxmlframework -lbafl -lshareui
+		LIBS += -lapgrfx -lPlatformEnv -lxqutils -lxmlframework -lbafl -lshareui -lws32 -lapparc -lefsrv -lcone
+
 
         TARGET.CAPABILITY = ReadUserData ReadDeviceData WriteUserData WriteDeviceData PowerMgmt AllFiles
         
--- a/launcher/rom/Launcher.iby	Thu Jun 17 15:34:52 2010 +0300
+++ b/launcher/rom/Launcher.iby	Thu Jun 24 14:55:55 2010 +0300
@@ -1,4 +1,4 @@
-//*
+/*
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
--- a/layers.sysdef.xml	Thu Jun 17 15:34:52 2010 +0300
+++ b/layers.sysdef.xml	Thu Jun 24 14:55:55 2010 +0300
@@ -34,7 +34,7 @@
 				<unit unitID="tools.piprofilerui" mrp="" bldFile="&layer_real_source_path;/piprofilerui" name="piprofilerui" proFile="piprofilerui.pro" />
 			</module>
 			<module name="stifui">
-				<unit unitID="tools.stifui" mrp="" bldFile="&layer_real_source_path;/stifui/qt/" name="stifui" proFile="stifqtui.pro"/>
+				<unit unitID="tools.stifui" mrp="" bldFile="&layer_real_source_path;/stifui/avkon/group" name="stifui"/>
 			</module>
     </layer>
   </systemModel>
--- a/loadgen/engine/inc/loadgen_netconn.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/loadgen/engine/inc/loadgen_netconn.h	Thu Jun 24 14:55:55 2010 +0300
@@ -22,7 +22,8 @@
 // INCLUDES
 #include <e32std.h>
 #include <e32base.h>
-#include <DownloadMgrClient.h> 
+//#include <DownloadMgrClient.h> 
+//#include <downloadcontroller.h>
 
 #include "loadgen_loadbase.h"
 #include "loadgen_loadattributes.h"
--- a/loadgen/group/bld.inf	Thu Jun 17 15:34:52 2010 +0300
+++ b/loadgen/group/bld.inf	Thu Jun 24 14:55:55 2010 +0300
@@ -1,13 +1,13 @@
 // ============================================================================
 // * Makefile for building: group
-// * Generated by qmake (2.01a) (Qt 4.6.1) on: 2010-02-23T09:27:08
+// * Generated by qmake (2.01a) (Qt 4.6.3) on: 2010-06-17T13:18:03
 // * This file is generated by qmake and should not be modified by the
 // * user.
 // * Project:  group.pro
 // * Template: subdirs
 // ============================================================================
 
-#define BLD_INF_GROUP_0010C4D8
+#define BLD_INF_GROUP_037FC092
 
 
 prj_platforms
@@ -15,10 +15,17 @@
 WINSCW GCCE ARMV5 ARMV6
 #include "bld_generic.inf"
 
-#include "../ui/avkon/group/bld.inf"
 
 prj_mmpfiles
 
 
 prj_extensions
 
+
+#if defined(WINSCW)
+#endif
+
+START EXTENSION qt/qmake_store_build
+END
+
+
--- a/loadgen/ui/hb/hb.pro	Thu Jun 17 15:34:52 2010 +0300
+++ b/loadgen/ui/hb/hb.pro	Thu Jun 24 14:55:55 2010 +0300
@@ -1,104 +1,100 @@
-#
 # Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of "Eclipse Public License v1.0"
 # which accompanies 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:
 TEMPLATE = app
 TARGET = LoadGen
 DEPENDPATH += .
-
-INCLUDEPATH += . /inc
+INCLUDEPATH += . \
+    /inc
 INCLUDEPATH += ./inc \
-			   ../../engine/inc \
-
+    ../../engine/inc
 load(hb.prf)
 symbian:CONFIG -= symbian_i18n
-
-HEADERS += inc/mainview.h inc/settingsview.h inc/notifications.h 
-SOURCES += src/main.cpp src/mainview.cpp src/settingsview.cpp src/notifications.cpp 
+HEADERS += inc/mainview.h \
+    inc/settingsview.h \
+    inc/notifications.h
+SOURCES += src/main.cpp \
+    src/mainview.cpp \
+    src/settingsview.cpp \
+    src/notifications.cpp
 RESOURCES += loadgen.qrc
-
-symbian: {
-		MMP_RULES -= PAGED
-		MMP_RULES *= UNPAGED
-		
-		BLD_INF_RULES.prj_exports += "./rom/loadgen.iby CORE_IBY_EXPORT_PATH(tools,loadgen.iby)"
-        
-        INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-		
-        HEADERS += inc/engine.h \ 
-                   inc/enginewrapper.h 
-		SOURCES += src/engine.cpp \
-		           src/enginewrapper.cpp \
-				   ../../engine/src/loadgen_utils.cpp  \
-        		   ../../engine/src/loadgen_loadbase.cpp  \
- 				   ../../engine/src/loadgen_cpuload.cpp \
- 				   ../../engine/src/loadgen_memoryeat.cpp \
- 				   ../../engine/src/loadgen_phonecall.cpp \
- 				   ../../engine/src/loadgen_netconn.cpp \
- 				   ../../engine/src/loadgen_keypress.cpp \
- 				   ../../engine/src/loadgen_messages.cpp \ 
- 				   ../../engine/src/loadgen_applications.cpp \ 
- 				   ../../engine/src/loadgen_photocapture.cpp \
- 				   ../../engine/src/loadgen_bluetooth.cpp \ 
- 				   ../../engine/src/loadgen_pointerevent.cpp 
-		
-		
-		RSS_RULES += "group_name = \"RnD Tools\"";
-		LIBS += -leuser \
-				-lcommonengine \
-				-lapparc \
-				-lcone \ 
-				-leikcore \
-				-leikcoctl \
-				-leikctl \
-				-leikdlg \  
-				-lws32 \ 
-				-lapgrfx \
-				-lefsrv \
-				-lbafl \
-				-lgdi \
-				-legul \
-				-letel3rdparty \
-				-ldownloadmgr \
-				-lcommdb \
-				-lflogger \
-				-lestor \ 
-				-lmsgs \
-				-lsmcm \
-				-lgsmu \
-				-letext \
-				-lsendas2 \
-				-lecam \
-				-lfeatdiscovery \ 
-				-lcentralrepository \
-				-lesock \
-				-lbluetooth \
-				-lhal
-    TARGET.CAPABILITY = swevent ReadUserData WriteUserData NetworkServices UserEnvironment CAP_APPLICATION AllFiles
-
+symbian: { 
+    MMP_RULES -= PAGED
+    MMP_RULES *= UNPAGED
+    BLD_INF_RULES.prj_exports += "./rom/loadgen.iby CORE_IBY_EXPORT_PATH(tools,loadgen.iby)"
+    INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+    HEADERS += inc/engine.h \
+        inc/enginewrapper.h
+    SOURCES += src/engine.cpp \
+        src/enginewrapper.cpp \
+        ../../engine/src/loadgen_utils.cpp \
+        ../../engine/src/loadgen_loadbase.cpp \
+        ../../engine/src/loadgen_cpuload.cpp \
+        ../../engine/src/loadgen_memoryeat.cpp \
+        ../../engine/src/loadgen_phonecall.cpp \
+        ../../engine/src/loadgen_keypress.cpp \
+        ../../engine/src/loadgen_messages.cpp \
+        ../../engine/src/loadgen_applications.cpp \
+        ../../engine/src/loadgen_photocapture.cpp \
+        ../../engine/src/loadgen_bluetooth.cpp \
+        ../../engine/src/loadgen_pointerevent.cpp
+    RSS_RULES += "group_name = \"RnD Tools\"";
+    LIBS += -leuser \
+        -lcommonengine \
+        -lapparc \
+        -lcone \
+        -leikcore \
+        -leikcoctl \
+        -leikctl \
+        -leikdlg \
+        -lws32 \
+        -lapgrfx \
+        -lefsrv \
+        -lbafl \
+        -lgdi \
+        -legul \
+        -letel3rdparty \
+        -lcommdb \
+        -lflogger \
+        -lestor \
+        -lmsgs \
+        -lsmcm \
+        -lgsmu \
+        -letext \
+        -lsendas2 \
+        -lecam \
+        -lfeatdiscovery \
+        -lcentralrepository \
+        -lesock \
+        -lbluetooth \
+        -lhal
+    TARGET.CAPABILITY = swevent \
+        ReadUserData \
+        WriteUserData \
+        NetworkServices \
+        UserEnvironment \
+        CAP_APPLICATION \
+        AllFiles
     TARGET.UID2 = 0x100039CE
     TARGET.UID3 = 0x20011384
     // TARGET.SID = 0x20011384
-    TARGET.VID = 0x101FB657 // Nokia
-	
-    TARGET.EPOCHEAPSIZE = 0x10000 0x1000000  // Min 64Kb, Max 16Mb
-
-    ICON = ../../icons/qgn_menu_loadgen.svg 
-
-} else {
-    error("Only Symbian supported!")
+    TARGET.VID = 0x101FB657 \
+        // \
+        Nokia
+    TARGET.EPOCHEAPSIZE = 0x10000 \
+        0x1000000 \
+        // \
+        Min \
+        64Kb, \
+        Max \
+        16Mb
+    ICON = ../../icons/qgn_menu_loadgen.svg
 }
+else:error("Only Symbian supported!")
--- a/loadgen/ui/hb/src/engine.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/loadgen/ui/hb/src/engine.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -24,7 +24,7 @@
 #include "loadgen_cpuload.h"
 #include "loadgen_memoryeat.h"
 #include "loadgen_phonecall.h"
-#include "loadgen_netconn.h"
+//#include "loadgen_netconn.h"
 #include "loadgen_keypress.h"
 #include "loadgen_pointerevent.h"
 #include "loadgen_messages.h"
@@ -530,11 +530,12 @@
             item = CPhoneCall::NewL(iPhoneCallAttributes, iReferenceNumber);
             break;
             }
-        case ELoadGenCmdNewLoadNetConn:
+/*        case ELoadGenCmdNewLoadNetConn:
             {
             item = CNetConn::NewL(iNetConnAttributes, iReferenceNumber);
             break;
             }
+*/            
         case ELoadGenCmdNewLoadKeyPress:
             {
             item = CKeyPress::NewL(iKeyPressAttributes, iReferenceNumber);
@@ -1022,6 +1023,7 @@
 
 TNetConnAttributes CEngine::GetNetConnAttributes()
 	{ 
+/*  
 	if (iEditExistingLoad == EFalse)
 		{	
 		return iNetConnAttributes; 
@@ -1031,12 +1033,14 @@
 		CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex);
 		return (static_cast<CNetConn*>(aItem)->Attributes());
 		}
+*/		
 	}
 
 // --------------------------------------------------------------------------------------------		
 	
 void CEngine::ChangeNetConnAttributes(TNetConnAttributes aAttributes)
 	{
+/*    
 	if (iEditExistingLoad == EFalse) 
 		{
 		iNetConnAttributes = aAttributes; 
@@ -1045,7 +1049,8 @@
 		{
 		CLoadBase* aItem = iLoadItemList->At(iCurrentItemIndex);
 		static_cast<CNetConn*>(aItem)->SetAttributes(aAttributes);
-		}	
+		}
+*/			
 	}
 	
 // --------------------------------------------------------------------------------------------	
--- a/loadgen/ui/hb/src/mainview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/loadgen/ui/hb/src/mainview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -106,11 +106,12 @@
 		mMessagesLoadAction = mLoadSubMenu1->addAction("Messages");
 		connect(mMessagesLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
 		mSm->setMapping(mMessagesLoadAction, ELoadGenCmdNewLoadMessages);
-
+//TODO to be fixed using replacement for downloadmanager
+/*
 		mNetConnLoadAction = mLoadSubMenu1->addAction("Network conn.");
 		connect(mNetConnLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
 		mSm->setMapping(mNetConnLoadAction, ELoadGenCmdNewLoadNetConn);
-	
+*/	
 		mKeyPressLoadAction = mLoadSubMenu2->addAction("Key presses");
 		connect(mKeyPressLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
 		mSm->setMapping(mKeyPressLoadAction, ELoadGenCmdNewLoadKeyPress);
--- a/memspyui/ui/avkon/inc/MemSpyAppUi.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/inc/MemSpyAppUi.h	Thu Jun 24 14:55:55 2010 +0300
@@ -30,6 +30,7 @@
 #include "MemSpyDeviceWideOperationDialog.h"
 #include "MemSpyContainerObserver.h"
 #include <memspy/engine/memspyengineobserver.h>
+#include "MemSpySettings.h"
 
 // Classes referenced
 class CEikMenuBar;
@@ -41,7 +42,7 @@
 class RMemSpySession;
 
 
-class CMemSpyAppUi : public CAknAppUi, public MMemSpyContainerObserver, public MCoeControlObserver, public MMemSpyEngineObserver, public MMemSpyDeviceWideOperationDialogObserver
+class CMemSpyAppUi : public CAknAppUi, public MMemSpyContainerObserver, public MCoeControlObserver, public MMemSpyEngineObserver//, public MMemSpyDeviceWideOperationDialogObserver
     {
 public:
     //CMemSpyAppUi( CMemSpyEngine& aEngine );
@@ -95,7 +96,8 @@
     void OnCmdOutputToFileL();
  
     // Phone-information
-    void OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::TOperation aOp );
+    //void OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::TOperation aOp );
+    void OnCmdPhoneInformationOperationL( TDeviceWideOperation aOperation );
     void OnCmdPhoneInformationOperationKernelContainersL();
     
     // Automatic capture
@@ -116,6 +118,7 @@
     //CMemSpyEngine& iEngine;
     RMemSpySession& iMemSpySession;
     CMemSpyContainer* iAppContainer;
+    CMemSpySettings* iSettings;
     
     // For phone information dialog
     TBool iRunningDeviceWideOperation;
--- a/memspyui/ui/avkon/inc/MemSpyDeviceWideOperationDialog.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/inc/MemSpyDeviceWideOperationDialog.h	Thu Jun 24 14:55:55 2010 +0300
@@ -21,12 +21,41 @@
 // System includes
 #include <AknProgressDialog.h>
 #include <AknWaitDialog.h>
+#include <e32cmn.h>
 
 // Engine includes
 #include <memspy/engine/memspydevicewideoperations.h>
+#include <memspyengineclientinterface.h>
+#include <memspysession.h>
+
+//#include "MemSpyAppUi.h"
 
 // Classes referenced
-class CMemSpyEngine;
+//class RMemSpySession;
+
+enum TDeviceWideOperation
+{
+	OutputPhoneInfo = 0,
+	    
+	OutputDetailedPhoneInfo,
+	    
+	OutputHeapInfo,
+	    
+	OutputCompactHeapInfo,
+	    
+	OutputHeapCellListing,
+	    
+	OutputHeapData,
+	    
+	OutputStackInfo,
+	    
+	OutputCompactStackInfo,
+	    
+	OutputUserStackData,
+	    
+	OutputKernelStackData
+};
+
 
 class MMemSpyDeviceWideOperationDialogObserver
     {
@@ -37,15 +66,94 @@
     };
 
 
+class CMemSpyDwoProgressTracker : public CActive, public MProgressDialogCallback
+{
+public:
+	CMemSpyDwoProgressTracker(RMemSpySession &aSession);
+	
+	virtual ~CMemSpyDwoProgressTracker();
+	
+	void Start();
+	
+	void Cancel();
+	
+	TMemSpyDeviceWideOperationProgress Progress() { return iProgress; }
+	
+	CAknProgressDialog* ProgressDialog() { return iProgressDialog; }
+	
+	void UpdateProcessDialogL( TInt aProgress, const TDesC& aProgressText );
+
+protected: // from CActive
+	
+	void DialogDismissedL(TInt aButtonId);
+	
+	virtual void RunL();
+	 
+	virtual void DoCancel();
+	 
+	virtual TInt RunError(TInt aError);
+	
+private:
+	TMemSpyDeviceWideOperationProgress iProgress;
+	RMemSpySession iSession;	
+	
+	CEikProgressInfo* iProgressInfo;
+	CAknProgressDialog* iProgressDialog;		
+};
+
+
+
+
+
+
+class CMemSpyDwoTracker : public CActive
+{	
+public:	
+	CMemSpyDwoTracker(RMemSpySession &aSession, TDeviceWideOperation aOperation);
+	
+	virtual ~CMemSpyDwoTracker();
+	
+	void Start();
+	
+	void Cancel();		
+	
+protected: // from CActive
+	
+	virtual void RunL();
+	 
+	virtual void DoCancel();
+	 
+	virtual TInt RunError(TInt aError);		
+	
+private:
+	RMemSpySession iSession;
+	CMemSpyDwoProgressTracker *iProgressTracker;	
+	TDeviceWideOperation iOperation;
+};
+
+
+
+
+
+
+
 class CMemSpyDeviceWideOperationDialog : public CBase, public MProgressDialogCallback, public MMemSpyDeviceWideOperationsObserver
     {
 public:
-    static void ExecuteLD( CMemSpyEngine& aEngine, MMemSpyDeviceWideOperationDialogObserver& aObserver, CMemSpyDeviceWideOperations::TOperation aOperation );
+    //static void ExecuteLD( CMemSpyEngine& aEngine, MMemSpyDeviceWideOperationDialogObserver& aObserver, CMemSpyDeviceWideOperations::TOperation aOperation );
+	//static void ExecuteLD( RMemSpySession& aSession, MMemSpyDeviceWideOperationDialogObserver& aObserver, CMemSpyDeviceWideOperations::TOperation aOperation );
+	static void ExecuteLD( RMemSpySession& aSession, TDeviceWideOperation aOp );
     ~CMemSpyDeviceWideOperationDialog();
+    
+    //added
+    static CMemSpyDwoTracker* CreateDeviceWideOperation( RMemSpySession& aSession, TDeviceWideOperation aOp );
 
 private:
-    CMemSpyDeviceWideOperationDialog( CMemSpyEngine& aEngine, MMemSpyDeviceWideOperationDialogObserver& aObserver );
-    void ExecuteL( CMemSpyDeviceWideOperations::TOperation aOperation );
+    //CMemSpyDeviceWideOperationDialog( CMemSpyEngine& aEngine, MMemSpyDeviceWideOperationDialogObserver& aObserver );
+    //CMemSpyDeviceWideOperationDialog( RMemSpySession& aSession, MMemSpyDeviceWideOperationDialogObserver& aObserver );
+    CMemSpyDeviceWideOperationDialog( RMemSpySession& aSession );
+    //void ExecuteL( CMemSpyDeviceWideOperations::TOperation aOperation );
+    void ExecuteL( TDeviceWideOperation aOp );
 
 public: // API
     void Cancel();
@@ -60,13 +168,13 @@
     void SetDialogCaptionL( const TDesC& aText );
 
 private: // Member data
-    CMemSpyEngine& iEngine;
-    MMemSpyDeviceWideOperationDialogObserver& iObserver;
+    //CMemSpyEngine& iEngine;
+    RMemSpySession iSession;	
+    //MMemSpyDeviceWideOperationDialogObserver& iObserver;
     TBool iForcedCancel;
     CEikProgressInfo* iProgressInfo;
     CAknProgressDialog* iProgressDialog;
-    CMemSpyDeviceWideOperations* iOperation;
+    CMemSpyDeviceWideOperations* iOperation;        
     };
 
-
 #endif
--- a/memspyui/ui/avkon/inc/MemSpySettings.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/inc/MemSpySettings.h	Thu Jun 24 14:55:55 2010 +0300
@@ -25,6 +25,7 @@
 
 // Engine includes
 #include <memspy/engine/memspyengineoutputsink.h>
+#include <memspy/engine/memspyenginehelpersysmemtrackerconfig.h>
 
 // Classes referenced
 class CMemSpyEngine;
@@ -48,6 +49,8 @@
 public: // API
     inline RFs& FsSession() { return iFsSession; }
     void StoreSettingsL();
+    
+    void SetSinkType( TMemSpySinkType aType ) { iSinkType = aType; }
 
 private: // Settings methods
     void RestoreSettingsL();
@@ -56,9 +59,13 @@
     RFile SettingsFileLC( TBool aReplace = EFalse );
 
 private: // Data members
-    RFs& iFsSession;
-    //CMemSpyEngine& iEngine;
-    //RMemSpySession& iMemSpySession;
+    RFs& iFsSession;    
+    RMemSpySession& iMemSpySession;
+    
+private: //Settings
+    TMemSpySinkType iSinkType;
+    TMemSpyEngineHelperSysMemTrackerConfig iSwmtConfig;
+    RArray<TUid> iUidList;
     };
 
 
--- a/memspyui/ui/avkon/inc/MemSpyUiUtils.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/inc/MemSpyUiUtils.h	Thu Jun 24 14:55:55 2010 +0300
@@ -20,13 +20,17 @@
 
 // System includes
 #include <e32std.h>
+#include <e32const.h>
 
 // Engine includes
 #include <memspy/engine/memspyengineutils.h>
 #include <memspy/engine/memspyengineobjectthreadinfoobjects.h>
 
+typedef TBuf<20> TMemSpySizeText;
+
 _LIT( KTab, "\t" );
-	
+
+//ThreadInfoItemList view types
 _LIT( KTypeUnknown, "Unknown Type" );
 _LIT( KGeneral, "General" );
 _LIT( KHeap, "Heap" );
@@ -50,6 +54,26 @@
 _LIT( KLogicalDrivers, "Logical Device Drivers" );
 _LIT( KPhysicalDrivers, "Physical Device Drivers" );	
 
+//Kernel Object types
+_LIT( KTypeThread, "Thread" );
+_LIT( KTypeProcess, "Process" );
+_LIT( KTypeChunk, "Chunk" );
+_LIT( KTypeLibrary, "Library" );
+_LIT( KTypeSemaphore, "Semaphore" );
+_LIT( KTypeMutex, "Mutex" );
+_LIT( KTypeTimer, "Timer" );
+_LIT( KTypeServer, "Server" );
+_LIT( KTypeSession, "Session" );
+_LIT( KTypeLogicalDevice, "Logical Device" );
+_LIT( KTypePhysicalDevice, "Physical Device" );
+_LIT( KTypeLogicalChannel, "Logical Channel" );
+_LIT( KTypeChangeNotifier, "Change Notifier" );
+_LIT( KTypeUndertaker, "Undertaker" );
+_LIT( KTypeMsgQueue, "Msg. Queue" );
+_LIT( KTypePropertyRef, "Property Ref." );
+_LIT( KTypeCondVar, "Conditional Var." );
+
+
 class MemSpyUiUtils : public MemSpyEngineUtils
     {
 public:
@@ -57,6 +81,13 @@
     static void GetErrorText( TDes& aBuf, TInt aError );
     static HBufC* FormatItem( const TDesC& aCaption );
     static TDesC& ThreadInfoItemNameByType( TMemSpyThreadInfoItemType aType );
+    static void AppendPriority( TDes& aDes, TProcessPriority aPriority );
+    static void AppendExitInfo( TDes& aDes, TExitType aType, TInt aExitReason, const TDesC& aExitCategory  );
+    static void AppendExitType( TDes& aDes, TExitType aType );
+    
+    //for Kernel Objects
+    static TPtrC TypeAsString( TMemSpyDriverContainerType aType );
+    static TMemSpySizeText FormatSizeText( const TInt64& aValue, TInt aDecimalPlaces, TBool aExtraRounding = EFalse );
     };
 
 
--- a/memspyui/ui/avkon/inc/MemSpyViewKernelObjects.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/inc/MemSpyViewKernelObjects.h	Thu Jun 24 14:55:55 2010 +0300
@@ -66,8 +66,7 @@
     TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
 
 private: // From MAknTabObserver
-    void TabChangedL( TInt aIndex ); 
-    TPtrC TypeAsString( TMemSpyDriverContainerType aType );
+    void TabChangedL( TInt aIndex );     
     
 private: // Command handlers
     void OnCmdTerminateL();
--- a/memspyui/ui/avkon/inc/MemSpyViewThreadInfoItemGeneric.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/inc/MemSpyViewThreadInfoItemGeneric.h	Thu Jun 24 14:55:55 2010 +0300
@@ -52,7 +52,8 @@
     CMemSpyThread& Thread() const;
     CMemSpyThreadInfoContainer& Container() const;
     CMemSpyThreadInfoItemBase& InfoItem() const;
-
+    TThreadId ThreadId() { return iThreadId; }
+    
 public: // From CMemSpyViewBase
     void RefreshL();
     TMemSpyViewType ViewType() const;
--- a/memspyui/ui/avkon/inc/MemSpyViewThreadInfoItemList.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/inc/MemSpyViewThreadInfoItemList.h	Thu Jun 24 14:55:55 2010 +0300
@@ -38,7 +38,7 @@
     //CMemSpyViewThreadInfoItemList( CMemSpyEngine& aEngine, MMemSpyViewObserver& aObserver, CMemSpyThread& aThread );
 	CMemSpyViewThreadInfoItemList( RMemSpySession& aSession, MMemSpyViewObserver& aObserver, TProcessId aProcess, TThreadId aThread );
     ~CMemSpyViewThreadInfoItemList();
-    void ConstructL( const TRect& aRect, CCoeControl& aContainer, TAny* aSelectionRune = NULL );
+    void ConstructL( const TRect& aRect, CCoeControl& aContainer, TMemSpyThreadInfoItemType iType);
 
 public: // API
     const CMemSpyThreadInfoItemBase& CurrentInfoItem() const;
--- a/memspyui/ui/avkon/inc/MemSpyViewThreads.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/inc/MemSpyViewThreads.h	Thu Jun 24 14:55:55 2010 +0300
@@ -36,7 +36,7 @@
     {
 public:
     //CMemSpyViewThreads( CMemSpyEngine& aEngine, MMemSpyViewObserver& aObserver, CMemSpyProcess& aProcess );
-	CMemSpyViewThreads( RMemSpySession& aSession, MMemSpyViewObserver& aObserver, TProcessId aId );
+	CMemSpyViewThreads( RMemSpySession& aSession, MMemSpyViewObserver& aObserver, TProcessId aId, TThreadId aThreadId );
     ~CMemSpyViewThreads();
     void ConstructL( const TRect& aRect, CCoeControl& aContainer, TAny* aSelectionRune = NULL );
 
--- a/memspyui/ui/avkon/src/MemSpyAppUi.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyAppUi.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -257,13 +257,16 @@
     case EMemSpyCmdToolsAbout:
         OnCmdAboutL();
         break;
-    //
+    //         
     case EMemSpyCmdPhoneInfoGeneralSummary:
-        OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityGeneralSummary );
+        //OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityGeneralSummary );
+    	OnCmdPhoneInformationOperationL( OutputPhoneInfo );
+        break;        
+    case EMemSpyCmdPhoneInfoGeneralDetailed:
+        //OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityGeneralDetailed );
+        OnCmdPhoneInformationOperationL( OutputDetailedPhoneInfo );
         break;
-    case EMemSpyCmdPhoneInfoGeneralDetailed:
-        OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityGeneralDetailed );
-        break;
+    /*
     case EMemSpyCmdPhoneInfoGeneralHandles:
         OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityGeneralHandles );
         break;
@@ -271,30 +274,40 @@
         OnCmdPhoneInformationOperationKernelContainersL();
         break;
     //
+    */
     case EMemSpyCmdPhoneInfoHeapInfoSummary:
-        OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityHeapInfo );
+        //OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityHeapInfo );
+    	OnCmdPhoneInformationOperationL (OutputHeapInfo );
         break;
     case EMemSpyCmdPhoneInfoHeapInfoCompact:
-        OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EEntireDeviceHeapInfoCompact );
+        //OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EEntireDeviceHeapInfoCompact );
+    	OnCmdPhoneInformationOperationL( OutputCompactHeapInfo );
         break;
     case EMemSpyCmdPhoneInfoHeapCellListing:
-        OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityHeapCellListing );
+        //OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityHeapCellListing );
+        OnCmdPhoneInformationOperationL( OutputHeapCellListing );
         break;
+        
     case EMemSpyCmdPhoneInfoHeapDump:
-        OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityHeapData );
+        //OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityHeapData );
+    	OnCmdPhoneInformationOperationL( OutputHeapData );
         break;
-    //
+    //		   		    		
     case EMemSpyCmdPhoneInfoStackInfo:
-        OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityStackInfo );
+        //OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityStackInfo );
+        OnCmdPhoneInformationOperationL( OutputStackInfo );
         break;
     case EMemSpyCmdPhoneInfoStackInfoCompact:
-        OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EEntireDeviceStackInfoCompact );
+        //OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EEntireDeviceStackInfoCompact );
+        OnCmdPhoneInformationOperationL( OutputCompactStackInfo );
         break;
     case EMemSpyCmdPhoneInfoStackDumpUser:
-        OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityStackDataUser );
+        //OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityStackDataUser );
+    	OnCmdPhoneInformationOperationL( OutputUserStackData );
         break;
     case EMemSpyCmdPhoneInfoStackDumpKernel:
-        OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityStackDataKernel );
+        //OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::EPerEntityStackDataKernel );
+        OnCmdPhoneInformationOperationL( OutputKernelStackData );
         break;
 
     case EMemSpyCmdAutoCaptureToggle:
@@ -523,21 +536,26 @@
     }
 
 
-void CMemSpyAppUi::OnCmdPhoneInformationOperationL( CMemSpyDeviceWideOperations::TOperation aOp )
-    {	/* TODO
+void CMemSpyAppUi::OnCmdPhoneInformationOperationL( TDeviceWideOperation aOperation )
+    {	
+	//
+	//CMemSpyDeviceWideOperationDialog::ExecuteLD( iMemSpySession, aOperation );
+	CMemSpyDwoTracker* tracker = CMemSpyDeviceWideOperationDialog::CreateDeviceWideOperation( iMemSpySession, aOperation );
+	tracker->Start();		
+	/*
 #ifdef _DEBUG
     RDebug::Printf( "[MemSpy] CMemSpyAppUi::OnCmdPhoneInformationOperationL() - START - aOp: %d, iRunningDeviceWideOperation: %d, iAutoCaptureTimer is active: %d", aOp, iRunningDeviceWideOperation, iAutoCaptureTimer->IsActive() );
 #endif
 
     if  ( !iRunningDeviceWideOperation )
-        {
-        //CMemSpyDeviceWideOperationDialog::ExecuteLD( iEngine, *this, aOp );
+        {        
 		CMemSpyDeviceWideOperationDialog::ExecuteLD( iMemSpySession, *this, aOp );
         }
 
 #ifdef _DEBUG
     RDebug::Printf( "[MemSpy] CMemSpyAppUi::OnCmdPhoneInformationOperationL() - END - aOp: %d, iRunningDeviceWideOperation: %d, iAutoCaptureTimer is active: %d", aOp, iRunningDeviceWideOperation, iAutoCaptureTimer->IsActive() );
-#endif*/
+#endif
+	*/
     }
 
 
@@ -639,7 +657,7 @@
     RDebug::Printf( "[MemSpy] CMemSpyAppUi::AutoCaptureCallBackL() - START - iAutoCaptureOperationType: %d, iAutoCaptureTimer is active: %d", iAutoCaptureOperationType, iAutoCaptureTimer->IsActive() );
 #endif
 
-    OnCmdPhoneInformationOperationL( iAutoCaptureOperationType );
+   // OnCmdPhoneInformationOperationL( iAutoCaptureOperationType );
 
 #ifdef _DEBUG
     RDebug::Printf( "[MemSpy] CMemSpyAppUi::AutoCaptureCallBackL() - END - iAutoCaptureOperationType: %d, iAutoCaptureTimer is active: %d", iAutoCaptureOperationType, iAutoCaptureTimer->IsActive() );
@@ -668,25 +686,15 @@
 
 void CMemSpyAppUi::OnCmdOutputToDebugL()
     {
-	/* TODO
-	iMemSpyAPI.OutputToDebug();
-	*/
-	/*
-    iEngine.InstallSinkL( ESinkTypeDebug );
-    MemSpyDocument().Settings().StoreSettingsL();
-    */
+	iMemSpySession.SwitchOutputSink( ESinkTypeDebug ); //set in engine
+	MemSpyDocument().Settings().SetSinkType( ESinkTypeDebug ); //set in settings
     }
 
 
 void CMemSpyAppUi::OnCmdOutputToFileL()
     {
-	/* TODO
-	iMemSpyAPI.OutputToFile();
-	*/
-	/*
-    iEngine.InstallSinkL( ESinkTypeFile );
-    MemSpyDocument().Settings().StoreSettingsL();
-    */
+	iMemSpySession.SwitchOutputSink( ESinkTypeFile ); //set in engine
+	MemSpyDocument().Settings().SetSinkType( ESinkTypeFile ); //set in settings
     }
 
 
--- a/memspyui/ui/avkon/src/MemSpyDeviceWideOperationDialog.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyDeviceWideOperationDialog.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -26,12 +26,25 @@
 #include <avkon.hrh>
 #include <memspyui.rsg>
 
+#include <memspysession.h>
 
+/*
 CMemSpyDeviceWideOperationDialog::CMemSpyDeviceWideOperationDialog( CMemSpyEngine& aEngine, MMemSpyDeviceWideOperationDialogObserver& aObserver )
 :   iEngine( aEngine ), iObserver( aObserver )
     {
     }
 
+CMemSpyDeviceWideOperationDialog::CMemSpyDeviceWideOperationDialog( RMemSpySession& aSession, MMemSpyDeviceWideOperationDialogObserver& aObserver )
+:   iSession( aSession ), iObserver( aObserver )
+    {
+    }    
+*/
+
+CMemSpyDeviceWideOperationDialog::CMemSpyDeviceWideOperationDialog( RMemSpySession& aSession )
+:   iSession( aSession )
+    {
+    }    
+
 
 CMemSpyDeviceWideOperationDialog::~CMemSpyDeviceWideOperationDialog()
     {
@@ -54,7 +67,7 @@
     RDebug::Printf("[MemSpy] CMemSpyDeviceWideOperationDialog::~CMemSpyDeviceWideOperationDialog() - sending EDialogDismissed to observer..." );
 #endif
 
-    iObserver.DWOperationCompleted();
+    //iObserver.DWOperationCompleted(); //TODO
 
 #ifdef _DEBUG
     RDebug::Printf("[MemSpy] CMemSpyDeviceWideOperationDialog::~CMemSpyDeviceWideOperationDialog() - END" );
@@ -62,8 +75,10 @@
     }
 
 
-void CMemSpyDeviceWideOperationDialog::ExecuteL( CMemSpyDeviceWideOperations::TOperation aOperation )
+//void CMemSpyDeviceWideOperationDialog::ExecuteL( CMemSpyDeviceWideOperations::TOperation aOperation )
+void CMemSpyDeviceWideOperationDialog::ExecuteL( TDeviceWideOperation aOp )
     {
+	/*
 #ifdef _DEBUG
     RDebug::Printf("[MemSpy] CMemSpyDeviceWideOperationDialog::ExecuteL() - START" );
 #endif
@@ -88,13 +103,15 @@
 #ifdef _DEBUG
     RDebug::Printf("[MemSpy] CMemSpyDeviceWideOperationDialog::ExecuteL() - END" );
 #endif
+	*/
     }
 
-void CMemSpyDeviceWideOperationDialog::ExecuteLD( CMemSpyEngine& aEngine, MMemSpyDeviceWideOperationDialogObserver& aObserver, CMemSpyDeviceWideOperations::TOperation aOperation )
+void CMemSpyDeviceWideOperationDialog::ExecuteLD( RMemSpySession& aSession, TDeviceWideOperation aOp )
     {
-    CMemSpyDeviceWideOperationDialog* self = new(ELeave) CMemSpyDeviceWideOperationDialog( aEngine, aObserver );
+    //CMemSpyDeviceWideOperationDialog* self = new(ELeave) CMemSpyDeviceWideOperationDialog( aSession, aObserver );
+	CMemSpyDeviceWideOperationDialog* self = new(ELeave) CMemSpyDeviceWideOperationDialog( aSession );
     CleanupStack::PushL( self );
-    self->ExecuteL( aOperation );
+    self->ExecuteL( aOp );
     CleanupStack::PopAndDestroy( self );
     }
 
@@ -112,7 +129,7 @@
         iOperation->Cancel();
         }
     //
-    iObserver.DWOperationCancelled();
+    //iObserver.DWOperationCancelled();
 
 #ifdef _DEBUG
     RDebug::Printf("[MemSpy] CMemSpyDeviceWideOperationDialog::Cancel() - END" );
@@ -147,7 +164,7 @@
     case MMemSpyDeviceWideOperationsObserver::EOperationSized:
         break;
     case MMemSpyDeviceWideOperationsObserver::EOperationStarting:
-        iObserver.DWOperationStarted();
+        //iObserver.DWOperationStarted();
         break;
     case MMemSpyDeviceWideOperationsObserver::EOperationProgressStart:
         ASSERT( iProgressDialog != NULL );
@@ -191,7 +208,180 @@
         }
     }
 
+CMemSpyDwoTracker* CMemSpyDeviceWideOperationDialog::CreateDeviceWideOperation( RMemSpySession& aSession, TDeviceWideOperation aOp )
+{
+	return new CMemSpyDwoTracker( aSession, aOp );
+}
+
+
+
+
+
+
+
+
+
 
 
 
 
+CMemSpyDwoProgressTracker::CMemSpyDwoProgressTracker(RMemSpySession &aSession) 
+	: CActive( EPriorityStandard ), iSession( aSession )
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CMemSpyDwoProgressTracker::~CMemSpyDwoProgressTracker()
+	{
+	Cancel();	
+	}
+
+void CMemSpyDwoProgressTracker::Start()
+	{
+	ASSERT( iProgressDialog == NULL );
+	iProgressDialog = new( ELeave ) CAknProgressDialog( reinterpret_cast< CEikDialog** >( &iProgressDialog ), ETrue );
+	iProgressDialog->PrepareLC( R_MEMSPY_DEVICE_WIDE_OPERATION_PROGRESS_DIALOG );
+	iProgressDialog->SetCallback( this );
+	iProgressDialog->SetGloballyCapturing( ETrue );
+	iProgressInfo = iProgressDialog->GetProgressInfoL();	
+	
+	iSession.NotifyDeviceWideOperationProgress( iProgress, iStatus );
+	
+	UpdateProcessDialogL( iProgress.Progress(), iProgress.Description() );
+	
+	SetActive();
+	
+	iProgressDialog->RunLD();
+	}
+
+void CMemSpyDwoProgressTracker::Cancel()
+	{	
+	}
+
+void CMemSpyDwoProgressTracker::RunL()
+    { 		
+    // If an error occurred handle it in RunError().
+    User::LeaveIfError(iStatus.Int());
+ 
+    // Resubmit the request immediately    
+    iSession.NotifyDeviceWideOperationProgress( iProgress, iStatus );     
+    
+    SetActive();            
+    
+    UpdateProcessDialogL( iProgress.Progress(), iProgress.Description() );    
+    }
+ 
+void CMemSpyDwoProgressTracker::DoCancel()
+	{ 	
+	}
+ 
+TInt CMemSpyDwoProgressTracker::RunError(TInt aError)
+	{ 
+	// KErrNotReady and KErrCancel errors are OK, they just notify 
+	// us about the outstanding notification request that won't be 
+	// processed.		
+    return KErrNone;
+	}
+
+void CMemSpyDwoProgressTracker::UpdateProcessDialogL( TInt aProgress, const TDesC& aProgressText )
+	{
+	if(iProgressDialog)
+		{
+		iProgressDialog->SetTextL( aProgressText );
+	    }
+	 
+	if(iProgressInfo)
+		{
+	    iProgressInfo->SetAndDraw( aProgress );	
+		}
+	}
+
+void CMemSpyDwoProgressTracker::DialogDismissedL(TInt aButtonId)
+	{
+	iProgressDialog = NULL;
+	iProgressInfo = NULL;	
+	 
+	Cancel();
+	}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+CMemSpyDwoTracker::CMemSpyDwoTracker( RMemSpySession &aSession, TDeviceWideOperation aOperation )
+:	CActive( EPriorityStandard ), 
+	iSession( aSession ),
+	iProgressTracker(new CMemSpyDwoProgressTracker( aSession )),
+	iOperation( aOperation )
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CMemSpyDwoTracker::~CMemSpyDwoTracker()
+	{		
+	Cancel();
+	
+	delete iProgressTracker;
+	}
+
+void CMemSpyDwoTracker::Start()
+{	
+	void (RMemSpySession::*functions[])(TRequestStatus&) = { 
+		&RMemSpySession::OutputPhoneInfo,
+		&RMemSpySession::OutputDetailedPhoneInfo,
+		&RMemSpySession::OutputHeapInfo,
+		&RMemSpySession::OutputCompactHeapInfo,
+		&RMemSpySession::OutputHeapCellListing,
+		&RMemSpySession::OutputHeapData,
+		&RMemSpySession::OutputStackInfo,
+		&RMemSpySession::OutputCompactStackInfo,
+		&RMemSpySession::OutputUserStackData,
+		&RMemSpySession::OutputKernelStackData };
+		
+	(iSession.*functions[iOperation])(iStatus);			
+	
+	SetActive();
+	
+	iProgressTracker->Start();				
+}
+
+void CMemSpyDwoTracker::Cancel()
+{
+}
+ 
+void CMemSpyDwoTracker::RunL()
+    { 
+    // If an error occurred handle it in RunError().
+    User::LeaveIfError(iStatus.Int());
+ 
+    if( !IsActive() )
+    	{
+		iProgressTracker->ProgressDialog()->ProcessFinishedL();
+    	}
+    }
+ 
+void CMemSpyDwoTracker::DoCancel()
+{ 
+	// Cancel progress tracker
+	iProgressTracker->Cancel();
+	
+	iSession.CancelDeviceWideOperationL();	
+}
+ 
+TInt CMemSpyDwoTracker::RunError(TInt aError)
+{ 
+	// Emit the finished(false) signal to notify user 
+	// operation was canceled
+	//emit finished(false); //TODO:
+	
+    return KErrNone;
+}
--- a/memspyui/ui/avkon/src/MemSpySettings.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpySettings.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -26,63 +26,38 @@
 #include <memspy/engine/memspyenginelogger.h>
 #include <memspy/engine/memspyenginehelperprocess.h>
 #include <memspy/engine/memspyenginehelpersysmemtracker.h>
-#include <memspy/engine/memspyenginehelpersysmemtrackerconfig.h>
 
 #include <memspysession.h>
 
 // Constants
-_LIT( KMemSpySettingsFileName, "settings.dat" );
+_LIT( KMemSpySettingsFileName, "settings.dat" ); //file or avkon client settings
 
 // Version 03 dumped some of the system wide memory tracker settings
 const TInt KMemSpySettingsFileFormatVersion = 6;
 
-/*
-CMemSpySettings::CMemSpySettings( RFs& aFsSession, CMemSpyEngine& aEngine )
-:   iFsSession( aFsSession ), iEngine( aEngine )
-    {
-    }
-*/
 CMemSpySettings::CMemSpySettings( RFs& aFsSession, RMemSpySession& aSession )
-:   iFsSession( aFsSession )
+:   iFsSession( aFsSession ), iMemSpySession( aSession )
     {	
     }
 
 
 CMemSpySettings::~CMemSpySettings()
-    {
-	/*
+    {	
     TRACE( RDebug::Printf( "CMemSpySettings::~CMemSpySettings() - START" ) );
     TRAP_IGNORE( StoreSettingsL() );
-    TRACE( RDebug::Printf( "CMemSpySettings::~CMemSpySettings() - END" ) );
-    */
-	
-	//iMemSpyAPI.StoreSettings();
+    TRACE( RDebug::Printf( "CMemSpySettings::~CMemSpySettings() - END" ) );    	
     }
 
 
 void CMemSpySettings::ConstructL()
-    {
-	/*
+    {	
     TRACE( RDebug::Print( _L("CMemSpySettings::ConstructL() - START") ) );
 
     TRAP_IGNORE( RestoreSettingsL() );
 
-    TRACE( RDebug::Print( _L("CMemSpySettings::ConstructL() - END") ) );
-    */
-	
-	//iMemSpyAPI.RestoreSettings();
+    TRACE( RDebug::Print( _L("CMemSpySettings::ConstructL() - END") ) );    
     }
 
-/*
-CMemSpySettings* CMemSpySettings::NewL( RFs& aFsSession, CMemSpyEngine& aEngine )
-    {
-    CMemSpySettings* self = new(ELeave) CMemSpySettings( aFsSession, aEngine );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-*/
 CMemSpySettings* CMemSpySettings::NewL( RFs& aFsSession, RMemSpySession& aSession )
     {
     CMemSpySettings* self = new(ELeave) CMemSpySettings( aFsSession, aSession );
@@ -92,7 +67,6 @@
     return self;
     }
 
-/*
 void CMemSpySettings::GetSettingsFileNameL( TDes& aFileName )
     {
     GetSettingsPathL( aFileName );
@@ -120,7 +94,6 @@
     TRACE( RDebug::Print( _L("CMemSpySettings::GetSettingsPathL() - END - %S"), &aPath ) );
     }
 
-
 RFile CMemSpySettings::SettingsFileLC( TBool aReplace )
     {
     TRACE( RDebug::Print( _L("CMemSpySettings::SettingsFileLC() - START - aReplace: %d"), aReplace ) );
@@ -170,20 +143,23 @@
     // Verion info
     stream.WriteInt32L( KMemSpySettingsFileFormatVersion );
     
-    // Engine settings
-    TRACE( RDebug::Printf( "CMemSpySettings::StoreSettingsL() - sinkType: %d", iEngine.SinkType() ) );
-    stream.WriteUint8L( iEngine.SinkType() );
-
+    stream.WriteUint8L( iSinkType );
+    
+    
     // Get SWMT config
-    CMemSpyEngineHelperSysMemTracker& swmt = iEngine.HelperSysMemTracker();
-    TMemSpyEngineHelperSysMemTrackerConfig swmtConfig;
-    swmt.GetConfig( swmtConfig );
+    //CMemSpyEngineHelperSysMemTracker& swmt = iEngine.HelperSysMemTracker();
+    //TMemSpyEngineHelperSysMemTrackerConfig swmtConfig;
+    //swmt.GetConfig( swmtConfig );
 
     // Write SWMT settings
-    stream.WriteInt32L( swmtConfig.TimerPeriod().Int() );
-    stream.WriteUint8L( swmtConfig.DumpData() );
+    //stream.WriteInt32L( swmtConfig.TimerPeriod().Int() );
+    //stream.WriteUint8L( swmtConfig.DumpData() );
+    
+    stream.WriteInt32L( iSwmtConfig.TimerPeriod().Int() );
+    stream.WriteUint8L( iSwmtConfig.DumpData() );
     
     // Write memory tracking auto-start process list
+    /*
     const RArray<TUid>& processUidList = iEngine.HelperProcess().MemoryTrackingAutoStartProcessList();
     stream.WriteInt32L( processUidList.Count() );
     for( TInt i=0; i<processUidList.Count(); i++ )
@@ -192,12 +168,24 @@
         TRACE( RDebug::Printf( "CMemSpySettings::StoreSettingsL() - process tracker uid[%02d]: 0x%08x", i, uid.iUid ) );
         stream << uid;
         }
-
+    */    
+    stream.WriteInt32L( iUidList.Count() );
+    for( TInt i = 0; i < iUidList.Count(); i++ )
+    	{
+		const TUid uid = iUidList[ i ];
+		TRACE( RDebug::Printf( "CMemSpySettings::StoreSettingsL() - process tracker uid[%02d]: 0x%08x", i, uid.iUid ) );
+		stream << uid;
+    	}
+    
     // Write memory tracking categories
-    stream.WriteInt32L( swmtConfig.iEnabledCategories );
+    //stream.WriteInt32L( swmtConfig.iEnabledCategories );
+    stream.WriteInt32L( iSwmtConfig.iEnabledCategories );
     
     // Write heap tracking thread name filter
-    stream.WriteInt32L( swmtConfig.iThreadNameFilter.Length() );
+    //stream.WriteInt32L( swmtConfig.iThreadNameFilter.Length() );
+    stream.WriteInt32L( iSwmtConfig.iThreadNameFilter.Length() );
+    
+    /*
     if ( swmtConfig.iThreadNameFilter.Length() > 0 )
         {
         stream.WriteL( swmtConfig.iThreadNameFilter, swmtConfig.iThreadNameFilter.Length() );
@@ -205,21 +193,25 @@
     
     // Write mode
     stream.WriteInt32L( swmtConfig.iMode );
+    */
+    if ( iSwmtConfig.iThreadNameFilter.Length() > 0 )
+    	{
+		stream.WriteL( iSwmtConfig.iThreadNameFilter, iSwmtConfig.iThreadNameFilter.Length() );
+    	}
+        
+    // Write mode
+    stream.WriteInt32L( iSwmtConfig.iMode );
     
     stream.CommitL();
-    CleanupStack::PopAndDestroy( &stream ); // Closes file
-    TRACE( RDebug::Printf( "CMemSpySettings::StoreSettingsL() - END - sinkType: %d", iEngine.SinkType() ) );
+    CleanupStack::PopAndDestroy( &stream ); // Closes file    
     }
 
-
 void CMemSpySettings::RestoreSettingsL()
-    {
-    TRACE( RDebug::Printf( "CMemSpySettings::RestoreSettingsL() - START - current engine sinkType: %d", iEngine.SinkType() ) );
-
+    {  
     RFile file = SettingsFileLC();
     RFileReadStream stream( file );
     CleanupStack::Pop(); // file
-    CleanupClosePushL( stream );
+    CleanupClosePushL( stream ); 
     
     // Version info
     const TInt version = stream.ReadInt32L(); // discarded for now
@@ -228,11 +220,13 @@
     // Engine settings
     TMemSpySinkType type = static_cast< TMemSpySinkType >( stream.ReadUint8L() );
     TRACE( RDebug::Printf( "CMemSpySettings::RestoreSettingsL() - read sinkType: %d", type ) );
-    iEngine.InstallSinkL( type );
+       
+    //iEngine.InstallSinkL( type );
+    //iMemSpySession.SwitchOutputSink( type ); //TODO: to argue to set stuf in engine from here
     
     // Set SWMT config
     TMemSpyEngineHelperSysMemTrackerConfig swmtConfig;
-    swmtConfig.iTimerPeriod = TTimeIntervalMicroSeconds32( stream.ReadInt32L() );
+    swmtConfig.iTimerPeriod = TTimeIntervalMicroSeconds32( stream.ReadInt32L() ); 
     swmtConfig.iDumpData = static_cast< TBool >( stream.ReadUint8L() );
 
     if  ( version < 3 )
@@ -247,21 +241,28 @@
     // Restore memory tracking auto-start process uids if file format supports it...
     if ( version >= 2 )
         {
-        RArray<TUid> list;
+        RArray<TUid> list;		
         CleanupClosePushL( list );
         //
         const TInt count = stream.ReadInt32L();
+        
+        //CArrayFixFlat<TUid>* list = new(ELeave)CArrayFixFlat<TUid>(count);
+        //CleanupStack::PushL(list );               
+        
         for( TInt i=0; i<count; i++ )
             {
             TUid processUid;
             stream >> processUid;
-            //
-            TRACE( RDebug::Printf( "CMemSpySettings::RestoreSettingsL() - process tracker uid[%02d]: 0x%08x", i, processUid.iUid ) );
-            User::LeaveIfError( list.Append( processUid ) );
+            //           
+            User::LeaveIfError( list.Append( processUid ) );            
+            //list->AppendL( processUid );
             }
         //
-        CMemSpyEngineHelperProcess& processHelper = iEngine.HelperProcess();
-        processHelper.SetMemoryTrackingAutoStartProcessListL( list );
+        //CMemSpyEngineHelperProcess& processHelper = iEngine.HelperProcess();
+        //processHelper.SetMemoryTrackingAutoStartProcessListL( list );        
+        //iMemSpySession.SetSwmtAutoStartProcessList( list );
+        iUidList = list; 	//TODO: to get it into the engine
+        
         CleanupStack::PopAndDestroy( &list );
         }
     
@@ -287,11 +288,13 @@
         swmtConfig.iMode = (TMemSpyEngineHelperSysMemTrackerConfig::TMemSpyEngineSysMemTrackerMode)stream.ReadInt32L();
         }
     
-    CMemSpyEngineHelperSysMemTracker& swmt = iEngine.HelperSysMemTracker();
-    swmt.SetConfigL( swmtConfig );
-
-    CleanupStack::PopAndDestroy( &stream ); // Closes file
-    TRACE( RDebug::Printf( "CMemSpySettings::RestoreSettingsL() - END - engine sink type: %d", iEngine.SinkType() ) );
+    //CMemSpyEngineHelperSysMemTracker& swmt = iEngine.HelperSysMemTracker();
+    //swmt.SetConfigL( swmtConfig );
+    //iMemSpySession.SetSwmtConfig( swmtConfig );
+    
+    iSwmtConfig = swmtConfig; 	//TODO: to get it into the engine
+    
+    CleanupStack::PopAndDestroy( &stream ); // Closes file    
     }
 
-*/
+
--- a/memspyui/ui/avkon/src/MemSpyUiUtils.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyUiUtils.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -149,3 +149,219 @@
 	return pType;
 	}
 
+
+void MemSpyUiUtils::AppendPriority( TDes& aDes, TProcessPriority aPriority )
+	{
+	switch( aPriority )
+		{
+	    case EPriorityLow:
+	        aDes += _L("[L]");
+	        break;
+	    case EPriorityBackground:
+	        aDes += _L("[B]");
+	        break;
+	    case EPriorityForeground:
+	        aDes += _L("[F]");
+	        break;
+	    case EPriorityHigh:
+	        aDes += _L("[H]");
+	        break;
+	    case EPriorityWindowServer:
+	        aDes += _L("[WS]");
+	        break;
+	    case EPriorityFileServer:
+	        aDes += _L("[FS]");
+	        break;
+	    case EPriorityRealTimeServer:
+	        aDes += _L("[RTS]");
+	        break;
+	    case EPrioritySupervisor:
+	        aDes += _L("[SUP]");
+	        break;
+	    default:
+	        aDes += _L("[?]");
+	        break;
+		}
+	}
+
+void MemSpyUiUtils::AppendExitInfo( TDes& aDes, TExitType aType, TInt aExitReason, const TDesC& aExitCategory  )
+	{
+    aDes.Append( '[' );
+    const TInt length = aDes.Length();
+    AppendExitType( aDes, aType );
+    aDes.SetLength( length + 1 ); // Remove all but the first letter
+    aDes.Append( ']' );
+    
+    if  ( aType == EExitKill || aType == EExitPending )
+        {
+        // Kill implies "clean" exit. Pending implies not yet dead.
+        }
+    else
+        {
+        TMemSpyTruncateOverflow overflow;
+
+        // Terminate or Panic implies abnormal exit condition, so
+        // show full exit info.
+        _LIT( KAbnormalFormatSpec, " %S-%d" );
+        aDes.AppendFormat( KAbnormalFormatSpec, &overflow, &aExitCategory, aExitReason );
+        }
+	}
+
+
+void MemSpyUiUtils::AppendExitType( TDes& aDes, TExitType aType )
+    {
+    _LIT( KExitTypeKilled, "Killed" );
+    _LIT( KExitTypeTerminated, "Terminated" );
+    _LIT( KExitTypePanicked, "Panicked" );
+    _LIT( KExitTypePending, "Pending" );
+    
+    // Panic and Terminate are exceptional exit conditions.
+    // Kill, is ironically, not an exceptional condition.
+    switch( aType )
+        {
+    case EExitKill:
+        aDes += KExitTypeKilled;
+        break;
+    case EExitTerminate:
+        aDes += KExitTypeTerminated;
+        break;
+    case EExitPanic:
+        aDes += KExitTypePanicked;
+        break;
+    default:
+    case EExitPending:
+        aDes += KExitTypePending;
+        break;
+        }
+    }
+
+
+TPtrC MemSpyUiUtils::TypeAsString( TMemSpyDriverContainerType aType )
+    {     
+    TPtrC pType( KTypeUnknown );
+    //
+    switch( aType )
+        {
+    case EMemSpyDriverContainerTypeThread:
+        pType.Set( KTypeThread );
+        break;
+    case EMemSpyDriverContainerTypeProcess:
+        pType.Set( KTypeProcess );
+        break;
+    case EMemSpyDriverContainerTypeChunk:
+        pType.Set( KTypeChunk );
+        break;
+    case EMemSpyDriverContainerTypeLibrary:
+        pType.Set( KTypeLibrary );
+        break;
+    case EMemSpyDriverContainerTypeSemaphore:
+        pType.Set( KTypeSemaphore );
+        break;
+    case EMemSpyDriverContainerTypeMutex:
+        pType.Set( KTypeMutex );
+        break;
+    case EMemSpyDriverContainerTypeTimer:
+        pType.Set( KTypeTimer );
+        break;
+    case EMemSpyDriverContainerTypeServer:
+        pType.Set( KTypeServer );
+        break;
+    case EMemSpyDriverContainerTypeSession:
+        pType.Set( KTypeSession );
+        break;
+    case EMemSpyDriverContainerTypeLogicalDevice:
+        pType.Set( KTypeLogicalDevice );
+        break;
+    case EMemSpyDriverContainerTypePhysicalDevice:
+        pType.Set( KTypePhysicalDevice );
+        break;
+    case EMemSpyDriverContainerTypeLogicalChannel:
+        pType.Set( KTypeLogicalChannel );
+        break;
+    case EMemSpyDriverContainerTypeChangeNotifier:
+        pType.Set( KTypeChangeNotifier );
+        break;
+    case EMemSpyDriverContainerTypeUndertaker:
+        pType.Set( KTypeUndertaker );
+        break;
+    case EMemSpyDriverContainerTypeMsgQueue:
+        pType.Set( KTypeMsgQueue );
+        break;
+    case EMemSpyDriverContainerTypePropertyRef:
+        pType.Set( KTypePropertyRef );
+        break;
+    case EMemSpyDriverContainerTypeCondVar:
+        pType.Set( KTypeCondVar );
+        break;
+        
+    default:
+        break;
+        }
+    //
+    return pType;
+    }
+
+TMemSpySizeText MemSpyUiUtils::FormatSizeText( const TInt64& aValue, TInt aDecimalPlaces, TBool aExtraRounding )
+    {
+    _LIT(KFormatKilo, "%dK");
+    _LIT(KFormatMega, "%SM");
+    _LIT(KFormatGiga, "%SG");
+
+	TMemSpySizeText buf;
+	if  ( aValue < 1024000 )					// If < 1000K
+		{
+		TInt sizeInK = 0;
+
+        if  ( aValue != 0 )
+			{
+			sizeInK = I64INT( (aValue + 512) >> 10 );
+			if  (sizeInK < 1)
+                {
+				sizeInK = 1;
+                }
+			if  (sizeInK > 999)
+                {
+				sizeInK = 999;
+                }
+			}
+
+        buf.Format( KFormatKilo, sizeInK );
+		}
+	else
+		{
+		TReal sizeInM = I64INT( aValue );
+		sizeInM /= 1048576;
+		if  ( sizeInM < 1 )
+            {
+			sizeInM = 1;
+            }
+
+        TPtrC pFormat( KFormatMega );
+		if  ( sizeInM >= 1000 )
+			{
+			sizeInM /= 1024;				// Size in G
+			if  (sizeInM < 1)
+                {
+				sizeInM = 1;
+                }
+			
+            pFormat.Set( KFormatGiga );
+			}
+
+        if  ( sizeInM > 999.9)
+            {
+            sizeInM = 999.9;
+            }
+
+        if  ( aExtraRounding )
+            {
+			sizeInM += 0.499999;
+            }
+
+		TBuf<16> size;
+		size.Num( sizeInM, TRealFormat( 14, aDecimalPlaces ) );	// Allow for "17179869184.0"G which is 2^64
+        buf.Format( pFormat, &size );
+		}
+
+    return buf;
+    }
--- a/memspyui/ui/avkon/src/MemSpyViewKernel.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewKernel.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -102,13 +102,11 @@
     const TInt index = iListBox->CurrentItemIndex();
     //
     if  ( index == 0 )
-        {
-        //child = new(ELeave) CMemSpyViewKernelContainers( iEngine, iObserver );
+        {        
 		child = new(ELeave) CMemSpyViewKernelContainers( iMemSpySession, iObserver );
         }
     else if ( index == 1 )
-        {
-        //child = new(ELeave) CMemSpyViewKernelHeap( iEngine, iObserver );
+        {        
 		child = new(ELeave) CMemSpyViewKernelHeap( iMemSpySession, iObserver );
         }
 	
--- a/memspyui/ui/avkon/src/MemSpyViewKernelContainers.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewKernelContainers.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -56,7 +56,7 @@
     {
     _LIT( KTitle, "Kernel Objects" );
     SetTitleL( KTitle );
-    //
+    //    
     CMemSpyViewBase::ConstructL( aRect, aContainer, aSelectionRune );
     }
 
@@ -107,10 +107,10 @@
 		{
 		TInt count = iKernelObjects[i]->Count();
 		TInt size = iKernelObjects[i]->Size();
-		const TMemSpySizeText sizeText( MemSpyEngineUtils::FormatSizeText( size, 0 ) ); //TODO: is this OK to call Engine Utils?
+		const TMemSpySizeText sizeText( MemSpyUiUtils::FormatSizeText( size, 0 ) );
 								
 		HBufC* tempName = HBufC::NewL( iKernelObjects[i]->Name().Length() + 32 );
-		//HBufC* tempName = HBufC::NewL( KMaxFullName );
+		
 		CleanupStack::PushL( tempName );
 		TPtr tempNamePtr( tempName->Des() );
 		tempNamePtr.Copy( iKernelObjects[i]->Name() );									
@@ -118,7 +118,7 @@
 		_LIT(KNameFormat, "\t%S\t\t%d item");
 		TPtr pName( tempName->Des() );
 		//
-		const TPtrC pType( TypeAsString( iKernelObjects[i]->Type() ) );
+		const TPtrC pType( MemSpyUiUtils::TypeAsString( iKernelObjects[i]->Type() ) );
 		//
 		pName.Format( KNameFormat, &pType, count );
 		//
@@ -137,19 +137,6 @@
 	CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );	
 	listbox->Model()->SetItemTextArray( model );
 	listbox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
-
-	/*
-    // Take ownership of new model
-    CMemSpyEngineHelperKernelContainers& kernelContainerManager = iEngine.HelperKernelContainers();
-    CMemSpyEngineGenericKernelObjectContainer* model = kernelContainerManager.ObjectsAllL();
-    delete iModel;
-    iModel = model;
-    
-    // Set up list box
-    CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );
-    listbox->Model()->SetItemTextArray( model );
-    listbox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
-    */
     }
 
 
@@ -174,96 +161,5 @@
 
 void CMemSpyViewKernelContainers::OnCmdOutputAllContainerContentsL()
     {
-	iMemSpySession.OutputAllContainerContents();
-		
-	/*
-    CMemSpyEngineOutputSink& sink = iEngine.Sink();
-    iModel->OutputL( sink );
-    */
+	iMemSpySession.OutputAllContainerContents();		
     }
-
-//formating methods
-TPtrC CMemSpyViewKernelContainers::TypeAsString( TMemSpyDriverContainerType aType )
-    {
-    _LIT( KTypeUnknown, "Unknown Type" );
-    _LIT( KTypeThread, "Thread" );
-    _LIT( KTypeProcess, "Process" );
-    _LIT( KTypeChunk, "Chunk" );
-    _LIT( KTypeLibrary, "Library" );
-    _LIT( KTypeSemaphore, "Semaphore" );
-    _LIT( KTypeMutex, "Mutex" );
-    _LIT( KTypeTimer, "Timer" );
-    _LIT( KTypeServer, "Server" );
-    _LIT( KTypeSession, "Session" );
-    _LIT( KTypeLogicalDevice, "Logical Device" );
-    _LIT( KTypePhysicalDevice, "Physical Device" );
-    _LIT( KTypeLogicalChannel, "Logical Channel" );
-    _LIT( KTypeChangeNotifier, "Change Notifier" );
-    _LIT( KTypeUndertaker, "Undertaker" );
-    _LIT( KTypeMsgQueue, "Msg. Queue" );
-    _LIT( KTypePropertyRef, "Property Ref." );
-    _LIT( KTypeCondVar, "Conditional Var." );
-     //
-    TPtrC pType( KTypeUnknown );
-    //
-    switch( aType )
-        {
-    case EMemSpyDriverContainerTypeThread:
-        pType.Set( KTypeThread );
-        break;
-    case EMemSpyDriverContainerTypeProcess:
-        pType.Set( KTypeProcess );
-        break;
-    case EMemSpyDriverContainerTypeChunk:
-        pType.Set( KTypeChunk );
-        break;
-    case EMemSpyDriverContainerTypeLibrary:
-        pType.Set( KTypeLibrary );
-        break;
-    case EMemSpyDriverContainerTypeSemaphore:
-        pType.Set( KTypeSemaphore );
-        break;
-    case EMemSpyDriverContainerTypeMutex:
-        pType.Set( KTypeMutex );
-        break;
-    case EMemSpyDriverContainerTypeTimer:
-        pType.Set( KTypeTimer );
-        break;
-    case EMemSpyDriverContainerTypeServer:
-        pType.Set( KTypeServer );
-        break;
-    case EMemSpyDriverContainerTypeSession:
-        pType.Set( KTypeSession );
-        break;
-    case EMemSpyDriverContainerTypeLogicalDevice:
-        pType.Set( KTypeLogicalDevice );
-        break;
-    case EMemSpyDriverContainerTypePhysicalDevice:
-        pType.Set( KTypePhysicalDevice );
-        break;
-    case EMemSpyDriverContainerTypeLogicalChannel:
-        pType.Set( KTypeLogicalChannel );
-        break;
-    case EMemSpyDriverContainerTypeChangeNotifier:
-        pType.Set( KTypeChangeNotifier );
-        break;
-    case EMemSpyDriverContainerTypeUndertaker:
-        pType.Set( KTypeUndertaker );
-        break;
-    case EMemSpyDriverContainerTypeMsgQueue:
-        pType.Set( KTypeMsgQueue );
-        break;
-    case EMemSpyDriverContainerTypePropertyRef:
-        pType.Set( KTypePropertyRef );
-        break;
-    case EMemSpyDriverContainerTypeCondVar:
-        pType.Set( KTypeCondVar );
-        break;
-        
-    default:
-        break;
-        }
-    //
-    return pType;
-    }
-
--- a/memspyui/ui/avkon/src/MemSpyViewKernelHeap.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewKernelHeap.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -107,20 +107,7 @@
 				
 	CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );
 	listbox->Model()->SetItemTextArray( model );
-	listbox->Model()->SetOwnershipType( ELbmOwnsItemArray );	
-	
-	/*
-	// Get list contents
-	TMemSpyHeapInfo heapInfo;
-	iEngine.HelperHeap().GetHeapInfoKernelL( heapInfo );
-	CMemSpyEngineOutputList* list = iEngine.HelperHeap().NewHeapSummaryShortLC( heapInfo );
-
-	// Set up list box
-	CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );
-	listbox->Model()->SetItemTextArray( list );
-	listbox->Model()->SetOwnershipType( ELbmOwnsItemArray );
-	CleanupStack::Pop( list );
-	*/
+	listbox->Model()->SetOwnershipType( ELbmOwnsItemArray );			
 	}
 
 
--- a/memspyui/ui/avkon/src/MemSpyViewKernelObjects.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewKernelObjects.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -624,7 +624,7 @@
 void CMemSpyViewKernelObjects::CreateTabsL()
     {
 	TMemSpyDriverContainerType type = iKernelObjectItems[ iListBox->CurrentItemIndex() ]->Type();
-	const TPtrC pType( TypeAsString( type ) );
+	const TPtrC pType( MemSpyUiUtils::TypeAsString( type ) );
 	
 	CEikStatusPane* statusPane = static_cast<CAknAppUi*> ( iEikonEnv->EikAppUi() )->StatusPane();
 	TUid uid;
@@ -634,89 +634,6 @@
 	iNaviPane->PushL(*iNavDecorator); 		
     }
 
-TPtrC CMemSpyViewKernelObjects::TypeAsString( TMemSpyDriverContainerType aType )
-	{
-	 _LIT( KTypeUnknown, "Unknown Type" );
-	 _LIT( KTypeThread, "Thread" );
-	 _LIT( KTypeProcess, "Process" );
-	 _LIT( KTypeChunk, "Chunk" );
-	 _LIT( KTypeLibrary, "Library" );
-	 _LIT( KTypeSemaphore, "Semaphore" );
-	 _LIT( KTypeMutex, "Mutex" );
-	 _LIT( KTypeTimer, "Timer" );
-	 _LIT( KTypeServer, "Server" );
-	 _LIT( KTypeSession, "Session" );
-	 _LIT( KTypeLogicalDevice, "Logical Device" );
-	 _LIT( KTypePhysicalDevice, "Physical Device" );
-	 _LIT( KTypeLogicalChannel, "Logical Channel" );
-	 _LIT( KTypeChangeNotifier, "Change Notifier" );
-	 _LIT( KTypeUndertaker, "Undertaker" );
-	 _LIT( KTypeMsgQueue, "Msg. Queue" );
-	 _LIT( KTypePropertyRef, "Property Ref." );
-	 _LIT( KTypeCondVar, "Conditional Var." );
-	 //
-	 TPtrC pType( KTypeUnknown );
-	 //
-	 switch( aType )
-		{
-	    case EMemSpyDriverContainerTypeThread:
-	    	pType.Set( KTypeThread );
-	    	break;
-	    case EMemSpyDriverContainerTypeProcess:
-	        pType.Set( KTypeProcess );
-	        break;
-	    case EMemSpyDriverContainerTypeChunk:
-	        pType.Set( KTypeChunk );
-	        break;
-	    case EMemSpyDriverContainerTypeLibrary:
-	        pType.Set( KTypeLibrary );
-	        break;
-	    case EMemSpyDriverContainerTypeSemaphore:
-	        pType.Set( KTypeSemaphore );
-	        break;
-	    case EMemSpyDriverContainerTypeMutex:
-	        pType.Set( KTypeMutex );
-	        break;
-	    case EMemSpyDriverContainerTypeTimer:
-	        pType.Set( KTypeTimer );
-	        break;
-	    case EMemSpyDriverContainerTypeServer:
-	        pType.Set( KTypeServer );
-	        break;
-	    case EMemSpyDriverContainerTypeSession:
-	        pType.Set( KTypeSession );
-	        break;
-	    case EMemSpyDriverContainerTypeLogicalDevice:
-	        pType.Set( KTypeLogicalDevice );
-	        break;
-	    case EMemSpyDriverContainerTypePhysicalDevice:
-	        pType.Set( KTypePhysicalDevice );
-	        break;
-	    case EMemSpyDriverContainerTypeLogicalChannel:
-	        pType.Set( KTypeLogicalChannel );
-	        break;
-	    case EMemSpyDriverContainerTypeChangeNotifier:
-	        pType.Set( KTypeChangeNotifier );
-	        break;
-	    case EMemSpyDriverContainerTypeUndertaker:
-	        pType.Set( KTypeUndertaker );
-	        break;
-	    case EMemSpyDriverContainerTypeMsgQueue:
-	        pType.Set( KTypeMsgQueue );
-	        break;
-	    case EMemSpyDriverContainerTypePropertyRef:
-	        pType.Set( KTypePropertyRef );
-	        break;
-	    case EMemSpyDriverContainerTypeCondVar:
-	        pType.Set( KTypeCondVar );
-	        break;
-	        
-	    default:
-	        break;
-		}
-	    //
-	return pType;
-	}
 
 void CMemSpyViewKernelObjects::DetailsL()
     {
--- a/memspyui/ui/avkon/src/MemSpyViewProcesses.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewProcesses.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -37,39 +37,18 @@
 #include "MemSpyViewThreads.h"
 #include "MemSpyViewMainMenu.h"
 #include "MemSpyContainerObserver.h"
+#include "MemSpyUiUtils.h"
 
 // Constants
 const TInt KMemSpyMaxSearchTextLength = 30;
 const TInt KMemSpyMaxSearchTextLengthWithWildcards = KMemSpyMaxSearchTextLength + 4;
 
 
-/*
-CMemSpyViewProcesses::CMemSpyViewProcesses( CMemSpyEngine& aEngine, MMemSpyViewObserver& aObserver )
-:   CMemSpyViewBase( aEngine, aObserver )
-    {
-    }
-
-
-CMemSpyViewProcesses::CMemSpyViewProcesses( CMemSpyEngine& aEngine, MMemSpyViewObserver& aObserver, CMemSpyProcess& aProcess )
-:   CMemSpyViewBase( aEngine, aObserver ), iCurrentProcess( &aProcess )
-    {
-    iCurrentProcess->Open();
-    }
-*/
-
 CMemSpyViewProcesses::CMemSpyViewProcesses( RMemSpySession& aSession, MMemSpyViewObserver& aObserver )
 :   CMemSpyViewBase( aSession, aObserver )
     {
     }
 
-/*
-CMemSpyViewProcesses::CMemSpyViewProcesses( CMemSpyEngine& aEngine, MMemSpyViewObserver& aObserver, CMemSpyProcess& aProcess )
-:   CMemSpyViewBase( aEngine, aObserver ), iCurrentProcess( &aProcess )
-    {
-    iCurrentProcess->Open();
-    }
-*/
-
 CMemSpyViewProcesses::CMemSpyViewProcesses( RMemSpySession& aEngine, MMemSpyViewObserver& aObserver, TProcessId aId )
 :   CMemSpyViewBase( aEngine, aObserver ), iCurrentProcessId( aId )
     {
@@ -97,17 +76,18 @@
     iMatcherBuffer = HBufC::NewL( KMemSpyMaxSearchTextLengthWithWildcards );
     //
     iSearchField = CAknSearchField::NewL( *this, CAknSearchField::ESearch, NULL, KMemSpyMaxSearchTextLength );
+
     iSearchField->SetObserver( this );
     iSearchField->SetFocus( ETrue );
     iSearchField->SetComponentsToInheritVisibility( ETrue );
     //    
-    if  ( aSelectionRune )
+    if  ( iCurrentProcessId > 0 )
         {
 		TInt index = 0;
-		TProcessId selectedItem = aSelectionRune; //static_cast< TProcessId >( *aSelectionRune );
+	//	TProcessId selectedItem = aSelectionRune; //static_cast< TProcessId >( *aSelectionRune );
 		for( TInt i=0; i<iProcesses.Count();i++)
 			{
-			if( iProcesses[i]->Id() == selectedItem )
+			if( iProcesses[i]->Id() == iCurrentProcessId )
 				{
 				index = i;
 				}
@@ -119,7 +99,7 @@
             HandleListBoxItemSelectedL( index );
             }            
         }
-    else if ( iProcesses.Count() > 0 ) //TODO: to solve item selection when come back from previous view
+    else if ( iProcesses.Count() > 0 )
         {
         iListBox->SetCurrentItemIndex( 0 );
         HandleListBoxItemSelectedL( 0 );
@@ -164,7 +144,7 @@
 
 CMemSpyViewBase* CMemSpyViewProcesses::PrepareChildViewL()
     {	
-    CMemSpyViewThreads* child = new(ELeave) CMemSpyViewThreads( iMemSpySession, iObserver, iProcesses[iListBox->CurrentItemIndex()]->Id() );
+    CMemSpyViewThreads* child = new(ELeave) CMemSpyViewThreads( iMemSpySession, iObserver, iProcesses[iListBox->CurrentItemIndex()]->Id(), 0 );
     CleanupStack::PushL( child );
     child->ConstructL( Rect(), *Parent() );
     CleanupStack::Pop( child );
@@ -379,9 +359,9 @@
 	iModel = new (ELeave) CDesC16ArrayFlat( iProcesses.Count() + 1); //array for formated items
 	
 	_LIT( KTab, "\t" );
-	//iModel = FormatModel( iProcesses ); //TODO Format model method with advanced formatting
+	iModel = FormatModel( iProcesses ); //TODO Format model method with advanced formatting
 	
-	
+	/*
 	for( TInt i=0; i < iProcesses.Count(); i++ )
 		{
 		HBufC* tempName = HBufC::NewL( iProcesses[i]->Name().Length() + 16 );
@@ -393,7 +373,7 @@
     	
     	CleanupStack::PopAndDestroy( tempName ); 
 		}			
-	
+	*/
 	CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );
     //listbox->Model()->SetItemTextArray( &iEngine.Container() );
     listbox->Model()->SetItemTextArray( iModel );
@@ -578,7 +558,7 @@
 
 //Model formating methods
 //TODO: to be debbuged
-/*
+
 CDesCArrayFlat* CMemSpyViewProcesses::FormatModel( RArray<CMemSpyApiProcess*> aProcesses )
 	{		
 	model = new (ELeave) CDesC16ArrayFlat( iProcesses.Count() + 16 ); //array for formated items
@@ -592,17 +572,18 @@
 	    tempNamePtr.Copy( aProcesses[i]->Name() );
 		
 		TBuf<10> priority;
-		AppendPriority( priority, aProcesses[i]->Priority() );
+		TProcessPriority tempPriority = aProcesses[i]->Priority();
+		MemSpyUiUtils::AppendPriority( priority, tempPriority );
 		
 	    // Convert the full name to the format we want in the UI
 	    TBuf<KMaxFullName + 60> name;
 	    TMemSpyTruncateOverflow overflow; //included from EngineUtils TODO: to consider if this is needed to be removed or left there
-	    	    
-	    name.AppendFormat( KMemSpyProcessNameFormatSpecBasicName, &overflow, tempNamePtr, aProcesses[i]->SID() );
+	    TUint32 tempSID =  aProcesses[i]->SID();
+	    name.AppendFormat( KMemSpyProcessNameFormatSpecBasicName, &overflow, tempName, tempSID );	//tempNamePtr
 	    
 	    if( aProcesses[i]->ExitType() != EExitPending ) // instead of IsDead() method
 	    	{
-			AppendExitInfo( name, aProcesses[i]->ExitType(), aProcesses[i]->ExitReason(), aProcesses[i]->ExitCategory() );
+			MemSpyUiUtils::AppendExitInfo( name, aProcesses[i]->ExitType(), aProcesses[i]->ExitReason(), aProcesses[i]->ExitCategory() );
 	    	}
 	    else
 	        {
@@ -617,7 +598,7 @@
 	
 	return model;
 	}
-
+/*
 void CMemSpyViewProcesses::AppendPriority( TDes& aDes, TProcessPriority aPriority )
 	{
 	switch( aPriority )
@@ -674,7 +655,8 @@
         aDes.AppendFormat( KAbnormalFormatSpec, &overflow, &aExitCategory, aExitReason );
         }
 	}
-
+*/
+/*
 void CMemSpyViewProcesses::AppendExitType( TDes& aDes, TExitType aType )
     {
     _LIT( KExitTypeKilled, "Killed" );
@@ -702,3 +684,4 @@
         }
     }
 */
+
--- a/memspyui/ui/avkon/src/MemSpyViewThreadInfoItemActiveObject.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewThreadInfoItemActiveObject.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -25,14 +25,14 @@
 #include <memspy/engine/memspyengineobjectthreadinfoobjects.h>
 #include <memspy/engine/memspyengineobjectthreadinfocontainer.h>
 #include <memspy/engine/memspyenginehelperactiveobject.h>
+#include <memspysession.h>
 
 // User includes
 #include "MemSpyContainerObserver.h"
 
 
-
-CMemSpyViewThreadInfoItemActiveObjectBase::CMemSpyViewThreadInfoItemActiveObjectBase( CMemSpyEngine& aEngine, MMemSpyViewObserver& aObserver, CMemSpyThreadInfoContainer& aContainer )
-:   CMemSpyViewThreadInfoItemGeneric( aEngine, aObserver, aContainer, EMemSpyThreadInfoItemTypeActiveObject )
+CMemSpyViewThreadInfoItemActiveObjectBase::CMemSpyViewThreadInfoItemActiveObjectBase(RMemSpySession& aSession, MMemSpyViewObserver& aObserver, TProcessId aProcId, TThreadId aId, TMemSpyThreadInfoItemType aType )
+:   CMemSpyViewThreadInfoItemGeneric( aSession, aObserver, aProcId, aId, EMemSpyThreadInfoItemTypeActiveObject )
     {
     }
 
@@ -40,6 +40,7 @@
 TBool CMemSpyViewThreadInfoItemActiveObjectBase::HandleCommandL( TInt aCommand )
     {
     TBool handled = ETrue;
+    /*
     //
     switch ( aCommand )
         {
@@ -51,6 +52,7 @@
         break;
         }
     //
+     * */
     return handled;
     }
 
@@ -59,20 +61,23 @@
     {
     if  ( aResourceId == R_MEMSPY_MENUPANE )
         {
-        aMenuPane->SetItemDimmed( EMemSpyCmdActiveObject, Thread().IsDead() );
+     //   aMenuPane->SetItemDimmed( EMemSpyCmdActiveObject, Thread().IsDead() );
         }
     }
 
 
 CMemSpyEngineActiveObjectArray& CMemSpyViewThreadInfoItemActiveObjectBase::ActiveObjectArray() const
     {
-    CMemSpyThreadInfoActiveObjects* activeObjectArray = static_cast< CMemSpyThreadInfoActiveObjects* >( iInfoItem );
-    return activeObjectArray->Array();
+ //   CMemSpyThreadInfoActiveObjects* activeObjectArray = static_cast< CMemSpyThreadInfoActiveObjects* >( iInfoItem );
+ //   return activeObjectArray->Array();
     }
     
     
 void CMemSpyViewThreadInfoItemActiveObjectBase::OnCmdWriteAOListingL()
     {
+	iMemSpySession.OutputAOListL( ThreadId(), EMemSpyThreadInfoItemTypeActiveObject );
+	
+	/*
     CMemSpyEngineActiveObjectArray& objects = ActiveObjectArray();
 
     // Begin a new data stream
@@ -100,6 +105,7 @@
 
     // End data stream
     iEngine.Sink().DataStreamEndL();
+    */
     }
 
 
@@ -112,8 +118,8 @@
 
 
 
-CMemSpyViewThreadInfoItemActiveObject::CMemSpyViewThreadInfoItemActiveObject( RMemSpySession& aSession, MMemSpyViewObserver& aObserver,  TThreadId aId, TMemSpyThreadInfoItemType aType )
-:   CMemSpyViewThreadInfoItemActiveObjectBase( aSession, aObserver, aId, aType )
+CMemSpyViewThreadInfoItemActiveObject::CMemSpyViewThreadInfoItemActiveObject( RMemSpySession& aSession, MMemSpyViewObserver& aObserver,  TProcessId aProcId, TThreadId aId, TMemSpyThreadInfoItemType aType )
+:   CMemSpyViewThreadInfoItemActiveObjectBase( aSession, aObserver, aProcId, aId, aType )
     {
     }
 
@@ -127,6 +133,7 @@
     SetTitleL( KTitle );
 
     // Try to select the correct server
+    /* TODO: to consider this
     CMemSpyThreadInfoHandleObjectBase* infoItem = static_cast< CMemSpyThreadInfoHandleObjectBase* >( iInfoItem );
     TInt selectedIndex = 0;
     if  ( aSelectionRune )
@@ -142,9 +149,12 @@
     // Select item
     if  ( infoItem->DetailsCount() > 0 )
         {
-        iListBox->SetCurrentItemIndex( selectedIndex );
-        HandleListBoxItemSelectedL( selectedIndex );
+        */
+        iListBox->SetCurrentItemIndex( 0 ); //selectedIndex
+        HandleListBoxItemSelectedL( 0 ); //selectedIndex
+        /*
         }
+        */
     }
 
 
@@ -157,7 +167,7 @@
 CMemSpyViewBase* CMemSpyViewThreadInfoItemActiveObject::PrepareChildViewL()
     {
     CMemSpyViewBase* child = NULL;
-
+    /*
     // Get current entry address
     TInt index = iListBox->CurrentItemIndex();
     if  ( index > 0 )
@@ -177,6 +187,8 @@
             }
         }
     //
+     * 
+     */
     return child;
     }
 
@@ -189,7 +201,7 @@
 
 
 
-
+/*
 CMemSpyViewThreadInfoItemActiveObjectDetails::CMemSpyViewThreadInfoItemActiveObjectDetails( CMemSpyEngine& aEngine, MMemSpyViewObserver& aObserver, CMemSpyThreadInfoContainer& aContainer, TAny* aObjectAddress )
 :   CMemSpyViewThreadInfoItemActiveObjectBase( aEngine, aObserver, aContainer ), iObjectAddress( aObjectAddress )
     {
@@ -233,9 +245,4 @@
     listbox->Model()->SetItemTextArray( &object );
     listbox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
     }
-
-
-
-
-
-
+*/
--- a/memspyui/ui/avkon/src/MemSpyViewThreadInfoItemGeneric.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewThreadInfoItemGeneric.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -63,18 +63,7 @@
     {
 	const TPtrC pTitle( MemSpyUiUtils::ThreadInfoItemNameByType( iType ) );
 	SetTitleL( pTitle );
-    //
-    /* TODO:
-    if  ( iInfoItem->IsReady() == EFalse )
-        {
-#ifdef _DEBUG
-        RDebug::Printf( "CMemSpyViewThreadInfoItemGeneric::ConstructL() - show wait note - item not ready, iType: %d", iInfoItem->Type() );
-#endif
 
-        // Wait for engine data to be made ready... 
-        ShowWaitNoteL();
-        }
-	*/
     CMemSpyViewBase::ConstructL( aRect, aContainer, aSelectionRune );
     }
 
@@ -202,7 +191,7 @@
     {
     CMemSpyViewThreadInfoItemList* parent = new(ELeave) CMemSpyViewThreadInfoItemList( iMemSpySession, iObserver, iParentProcessId, iThreadId );
     CleanupStack::PushL( parent );
-    parent->ConstructL( Rect(), *Parent() ); //TODO: arguent removed: iInfoItem
+    parent->ConstructL( Rect(), *Parent(), iType );
     CleanupStack::Pop( parent );
     return parent;
     }
@@ -232,16 +221,14 @@
 	
 	for( TInt i=0; i<iThreadInfoItems.Count(); i++)
 		{						
-		HBufC* iCombined = HBufC::NewL( iThreadInfoItems[i]->Caption().Length() + iThreadInfoItems[i]->Value().Length() + 30 );		
+		HBufC* combined = HBufC::NewLC( iThreadInfoItems[i]->Caption().Length() + iThreadInfoItems[i]->Value().Length() + 30 );		
 			/*
-		else if ( iCombined->Des().MaxLength() < requiredLength )
+		else if ( combined->Des().MaxLength() < requiredLength )
 			{
-			iCombined = iCombined->ReAllocL( requiredLength );
-			}*/
-		
-		CleanupStack::PushL( iCombined );
+			combined = combined->ReAllocL( requiredLength );
+			}*/				
         
-		TPtr pCombined( iCombined->Des() );
+		TPtr pCombined( combined->Des() );
 		pCombined.Zero();
 		pCombined.Copy( _L("\t") );
 		if( iThreadInfoItems[i]->Caption() != KNullDesC )
@@ -252,9 +239,7 @@
 			pCombined.Append( iThreadInfoItems[i]->Value() );
 			}					
 		
-		iModel->AppendL( pCombined );				
-		
-		CleanupStack::PopAndDestroy( iCombined );
+		iModel->AppendL( pCombined );								
 		}	
 	
     CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );
--- a/memspyui/ui/avkon/src/MemSpyViewThreadInfoItemHeap.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewThreadInfoItemHeap.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -26,11 +26,13 @@
 #include <memspy/engine/memspyengineobjectthreadinfocontainer.h>
 #include <memspy/engine/memspyenginehelperprocess.h>
 #include <memspy/engine/memspyenginehelperheap.h>
+#include <memspysession.h>
 
 // User includes
 #include "MemSpyContainerObserver.h"
 #include "MemSpyViewThreads.h"
 #include "MemSpyViewThreadInfoItemHeap.h"
+#include "MemSpyAppUi.h" 
 
 
 /*
@@ -74,19 +76,19 @@
 
 void CMemSpyViewThreadInfoItemHeap::OnCmdHeapDataL()
     {
-    //iEngine.HelperHeap().OutputHeapDataUserL( Thread() ); //TODO
+	iMemSpySession.OutputThreadHeapDataL( ThreadId() );    
     }
 
 
 void CMemSpyViewThreadInfoItemHeap::OnCmdHeapCellListingL()
     {
-    //iEngine.HelperHeap().OutputCellListingUserL( Thread() ); //TODO
+    iMemSpySession.OutputThreadCellListL( ThreadId() );
     }
 
 
 void CMemSpyViewThreadInfoItemHeap::OnCmdHeapInfoL()
     {
-    //iEngine.HelperHeap().OutputHeapInfoUserL( Thread() ); //TODO
+	iMemSpySession.OutputHeapInfoUserL( ThreadId() );    
     }
 
 
--- a/memspyui/ui/avkon/src/MemSpyViewThreadInfoItemList.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewThreadInfoItemList.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -54,37 +54,42 @@
 
 CMemSpyViewThreadInfoItemList::~CMemSpyViewThreadInfoItemList()
     {
-	/* TODO: to consider what to do with this
-    delete iIdleResetListboxTimer;
-
+	/* TODO:
     TRAP_IGNORE( 
         CMemSpyThreadInfoContainer& container = iThread.InfoContainerL();
         container.ObserverRemove( *this );
     );
-
-    if  ( iCurrentInfoItem )
-        {
-        iCurrentInfoItem->Close();
-        }
-    */
+	*/
     }
 
 
 
-void CMemSpyViewThreadInfoItemList::ConstructL( const TRect& aRect, CCoeControl& aContainer, TAny* aSelectionRune )
+void CMemSpyViewThreadInfoItemList::ConstructL( const TRect& aRect, CCoeControl& aContainer, TMemSpyThreadInfoItemType aType )
     {
     _LIT( KTitle, "Thread Objects" );
     SetTitleL( KTitle );
     //
-    iIdleResetListboxTimer = CPeriodic::NewL( CActive::EPriorityIdle );
-    //
-    /*
+    //iIdleResetListboxTimer = CPeriodic::NewL( CActive::EPriorityIdle );    
+    /* TODO: to solve observer
     CMemSpyThreadInfoContainer& container = iThread.InfoContainerL();
     container.ObserverAddL( *this );
-    */
+    */    
+    CMemSpyViewBase::ConstructL( aRect, aContainer );
     //
-    CMemSpyViewBase::ConstructL( aRect, aContainer, aSelectionRune );
-    //
+    if( aType > EMemSpyThreadInfoItemTypeFirst || aType < EMemSpyThreadInfoItemTypeLast )
+    	{
+		TInt index(aType);
+		if  ( index >= 0 && index < iListBox->Model()->NumberOfItems() )
+			{
+			iListBox->SetCurrentItemIndex( index );
+			HandleListBoxItemSelectedL( index );
+			}
+    	}
+    else
+    	{
+		iListBox->SetCurrentItemIndex( 0 );
+        HandleListBoxItemSelectedL( 0 );
+    	}
     /*if  ( aSelectionRune )
         {		
         CMemSpyThreadInfoItemBase* selectedItem = reinterpret_cast< CMemSpyThreadInfoItemBase* >( aSelectionRune );
@@ -97,8 +102,8 @@
         }
     else if ( container.MdcaCount() > 0 )
         {*/
-        iListBox->SetCurrentItemIndex( 0 ); //for now
-        HandleListBoxItemSelectedL( 0 );
+        //iListBox->SetCurrentItemIndex( 0 );
+        //HandleListBoxItemSelectedL( 0 );
         //}
     }
 
@@ -123,7 +128,7 @@
 
 CMemSpyViewBase* CMemSpyViewThreadInfoItemList::PrepareParentViewL()
     {
-    CMemSpyViewBase* parent = new(ELeave) CMemSpyViewThreads( iMemSpySession, iObserver, iParentProcessId );
+    CMemSpyViewBase* parent = new(ELeave) CMemSpyViewThreads( iMemSpySession, iObserver, iParentProcessId, iThreadId );
     CleanupStack::PushL( parent );
     parent->ConstructL( Rect(), *Parent() );
     CleanupStack::Pop( parent );
@@ -235,7 +240,7 @@
 
 void CMemSpyViewThreadInfoItemList::OnCmdInfoHandlesL()
     {
-    //iThread.InfoContainerForceSyncronousConstructionL().PrintL(); //TODO:
+    iMemSpySession.OutputThreadInfoHandlesL( iThreadId );
     }
 
 
@@ -387,18 +392,6 @@
     {
 	iCurrentInfoItemId = aIndex;
 	
-	/*
-    if  ( iCurrentInfoItem )
-        {
-        CMemSpyThreadInfoItemBase* item = iCurrentInfoItem;
-        iCurrentInfoItem = NULL;
-        item->Close();
-        }
-
-    // Identify the type of item to display...
-    iCurrentInfoItem = &iThread.InfoContainerL().Item( aIndex );
-    iCurrentInfoItem->Open();
-*/
     // Notify observer about item selection
     ReportEventL( MMemSpyViewObserver::EEventItemSelected );
     }
--- a/memspyui/ui/avkon/src/MemSpyViewThreadInfoItemStack.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewThreadInfoItemStack.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -26,11 +26,13 @@
 #include <memspy/engine/memspyengineobjectthreadinfocontainer.h>
 #include <memspy/engine/memspyenginehelperprocess.h>
 #include <memspy/engine/memspyenginehelperstack.h>
+#include <memspysession.h>
 
 // User includes
 #include "MemSpyContainerObserver.h"
 #include "MemSpyViewThreads.h"
 #include "MemSpyViewThreadInfoItemHeap.h"
+#include "MemSpyAppUi.h"
 
 
 
@@ -69,19 +71,19 @@
 
 void CMemSpyViewThreadInfoItemStack::OnCmdStackInfoL()
     {
-   // TODO iEngine.HelperStack().OutputStackInfoL( Thread() );
+	iMemSpySession.OutputStackInfoL( ThreadId() );   
     }
 
 
 void CMemSpyViewThreadInfoItemStack::OnCmdStackDataUserL()
     {
-    // TODO iEngine.HelperStack().OutputStackDataL( Thread(), EMemSpyDriverDomainUser );
+    iMemSpySession.OutputStackDataL( ThreadId(), EMemSpyDriverDomainUser );
     }
 
 
 void CMemSpyViewThreadInfoItemStack::OnCmdStackDataKernelL()
     {
-    // TODO iEngine.HelperStack().OutputStackDataL( Thread(), EMemSpyDriverDomainKernel );
+	iMemSpySession.OutputStackDataL( ThreadId(), EMemSpyDriverDomainKernel );
     }    
 
 
--- a/memspyui/ui/avkon/src/MemSpyViewThreads.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewThreads.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -38,15 +38,8 @@
 
 
 
-/*
-CMemSpyViewThreads::CMemSpyViewThreads( CMemSpyEngine& aEngine, MMemSpyViewObserver& aObserver, CMemSpyProcess& aProcess )
-:   CMemSpyViewBase( aEngine, aObserver ), iParentProcess( aProcess )
-    {
-    iParentProcess.Open();
-    }
-*/
-CMemSpyViewThreads::CMemSpyViewThreads( RMemSpySession& aSession, MMemSpyViewObserver& aObserver, TProcessId aId )
-:   CMemSpyViewBase( aSession, aObserver ), iParentProcessId( aId )
+CMemSpyViewThreads::CMemSpyViewThreads( RMemSpySession& aSession, MMemSpyViewObserver& aObserver, TProcessId aId, TThreadId aThreadId )
+:   CMemSpyViewBase( aSession, aObserver ), iParentProcessId( aId ), iCurrentThreadId( aThreadId )
     {    
     }
 
@@ -58,30 +51,33 @@
  
 void CMemSpyViewThreads::ConstructL( const TRect& aRect, CCoeControl& aContainer, TAny* aSelectionRune )
     {
+	iMemSpySession.GetThreadsL( iParentProcessId, iThreads );
+	
     _LIT( KTitle, "Threads" );
     SetTitleL( KTitle );
     //
     CMemSpyViewBase::ConstructL( aRect, aContainer, aSelectionRune );
-    //
-    if  ( aSelectionRune )
-        {
-		iListBox->SetCurrentItemIndex( 0 ); //for now
+    //    
+    if( iCurrentThreadId > 0 )
+        {		
+		for( TInt i = 0; i < iThreads.Count() ; i++ )
+			{
+			if( iThreads[i]->Id() == iCurrentThreadId )
+				{
+				const TInt index = i;
+				if  ( index >= 0 && index < iListBox->Model()->NumberOfItems() )
+					{
+					iListBox->SetCurrentItemIndex( index );
+					HandleListBoxItemSelectedL( index );
+					}
+				}			
+			}
+        }
+    else if( iThreads.Count() > 0 )
+    	{
+		iListBox->SetCurrentItemIndex( 0 );
 		HandleListBoxItemSelectedL( 0 );
-		/* TODO: 
-        CMemSpyThread* selectedItem = reinterpret_cast< CMemSpyThread* >( aSelectionRune );
-        const TInt index = iParentProcess.ThreadIndexById( selectedItem->Id() );
-        if  ( index >= 0 && index < iListBox->Model()->NumberOfItems() )
-            {
-            iListBox->SetCurrentItemIndex( index );
-            HandleListBoxItemSelectedL( index );
-            }
-        */		
-        }
-    //else if ( iParentProcess.Count() > 0 )
-    //    {
-        iListBox->SetCurrentItemIndex( 0 );
-        HandleListBoxItemSelectedL( 0 );
-    //    }
+    	}		
     }
 
 
@@ -125,7 +121,7 @@
     {	
     CMemSpyViewThreadInfoItemList* child = new(ELeave) CMemSpyViewThreadInfoItemList( iMemSpySession, iObserver, iParentProcessId, iCurrentThreadId );
     CleanupStack::PushL( child );
-    child->ConstructL( Rect(), *Parent() );
+    child->ConstructL( Rect(), *Parent(), EMemSpyThreadInfoItemTypeFirst );
     CleanupStack::Pop( child );
     return child;    
     }
@@ -331,16 +327,13 @@
 
 void CMemSpyViewThreads::OnCmdInfoHandlesL()
     {
-	/*
-    CMemSpyThread& thread = CurrentThread();
-    thread.InfoContainerForceSyncronousConstructionL().PrintL();
-    */
+	iMemSpySession.OutputThreadInfoHandlesL( iCurrentThreadId );	
     }
 
 
 void CMemSpyViewThreads::SetListBoxModelL()
     {
-	iMemSpySession.GetThreadsL( iParentProcessId, iThreads );
+	//iMemSpySession.GetThreadsL( iParentProcessId, iThreads );
 	
 	iModel = new (ELeave) CDesC16ArrayFlat( iThreads.Count() ); //array for formated items
 		
@@ -359,8 +352,7 @@
 	    	CleanupStack::PopAndDestroy( tempName ); 
 			}			
 	
-    CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );
-    //listbox->Model()->SetItemTextArray( &iParentProcess );
+    CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );    
     listbox->Model()->SetItemTextArray( iModel );
     listbox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
     }
--- a/memspyui/ui/avkon/src/MemSpyViewWindowGroups.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyViewWindowGroups.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -204,6 +204,7 @@
 
 void CMemSpyViewWindowGroups::OnCmdEndL( TInt aCommand )
     {
+	/*
     TBool doTerminate = ETrue;
     
     CMemSpyEngineObjectContainer& container = iEngine.Container();
@@ -252,6 +253,7 @@
             }                
         }
     RefreshL();
+    */
     }
 
 
--- a/memspyui/ui/hb/hb.pro	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/hb.pro	Thu Jun 24 14:55:55 2010 +0300
@@ -27,6 +27,7 @@
 HEADERS += inc/enginewrapper.h \
 	inc/viewmanager.h \
 	inc/memspyview.h \
+	inc/memspylistview.h \
 	inc/memspymainview.h \
 	inc/memspyprocessview.h \
 	inc/memspythreadview.h \
@@ -34,12 +35,17 @@
 	inc/memspythreaddetailview.h \
 	inc/memspykernelobjecttypeview.h \
 	inc/memspykernelobjectview.h \
-	inc/memspykernelobjectdetailview.h  
+	inc/memspykernelobjectdetailview.h \
+	inc/memspytrackingview.h \
+	inc/memspyswmtview.h \
+	inc/memspyheapdumpsview.h \
+	inc/memspysettingsview.h
 
 SOURCES += src/main.cpp \
 	src/enginewrapper.cpp \
 	src/viewmanager.cpp \
 	src/memspyview.cpp \
+	src/memspylistview.cpp \
 	src/memspymainview.cpp \
 	src/memspyprocessview.cpp \
 	src/memspythreadview.cpp \
@@ -47,7 +53,11 @@
 	src/memspythreaddetailview.cpp \
 	src/memspykernelobjecttypeview.cpp \
 	src/memspykernelobjectview.cpp \
-	src/memspykernelobjectdetailview.cpp 
+	src/memspykernelobjectdetailview.cpp \
+	src/memspytrackingview.cpp \
+	src/memspyswmtview.cpp \
+	src/memspyheapdumpsview.cpp \
+	src/memspysettingsview.cpp
 
 RESOURCES +=
 
--- a/memspyui/ui/hb/inc/enginewrapper.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/enginewrapper.h	Thu Jun 24 14:55:55 2010 +0300
@@ -19,6 +19,8 @@
 #define ENGINEWRAPPER_H_
 
 #include <QObject>
+#include <QVariantList>
+#include <QSettings>
 
 #include <memspysession.h>
 
@@ -102,6 +104,49 @@
 	ThreadInfoTypePDD = EMemSpyThreadInfoItemTypePDD,
 };
 
+enum DeviceWideOperation
+{
+	OutputPhoneInfo = 0,
+	    
+	OutputDetailedPhoneInfo,
+	    
+	OutputHeapInfo,
+	    
+	OutputCompactHeapInfo,
+	    
+	OutputHeapCellListing,
+	    
+	OutputHeapData,
+	    
+	OutputStackInfo,
+	    
+	OutputCompactStackInfo,
+	    
+	OutputUserStackData,
+	    
+	OutputKernelStackData
+};
+
+enum SwmtMode
+{
+	SwmtModeBasic = 0,
+	SwmtModeFull,
+	SwmtModeCustom
+};
+
+enum HeapDumpsMode
+{
+	HeapDumpsModeKernel = 0,
+	HeapDumpsModeUser,
+	HeapDumpsModeBoth
+};
+
+enum OutputMode
+{
+	OutputModeTrace = 0,
+	OutputModeFile
+};
+
 class MemSpyProcess
 {
 public:
@@ -109,12 +154,23 @@
 		: mProcess(process)
 	{}
 	
-	virtual  ~MemSpyProcess() { delete mProcess;	}
+	virtual  ~MemSpyProcess() { delete mProcess; }
 	
 	ProcessId id() const { return mProcess->Id(); }
 	
 	QString name() const { return QString((QChar*) mProcess->Name().Ptr(), mProcess->Name().Length()); }
 	
+	QString exitInfo() const;
+	
+	int priority() const { return mProcess->Priority(); }
+	
+	int threadCount() const { return mProcess->ThreadCount(); }
+	
+	int sid() const { return mProcess->SID(); }
+	
+	int vid() const { return mProcess->VID(); }
+	
+	bool isDead() const { return mProcess->IsDead(); }
 	
 private:
 	CMemSpyApiProcess *mProcess;
@@ -283,12 +339,151 @@
 	CMemSpyApiThreadInfoItem* mItem;
 };
 
-class EngineWrapper : public QObject
+class MemSpyDwoProgressTracker : public QObject, public CActive
+{
+	Q_OBJECT
+
+public:
+	MemSpyDwoProgressTracker(RMemSpySession &session);
+	virtual ~MemSpyDwoProgressTracker();
+	
+public slots:
+
+	void start();
+
+	void cancel();
+	
+protected: // from CActive
+	
+	virtual void RunL();
+	 
+	virtual void DoCancel();
+	 
+	virtual TInt RunError(TInt aError);
+	
+signals:
+	void progress(int progress, const QString& processName);
+	
+private:
+	TMemSpyDeviceWideOperationProgress mProgress;
+	RMemSpySession mSession;
+};
+
+class MemSpyDwoTracker : public QObject, public CActive
+{
+	Q_OBJECT
+
+public:
+	MemSpyDwoTracker(RMemSpySession &session, DeviceWideOperation operation);
+	virtual ~MemSpyDwoTracker();
+	
+public slots:
+
+	void start();
+	
+	void cancel();
+	
+protected: // from CActive
+	
+	virtual void RunL();
+	 
+	virtual void DoCancel();
+	 
+	virtual TInt RunError(TInt aError);
+	
+signals:
+	void finished(int errorCode);
+	void progress(int progress, const QString& processName);
+	
+private:
+	RMemSpySession mSession;
+	MemSpyDwoProgressTracker *mProgressTracker;
+	DeviceWideOperation mOperation;
+};
+
+class MemSpyAsyncTracker : public QObject, public CActive
+{
+	Q_OBJECT
+	
+public:
+	
+	MemSpyAsyncTracker(RMemSpySession& session, void (RMemSpySession::*function)(TRequestStatus&));
+	
+	void start();
+	
+	virtual void RunL();
+	
+	virtual void DoCancel();
+	
+	virtual TInt RunError(TInt aError);
+	
+signals:
+	
+	void finished(int errorCode);
+	
+private:
+	void (RMemSpySession::*mFunction)(TRequestStatus&);
+	RMemSpySession& mSession;
+};
+
+class MemSpySwmtDumpTracker : public MemSpyAsyncTracker
 {
 public:
+	MemSpySwmtDumpTracker(RMemSpySession& session) : 
+		MemSpyAsyncTracker(session, &RMemSpySession::ForceSwmtUpdate)
+	{}
+};
+
+class MemSpyKernelHeapDumpTracker : public MemSpyAsyncTracker
+{
+public:
+	MemSpyKernelHeapDumpTracker(RMemSpySession& session) : 
+		MemSpyAsyncTracker(session, &RMemSpySession::OutputKernelHeapData)
+	{}
+};
+
+class MemSpySettings : private QSettings
+{
+public:
+	
+	MemSpySettings();
+	
+	OutputMode outputMode() const;
+	void setOutputMode(OutputMode mode);
+	
+	QString outputPath() const;
+	void setOutputPath(const QString& path);
+		
+	int swmtTimerPeriod() const;
+	void setSwmtTimerPeriod(int period);
+	
+	SwmtMode swmtMode() const;
+	void setSwmtMode(SwmtMode mode);
+	
+	QVariantList swmtCategories() const;
+	void setSwmtCategories(const QVariantList& categories);
+	
+	HeapDumpsMode heapDumpsMode() const;
+	void setHeapDumpsMode(HeapDumpsMode mode);
+};
+
+class EngineWrapper : public QObject
+{
+	Q_OBJECT
+	
+public:
+	EngineWrapper();
+	
 	virtual ~EngineWrapper();
+	
 	bool initialize();
 	
+	MemSpySettings& settings();
+	
+	const MemSpySettings& settings() const;
+	
+	
+	
 	QList<MemSpyProcess*> getProcesses();
 	
 	QList<MemSpyThread*> getThreads(ProcessId processId);
@@ -301,9 +496,34 @@
 	
 	QList<MemSpyKernelObject*> getKernelObjects(int type);
 	
+	MemSpyDwoTracker* createDeviceWideOperation(DeviceWideOperation operation);
+	
+	MemSpyKernelHeapDumpTracker* createKernelHeapDumpTracker();
+	
+	MemSpySwmtDumpTracker* createSwmtDumpTracker();
+	
+	void setSwmtSettings(SwmtMode mode, const QVariantList& categories);
+	
+	bool isSwmtRunning();
+	
+	void startSwmt(int period);
+	
+	void stopSwmt();
+	
+	void forceSwmtDump();
+	
+	void outputKernelHeapData();
+	
+	int outputThreadHeapData(const QString& filter);
+	
+	void updateOutputSettings();
+	
 private:
 	RMemSpySession mSession;
 	
+	bool mSwmtRunning;
+	
+	MemSpySettings mSettings;
 };
 
 #endif /* ENGINEWRAPPER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspyui/ui/hb/inc/memspyheapdumpsview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,61 @@
+/*
+ * 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:
+ *  
+ */
+
+#ifndef MEMSPYHEAPDUMPSVIEW_H_
+#define MEMSPYHEAPDUMPSVIEW_H_
+
+#include "memspyview.h"
+
+class HbDataFormModel;
+class HbDataFormModelItem;
+
+class MemSpyHeapDumpsView : public MemSpyView
+{
+	Q_OBJECT
+	
+public:
+	MemSpyHeapDumpsView(EngineWrapper &engine, ViewManager &viewManager);
+	virtual ~MemSpyHeapDumpsView();
+	
+	void initialize(const QVariantMap& params);
+		
+protected:
+	HbToolBar* createToolBar();
+	
+	HbWidget* createCentralWidget();
+	
+private slots:
+	void modeChanged(int mode);
+	void dump();
+
+	void updateDwoProgress(int progress, const QString& processName);
+	void asyncOperationFinished(int errorCode);
+
+	
+private:
+	void removeFilterItem();
+	void createFilterItem();
+	
+private:
+	HbDataFormModel* mModel;
+	HbDataFormModelItem* mModeItem;
+	HbDataFormModelItem* mFilterItem;
+	
+	HbProgressDialog* mDwoProgressDialog;
+};
+
+#endif /* MEMSPYHEAPDUMPSVIEW_H_ */
--- a/memspyui/ui/hb/inc/memspykernelobjectdetailview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/memspykernelobjectdetailview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -18,18 +18,39 @@
 #ifndef MEMSPYKERNELOBJECTDETAILVIEW_H_
 #define MEMSPYKERNELOBJECTDETAILVIEW_H_
 
-#include "memspyview.h"
+#include "memspylistview.h"
 
-class MemSpyKernelObjectDetailView : public MemSpyView
+class MemSpyKernelObjectDetailModel : public QAbstractListModel
+{
+public:
+    MemSpyKernelObjectDetailModel(const QStringList& details, QObject *parent = 0);
+    
+    int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    
+    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+  
+private:
+    QStringList mDetails;
+};
+
+class MemSpyKernelObjectDetailView : public MemSpyListView
 {
 	Q_OBJECT
 	
 public:
 	MemSpyKernelObjectDetailView(EngineWrapper &engine, ViewManager &viewManager) 
-		: MemSpyView(engine, viewManager) {}
+		: MemSpyListView(engine, viewManager) {}
 	
 protected:
 	virtual void initialize(const QVariantMap& params);
+	
+	virtual bool isBreadCrumbVisible() const;
+	        
+	virtual QString getBreadCrumbText() const;
+	
+private:
+	QString mTypeName;
+	QString mObjectName;
 };
 
 #endif /* MEMSPYKERNELOBJECTDETAILVIEW_H_ */
--- a/memspyui/ui/hb/inc/memspykernelobjecttypeview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/memspykernelobjecttypeview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -18,7 +18,7 @@
 #ifndef MEMSPYKERNELOBJECTTYPESVIEW_H_
 #define MEMSPYKERNELOBJECTTYPESVIEW_H_
 
-#include "memspyview.h"
+#include "memspylistview.h"
 #include "enginewrapper.h"
 
 class MemSpyKernelObjectTypeModel : public QAbstractListModel
@@ -26,7 +26,7 @@
 public:
 	MemSpyKernelObjectTypeModel(EngineWrapper &engine, QObject *parent = 0);
 	
-	~MemSpyKernelObjectTypeModel();
+	virtual ~MemSpyKernelObjectTypeModel();
 	
 	int rowCount(const QModelIndex &parent = QModelIndex()) const;
 	
@@ -37,15 +37,17 @@
 	
 private:
 	QList<MemSpyKernelObjectType*> mObjectTypes;
+	
+	QStringList mKernelObjectNames;
 };
 
-class MemSpyKernelObjectTypeView : public MemSpyView
+class MemSpyKernelObjectTypeView : public MemSpyListView
 {
 	Q_OBJECT
 	
 public:
 	MemSpyKernelObjectTypeView(EngineWrapper &engine, ViewManager &viewManager) 
-		: MemSpyView(engine, viewManager) {}
+		: MemSpyListView(engine, viewManager) {}
 
 protected:
 	virtual void initialize(const QVariantMap& params);
--- a/memspyui/ui/hb/inc/memspykernelobjectview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/memspykernelobjectview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -18,7 +18,7 @@
 #ifndef MEMSPYKERNELOBJECTVIEW_H_
 #define MEMSPYKERNELOBJECTVIEW_H_
 
-#include "memspyview.h"
+#include "memspylistview.h"
 #include "enginewrapper.h"
 
 class MemSpyKernelObjectModel : public QAbstractListModel
@@ -37,16 +37,20 @@
 };
 
 
-class MemSpyKernelObjectView : public MemSpyView
+class MemSpyKernelObjectView : public MemSpyListView
 {
 	Q_OBJECT
 
 public:
 	MemSpyKernelObjectView(EngineWrapper &engine, ViewManager &viewManager) 
-		: MemSpyView(engine, viewManager) {}
+		: MemSpyListView(engine, viewManager) {}
 
 protected:
 	virtual void initialize(const QVariantMap& params);
+	
+	virtual bool isBreadCrumbVisible() const;
+	            
+	virtual QString getBreadCrumbText() const;
 
 private slots:
 	void itemClicked(const QModelIndex& index);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspyui/ui/hb/inc/memspylistview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -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:
+ *  
+ */
+
+#ifndef MEMSPYLISTVIEW_H_
+#define MEMSPYLISTVIEW_H_
+
+#include <HbListView>
+
+#include "memspyview.h"
+
+class MemSpyListView : public MemSpyView
+	{
+public:
+	MemSpyListView(EngineWrapper &engine, ViewManager &viewManager) : 
+		MemSpyView(engine, viewManager) {}
+	
+protected:
+	virtual HbWidget* createCentralWidget();
+	
+protected:
+	HbListView mListView;
+	};
+
+#endif /* MEMSPYLISTVIEW_H_ */
--- a/memspyui/ui/hb/inc/memspymainview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/memspymainview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -18,17 +18,18 @@
 #ifndef MEMSPYMAINVIEW_H_
 #define MEMSPYMAINVIEW_H_
 
-#include "memspyview.h"
+#include "memspylistview.h"
 
-class MemSpyMainView : public MemSpyView
+class MemSpyMainView : public MemSpyListView
 {
     Q_OBJECT
     
 public:
 	MemSpyMainView(EngineWrapper &engine, ViewManager &viewManager) 
-		: MemSpyView(engine, viewManager) {}
+		: MemSpyListView(engine, viewManager) {}
 protected:
 	virtual void initialize(const QVariantMap& params);
+	virtual bool isBreadCrumbVisible() const;
 	
 public slots:
 	void itemClicked(const QModelIndex& index);
--- a/memspyui/ui/hb/inc/memspyprocessview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/memspyprocessview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -20,7 +20,7 @@
 
 #include <QAbstractListModel>
 
-#include "memspyview.h"
+#include "memspylistview.h"
 #include "enginewrapper.h"
 
 
@@ -35,17 +35,28 @@
 	
 	QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
 	
+	void refresh();
+	
 private:
+	EngineWrapper& mEngine;
+	
 	QList<MemSpyProcess*> mProcesses;
+	
+	QMap<int, QString> mPriorityMap;
 };
 
-class MemSpyProcessView : public MemSpyView
+class MemSpyProcessView : public MemSpyListView
 {
     Q_OBJECT
     
 public:
-	MemSpyProcessView(EngineWrapper &engine, ViewManager &viewManager) 
-			: MemSpyView(engine, viewManager) {}
+	MemSpyProcessView(EngineWrapper &engine, ViewManager &viewManager) : 
+        MemSpyListView(engine, viewManager),
+		mModel(0)
+	{}
+	
+public slots:
+    virtual void refresh();
 	
 protected:
 	void initialize(const QVariantMap& params);
@@ -55,6 +66,9 @@
 	
 private slots:
 	void itemClicked(const QModelIndex& index);
+	
+private:
+	MemSpyProcessModel* mModel;
 };
 
 #endif /* MEMSPYPROCESSVIEW_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspyui/ui/hb/inc/memspysettingsview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,56 @@
+/*
+ * 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:
+ *  
+ */
+
+#ifndef MEMSPYSETTINGSVIEW_H_
+#define MEMSPYSETTINGSVIEW_H_
+
+#include <HbView>
+
+class HbDataForm;
+class HbDataFormModel;
+class HbDataFormModelItem;
+class EngineWrapper;
+
+class MemSpySettingsView : public HbView
+{
+	Q_OBJECT
+	
+public:
+	MemSpySettingsView(EngineWrapper &engine);
+	virtual ~MemSpySettingsView();
+	
+	void initialize(const QVariantMap& params);
+	
+private slots:
+	void updateModel();
+	void accept();
+	void reject();
+	
+signals:
+	void finished(bool ok);
+
+private:
+	HbDataForm* mForm;
+	HbDataFormModel* mModel;
+	HbDataFormModelItem* mModeItem;
+	HbDataFormModelItem* mPathItem;
+	HbDataFormModelItem* mCustomPathItem;
+	
+	EngineWrapper& mEngine;
+};
+
+#endif /* MEMSPYSETTINGSVIEW_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspyui/ui/hb/inc/memspyswmtview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,65 @@
+/*
+ * 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:
+ *  
+ */
+
+#ifndef MEMSPYSWMTVIEW_H_
+#define MEMSPYSWMTVIEW_H_
+
+#include "memspyview.h"
+
+class HbDataFormModel;
+class HbDataFormModelItem;
+class HbProgressDialog;
+
+class MemSpySwmtView : public MemSpyView
+{
+	Q_OBJECT
+	
+public:
+	MemSpySwmtView(EngineWrapper &engine, ViewManager &viewManager);
+	virtual ~MemSpySwmtView();
+	
+	void initialize(const QVariantMap& params);
+		
+protected:
+	HbToolBar* createToolBar();
+	
+	HbWidget* createCentralWidget();
+	
+private slots:
+	void toggleTimer();
+	void forceDump();
+	void modeChanged(int mode);
+	void asyncOperationFinished(int errorCode);
+	
+private:
+	void updateTimerAction(bool isRunning);
+	void removeCategoriesItem();
+	void createCategoriesItem();
+	void updateSettings();
+	
+private:
+	HbAction* mToggleTimerAction;
+	
+	HbDataFormModel* mModel;
+	HbDataFormModelItem* mTimerItem;
+	HbDataFormModelItem* mModeItem;
+	HbDataFormModelItem* mCategoriesItem;
+	
+	HbProgressDialog* mProgressDialog;
+};
+
+#endif /* MEMSPYSWMTVIEW_H_ */
--- a/memspyui/ui/hb/inc/memspythreaddetailindexview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/memspythreaddetailindexview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -18,21 +18,26 @@
 #ifndef MEMSPYTHREADDETAILINDEXVIEW_H_
 #define MEMSPYTHREADDETAILINDEXVIEW_H_
 
-#include "memspyview.h"
+#include "memspylistview.h"
 #include "enginewrapper.h"
 
 class HbMenu;
 
-class MemSpyThreadDetailIndexView : public MemSpyView
+class MemSpyThreadDetailIndexView : public MemSpyListView
 {
 	Q_OBJECT
 	
 public:
 	MemSpyThreadDetailIndexView(EngineWrapper &engine, ViewManager &viewManager) 
-		: MemSpyView(engine, viewManager) {}
+		: MemSpyListView(engine, viewManager) {}
 protected:
 	virtual void initialize(const QVariantMap& params);
+	
 	virtual HbMenu* createToolMenu();
+	
+	virtual bool isBreadCrumbVisible() const;
+	    
+	virtual QString getBreadCrumbText() const;
 
 private slots:
 	void changePriority();
@@ -41,6 +46,8 @@
 private:
 	ThreadId mThreadId;
 	HbMenu *mPriorityMenu;
+	QString mProcessName;
+	QString mThreadName;
 };
 
 #endif /* MEMSPYTHREADDETAILINDEXVIEW_H_ */
--- a/memspyui/ui/hb/inc/memspythreaddetailview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/memspythreaddetailview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -18,7 +18,7 @@
 #ifndef MEMSPYTHREADDETAILVIEW_H_
 #define MEMSPYTHREADDETAILVIEW_H_
 
-#include "memspyview.h"
+#include "memspylistview.h"
 #include "enginewrapper.h"
 
 class HbMenu;
@@ -39,19 +39,25 @@
 };
 
 
-class MemSpyThreadDetailView : public MemSpyView
+class MemSpyThreadDetailView : public MemSpyListView
 {
 	Q_OBJECT
 	
 public:
 	MemSpyThreadDetailView(EngineWrapper &engine, ViewManager &viewManager) 
-		: MemSpyView(engine, viewManager) {}
+		: MemSpyListView(engine, viewManager) {}
 protected:
 	virtual void initialize(const QVariantMap& params);
 	
+	virtual bool isBreadCrumbVisible() const;
+	
+	virtual QString getBreadCrumbText() const;
+	
 private:
 	ThreadId mThreadId;
 	HbMenu *mPriorityMenu;
+	QString mProcessName;
+	QString mThreadName;
 };
 
 #endif /* MEMSPYTHREADDETAILVIEW_H_ */
--- a/memspyui/ui/hb/inc/memspythreadview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/memspythreadview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -18,7 +18,7 @@
 #ifndef MEMSPYTHREADVIEW_H_
 #define MEMSPYTHREADVIEW_H_
 
-#include "memspyview.h"
+#include "memspylistview.h"
 #include "enginewrapper.h"
 
 class MemSpyThreadModel : public QAbstractListModel
@@ -32,20 +32,29 @@
 	
 	QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
 	
+	void refresh();
+	
 private:
+	ProcessId mProcessId;
+	
+	EngineWrapper& mEngine;
+	
 	QList<MemSpyThread*> mThreads;
 	
 	QMap<int, QString> mPriorityMap;
 };
 
 
-class MemSpyThreadView : public MemSpyView
+class MemSpyThreadView : public MemSpyListView
 {
 	Q_OBJECT
 	
 public:
 	MemSpyThreadView(EngineWrapper &engine, ViewManager &viewManager);
 	~MemSpyThreadView();
+	
+public slots:
+    virtual void refresh();
 
 protected:
 	void initialize(const QVariantMap& params);
@@ -53,6 +62,10 @@
 protected:
 	virtual bool isRefreshable() const { return true; }
 	
+	virtual bool isBreadCrumbVisible() const;
+	
+	QString getBreadCrumbText() const;
+	
 private slots:
 	void itemClicked(const QModelIndex& index);
 	void catchLongPress(HbAbstractViewItem *item, const QPointF &coords);
@@ -62,6 +75,9 @@
 	HbMenu* mContextMenu;
 	HbMenu* mPriorityMenu;
 	ThreadId mThreadId;
+	QString mProcessName;
+	
+	MemSpyThreadModel* mModel;
 };
 
 #endif /* MEMSPYTHREADVIEW_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspyui/ui/hb/inc/memspytrackingview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -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:
+ *  
+ */
+
+#ifndef MEMSPYTRACKINGVIEW_H_
+#define MEMSPYTRACKINGVIEW_H_
+
+#include "memspylistview.h"
+
+class MemSpyTrackingView : public MemSpyListView
+{
+    Q_OBJECT
+    
+public:
+    MemSpyTrackingView(EngineWrapper &engine, ViewManager &viewManager) 
+		: MemSpyListView(engine, viewManager) {}
+protected:
+	virtual void initialize(const QVariantMap& params);
+	virtual bool isBreadCrumbVisible() const;
+	
+public slots:
+	void itemClicked(const QModelIndex& index);
+};
+
+#endif /* MEMSPYTRACKINGVIEW_H_ */
--- a/memspyui/ui/hb/inc/memspyview.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/memspyview.h	Thu Jun 24 14:55:55 2010 +0300
@@ -22,9 +22,12 @@
 #include <HbListView>
 #include <QVariantMap>
 
+class HbLabel;
+class HbProgressDialog;
 class EngineWrapper;
 class ViewManager;
 
+
 class MemSpyView : public HbView
 {
 	Q_OBJECT
@@ -44,22 +47,33 @@
 	
 	virtual bool isRefreshable() const;
 	
+	virtual bool isBreadCrumbVisible() const;
+	
+	virtual QString getBreadCrumbText() const;
+	
+	virtual HbWidget* createCentralWidget() = 0;
+	
 public slots:
 
 	virtual void initialize(const QVariantMap& params);
 
 	virtual void refresh();
 	
+	void showSettings();
+	
 	void showAbout();
 	
-protected:
+private slots:
 	
-	HbListView mListView;
+	void closeSettings();
+		
+protected:
 	
 	EngineWrapper &mEngine;
 	
 	ViewManager &mViewManager;
 	
+	
 private:
 	HbMenu* mOutputMenu;
 	HbMenu* mOutputGenInfoMenu;
@@ -67,6 +81,7 @@
 	HbMenu* mOutputStackInfoMenu;
 	HbToolBar* mToolBar;
 	
+	HbLabel* mBreadCrumb;
 };
 
 #endif /* MEMSPYVIEW_H_ */
--- a/memspyui/ui/hb/inc/viewmanager.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/inc/viewmanager.h	Thu Jun 24 14:55:55 2010 +0300
@@ -30,7 +30,10 @@
 	ThreadDetailView,
 	KernelObjectTypeView,
 	KernelObjectView,
-	KernelObjectDetailView
+	KernelObjectDetailView,
+	TrackingView,
+	SwmtView,
+	HeapDumpsView
 };
 
 class HbMainWindow;
--- a/memspyui/ui/hb/src/enginewrapper.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/enginewrapper.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -15,8 +15,272 @@
 * 
 */
 
+#include <QMessageBox>
+
+#include <memspy/engine/memspyenginehelpersysmemtrackerconfig.h>
+
 #include "enginewrapper.h"
-#include <QMessageBox>
+
+// CONSTANTS
+
+const QString OUTPUT_MODE = "output/mode";
+const QString OUTPUT_PATH = "output/path";
+const QString SWMT_PERIOD = "swmt/period";
+const QString SWMT_MODE = "swmt/mode";
+const QString SWMT_CATEGORIES = "swmt/categories";
+const QString HEAP_DUMPS_MODE = "heapdumps/mode";
+
+QString MemSpyProcess::exitInfo() const
+{
+    QChar exitType[] = {'K', 'T', 'P', 'R'};
+    QString result = QString("[%1]").arg(exitType[mProcess->ExitType()]);
+    
+    if (mProcess->ExitType() != EExitKill && mProcess->ExitType() != EExitPending) {
+        
+        QString exitCategory = QString((QChar*) mProcess->ExitCategory().Ptr(), mProcess->ExitCategory().Length());
+        result.append(QString(" %1-%2").arg(exitCategory).arg(mProcess->ExitReason()));
+    }
+    
+    return result;
+}
+
+
+MemSpyDwoProgressTracker::MemSpyDwoProgressTracker(RMemSpySession &session) :
+	CActive(EPriorityStandard), mSession(session)
+{
+	CActiveScheduler::Add(this);
+}
+
+MemSpyDwoProgressTracker::~MemSpyDwoProgressTracker()
+{
+	Cancel();
+}
+
+void MemSpyDwoProgressTracker::start()
+{
+	mSession.NotifyDeviceWideOperationProgress(mProgress, iStatus);
+	
+	SetActive();
+}
+
+void MemSpyDwoProgressTracker::cancel()
+{
+	Cancel();
+}
+
+// Event handler method.
+ 
+void MemSpyDwoProgressTracker::RunL()
+    {
+ 
+    // If an error occurred handle it in RunError().
+    User::LeaveIfError(iStatus.Int());
+ 
+    // Resubmit the request immediately
+    
+    mSession.NotifyDeviceWideOperationProgress(mProgress, iStatus);
+ 
+    SetActive();
+ 
+    emit progress(mProgress.Progress(), QString((QChar*) mProgress.Description().Ptr(), mProgress.Description().Length()));
+    }
+ 
+void MemSpyDwoProgressTracker::DoCancel()
+{ 
+	// this is not yet implemented, as it is not required in current use cases
+}
+ 
+TInt MemSpyDwoProgressTracker::RunError(TInt aError)
+{ 
+	// KErrNotReady and KErrCancel errors are OK, they just notify 
+	// us about the outstanding notification request that won't be 
+	// processed.
+	Q_UNUSED(aError);
+	
+    return KErrNone;
+}
+
+MemSpyDwoTracker::MemSpyDwoTracker(RMemSpySession &session, DeviceWideOperation operation) :
+	CActive(EPriorityStandard), 
+	mSession(session),
+	mProgressTracker(new MemSpyDwoProgressTracker(session)),
+	mOperation(operation)
+{
+	CActiveScheduler::Add(this);
+	connect(mProgressTracker, SIGNAL(progress(int,QString)), this, SIGNAL(progress(int,QString)));
+}
+
+MemSpyDwoTracker::~MemSpyDwoTracker()
+{
+	Cancel();
+	
+	delete mProgressTracker;
+}
+
+void MemSpyDwoTracker::start()
+{
+	void (RMemSpySession::*functions[])(TRequestStatus&) = { 
+			&RMemSpySession::OutputPhoneInfo,
+			&RMemSpySession::OutputDetailedPhoneInfo,
+			&RMemSpySession::OutputHeapInfo,
+			&RMemSpySession::OutputCompactHeapInfo,
+			&RMemSpySession::OutputHeapCellListing,
+			&RMemSpySession::OutputHeapData,
+			&RMemSpySession::OutputStackInfo,
+			&RMemSpySession::OutputCompactStackInfo,
+			&RMemSpySession::OutputUserStackData,
+			&RMemSpySession::OutputKernelStackData };
+	
+	(mSession.*functions[mOperation])(iStatus);
+	
+	mProgressTracker->start();
+	
+	SetActive();
+}
+
+void MemSpyDwoTracker::cancel()
+{
+	Cancel();
+}
+
+// Event handler method.
+ 
+void MemSpyDwoTracker::RunL()
+    {
+ 
+    // If an error occurred handle it in RunError().
+    User::LeaveIfError(iStatus.Int());
+ 
+    // Operation has finished successfully 
+    emit finished(0);
+    }
+ 
+void MemSpyDwoTracker::DoCancel()
+{
+	// Cancel progress tracker
+	mProgressTracker->cancel();
+	
+	mSession.CancelDeviceWideOperationL();
+}
+ 
+TInt MemSpyDwoTracker::RunError(TInt aError)
+{ 
+	// Emit the finished signal to notify user 
+	// operation was canceled
+	emit finished(aError);
+	
+    return KErrNone;
+}
+
+MemSpyAsyncTracker::MemSpyAsyncTracker(RMemSpySession& session, void (RMemSpySession::*function)(TRequestStatus&)) :
+	CActive(EPriorityStandard), 
+	mFunction(function),
+	mSession(session)
+{
+	CActiveScheduler::Add(this);
+}
+
+void MemSpyAsyncTracker::RunL()
+{ 
+    // If an error occurred handle it in RunError().
+    User::LeaveIfError(iStatus.Int());
+ 
+    // Operation has finished successfully 
+    emit finished(0);
+}
+
+void MemSpyAsyncTracker::DoCancel()
+{
+	// nothing to do here
+}
+
+TInt MemSpyAsyncTracker::RunError(TInt aError)
+{ 
+	// Emit the finished signal to notify user 
+	// that operation was canceled
+	emit finished(aError);
+	
+    return KErrNone;
+}
+
+void MemSpyAsyncTracker::start()
+{
+	(mSession.*mFunction)(iStatus);
+	
+	SetActive();
+}
+
+MemSpySettings::MemSpySettings() : 
+	QSettings("Nokia", "MemSpy") 
+{
+}
+
+OutputMode MemSpySettings::outputMode() const
+{
+	return static_cast<OutputMode>(value(OUTPUT_MODE, 0).toInt());
+}
+
+void MemSpySettings::setOutputMode(OutputMode mode)
+{
+	setValue(OUTPUT_MODE, mode);
+}
+	
+QString MemSpySettings::outputPath() const
+{
+	return value(OUTPUT_PATH).toString();
+}
+
+void MemSpySettings::setOutputPath(const QString& path)
+{
+	setValue(OUTPUT_PATH, path);
+}
+
+int MemSpySettings::swmtTimerPeriod() const
+{
+	return value(SWMT_PERIOD, 30).toInt();
+}
+
+void MemSpySettings::setSwmtMode(SwmtMode mode)
+{
+	setValue(SWMT_MODE, mode);
+}
+
+SwmtMode MemSpySettings::swmtMode() const
+{
+	return static_cast<SwmtMode>(value(SWMT_MODE, 0).toInt());
+}
+
+void MemSpySettings::setSwmtTimerPeriod(int period)
+{
+	setValue(SWMT_PERIOD, period);
+}
+
+
+QVariantList MemSpySettings::swmtCategories() const
+{
+	return value(SWMT_CATEGORIES).toList();
+}
+
+void MemSpySettings::setSwmtCategories(const QVariantList& categories)
+{
+	setValue(SWMT_CATEGORIES, categories);
+}
+
+HeapDumpsMode MemSpySettings::heapDumpsMode() const
+{
+	return static_cast<HeapDumpsMode>(value(HEAP_DUMPS_MODE).toInt());
+}
+
+void MemSpySettings::setHeapDumpsMode(HeapDumpsMode mode)
+{
+	setValue(HEAP_DUMPS_MODE, mode);
+}
+
+
+EngineWrapper::EngineWrapper() :
+	mSwmtRunning(false)
+{
+}
 
 EngineWrapper::~EngineWrapper()
 {
@@ -28,15 +292,28 @@
 	return mSession.Connect() == KErrNone;
 }
 
+MemSpySettings& EngineWrapper::settings()
+{
+	return mSettings;
+}
+
+const MemSpySettings& EngineWrapper::settings() const
+{
+	return mSettings;
+}
+
+
+
 QList<MemSpyProcess*> EngineWrapper::getProcesses()
 {
 	QList<MemSpyProcess*> result;
 	
 	RArray<CMemSpyApiProcess*> proc;
-	TRAPD(error, mSession.GetProcessesL(proc));
-	if (error == KErrNone)
-		for(TInt i=0; i<proc.Count(); i++)
-			result.append(new MemSpyProcess(proc[i]));
+	
+	QT_TRAP_THROWING(mSession.GetProcessesL(proc));
+	
+	for (TInt i=0; i<proc.Count(); i++)
+        result.append(new MemSpyProcess(proc[i]));
 	
 	return result;
 }
@@ -46,10 +323,11 @@
 	QList<MemSpyThread*> result;
 	
 	RArray<CMemSpyApiThread*> proc;
-	TRAPD(error, mSession.GetThreadsL(processId, proc));
-	if (error == KErrNone)
-		for(TInt i=0; i<proc.Count(); i++)
-			result.append(new MemSpyThread(proc[i]));
+	
+	QT_TRAP_THROWING(mSession.GetThreadsL(processId, proc));
+	
+    for (TInt i=0; i<proc.Count(); i++)
+        result.append(new MemSpyThread(proc[i]));
 	
 	return result;
 }
@@ -58,11 +336,11 @@
 {
 	QList<MemSpyThreadInfoItem*> result;
 	RArray<CMemSpyApiThreadInfoItem*> threadInfo;
-	TRAPD(error, mSession.GetThreadInfoItems(threadInfo, threadId, 
+	qt_symbian_throwIfError(mSession.GetThreadInfoItems(threadInfo, threadId, 
 			static_cast<TMemSpyThreadInfoItemType>(type)));
-	if (error == KErrNone)
-		for (TInt i=0; i<threadInfo.Count(); i++)
-			result.append(new MemSpyThreadInfoItem(threadInfo[i]));
+	
+	for (TInt i=0; i<threadInfo.Count(); i++)
+		result.append(new MemSpyThreadInfoItem(threadInfo[i]));
 	
 	return result;
 }
@@ -77,10 +355,10 @@
 	QList<MemSpyKernelObjectType*> result;
 		
 	RArray<CMemSpyApiKernelObject*> types;
-	TInt error = mSession.GetKernelObjects(types);
-	if (error == KErrNone)
-		for(TInt i=0; i<types.Count(); i++)
-			result.append(new MemSpyKernelObjectType(types[i]));
+	qt_symbian_throwIfError(mSession.GetKernelObjects(types));
+	
+	for(TInt i=0; i<types.Count(); i++)
+		result.append(new MemSpyKernelObjectType(types[i]));
 	
 	return result;
 }
@@ -90,11 +368,139 @@
 	QList<MemSpyKernelObject*> result;
 		
 	RArray<CMemSpyApiKernelObjectItem*> objects;
-	TInt error = mSession.GetKernelObjectItems(objects, 
-			static_cast<TMemSpyDriverContainerType>(type));
-	if (error == KErrNone)
-		for(TInt i=0; i<objects.Count(); i++)
-			result.append(new MemSpyKernelObject(objects[i]));
+	qt_symbian_throwIfError(mSession.GetKernelObjectItems(objects, 
+			static_cast<TMemSpyDriverContainerType>(type)));
+	
+	for(TInt i=0; i<objects.Count(); i++)
+		result.append(new MemSpyKernelObject(objects[i]));
 	
 	return result;
 }
+
+MemSpyDwoTracker* EngineWrapper::createDeviceWideOperation(DeviceWideOperation operation)
+{
+	return new MemSpyDwoTracker(mSession, operation);
+}
+
+MemSpyKernelHeapDumpTracker* EngineWrapper::createKernelHeapDumpTracker()
+{
+	return new MemSpyKernelHeapDumpTracker(mSession);
+}
+
+MemSpySwmtDumpTracker* EngineWrapper::createSwmtDumpTracker()
+{
+	return new MemSpySwmtDumpTracker(mSession);
+}
+
+void EngineWrapper::setSwmtSettings(SwmtMode mode, const QVariantList& categories)
+{
+	int bits = 0;
+	bool heapDumps = false;
+	switch (mode)
+	{
+	case SwmtModeBasic:
+		bits = TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserHeap | 
+			TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks |
+			TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData |
+			TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategorySystemMemory;
+		
+		break;
+		
+	case SwmtModeFull:
+		bits = TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryAll;
+		heapDumps = true;
+		
+		break;
+		
+	case SwmtModeCustom:
+		bits = 0;
+		// this needs to be in sync. with swmt view categories
+		TMemSpyEngineHelperSysMemTrackerConfig::TMemSpyEngineSysMemTrackerCategories cats[] = {
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryFileServerCache,
+            //TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryBitmapHandles,
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserHeap,
+            //TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryKernelHeap,
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryLocalChunks,
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalChunks,
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryRAMDrive,
+            //TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks,
+            //TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData,
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryRAMLoadedCode,
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryKernelHandles,
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryOpenFiles,
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryDiskusage,
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategorySystemMemory,
+            TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryWindowGroups
+		};
+
+		foreach (const QVariant& bit, categories)
+			bits |= cats[bit.toInt()];
+		
+		break;
+	}
+	
+	TRAP_IGNORE(mSession.SetSwmtCategoriesL(bits));
+	TRAP_IGNORE(mSession.SetSwmtHeapDumpsEnabledL(heapDumps));
+}
+
+bool EngineWrapper::isSwmtRunning()
+{
+	return mSwmtRunning;
+}
+	
+void EngineWrapper::startSwmt(int period)
+{
+	mSwmtRunning = true;
+	updateOutputSettings();
+	TRAP_IGNORE(mSession.StartSwmtTimerL(period));
+}
+
+void EngineWrapper::stopSwmt()
+{
+	mSwmtRunning = false;
+	TRAP_IGNORE(mSession.StopSwmtTimerL());
+}
+
+void EngineWrapper::forceSwmtDump()
+{
+	updateOutputSettings();	
+	TRAP_IGNORE(mSession.ForceSwmtUpdateL());
+}
+
+void EngineWrapper::outputKernelHeapData()
+{
+	updateOutputSettings();
+	TRAP_IGNORE(mSession.OutputKernelHeapDataL());
+}
+
+int EngineWrapper::outputThreadHeapData(const QString& filter)
+{
+	TPtrC customFilterDesc(static_cast<const TUint16*>(filter.utf16()), filter.length());
+	
+	TRAPD(err, mSession.OutputThreadHeapDataL(customFilterDesc));
+	
+	return err;
+}
+
+void EngineWrapper::updateOutputSettings()
+{
+	switch (mSettings.outputMode()) {
+		case OutputModeTrace:
+			TRAP_IGNORE(mSession.SwitchOutputToTraceL());
+			break;
+		
+		case OutputModeFile:
+		
+			if (mSettings.outputPath().isEmpty()) {
+				TRAP_IGNORE(mSession.SwitchOutputToFileL(KNullDesC));
+			
+			} else {
+				
+				QString root = mSettings.outputPath();
+				TPtrC rootDesc (static_cast<const TUint16*>(root.utf16()), root.length());
+			
+				TRAP_IGNORE(mSession.SwitchOutputToFileL(rootDesc));
+			}
+	
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspyui/ui/hb/src/memspyheapdumpsview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,184 @@
+/*
+ * 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:
+ *  
+ */
+
+#include <HbToolBar>
+#include <HbAction>
+#include <HbDataForm>
+#include <HbDataFormModel>
+#include <HbProgressDialog>
+#include <HbMessageBox>
+#include <HbLabel>
+
+#include "memspyheapdumpsview.h"
+#include "enginewrapper.h"
+
+const QStringList MODE_ITEMS = QStringList() << 
+	MemSpyHeapDumpsView::tr("Kernel") << 
+	MemSpyHeapDumpsView::tr("User") << 
+	MemSpyHeapDumpsView::tr("Both");
+	
+MemSpyHeapDumpsView::MemSpyHeapDumpsView(EngineWrapper &engine, ViewManager &viewManager) : 
+	MemSpyView(engine, viewManager),
+	mModel(0),
+	mModeItem(0),
+	mFilterItem(0),
+	mDwoProgressDialog(0)
+{
+}
+
+MemSpyHeapDumpsView::~MemSpyHeapDumpsView()
+{
+	delete mDwoProgressDialog;
+}
+
+void MemSpyHeapDumpsView::initialize(const QVariantMap& params)
+{
+	setTitle(tr("Heap Dumps"));
+	
+	MemSpyView::initialize(params);
+}
+
+HbToolBar* MemSpyHeapDumpsView::createToolBar()
+{
+	HbToolBar* toolBar = new HbToolBar();
+	toolBar->addAction(tr("Dump Now"), this, SLOT(dump()));
+	return toolBar;
+}
+
+HbWidget* MemSpyHeapDumpsView::createCentralWidget()
+{
+	mModel = new HbDataFormModel(this);
+	
+	//TODO: uncomment after kernel heap dumps are implemented 
+//	mModeItem = mModel->appendDataFormItem(
+//		HbDataFormModelItem::ComboBoxItem, tr("Heap Dump"));
+//	mModeItem->setContentWidgetData("items", MODE_ITEMS);
+//	mModeItem->setContentWidgetData("currentIndex", mEngine.settings().heapDumpsMode());
+//	modeChanged(mEngine.settings().heapDumpsMode());
+	
+	//TODO: remove after kernel heap dumps are implemented
+	createFilterItem();
+	
+	HbDataForm* form = new HbDataForm(this);
+	form->setModel(mModel);
+	
+	//TODO: uncomment after kernel heap dumps are implemented
+//	form->addConnection(mModeItem, SIGNAL(currentIndexChanged(int)), this, SLOT(modeChanged(int)));
+	
+	return form;
+}
+
+void MemSpyHeapDumpsView::modeChanged(int mode)
+{
+	if (mode == HeapDumpsModeKernel && mFilterItem)
+		removeFilterItem();
+	else if (mode != HeapDumpsModeKernel && !mFilterItem)
+		createFilterItem();
+}
+
+void MemSpyHeapDumpsView::createFilterItem()
+{
+	mFilterItem = mModel->appendDataFormItem(
+			HbDataFormModelItem::TextItem, tr("Filter"));
+}
+
+void MemSpyHeapDumpsView::removeFilterItem()
+{
+	mModel->removeItem(mFilterItem);
+	mFilterItem = 0;
+}
+
+void MemSpyHeapDumpsView::dump()
+{
+    mEngine.updateOutputSettings();
+    
+	HeapDumpsMode mode = HeapDumpsModeUser;
+	//TODO: uncomment after kernel heap dumps are implemented 
+	//static_cast<HeapDumpsMode>(mModeItem->contentWidgetData("currentIndex").toInt());
+	
+	// save settings
+	//TODO: uncomment after kernel heap dumps are implemented
+	//mEngine.settings().setHeapDumpsMode(mode);
+
+	if (mode == HeapDumpsModeKernel || mode == HeapDumpsModeBoth) {
+		// dump kernel heap
+		mDwoProgressDialog = new HbProgressDialog(HbProgressDialog::WaitDialog);
+		mDwoProgressDialog->setText(tr("Please wait..."));
+		mDwoProgressDialog->show();
+		
+		MemSpyKernelHeapDumpTracker* tracker = mEngine.createKernelHeapDumpTracker();
+		connect(tracker, SIGNAL(finished(int)), this, SLOT(asyncOperationFinished(int)));
+		tracker->start();
+	}
+	
+	if (mode == HeapDumpsModeUser || mode == HeapDumpsModeBoth) {
+		// dump user heap
+		
+		QString filter = mFilterItem->contentWidgetData("text").toString();
+		if (!filter.isEmpty()) {
+		    
+			int errorCode = mEngine.outputThreadHeapData(filter);
+            if (errorCode == KErrNotFound) {
+                HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+                messageBox->setText(tr("No thread matches your filter"));
+                HbLabel *header = new HbLabel(tr("No such thread"), messageBox);
+                messageBox->setHeadingWidget(header);
+                messageBox->setAttribute(Qt::WA_DeleteOnClose);
+                messageBox->setTimeout(HbPopup::StandardTimeout);
+                messageBox->open();
+            }
+			    
+			
+		} else {
+			mDwoProgressDialog = new HbProgressDialog(HbProgressDialog::ProgressDialog);
+			mDwoProgressDialog->setMinimum(0);
+			mDwoProgressDialog->setMaximum(100);
+			mDwoProgressDialog->show();
+			
+			MemSpyDwoTracker* tracker = mEngine.createDeviceWideOperation(OutputHeapData);
+			connect(tracker, SIGNAL(progress(int,QString)), this, SLOT(updateDwoProgress(int,QString)));
+			connect(tracker, SIGNAL(finished(int)), this, SLOT(asyncOperationFinished(int)));
+			connect(mDwoProgressDialog, SIGNAL(cancelled()), tracker, SLOT(cancel()));
+			tracker->start();
+		}
+	}
+}
+
+void MemSpyHeapDumpsView::updateDwoProgress(int progress, const QString& processName)
+{
+	mDwoProgressDialog->setText(processName);
+	mDwoProgressDialog->setProgressValue(progress);
+}
+
+void MemSpyHeapDumpsView::asyncOperationFinished(int errorCode)
+{
+	mDwoProgressDialog->hide();
+	delete mDwoProgressDialog;
+	mDwoProgressDialog = 0;
+	
+	delete sender();    
+	
+	if (errorCode != KErrNone && errorCode != KErrCancel) {
+	    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeWarning);
+        messageBox->setText(tr("An error occured during the operation. Error code: %1").arg(errorCode));
+        HbLabel *header = new HbLabel(tr("Error"), messageBox);
+        messageBox->setHeadingWidget(header);
+        messageBox->setAttribute(Qt::WA_DeleteOnClose);
+        messageBox->setTimeout(HbPopup::StandardTimeout);
+        messageBox->open();
+	}
+}
--- a/memspyui/ui/hb/src/memspykernelobjectdetailview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/memspykernelobjectdetailview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -19,11 +19,49 @@
 
 #include "memspykernelobjectdetailview.h"
 
+MemSpyKernelObjectDetailModel::MemSpyKernelObjectDetailModel(const QStringList& details, QObject *parent) :
+    QAbstractListModel(parent),
+    mDetails(details)
+{
+
+}
+    
+int MemSpyKernelObjectDetailModel::rowCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return mDetails.count();
+}
+    
+QVariant MemSpyKernelObjectDetailModel::data(const QModelIndex &index, int role) const
+{
+    if (role == Qt::DisplayRole) {
+        
+        // convert from semicolon delimited line to two lines
+        return mDetails.at(index.row()).split(": ");
+    }
+    
+    return QVariant();
+}
+
+
 void MemSpyKernelObjectDetailView::initialize(const QVariantMap& params)
 {
-	MemSpyView::initialize(params);
+	setTitle("Details");
 	
-	setTitle("Details");
+	mTypeName = params["typeName"].toString();
+	mObjectName = params["objectName"].toString();
+	MemSpyView::initialize(params);
+		
 	QStringList items = params.value("details").toStringList();
-	mListView.setModel(new QStringListModel(items, this));
+	mListView.setModel(new MemSpyKernelObjectDetailModel(items, this));
 }
+
+bool MemSpyKernelObjectDetailView::isBreadCrumbVisible() const
+{
+    return true;
+}
+            
+QString MemSpyKernelObjectDetailView::getBreadCrumbText() const
+{
+    return tr("Kernel Objects > %1 > %2").arg(mTypeName).arg(mObjectName);
+}
--- a/memspyui/ui/hb/src/memspykernelobjecttypeview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/memspykernelobjecttypeview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -24,6 +24,10 @@
 	QAbstractListModel(parent),
 	mObjectTypes(engine.getKernelObjectTypes())
 {
+    mKernelObjectNames << "Threads" << "Processes" << "Chunks" << "Libraries" <<
+        "Semaphores" << "Mutexes" << "Timers" << "Servers" << "Sessions" << "Logical Devices" <<
+        "Physical Devices" << "Logical Channels" << "Change Notifiers" << "Undertakers" <<
+        "Message Queues" << "Property Refs." << "Conditional Vars.";
 }
 
 MemSpyKernelObjectTypeModel::~MemSpyKernelObjectTypeModel()
@@ -41,7 +45,7 @@
 {
 	if (role == Qt::DisplayRole) {
 		QStringList lines;
-		lines << mObjectTypes.at(index.row())->name();
+		lines << mKernelObjectNames.at(index.row());
 		lines << QString("%1, %2").
 			arg(tr("%n item(s)", "", mObjectTypes.at(index.row())->count())).
 			arg(formatSize(mObjectTypes.at(index.row())->size()));
@@ -70,9 +74,9 @@
 
 void MemSpyKernelObjectTypeView::initialize(const QVariantMap& params)
 {
+	setTitle(tr("Kernel Objects"));
+		
 	MemSpyView::initialize(params);
-	
-	setTitle(tr("Kernel Objects"));
 			
 	mListView.setModel(new MemSpyKernelObjectTypeModel(mEngine, this));
 	
--- a/memspyui/ui/hb/src/memspykernelobjectview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/memspykernelobjectview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -55,8 +55,6 @@
 
 void MemSpyKernelObjectView::initialize(const QVariantMap& params)
 {
-	MemSpyView::initialize(params);
-	
 	QStringList list = QStringList() << "Threads" << "Processes" << "Chunks" << "Libraries" <<
 			"Semaphores" << "Mutexes" << "Timers" << "Servers" << "Sessions" << "Logical Devices" <<
 			"Physical Devices" << "Logical Channels" << "Change Notifiers" << "Undertakers" <<
@@ -66,16 +64,31 @@
 	
 	setTitle(list.at(type));
 	
+	MemSpyView::initialize(params);
+	
 	//mListView.setModel(new MemSpyKernelObjectTypeModel(mEngine, this));
 	mListView.setModel(new MemSpyKernelObjectModel(mEngine, type, this));
 	
 	connect(&mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
 }
 
+bool MemSpyKernelObjectView::isBreadCrumbVisible() const
+{
+    return true;
+}
+            
+QString MemSpyKernelObjectView::getBreadCrumbText() const
+{
+    return tr("Kernel Objects");
+}
+
+
 void MemSpyKernelObjectView::itemClicked(const QModelIndex& index)
 {
 	QVariantMap map;
 	map.insert("details", getDetails(static_cast<MemSpyKernelObject*>(qVariantValue<void*>(index.data(Qt::UserRole)))));
+	map.insert("typeName", title());
+	map.insert("objectName", static_cast<MemSpyKernelObject*>(qVariantValue<void*>(index.data(Qt::UserRole)))->nameDetail());
     mViewManager.showView(KernelObjectDetailView, map);
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspyui/ui/hb/src/memspylistview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -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:
+ *  
+ */
+
+#include "memspylistview.h"
+
+HbWidget* MemSpyListView::createCentralWidget()
+{
+	return &mListView;
+}
--- a/memspyui/ui/hb/src/memspymainview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/memspymainview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -23,13 +23,14 @@
 
 void MemSpyMainView::initialize(const QVariantMap& params)
 {
+	setTitle("MemSpy");
+	
 	MemSpyView::initialize(params);
 	
-	setTitle("MemSpy");
 	QStringList items = QStringList() 
 			<< tr("Processes & Threads") 
-			<< tr("Kernel Objects"); 
-			//<< tr("Kernel Heap");
+			<< tr("Kernel Objects")
+			<< tr("Tracking");
 	mListView.setModel(new QStringListModel(items, this));
     
 	QObject::connect(&mListView, SIGNAL(released(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
@@ -38,7 +39,12 @@
 void MemSpyMainView::itemClicked(const QModelIndex& index)
 {
 	Q_UNUSED(index);
-	ViewIndex indexes[] = { ProcessView, KernelObjectTypeView, KernelObjectTypeView };
+	ViewIndex indexes[] = { ProcessView, KernelObjectTypeView, TrackingView };
     mViewManager.showView(indexes[index.row()]);
 }
 
+bool MemSpyMainView::isBreadCrumbVisible() const
+{
+	return false;
+}
+
--- a/memspyui/ui/hb/src/memspyprocessview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/memspyprocessview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -23,8 +23,17 @@
 
 MemSpyProcessModel::MemSpyProcessModel(EngineWrapper &engine, QObject *parent) :
 	QAbstractListModel(parent),
+	mEngine(engine),
 	mProcesses(engine.getProcesses())
 {
+    mPriorityMap.insert(EPriorityLow, tr("[L]"));
+    mPriorityMap.insert(EPriorityBackground, tr("[B]"));
+    mPriorityMap.insert(EPriorityForeground, tr("[F]"));
+    mPriorityMap.insert(EPriorityHigh, tr("[H]"));
+    mPriorityMap.insert(EPriorityWindowServer, tr("[WS]"));
+    mPriorityMap.insert(EPriorityFileServer, tr("[FS]"));
+    mPriorityMap.insert(EPriorityRealTimeServer, tr("[RTS]"));
+    mPriorityMap.insert(EPrioritySupervisor, tr("[SUP]"));
 }
 
 MemSpyProcessModel::~MemSpyProcessModel()
@@ -41,8 +50,17 @@
 QVariant MemSpyProcessModel::data(const QModelIndex &index, int role) const
 {
 	if (role == Qt::DisplayRole) {
+	    const MemSpyProcess* process = mProcesses.at(index.row());
+	    
 		QStringList lines;
-		lines << mProcesses.at(index.row())->name();
+		lines << process->name();
+		
+		lines << (process->isDead() ? 
+		    process->exitInfo() :
+		    QString("%1, %2 thr, %3").
+                arg(process->sid(), 0, 16).
+                arg(process->threadCount()).
+                arg(mPriorityMap.value(process->priority(), tr("[?]"))));
 		
 		return lines;
 	}
@@ -52,14 +70,24 @@
 	
 	return QVariant();
 }
+
+void MemSpyProcessModel::refresh()
+{
+    beginResetModel();
+    QList<MemSpyProcess*> data = mEngine.getProcesses();
+    qDeleteAll(mProcesses);
+    mProcesses = data;
+    endResetModel();
+}
 	
 
 void MemSpyProcessView::initialize(const QVariantMap& params)
 {
+	setTitle(tr("Processes"));
 	MemSpyView::initialize(params);
 	
-	setTitle(tr("Processes"));
-	mListView.setModel(new MemSpyProcessModel(mEngine, this));
+	mModel = new MemSpyProcessModel(mEngine, this);
+	mListView.setModel(mModel);
 	
 	connect(&mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
 }
@@ -68,6 +96,12 @@
 {
 	QVariantMap map;
 	map.insert("pid", index.data(Qt::UserRole));
+	map.insert("pname", index.data(Qt::DisplayRole).toStringList().at(0));
     mViewManager.showView(ThreadView, map);
 }
 
+void MemSpyProcessView::refresh()
+{ 
+    mModel->refresh(); 
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspyui/ui/hb/src/memspysettingsview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,127 @@
+/*
+ * 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:
+ *  
+ */
+
+#include <HbToolBar>
+#include <HbAction>
+#include <HbDataForm>
+#include <HbDataFormModel>
+#include <HbProgressDialog>
+
+#include "memspysettingsview.h"
+#include "enginewrapper.h"
+
+const QStringList MODE_ITEMS = QStringList() << 
+	MemSpySettingsView::tr("RDebug") << 
+	MemSpySettingsView::tr("File");
+	
+MemSpySettingsView::MemSpySettingsView(EngineWrapper &engine) :
+	mForm(new HbDataForm(this)),
+	mModel(0),
+	mModeItem(0),
+	mPathItem(0),
+	mCustomPathItem(0),
+	mEngine(engine)
+{
+	setTitle(tr("Settings"));
+	
+	toolBar()->addAction(tr("OK"), this, SLOT(accept()));
+	toolBar()->addAction(tr("Cancel"), this, SLOT(reject()));
+	
+	mModel = new HbDataFormModel(this);
+		
+	mModeItem = mModel->appendDataFormItem(
+		HbDataFormModelItem::ComboBoxItem, tr("Output"));
+	mModeItem->setContentWidgetData("items", MODE_ITEMS);
+	mModeItem->setContentWidgetData("currentIndex", mEngine.settings().outputMode());
+	
+	updateModel();
+		
+	
+	mForm->setModel(mModel);
+	mForm->addConnection(mModeItem, SIGNAL(currentIndexChanged(int)), this, SLOT(updateModel()));
+	setWidget(mForm);
+	
+	// change navigation action
+	HbAction* action = new HbAction(Hb::BackNaviAction, this);
+	connect(action, SIGNAL(triggered()), this, SLOT(reject()));
+	setNavigationAction(action);
+}
+
+MemSpySettingsView::~MemSpySettingsView()
+{
+}
+
+void MemSpySettingsView::updateModel()
+{
+	OutputMode mode = static_cast<OutputMode>(mModeItem->contentWidgetData("currentIndex").toInt());
+	if (mode == OutputModeTrace) {
+		// remove both path item and custom path item
+		if (mPathItem)
+			mModel->removeItem(mPathItem);
+		if (mCustomPathItem)
+			mModel->removeItem(mCustomPathItem);
+		
+		mPathItem = mCustomPathItem = 0;
+	} else if (mode == OutputModeFile) {
+		if (!mPathItem) {
+			// create path item
+			mPathItem = mModel->appendDataFormItem(
+					HbDataFormModelItem::CheckBoxItem, tr("Path"));
+			mPathItem->setContentWidgetData("text", tr("Use Default Path (\\MemSpy)"));
+			mPathItem->setContentWidgetData("checkState", 
+					mEngine.settings().outputPath().isEmpty() ? Qt::Checked : Qt::Unchecked);
+			
+			mForm->addConnection(mPathItem, SIGNAL(stateChanged(int)), 
+					this, SLOT(updateModel()));
+		}
+		
+		if (mPathItem->contentWidgetData("checkState").toInt() == Qt::Unchecked && !mCustomPathItem) {
+			// create custom path item
+			mCustomPathItem = mModel->appendDataFormItem(
+					HbDataFormModelItem::TextItem, tr("Custom Path"));
+			mCustomPathItem->setContentWidgetData("text", 
+					mEngine.settings().outputPath().isEmpty() ? "\\MemSpy" : mEngine.settings().outputPath());
+		}
+		
+		if (mPathItem->contentWidgetData("checkState").toInt() == Qt::Checked && mCustomPathItem) {
+			// remove cusom path item
+			mModel->removeItem(mCustomPathItem);
+			mCustomPathItem = 0;
+		}
+	}
+}
+
+void MemSpySettingsView::accept()
+{
+	OutputMode mode = static_cast<OutputMode>(mModeItem->contentWidgetData("currentIndex").toInt());
+	
+	mEngine.settings().setOutputMode(mode);
+	
+	if (mode == OutputModeFile) {
+		QString path = mPathItem->contentWidgetData("checkState").toInt() == Qt::Checked ? 
+				"" :
+				mCustomPathItem->contentWidgetData("text").toString();
+		mEngine.settings().setOutputPath(path);
+	}
+	emit finished(true);
+}
+
+void MemSpySettingsView::reject()
+{
+	emit finished(false);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspyui/ui/hb/src/memspyswmtview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,180 @@
+/*
+ * 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:
+ *  
+ */
+
+#include <HbToolBar>
+#include <HbAction>
+#include <HbDataForm>
+#include <HbDataFormModel>
+#include <HbProgressDialog>
+
+#include "memspyswmtview.h"
+#include "enginewrapper.h"
+
+const QStringList MODE_ITEMS = QStringList() << 
+	MemSpySwmtView::tr("Basic") << 
+	MemSpySwmtView::tr("Full") << 
+	MemSpySwmtView::tr("Custom");
+ 
+const QStringList CATEGORIES_ITEMS = QStringList() <<
+	MemSpySwmtView::tr("FileServer Cache") <<
+	//MemSpySwmtView::tr("Bitmap Handles") <<
+	MemSpySwmtView::tr("User Heap") <<
+	//MemSpySwmtView::tr("Kernel Heap") <<
+	MemSpySwmtView::tr("Local Chunks") <<
+	MemSpySwmtView::tr("Global Chunks") <<
+	MemSpySwmtView::tr("RAM Drive") <<
+	//MemSpySwmtView::tr("User Stacks") <<
+	//MemSpySwmtView::tr("Global Data") <<
+	MemSpySwmtView::tr("RAM-loaded Code") <<
+	MemSpySwmtView::tr("Kernel Handles") <<
+	MemSpySwmtView::tr("Open Files") <<
+	MemSpySwmtView::tr("Disk Usage") <<
+	MemSpySwmtView::tr("System Memory") <<
+	MemSpySwmtView::tr("Windows Groups");
+	
+MemSpySwmtView::MemSpySwmtView(EngineWrapper &engine, ViewManager &viewManager) : 
+	MemSpyView(engine, viewManager), 
+	mToggleTimerAction(0),
+	mCategoriesItem(0),
+	mProgressDialog(0)
+{
+}
+
+MemSpySwmtView::~MemSpySwmtView()
+{
+}
+
+void MemSpySwmtView::initialize(const QVariantMap& params)
+{
+	setTitle(tr("SWMT"));
+	
+	MemSpyView::initialize(params);
+}
+
+HbToolBar* MemSpySwmtView::createToolBar()
+{
+	HbToolBar* toolBar = new HbToolBar();
+	mToggleTimerAction = toolBar->addAction("", this, SLOT(toggleTimer()));
+	toolBar->addAction(tr("Dump Now"), this, SLOT(forceDump()));
+	
+	updateTimerAction(mEngine.isSwmtRunning());
+	
+	return toolBar;
+}
+
+HbWidget* MemSpySwmtView::createCentralWidget()
+{
+	mModel = new HbDataFormModel(this);
+	
+	mTimerItem = mModel->appendDataFormItem(
+			HbDataFormModelItem::TextItem, tr("Timer (sec.)"));
+	mTimerItem->setContentWidgetData("maxLength", 2);
+	mTimerItem->setContentWidgetData("text", mEngine.settings().swmtTimerPeriod());
+	
+	mModeItem = mModel->appendDataFormItem(
+			HbDataFormModelItem::ComboBoxItem, tr("Tracking mode"));
+	mModeItem->setContentWidgetData("items", MODE_ITEMS);
+	mModeItem->setContentWidgetData("currentIndex", mEngine.settings().swmtMode());
+	
+	modeChanged(mEngine.settings().swmtMode());
+	
+	HbDataForm* form = new HbDataForm(this);
+	form->setModel(mModel);
+	
+	form->addConnection(mModeItem, SIGNAL(currentIndexChanged(int)), this, SLOT(modeChanged(int)));
+	
+	return form;
+}
+
+void MemSpySwmtView::updateTimerAction(bool isRunning)
+{
+	mToggleTimerAction->setText(isRunning ? tr("Stop Timer") : tr("Start Timer"));
+}
+
+void MemSpySwmtView::toggleTimer()
+{
+	bool wasRunning = mEngine.isSwmtRunning();
+	if (wasRunning)
+		mEngine.stopSwmt();
+	else
+	{
+		updateSettings();
+		mEngine.startSwmt(qBound(5, mTimerItem->contentWidgetData("text").toInt(), 60));
+	}
+	
+	updateTimerAction(!wasRunning);
+}
+
+void MemSpySwmtView::forceDump()
+{
+	updateSettings();
+	mEngine.updateOutputSettings();
+		
+	MemSpySwmtDumpTracker* tracker = mEngine.createSwmtDumpTracker();
+	connect(tracker, SIGNAL(finished(int)), this, SLOT(asyncOperationFinished(int)));
+	
+	mProgressDialog = new HbProgressDialog(HbProgressDialog::WaitDialog);
+	mProgressDialog->setText(tr("Please wait..."));
+	mProgressDialog->show();
+	
+	tracker->start();
+}
+
+void MemSpySwmtView::updateSettings()
+{
+	mEngine.settings().setSwmtTimerPeriod(mTimerItem->contentWidgetData("text").toInt());
+	mEngine.settings().setSwmtMode(static_cast<SwmtMode>(
+			mModeItem->contentWidgetData("currentIndex").toInt()));
+	if (mCategoriesItem)
+		mEngine.settings().setSwmtCategories(mCategoriesItem->contentWidgetData("selectedItems").toList());
+	
+	mEngine.setSwmtSettings(static_cast<SwmtMode>(mEngine.settings().swmtMode()), 
+		mEngine.settings().swmtCategories());
+}
+
+void MemSpySwmtView::modeChanged(int mode)
+{
+	if (mode != SwmtModeCustom && mCategoriesItem)
+		removeCategoriesItem();
+	else if (mode == SwmtModeCustom && !mCategoriesItem)
+		createCategoriesItem();
+}
+
+void MemSpySwmtView::asyncOperationFinished(int errorCode)
+{
+	Q_UNUSED(errorCode);
+		
+	mProgressDialog->hide();
+	delete mProgressDialog;
+	mProgressDialog = 0;
+	
+	delete sender();
+}
+
+void MemSpySwmtView::createCategoriesItem()
+{
+	mCategoriesItem = mModel->appendDataFormItem(
+			HbDataFormModelItem::MultiselectionItem, tr("Categories"));
+	mCategoriesItem->setContentWidgetData("items", CATEGORIES_ITEMS);
+	mCategoriesItem->setContentWidgetData("selectedItems", mEngine.settings().swmtCategories());
+}
+
+void MemSpySwmtView::removeCategoriesItem()
+{
+	mModel->removeItem(mCategoriesItem);
+	mCategoriesItem = 0;
+}
--- a/memspyui/ui/hb/src/memspythreaddetailindexview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/memspythreaddetailindexview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -24,9 +24,12 @@
 
 void MemSpyThreadDetailIndexView::initialize(const QVariantMap& params)
 {
-	MemSpyView::initialize(params);
+	setTitle(tr("Details"));
 	
-	setTitle(tr("Thread Details"));
+	mProcessName = params["pname"].toString();
+	mThreadName = params["tname"].toString();
+	
+	MemSpyView::initialize(params);
 	
 	mThreadId = qVariantValue<ThreadId>(params["tid"]);
 	
@@ -69,7 +72,17 @@
 	
 	return menu;
 }
-	
+
+bool MemSpyThreadDetailIndexView::isBreadCrumbVisible() const
+{
+    return true;
+}
+
+QString MemSpyThreadDetailIndexView::getBreadCrumbText() const
+{
+    return tr("Processes > %1 > Threads > %2").arg(mProcessName).arg(mThreadName);
+}
+
 void MemSpyThreadDetailIndexView::changePriority()
 {
 	QAction *s = qobject_cast<QAction*>(sender());
@@ -111,6 +124,8 @@
 	QVariantMap map;
 	map.insert("tid", mThreadId);
 	map.insert("type", types[index.row()]);
+	map.insert("pname", mProcessName);
+	map.insert("tname", mThreadName);
 	mViewManager.showView(ThreadDetailView, map);
 }
 
--- a/memspyui/ui/hb/src/memspythreaddetailview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/memspythreaddetailview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -35,16 +35,26 @@
 int MemSpyThreadDetailModel::rowCount(const QModelIndex &parent) const
 {
 	Q_UNUSED(parent);
-	return mThreadInfo.count();
+	return qMax(mThreadInfo.count(), 1);
 }
 	
 QVariant MemSpyThreadDetailModel::data(const QModelIndex &index, int role) const
 {
 	if (role == Qt::DisplayRole) {
-		QStringList lines;
-		lines << mThreadInfo.at(index.row())->caption();
-		lines << mThreadInfo.at(index.row())->value();
-		return lines;
+	    
+	    if (mThreadInfo.count()) {
+            QStringList lines;
+            lines << mThreadInfo.at(index.row())->caption();
+            lines << mThreadInfo.at(index.row())->value();
+            return lines;
+	    }
+	    
+	    return tr("(no items found)");
+	}
+	
+	if (role == Qt::TextAlignmentRole && mThreadInfo.count() == 0) {
+	    
+	    return Qt::AlignHCenter;
 	}
 	
 	return QVariant();
@@ -52,12 +62,49 @@
 
 void MemSpyThreadDetailView::initialize(const QVariantMap& params)
 {
+    mProcessName = params["pname"].toString();
+    mThreadName = params["tname"].toString();
+    
+    // TODO: Remove duplicates with memspythreaddetailindexview
+    QMap<int, QString> titleMap;
+    titleMap[ThreadInfoTypeGeneral] = tr("General");
+    titleMap[ThreadInfoTypeHeap] = tr("Heap");
+    titleMap[ThreadInfoTypeStack] = tr("Stack");
+    titleMap[ThreadInfoTypeChunk] = tr("Chunks");
+    titleMap[ThreadInfoTypeCodeSeg] = tr("Code Segments"); 
+    titleMap[ThreadInfoTypeOpenFiles] = tr("Open Files");
+    titleMap[ThreadInfoTypeActiveObjects] = tr("Active Objects");
+    titleMap[ThreadInfoTypeOwnedThreadHandles] = tr("Handles to other Threads");
+    titleMap[ThreadInfoTypeOwnedProcessHandles] = tr("Handles to other Processes");
+    titleMap[ThreadInfoTypeServer] = tr("Servers Running in Thread");
+    titleMap[ThreadInfoTypeSession] = tr("Client <-> Server connections");
+    titleMap[ThreadInfoTypeSemaphore] = tr("Semaphores");
+    titleMap[ThreadInfoTypeOtherThreads] = tr("References this Thread");
+    titleMap[ThreadInfoTypeOtherProcesses] = tr("References this Process");
+    titleMap[ThreadInfoTypeMutex] = tr("Mutexes");
+    titleMap[ThreadInfoTypeTimer] = tr("Timers");
+    titleMap[ThreadInfoTypeChannel] = tr("Logical DD Channels");
+    titleMap[ThreadInfoTypeChangeNotifier] = tr("Change Notifiers"); 
+    titleMap[ThreadInfoTypeUndertaker] = tr("Undertakers");
+    titleMap[ThreadInfoTypeLDD] = tr("Logical Device Drivers");
+    titleMap[ThreadInfoTypePDD] = tr("Physical Device Drivers");
+    
+    setTitle(titleMap.value(params["type"].toInt()));
+    
 	MemSpyView::initialize(params);
 	
-	setTitle(tr("Thread Details"));
-	
 	ThreadId threadId = qVariantValue<ThreadId>(params["tid"]);
 	ThreadInfoType type = static_cast<ThreadInfoType>(qVariantValue<int>(params["type"]));
 	
 	mListView.setModel(new MemSpyThreadDetailModel(mEngine, threadId, type, this));
 }
+
+bool MemSpyThreadDetailView::isBreadCrumbVisible() const
+{
+    return true;
+}
+
+QString MemSpyThreadDetailView::getBreadCrumbText() const
+{
+    return tr("Processes > %1 > Threads > %2").arg(mProcessName).arg(mThreadName);
+}
--- a/memspyui/ui/hb/src/memspythreadview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/memspythreadview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -22,9 +22,11 @@
 #include "memspythreadview.h"
 #include "viewmanager.h"
 
-MemSpyThreadModel::MemSpyThreadModel(EngineWrapper &engine, ProcessId threadId, QObject *parent) :
+MemSpyThreadModel::MemSpyThreadModel(EngineWrapper &engine, ProcessId processId, QObject *parent) :
 	QAbstractListModel(parent),
-	mThreads(engine.getThreads(threadId))
+	mProcessId(processId),
+	mEngine(engine),
+	mThreads(engine.getThreads(processId))
 {
 	mPriorityMap.insert(ThreadPriorityNull, tr("[Null]"));
 	mPriorityMap.insert(ThreadPriorityMuchLess, tr("[Much Less]"));
@@ -78,11 +80,21 @@
 	return QVariant();
 }
 
+void MemSpyThreadModel::refresh()
+{
+    beginResetModel();
+    QList<MemSpyThread*> data = mEngine.getThreads(mProcessId);
+    qDeleteAll(mThreads);
+    mThreads = data;
+    endResetModel();
+}
+
 MemSpyThreadView::MemSpyThreadView(EngineWrapper &engine, ViewManager &viewManager) : 
-	MemSpyView(engine, viewManager), 
+	MemSpyListView(engine, viewManager), 
 	mContextMenu(0), 
 	mPriorityMenu(0),
-	mThreadId(0)
+	mThreadId(0),
+	mModel(0)
 {
 }
 
@@ -94,13 +106,15 @@
 
 void MemSpyThreadView::initialize(const QVariantMap& params)
 {
+	ProcessId pid = qVariantValue<ProcessId>(params["pid"]);
+	setTitle(tr("Threads"));
+	
+	mProcessName = params["pname"].toString();
+	
 	MemSpyView::initialize(params);
 	
-	ProcessId pid = qVariantValue<ProcessId>(params["pid"]);
-	setTitle(tr("Threads").arg(pid));
-	
-	mListView.setModel(new MemSpyThreadModel(mEngine, pid, this));
-	mListView.setLongPressEnabled(true);
+	mModel = new MemSpyThreadModel(mEngine, pid, this);
+	mListView.setModel(mModel);
 	
 	connect(&mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
 	connect(&mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)),
@@ -128,16 +142,30 @@
 	mPriorityMenu->addAction(tr("Abs. Real Time 8"), this, SLOT(changePriority()));
 }
 
+
+bool MemSpyThreadView::isBreadCrumbVisible() const
+{
+    return true;
+}
+
+QString MemSpyThreadView::getBreadCrumbText() const
+{
+    return tr("Processes > %1").arg(mProcessName);
+}
+
 void MemSpyThreadView::itemClicked(const QModelIndex& index)
 {
 	QVariantMap map;
 	map["tid"] = index.data(Qt::UserRole);
+	map.insert("pname", mProcessName);
+	map.insert("tname", index.data(Qt::DisplayRole).toStringList().at(0));
+	
 	mViewManager.showView(ThreadDetailIndexView, map);
 }
 
 void MemSpyThreadView::catchLongPress(HbAbstractViewItem *item, const QPointF &coords)
 {
-	mThreadId = qVariantValue<ThreadId>(item->data(Qt::UserRole));
+	mThreadId = qVariantValue<ThreadId>(item->modelIndex().data(Qt::UserRole));
 	mContextMenu->setPreferredPos(coords);
 	mContextMenu->open();
 }
@@ -167,4 +195,10 @@
 		ThreadPriorityAbsoluteRealTime8 };
 	
 	mEngine.setThreadPriority(mThreadId, priorities[index]);
+	refresh();
 }
+
+void MemSpyThreadView::refresh()
+{ 
+    mModel->refresh(); 
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspyui/ui/hb/src/memspytrackingview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,49 @@
+/*
+ * 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:
+ *  
+ */
+
+#include "memspytrackingview.h"
+#include "viewmanager.h"
+
+#include <QStringListModel>
+#include <QDebug>
+
+void MemSpyTrackingView::initialize(const QVariantMap& params)
+{
+	setTitle("MemSpy");
+	
+	MemSpyView::initialize(params);
+	
+	QStringList items = QStringList() 
+			<< tr("System Wide Memory Tracking")
+			<< tr("Heap Dumps");
+	mListView.setModel(new QStringListModel(items, this));
+    
+	QObject::connect(&mListView, SIGNAL(released(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
+}
+
+void MemSpyTrackingView::itemClicked(const QModelIndex& index)
+{
+	Q_UNUSED(index);
+	ViewIndex indexes[] = { SwmtView, HeapDumpsView };
+    mViewManager.showView(indexes[index.row()]);
+}
+
+bool MemSpyTrackingView::isBreadCrumbVisible() const
+{
+	return false;
+}
+
--- a/memspyui/ui/hb/src/memspyview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/memspyview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -15,14 +15,21 @@
 * 
 */
 
+#include <QSignalMapper>
+#include <QGraphicsLinearLayout>
+#include <QDebug>
 #include <HbMenu>
+#include <HbAction>
 #include <HbToolBar>
 #include <HbApplication>
 #include <HbMessageBox>
+#include <HbMainWindow>
 #include <HbLabel>
 
 #include "memspyview.h"
+#include "enginewrapper.h"
 
+#include "memspysettingsview.h"
 
 MemSpyView::MemSpyView(EngineWrapper &engine, ViewManager &viewManager) : 
 	HbView(),
@@ -32,13 +39,14 @@
 	mOutputGenInfoMenu(0), 
 	mOutputHeapInfoMenu(0),
 	mOutputStackInfoMenu(0),
-	mToolBar(0)
+	mToolBar(0),
+	mBreadCrumb(0)
 {
-	setWidget(&mListView);
 }
 
 MemSpyView::~MemSpyView()
 {
+	delete mBreadCrumb;
 	delete mToolBar;
 	delete mOutputStackInfoMenu;
 	delete mOutputHeapInfoMenu;
@@ -48,32 +56,29 @@
 
 void MemSpyView::initialize(const QVariantMap& params)
 {
+	Q_UNUSED(params);
+	QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical, this);
+	
+	if (isBreadCrumbVisible()) {
+		mBreadCrumb = new HbLabel(this);
+		mBreadCrumb->setTextWrapping(Hb::TextWordWrap);
+		mBreadCrumb->setElideMode(Qt::ElideLeft);
+		mBreadCrumb->setPlainText(getBreadCrumbText());
+		HbFontSpec spec(HbFontSpec::PrimarySmall);
+		mBreadCrumb->setFontSpec(spec);
+		layout->addItem(mBreadCrumb);
+	}
+	layout->addItem(createCentralWidget());
+	setLayout(layout); 
+	
 	if (isRefreshable())
-		menu()->addAction(tr("Refresh"));
+		menu()->addAction(tr("Refresh"), this, SLOT(refresh()));
 	
 	HbMenu* toolMenu = createToolMenu();
 	if (toolMenu)
 		menu()->addMenu(toolMenu);
 	
-	mOutputMenu = menu()->addMenu(tr("Output"));
-	mOutputMenu->addActions(createOutputActions());
-	mOutputGenInfoMenu = mOutputMenu->addMenu(tr("General Info"));
-	mOutputHeapInfoMenu = mOutputMenu->addMenu(tr("Heap Info"));
-	mOutputStackInfoMenu = mOutputMenu->addMenu(tr("Stack Info"));
-	mOutputGenInfoMenu->addAction(tr("Summary"));
-	mOutputGenInfoMenu->addAction(tr("Detailed Info"));
-	mOutputGenInfoMenu->addAction(tr("Handle Info"));
-	mOutputGenInfoMenu->addAction(tr("Kernel Containters"));
-	mOutputHeapInfoMenu->addAction(tr("Detailed Summary"));
-	mOutputHeapInfoMenu->addAction(tr("Compact Summary"));
-	mOutputHeapInfoMenu->addAction(tr("Cell Listing"));
-	mOutputHeapInfoMenu->addAction(tr("Data (Binary)"));
-	mOutputStackInfoMenu->addAction(tr("Detailed Summary"));
-	mOutputStackInfoMenu->addAction(tr("Compact Summary"));
-	mOutputStackInfoMenu->addAction(tr("User Stacks (Binary)"));
-	mOutputStackInfoMenu->addAction(tr("Kernel Stacks (Binary)"));
-	menu()->addAction(tr("Start Auto Capture"));
-	menu()->addAction(tr("Settings ..."));
+	menu()->addAction(tr("Settings ..."), this, SLOT(showSettings()));
 	menu()->addAction(tr("About ..."), this, SLOT(showAbout()));
 	menu()->addAction(tr("Exit"), qApp, SLOT(quit()));
 	
@@ -102,18 +107,51 @@
 	return false;
 }
 
+bool MemSpyView::isBreadCrumbVisible() const
+{
+    return false;
+}
+
+QString MemSpyView::getBreadCrumbText() const
+{
+	QStringList views;
+	for (int i=1; i<mainWindow()->views().count() - 1; i++)	{
+		const HbView *view = mainWindow()->views().at(i);
+		if (view == this)
+			break;
+		views.append(view->title());
+	}
+	views.append(title());
+	
+	return views.join(" > ");
+}
+
 void MemSpyView::refresh()
 {
 	// Empty default implementation
 }
 
+void MemSpyView::showSettings()
+{
+	MemSpySettingsView* settings = new MemSpySettingsView(mEngine);
+	connect(settings, SIGNAL(finished(bool)), this, SLOT(closeSettings()));
+	mainWindow()->addView(settings);
+	mainWindow()->setCurrentView(settings);
+}
+
 void MemSpyView::showAbout()
 {
 	HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
-	messageBox->setText("Version 2.0.0 - 23th April 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.");
+	messageBox->setText("Version 2.1.0 - 15th June 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.");
 	HbLabel *header = new HbLabel("About MemSpy", messageBox);
 	messageBox->setHeadingWidget(header);
 	messageBox->setAttribute(Qt::WA_DeleteOnClose);
 	messageBox->setTimeout(HbPopup::NoTimeout);
 	messageBox->open();
 }
+
+void MemSpyView::closeSettings()
+{
+	sender()->deleteLater();
+	mainWindow()->setCurrentView(this);
+}
--- a/memspyui/ui/hb/src/viewmanager.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/hb/src/viewmanager.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -17,6 +17,8 @@
 
 #include <HbMainWindow>
 #include <HbAction>
+#include <HbMessageBox>
+#include <HbLabel>
 
 #include "viewmanager.h"
 
@@ -30,6 +32,9 @@
 #include "memspykernelobjecttypeview.h"
 #include "memspykernelobjectview.h"
 #include "memspykernelobjectdetailview.h"
+#include "memspytrackingview.h"
+#include "memspyswmtview.h"
+#include "memspyheapdumpsview.h"
 
 template <typename T>
 static MemSpyView* factory(EngineWrapper &engine, ViewManager &viewManager)
@@ -45,7 +50,10 @@
 	&factory<MemSpyThreadDetailView>,
 	&factory<MemSpyKernelObjectTypeView>,
 	&factory<MemSpyKernelObjectView>,
-	&factory<MemSpyKernelObjectDetailView>
+	&factory<MemSpyKernelObjectDetailView>,
+	&factory<MemSpyTrackingView>,
+	&factory<MemSpySwmtView>,
+	&factory<MemSpyHeapDumpsView>
 };
 
 
@@ -59,8 +67,30 @@
 
 void ViewManager::showView(ViewIndex viewIndex, const QVariantMap &params)
 {
-	MemSpyView* view = sFactories[viewIndex](mEngine, *this);
-	view->initialize(params);
+    MemSpyView* view;
+    try {
+        view = sFactories[viewIndex](mEngine, *this);
+        view->initialize(params);
+    }
+    catch (std::exception& ex)
+    {
+        // show message box with exception
+        // TODO: qt_symbian_exception2Error shouldn't probably be here
+        QString error = tr("An error occured during the operation. Error code: %1").arg(
+                qt_symbian_exception2Error(ex));
+        
+        HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeWarning);
+        messageBox->setText(error);
+        HbLabel *header = new HbLabel(tr("Error"), messageBox);
+        messageBox->setHeadingWidget(header);
+        messageBox->setAttribute(Qt::WA_DeleteOnClose);
+        messageBox->setTimeout(HbPopup::StandardTimeout);
+        messageBox->open();
+        
+        delete view;
+        return;
+    }
+    
 	if (viewIndex != MainView) {
 		HbAction* action = new HbAction(Hb::BackNaviAction, this);
 		connect(action, SIGNAL(triggered()), this, SLOT(goBack()));
--- a/perfmon/ui/hb/app/app.pro	Thu Jun 17 15:34:52 2010 +0300
+++ b/perfmon/ui/hb/app/app.pro	Thu Jun 24 14:55:55 2010 +0300
@@ -46,14 +46,20 @@
 RESOURCES +=
 
 symbian: {
-		INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+    INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
     INCLUDEPATH += ../../../engine/inc
     HEADERS += ../../../engine/inc/perfmon_engine.h
 
     SOURCES += ../../../engine/src/perfmon_engine.cpp
 
     LIBS += -lestor \
-        -lbafl
+        -lbafl \
+        -lefsrv \
+        -lavkon \
+        -lapparc \
+        -lapgrfx \
+        -lgdi \
+        -lcone
 
     TARGET.CAPABILITY = WriteDeviceData
 
--- a/piprofilerui/ui/hb/hb.pro	Thu Jun 17 15:34:52 2010 +0300
+++ b/piprofilerui/ui/hb/hb.pro	Thu Jun 24 14:55:55 2010 +0300
@@ -55,7 +55,7 @@
     
 	TARGET.CAPABILITY = ALL -TCB
 
-	LIBS += -lcharconv -lbafl -lsysutil
+	LIBS += -lcharconv -lbafl -lsysutil -lefsrv
     
     ICON = ../icons/qgn_menu_piprofilerui.svg 
     
--- a/screengrabber/screengrabber.pro	Thu Jun 17 15:34:52 2010 +0300
+++ b/screengrabber/screengrabber.pro	Thu Jun 24 14:55:55 2010 +0300
@@ -49,7 +49,7 @@
         
     BLD_INF_RULES.prj_extensions += screengrabber_buildstubsis_extension
         
-		LIBS += -lestor -lws32 -lPlatformEnv -limageconversion  -lapgrfx -lcommonengine  -lfbscli -lgdi -leikcore -lbafl
+		LIBS += -lestor -lws32 -lPlatformEnv -limageconversion  -lapgrfx -lcommonengine  -lfbscli -lgdi -leikcore -lbafl -lefsrv -lapparc -lcone
 
 		HEADERS += inc/sgengine.h \
    				   inc/enginewrapper.h \
--- a/stifui/avkon/group/ReleaseNote.txt	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/group/ReleaseNote.txt	Thu Jun 24 14:55:55 2010 +0300
@@ -1,5 +1,5 @@
 ========================================================================
-RELEASE NOTE FOR STIF UI - STIF_201022 (7.3.34)
+RELEASE NOTE FOR STIF UI - STIF_201024 (7.3.35)
 SUPPORTING SERIES 60 3.0 ->
 ========================================================================
 
--- a/stifui/avkon/stifui/inc/AppUIApp.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/inc/AppUIApp.h	Thu Jun 24 14:55:55 2010 +0300
@@ -54,5 +54,3 @@
 #endif
 
 // End of File
-
-// End of File
--- a/stifui/avkon/stifui/inc/AppUIDocument.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/inc/AppUIDocument.h	Thu Jun 24 14:55:55 2010 +0300
@@ -69,5 +69,3 @@
 #endif
 
 // End of File
-
-// End of File
--- a/stifui/avkon/stifui/inc/MenuListBox.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/inc/MenuListBox.h	Thu Jun 24 14:55:55 2010 +0300
@@ -73,3 +73,5 @@
     };
 
 #endif /*MENULISTBOX_H_*/
+
+// End of File
--- a/stifui/avkon/stifui/inc/Stifui.hrh	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/inc/Stifui.hrh	Thu Jun 24 14:55:55 2010 +0300
@@ -109,4 +109,5 @@
     };
 
 #endif      // STIF_UI_HRH
+
 // End of File
--- a/stifui/avkon/stifui/inc/Stifui_loc.hrh	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/inc/Stifui_loc.hrh	Thu Jun 24 14:55:55 2010 +0300
@@ -142,4 +142,3 @@
 #define qtn_testcase_state_unknown      "Undefined state!"
 
 // End of File
-
--- a/stifui/avkon/stifui/inc/TestSetMenuView.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/inc/TestSetMenuView.h	Thu Jun 24 14:55:55 2010 +0300
@@ -164,4 +164,4 @@
 
 #endif // TESTSETMENUVIEW_H
 
-// End of File
\ No newline at end of file
+// End of File
--- a/stifui/avkon/stifui/inc/version.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/inc/version.h	Thu Jun 24 14:55:55 2010 +0300
@@ -20,10 +20,12 @@
 
 #define STIFUI_MAJOR_VERSION 7
 #define STIFUI_MINOR_VERSION 3
-#define STIFUI_BUILD_VERSION 34
+#define STIFUI_BUILD_VERSION 35
 
-#define STIFUI_REL_DATE "1st June 2010"
+#define STIFUI_REL_DATE "15th June 2010"
 
 #define TO_UNICODE(text) _L(text) 
 
 #endif /*VERSION_H_*/
+
+// End of File
--- a/stifui/avkon/stifui/src/AppUIApp.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/AppUIApp.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -67,5 +67,4 @@
 		return EikStart::RunApplication(NewApplication);
 		}
 
-
 // End of File
--- a/stifui/avkon/stifui/src/AppUIDocument.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/AppUIDocument.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -59,4 +59,4 @@
     return new (ELeave) CAppUIAppUi;
     }
 
-// End of File  
+// End of File
--- a/stifui/avkon/stifui/src/CreatedTestSetMenuView.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/CreatedTestSetMenuView.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -188,12 +188,10 @@
 		substracted.Set(substracted.Right(substracted.Length()-2));
 		// Creating new view containing 		
        	CTestSetMenuView* testSetMenu = (CTestSetMenuView*)AppUi()->View( TUid::Uid(ETestSetMenuViewId) ); 
-       	TInt	error = testSetMenu->LoadTestSetL( substracted );
-		AppUi()->HandleCommandL(ECmdGoToTestSetView);
-		
+       	User::LeaveIfError( testSetMenu->LoadTestSetL( substracted ) );
+		AppUi()->HandleCommandL(ECmdGoToTestSetView);		
         }
  
     }
 
-
 // End of File
--- a/stifui/avkon/stifui/src/MainMenuContainer.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/MainMenuContainer.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -214,4 +214,4 @@
 	((CMenuListBox*)iListBox)->SaveFocusPosition();
 	}
 
-// End of File  
+// End of File
--- a/stifui/avkon/stifui/src/MainMenuView.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/MainMenuView.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -159,5 +159,3 @@
     }
 
 // End of File
-
-// End of File
--- a/stifui/avkon/stifui/src/MenuListBox.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/MenuListBox.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -106,3 +106,5 @@
 		this->SetTopItemIndex(0);
 		}
 	}
+
+// End of File
--- a/stifui/avkon/stifui/src/ShowStartedCasesContainer.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/ShowStartedCasesContainer.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -551,10 +551,8 @@
 //
 void CShowStartedCasesContainer::RemoveAllExecutionsInViewL()
     {
-    TInt exutionsInViewCount = iStartedTestsPtrs.Count();
-    iStartedTestsPtrs.Reset(); //Empties the array, does not delete the objects whose pointers are contained in the array
+    iStartedTestsPtrs.Reset(); // Empties the array, does not delete the objects whose pointers are contained in the array
     HandleItemRemovalL();
-
     }
 
 // ----------------------------------------------------------------------------
@@ -645,4 +643,4 @@
 	((CMenuListBox*)iListBox)->SaveFocusPosition();
 	}
 
-// End of File  
+// End of File
--- a/stifui/avkon/stifui/src/StartedCasesMenuContainer.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/StartedCasesMenuContainer.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -230,5 +230,4 @@
 	((CMenuListBox*)iListBox)->SaveFocusPosition();
 	}
 
-
-// End of File  
+// End of File
--- a/stifui/avkon/stifui/src/StartedCasesMenuView.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/StartedCasesMenuView.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -157,4 +157,3 @@
     }
 
 // End of File
-
--- a/stifui/avkon/stifui/src/TestCaseMenuContainer.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/TestCaseMenuContainer.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -221,4 +221,4 @@
 	((CMenuListBox*)iListBox)->SaveFocusPosition();
 	}
 
-// End of File  
+// End of File
--- a/stifui/avkon/stifui/src/TestSetBaseMenuContainer.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/TestSetBaseMenuContainer.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -185,4 +185,5 @@
 	{
 	((CMenuListBox*)iListBox)->SaveFocusPosition();
 	}
-// End of File  
+
+// End of File
--- a/stifui/avkon/stifui/src/TestSetInsertMenuContainer.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/TestSetInsertMenuContainer.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -220,5 +220,5 @@
 	{
 	((CMenuListBox*)iListBox)->SaveFocusPosition();
 	}
-    
+
 // End of File
--- a/stifui/avkon/stifui/src/TestSetMenuView.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/TestSetMenuView.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -550,5 +550,4 @@
         }
     }
 
-
 // End of File
--- a/stifui/avkon/stifui/src/TestSetStartedCasesContainer.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/TestSetStartedCasesContainer.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -446,7 +446,6 @@
 //
 void CTestSetStartedCasesContainer::RemoveAllExecutionsInViewL()
     {
-    TInt exutionsInViewCount = iStartedTestsPtrs.Count();
     iStartedTestsPtrs.Reset(); //Empties the array, does not delete the objects whose pointers are contained in the array
     HandleItemRemovalL();
 
@@ -463,4 +462,4 @@
 	((CMenuListBox*)iListBox)->SaveFocusPosition();
 	}
 
-// End of File  
+// End of File
--- a/stifui/avkon/stifui/src/Testmodulesmenuview.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/Testmodulesmenuview.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -277,4 +277,3 @@
     }
 
 // End of File
-
--- a/stifui/avkon/stifui/src/UIStoreHandler.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/stifui/src/UIStoreHandler.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -137,4 +137,4 @@
 // ================= OTHER EXPORTED FUNCTIONS =================================
 // None
 
-//  End of File
+// End of File
--- a/stifui/avkon/uitestserverstarter/inc/UITestServerStarter.hrh	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/uitestserverstarter/inc/UITestServerStarter.hrh	Thu Jun 24 14:55:55 2010 +0300
@@ -21,3 +21,5 @@
 #define _UID3 0x2000F8E8
 
 #endif // __UITESTSERVERSTARTER_HRH__
+
+// End of File
--- a/stifui/avkon/uitestserverstarter/inc/UITestServerStarterApplication.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/uitestserverstarter/inc/UITestServerStarterApplication.h	Thu Jun 24 14:55:55 2010 +0300
@@ -109,3 +109,5 @@
 
 
 #endif /*UITESTSERVERSTARTERAPPLICATION_H_*/
+
+// End of File
--- a/stifui/avkon/uitestserverstarter/inc/UITestServerStarterDocument.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/uitestserverstarter/inc/UITestServerStarterDocument.h	Thu Jun 24 14:55:55 2010 +0300
@@ -142,3 +142,5 @@
 
 
 #endif /*UITESTSERVERSTARTERDOCUMENT_H_*/
+
+// End of File
--- a/stifui/avkon/uitestserverstarter/src/EventUtil.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/uitestserverstarter/src/EventUtil.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -884,7 +884,7 @@
 	int keyScanCodeNamesCount = (sizeof( keyScanCodeNames )/sizeof(TText*));
 	
 	for ( int i = 0; i < keyScanCodeNamesCount; i++ ) {
-		if ( keyScanCodes[ i ] == aKeyScanCode ) 
+		if ( keyScanCodes[ i ] == (TUint)aKeyScanCode ) 
 			{
 			return keyScanCodeNames[ i ];
 			}
--- a/stifui/avkon/uitestserverstarter/src/UITestServerStarterAppContainer.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/uitestserverstarter/src/UITestServerStarterAppContainer.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -287,5 +287,4 @@
 	return CCoeControl::MopSupplyObject( aId );
 	}
 
-
 // End of File
--- a/stifui/avkon/uitestserverstarter/src/UITestServerStarterAppUi.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/avkon/uitestserverstarter/src/UITestServerStarterAppUi.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -240,6 +240,9 @@
 					}
 				}
 				break;
+			default: 
+			    // Do nothing
+			    break;
 			}
 		}
 	else if ( aEvent.Type() == EEventPointer )
@@ -247,7 +250,7 @@
 		if ( iEventType == EPointerEvent )
 			{
 			PointerEventHandled();
-			}
+			}		
 		}
 	}
 
@@ -504,5 +507,4 @@
 	iEventStatus = aStatus;
 	}
 
-
 // End of File
--- a/stifui/qt/ReleaseNote.txt	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/ReleaseNote.txt	Thu Jun 24 14:55:55 2010 +0300
@@ -1,5 +1,5 @@
 ========================================================================
-RELEASE NOTE FOR STFUI_201022 (7.3.34)
+RELEASE NOTE FOR STFUI_201024 (7.3.35)
 ========================================================================
 
 Product Description:
--- a/stifui/qt/inc/cstfcase.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/cstfcase.h	Thu Jun 24 14:55:55 2010 +0300
@@ -61,3 +61,5 @@
     QString moduleName;
 };
 #endif // CSTFCASE_H
+
+// End of File
--- a/stifui/qt/inc/cstfmodule.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/cstfmodule.h	Thu Jun 24 14:55:55 2010 +0300
@@ -48,3 +48,5 @@
 
 };
 #endif // CSTFMODULE_H
+
+// End of File
--- a/stifui/qt/inc/dlgoutput.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/dlgoutput.h	Thu Jun 24 14:55:55 2010 +0300
@@ -66,3 +66,5 @@
 
 
 #endif /* DLGOUTPUT_H_ */
+
+// End of File
--- a/stifui/qt/inc/dlgrepeatrun.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/dlgrepeatrun.h	Thu Jun 24 14:55:55 2010 +0300
@@ -60,3 +60,5 @@
     };
 
 #endif /* DLGREPEATRUN_H_ */
+
+// End of File
--- a/stifui/qt/inc/dlgsetselector.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/dlgsetselector.h	Thu Jun 24 14:55:55 2010 +0300
@@ -62,3 +62,5 @@
 
 
 #endif /* DLGSETSELECTOR_H_ */
+
+// End of File
--- a/stifui/qt/inc/dlgsetting.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/dlgsetting.h	Thu Jun 24 14:55:55 2010 +0300
@@ -25,6 +25,8 @@
 class QGridLayout;
 class QCheckBox;
 class QPushButton;
+class QLabel;
+class QLineEdit;
 QT_END_NAMESPACE
 
 class DlgSetting : public QDialog {    
@@ -40,6 +42,9 @@
     QPushButton* btnOk;
     QPushButton* btnCancel;
     QCheckBox* chkShowoutput;
+    QLabel* lblFilter;
+    QLineEdit* ledFilter;
+    QCheckBox* chkFilterCaseSens;
     
 private slots:
     void on_btnOk_clicked();
@@ -51,3 +56,5 @@
     };
 
 #endif /* DLGSETTING_H_ */
+
+// End of File
--- a/stifui/qt/inc/frmmain.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/frmmain.h	Thu Jun 24 14:55:55 2010 +0300
@@ -96,6 +96,8 @@
     UiSetting* uiSetting; 
     bool layoutType;
     QTreeWidgetItem* lastItemSelected;
+    QString currentFilter;
+    QString currentFilterCaseSens;
 
 private: //UI Components
     QWidget* centerWidget;
@@ -199,3 +201,5 @@
 };
 
 #endif // FrmMain_H
+
+// End of File
--- a/stifui/qt/inc/istfqtuicontroller.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/istfqtuicontroller.h	Thu Jun 24 14:55:55 2010 +0300
@@ -82,3 +82,5 @@
 
 
 #endif // ISTFQTUICONTROLLER_H
+
+// End of File
--- a/stifui/qt/inc/istfqtuimodel.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/istfqtuimodel.h	Thu Jun 24 14:55:55 2010 +0300
@@ -53,3 +53,5 @@
 };
 
 #endif // ISTFQTUIMODEL_H
+
+// End of File
--- a/stifui/qt/inc/stfqtuicontroller.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/stfqtuicontroller.h	Thu Jun 24 14:55:55 2010 +0300
@@ -101,3 +101,5 @@
 
 
 #endif /* STFQTUICONTROLLER_H_ */
+
+// End of File
--- a/stifui/qt/inc/stfqtuimodel.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/stfqtuimodel.h	Thu Jun 24 14:55:55 2010 +0300
@@ -56,3 +56,5 @@
     
     
     };
+
+// End of File
--- a/stifui/qt/inc/stifexecutor.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/stifexecutor.h	Thu Jun 24 14:55:55 2010 +0300
@@ -76,3 +76,5 @@
 
 
 #endif /* STIFEXECUTOR_H_ */
+
+// End of File
--- a/stifui/qt/inc/uisetting.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/uisetting.h	Thu Jun 24 14:55:55 2010 +0300
@@ -20,7 +20,8 @@
 
 const QString KShowOutput = "showoutput";
 const QString KStyleSheet = "StyleSheet";
-
+const QString KFilter = "filter";
+const QString KFilterCaseSens = "filtercasesens";
 
 class UiSetting
     {
@@ -43,3 +44,5 @@
     };
 
 #endif /* UISETTING_H_ */
+
+// End of File
--- a/stifui/qt/inc/uiversion.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/uiversion.h	Thu Jun 24 14:55:55 2010 +0300
@@ -24,3 +24,5 @@
 const QString QtUIName = "STFUI";
 
 #endif /* UIVERSION_H_ */
+
+// End of File
--- a/stifui/qt/inc/version.h	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/inc/version.h	Thu Jun 24 14:55:55 2010 +0300
@@ -20,10 +20,12 @@
 
 #define STIF_MAJOR_VERSION 7
 #define STIF_MINOR_VERSION 3
-#define STIF_BUILD_VERSION 34
+#define STIF_BUILD_VERSION 35
 
-#define STIF_REL_DATE "1st June 2010"
+#define STIF_REL_DATE "15th June 2010"
 
 #define TO_UNICODE(text) _L(text) 
 
 #endif /*VERSION_H_*/
+
+// End of File
--- a/stifui/qt/rom/stfui.iby	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/rom/stfui.iby	Thu Jun 24 14:55:55 2010 +0300
@@ -19,15 +19,15 @@
 #ifndef __STIF_UI_IBY__
 #define __STIF_UI_IBY__
 
-S60_APP_EXE(Stifqtui)
+S60_APP_EXE(Stfqtui)
 
 #ifdef S60_UPGRADABLE_APP_REG_RSC
-  S60_UPGRADABLE_APP_REG_RSC(Stifqtui)
+  S60_UPGRADABLE_APP_REG_RSC(Stfqtui)
 #else
-  S60_APP_AIF_RSC(Stifqtui)
+  S60_APP_AIF_RSC(Stfqtui)
 #endif
 
-S60_APP_RESOURCE(Stifqtui)
+S60_APP_RESOURCE(Stfqtui)
 
 #endif
 // End of File
\ No newline at end of file
--- a/stifui/qt/sis/stifqtui.pkg	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/sis/stifqtui.pkg	Thu Jun 24 14:55:55 2010 +0300
@@ -22,6 +22,6 @@
 (0x2001E61C), 4, 5, 2, {"QtLibs pre-release"}
 
 ; Executable and default resource files
-"/S60/non_public/S60_5_0_200906/epoc32/release/armv5/urel/STFUI.exe"    - "!:\sys\bin\STFUI.exe"
-"/S60/non_public/S60_5_0_200906/epoc32/data/z/resource/apps/STFUI.rsc"    - "!:\resource\apps\STFUI.rsc"
-"/S60/non_public/S60_5_0_200906/epoc32/data/z/private/10003a3f/import/apps/STFUI_reg.rsc"    - "!:\private\10003a3f\import\apps\STFUI_reg.rsc"
+"/epoc32/release/armv5/urel/STFUI.exe"    - "!:\sys\bin\STFUI.exe"
+"/epoc32/data/z/resource/apps/STFUI.rsc"    - "!:\resource\apps\STFUI.rsc"
+"/epoc32/data/z/private/10003a3f/import/apps/STFUI_reg.rsc"    - "!:\private\10003a3f\import\apps\STFUI_reg.rsc"
--- a/stifui/qt/src/dlgoutput.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/src/dlgoutput.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -69,8 +69,6 @@
 
 void DlgOutput::CloseItem(QString index)
     {
-    int u = tabList.keys().indexOf(index);
-    
     delete tabList.value(index);
     tabList.remove(index);
     if (tabMain->count() == 0)
@@ -141,3 +139,4 @@
 
     }
 
+// End of File
--- a/stifui/qt/src/dlgrepeatrun.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/src/dlgrepeatrun.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -129,3 +129,5 @@
         lineEdit->setReadOnly(false);
         }
     }
+
+// End of File
--- a/stifui/qt/src/dlgsetselector.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/src/dlgsetselector.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -112,3 +112,5 @@
     {
     this->reject();
     }
+
+// End of File
--- a/stifui/qt/src/dlgsetting.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/src/dlgsetting.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -33,6 +33,16 @@
     chkShowoutput = new QCheckBox(this);
     chkShowoutput->setText(tr("Show output in execution."));
     chkShowoutput->setChecked(setting->ReadSetting(KShowOutput) == "true");
+    
+    lblFilter = new QLabel(this);
+    lblFilter->setText(tr("Filter for displayed titles."));
+    ledFilter = new QLineEdit(this);
+    ledFilter->setFrame(true);
+    ledFilter->setText(setting->ReadSetting(KFilter));
+    chkFilterCaseSens = new QCheckBox(this);
+    chkFilterCaseSens->setText(tr("Filter is case sensitive."));
+    chkFilterCaseSens->setChecked(setting->ReadSetting(KFilterCaseSens) == "true");
+    
     QWidget *toolWidget = new QWidget(this);
     QGridLayout *toolLayout = new QGridLayout(this);
     
@@ -51,7 +61,10 @@
     
     mainLayout->addWidget(nullWidget, 0, 0);
     mainLayout->addWidget(chkShowoutput, 1, 0);
-    mainLayout->addWidget(toolWidget, 3, 0);    
+    mainLayout->addWidget(lblFilter, 3, 0);
+    mainLayout->addWidget(ledFilter, 4, 0);
+    mainLayout->addWidget(chkFilterCaseSens, 5, 0);
+    mainLayout->addWidget(toolWidget, 7, 0); 
     
     }
 
@@ -65,6 +78,8 @@
         {
         setting->SetSetting(KShowOutput, "false");    
         }
+    setting->SetSetting(KFilter, ledFilter->text());
+    setting->SetSetting(KFilterCaseSens, (chkFilterCaseSens->checkState() == Qt::Checked) ? ("true") : ("false"));
     this->accept();
     }
 
@@ -72,3 +87,5 @@
     {
     this->reject();
     }
+
+// End of File
--- a/stifui/qt/src/frmmain.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/src/frmmain.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -108,6 +108,51 @@
 void FrmMain::setSetting()
     {
     controller->SetShowOutput(uiSetting->ReadSetting(KShowOutput) == "true");    
+    // Apply filter changes
+    QString newFilter = uiSetting->ReadSetting(KFilter);
+    QString newFilterCaseSens = uiSetting->ReadSetting(KFilterCaseSens); 
+    if(currentFilter != newFilter || currentFilterCaseSens != newFilterCaseSens)
+        {
+        // Store new filter for further use
+        currentFilter = newFilter;
+        currentFilterCaseSens = newFilterCaseSens;
+        
+        // Create and setup regular expression for wildcard searching
+        QRegExp filter;
+        filter.setPattern((newFilter == "") ? ("*") : (tr("*") + newFilter + tr("*")));
+        filter.setCaseSensitivity((newFilterCaseSens == "true") ? (Qt::CaseSensitive) : (Qt::CaseInsensitive));
+        filter.setPatternSyntax(QRegExp::Wildcard);
+
+        // Go through top level entries (modules)
+        bool isAnythingHidden = false;
+        for(int i = 0; i < treeModuleList->topLevelItemCount(); i++)
+            {
+            QTreeWidgetItem* top = treeModuleList->topLevelItem(i);
+            // And through test cases for each module
+            for(int j = 0; j < top->childCount(); j++)
+                {                
+                QTreeWidgetItem *child = top->child(j);
+                // Remove first three chars to get valid test case title
+                QString title = (child->text(0)).mid(3);
+                // Check if title is matching to filter and show or hide it
+                if(filter.exactMatch(title))
+                    {
+                    child->setHidden(false);
+                    }
+                else
+                    {
+                    child->setHidden(true);
+                    child->setText(0, child->text(0).replace(0, 3, UNSELECTITEMHEADER));
+                    isAnythingHidden = true;
+                    }
+                }
+            }
+
+        if(isAnythingHidden)
+            treeModuleList->headerItem()->setText(0, tr("Module List (filtered)"));
+        else
+            treeModuleList->headerItem()->setText(0, tr("Module List"));
+        }
     }
 
 void FrmMain::OnGetMessage(const QString& aMessage)
@@ -801,11 +846,13 @@
     QTreeWidgetItem* item = treeModuleList->topLevelItem(index);
     while (item != 0)
         {
-        item->setText(0, item->text(0).replace(0,3, header));
+        if(!item->isHidden())
+            item->setText(0, item->text(0).replace(0,3, header));
         for (int i = 0; i < item->childCount(); i++)
             {
             QTreeWidgetItem* child = item->child(i);
-            child->setText(0,child->text(0).replace(0,3,header));
+            if(!child->isHidden())
+                child->setText(0,child->text(0).replace(0,3,header));
             }
         index++;
         item = treeModuleList->topLevelItem(index);
@@ -844,6 +891,8 @@
 void FrmMain::on_actSetting_triggered()
     {
     DlgSetting dlgSet(uiSetting);
+    currentFilter = uiSetting->ReadSetting(KFilter);
+    currentFilterCaseSens = uiSetting->ReadSetting(KFilterCaseSens);
     int result = dlgSet.exec();
     if(result == QDialog::Accepted)
         {
@@ -1108,4 +1157,4 @@
     controller->SetShowOutput(true);
     }
 
-
+// End of File
--- a/stifui/qt/src/main.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/src/main.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -27,3 +27,4 @@
     return app.exec();
 }
 
+// End of File
--- a/stifui/qt/src/stfqtuicontroller.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/src/stfqtuicontroller.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -407,3 +407,5 @@
             listener->OnSetListChanged();
             }
     }
+
+// End of File
--- a/stifui/qt/src/stfqtuimodel.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/src/stfqtuimodel.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -91,6 +91,8 @@
         case EStatusCrashed:
             crashedCaseList.append(aCase);
             break;
+        default:
+            break;            
         }
     FireOnCaseStatisticChangedEvent();
     }
@@ -111,6 +113,8 @@
             return abortCaseList;
         case EStatusCrashed:
             return crashedCaseList;
+        default:
+            break;
         }
     QList<CSTFCase> list;
     return list;
@@ -159,3 +163,5 @@
     crashedCaseList.clear();
     FireOnCaseStatisticChangedEvent();
     }
+
+// End of File
--- a/stifui/qt/src/stifexecutor.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/src/stifexecutor.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -404,3 +404,4 @@
 
     }
 
+// End of File
--- a/stifui/qt/src/uisetting.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/stifui/qt/src/uisetting.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -65,6 +65,8 @@
     settingList.clear();
     settingList.insert(KShowOutput, getDefaultValue(KShowOutput));
     settingList.insert(KStyleSheet, getDefaultValue(KStyleSheet));
+    settingList.insert(KFilter, getDefaultValue(KFilter));
+    settingList.insert(KFilterCaseSens, getDefaultValue(KFilterCaseSens));
     //add mor default setting here.
     }
 
@@ -79,6 +81,14 @@
         {
         result = ":/qss/coffee.qss";
         }
+    else if(item == KFilter)
+        {
+        result = "";
+        }
+    else if(item == KFilterCaseSens)
+        {
+        result = "false";
+        }
     return result;
     }
 
@@ -102,6 +112,8 @@
                 {
                 item = line.left(index).trimmed();
                 value = line.right(line.length() - index  -1);
+                if(item == KFilter) //For filter do not care about stored value
+                    value = "";
                 settingList.insert(item, value);
                 }
             }
@@ -131,3 +143,4 @@
     return true;    
     }
 
+// End of File