diff -r 48060abbbeaf -r b3cee849fa46 filebrowser/engine/engine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filebrowser/engine/engine.cpp Tue Aug 31 15:15:20 2010 +0300 @@ -0,0 +1,427 @@ +/* +* 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 FILES + +#include "engine.h" + +//#include "FBApp.h" +#include "FB.hrh" +#include "FBFileUtils.h" +#include "FBStd.h" +//#include + +#include +#include +#include +#include +#include + +// CONSTANTS +// UID of the application +const TUid KUidFileBrowser = { 0x102828D6 }; + +const TInt KSettingsDrive = EDriveC; +_LIT(KSettingsFileName, "filebrowser_settings.ini"); + +// ===================================== MEMBER FUNCTIONS ===================================== + +CEngine* CEngine::NewL(MFileBrowserUI *aFileBrowserUI) + { + CEngine* self = new(ELeave) CEngine; + CleanupStack::PushL(self); + self->ConstructL(aFileBrowserUI); + CleanupStack::Pop(); + return self; + } + +// -------------------------------------------------------------------------------------------- + +CEngine::CEngine() + : iFileUtils(NULL) + { + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ConstructL(MFileBrowserUI *aFileBrowserUI) + { + iFileBrowserUI = aFileBrowserUI; + iEnv = CEikonEnv::Static(); + User::LeaveIfError(iLs.Connect()); + } + +// -------------------------------------------------------------------------------------------- + +CEngine::~CEngine() + { + if (iFileUtils != NULL) + delete iFileUtils; + + iLs.Close(); + } + +// --------------------------------------------------------------------------- + +void CEngine::ActivateEngineL() + { + TRAP_IGNORE( LoadSettingsL() ); + + iFileUtils = CFileBrowserFileUtils::NewL(this); + } + +// --------------------------------------------------------------------------- + +void CEngine::DeActivateEngineL() + { + } + +// --------------------------------------------------------------------------- + +void CEngine::LoadDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, TInt& aValue) + { + if (aDicFS->IsPresentL(aUid)) + { + RDictionaryReadStream in; + in.OpenLC(*aDicFS, aUid); + aValue = in.ReadInt16L(); + CleanupStack::PopAndDestroy(); // in + } + } + +// --------------------------------------------------------------------------- + +void CEngine::LoadDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, TDes& aValue) + { + if (aDicFS->IsPresentL(aUid)) + { + RDictionaryReadStream in; + in.OpenLC(*aDicFS, aUid); + TInt bufLength = in.ReadInt16L(); // get length of descriptor + in.ReadL(aValue, bufLength); // get the descriptor itself + CleanupStack::PopAndDestroy(); // in + } + } + +// --------------------------------------------------------------------------- + +void CEngine::SaveDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, const TInt& aValue) + { + RDictionaryWriteStream out; + out.AssignLC(*aDicFS, aUid); + out.WriteInt16L(aValue); + out.CommitL(); + CleanupStack::PopAndDestroy(1);// out + } + +// --------------------------------------------------------------------------- + +void CEngine::SaveDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, const TDes& aValue) + { + RDictionaryWriteStream out; + out.AssignLC(*aDicFS, aUid); + out.WriteInt16L(aValue.Length()); // write length of the descriptor + out.WriteL(aValue, aValue.Length()); // write the descriptor itself + out.CommitL(); + CleanupStack::PopAndDestroy(1);// out + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::LoadSettingsL() + { + const TSize screenSize = iEnv->ScreenDevice()->SizeInPixels(); + + // set defaults + iSettings.iDisplayMode = EDisplayModeFullScreen; + iSettings.iFileViewMode = IsQHD(screenSize) ? EFileViewModeExtended : EFileViewModeSimple; + iSettings.iShowSubDirectoryInfo = EFalse; + iSettings.iShowAssociatedIcons = EFalse; + 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 + + iSettings.iSupportNetworkDrives = EFalse; + iSettings.iBypassPlatformSecurity = EFalse; + iSettings.iRemoveFileLocks = ETrue; + iSettings.iIgnoreProtectionsAtts = ETrue; + iSettings.iRemoveROMWriteProrection = ETrue; + + // build specific defaults +#if(!defined __SERIES60_30__ && !defined __SERIES60_31__) + iSettings.iSupportNetworkDrives = ETrue; +#endif + + + // make sure that the private path of this app in c-drive exists + iEnv->FsSession().CreatePrivatePath( KSettingsDrive ); // c:\\private\\102828d6\\ + + // handle settings always in the private directory + if (iEnv->FsSession().SetSessionToPrivate( KSettingsDrive ) == KErrNone) + { + // open or create a dictionary file store + CDictionaryFileStore* settingsStore = CDictionaryFileStore::OpenLC(iEnv->FsSession(), KSettingsFileName, KUidFileBrowser); + + LoadDFSValueL(settingsStore, KFBSettingDisplayMode, iSettings.iDisplayMode); + LoadDFSValueL(settingsStore, KFBSettingFileViewMode, iSettings.iFileViewMode); + LoadDFSValueL(settingsStore, KFBSettingShowSubDirectoryInfo, iSettings.iShowSubDirectoryInfo); + LoadDFSValueL(settingsStore, KFBSettingShowAssociatedIcons, iSettings.iShowAssociatedIcons); + LoadDFSValueL(settingsStore, KFBSettingRememberLastPath, iSettings.iRememberLastPath); + LoadDFSValueL(settingsStore, KFBSettingLastPath, iSettings.iLastPath); + LoadDFSValueL(settingsStore, KFBSettingFolderSelection, iSettings.iRememberFolderSelection); + LoadDFSValueL(settingsStore, KFBSettingEnableToolbar, iSettings.iEnableToolbar); + + LoadDFSValueL(settingsStore, KFBSettingSupportNetworkDrives, iSettings.iSupportNetworkDrives); + LoadDFSValueL(settingsStore, KFBSettingBypassPlatformSecurity, iSettings.iBypassPlatformSecurity); + LoadDFSValueL(settingsStore, KFBSettingRemoveFileLocks, iSettings.iRemoveFileLocks); + LoadDFSValueL(settingsStore, KFBSettingIgnoreProtectionsAtts, iSettings.iIgnoreProtectionsAtts); + LoadDFSValueL(settingsStore, KFBSettingRemoveROMWriteProtection, iSettings.iRemoveROMWriteProrection); + + CleanupStack::PopAndDestroy(); // settingsStore + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::SaveSettingsL(TBool aNotifyModules) + { + // handle settings always in c:\\private\\102828d6\\ + if (iEnv->FsSession().SetSessionToPrivate( KSettingsDrive ) == KErrNone) + { + // delete existing store to make sure that it is clean and not eg corrupted + if (BaflUtils::FileExists(iEnv->FsSession(), KSettingsFileName)) + { + iEnv->FsSession().Delete(KSettingsFileName); + } + + // create a dictionary file store + CDictionaryFileStore* settingsStore = CDictionaryFileStore::OpenLC(iEnv->FsSession(), KSettingsFileName, KUidFileBrowser); + + SaveDFSValueL(settingsStore, KFBSettingDisplayMode, iSettings.iDisplayMode); + SaveDFSValueL(settingsStore, KFBSettingFileViewMode, iSettings.iFileViewMode); + SaveDFSValueL(settingsStore, KFBSettingShowSubDirectoryInfo, iSettings.iShowSubDirectoryInfo); + SaveDFSValueL(settingsStore, KFBSettingShowAssociatedIcons, iSettings.iShowAssociatedIcons); + SaveDFSValueL(settingsStore, KFBSettingRememberLastPath, iSettings.iRememberLastPath); + SaveDFSValueL(settingsStore, KFBSettingLastPath, iSettings.iLastPath); + SaveDFSValueL(settingsStore, KFBSettingFolderSelection, iSettings.iRememberFolderSelection); + SaveDFSValueL(settingsStore, KFBSettingEnableToolbar, iSettings.iEnableToolbar); + + SaveDFSValueL(settingsStore, KFBSettingSupportNetworkDrives, iSettings.iSupportNetworkDrives); + SaveDFSValueL(settingsStore, KFBSettingBypassPlatformSecurity, iSettings.iBypassPlatformSecurity); + SaveDFSValueL(settingsStore, KFBSettingRemoveFileLocks, iSettings.iRemoveFileLocks); + SaveDFSValueL(settingsStore, KFBSettingIgnoreProtectionsAtts, iSettings.iIgnoreProtectionsAtts); + SaveDFSValueL(settingsStore, KFBSettingRemoveROMWriteProtection, iSettings.iRemoveROMWriteProrection); + + settingsStore->CommitL(); + CleanupStack::PopAndDestroy(); // settingsStore + } + + // update changes to modules + if (aNotifyModules) + { + //iScreenCapture->HandleSettingsChangeL(); + if (iFileUtils != NULL) + { + iFileUtils->HandleSettingsChangeL(); + } + //iFileListContainer->HandleSettingsChangeL(); + } + } + +// -------------------------------------------------------------------------------------------- + +TInt CEngine::LaunchSettingsDialogL() + { + TInt retValue = KErrNone; + // TODO: + // set to normal mode + //iFileListContainer->SetScreenLayoutL(EDisplayModeNormal); + //iFileListContainer->DeleteNaviPane(); + //iFileListContainer->HideToolbar(); + + // launch the dialog and save settings + //CFileBrowserSettingViewDlg* dlg = CFileBrowserSettingViewDlg::NewL(iSettings); + //TInt retValue = dlg->ExecuteLD(R_FILEBROWSER_SETTINGS_DIALOG); + //FileListContainer()->CreateEmptyNaviPaneLabelL(); + TRAP_IGNORE(SaveSettingsL()); + return retValue; + } + +// -------------------------------------------------------------------------------------------- +// -------------------------------------------------------------------------------------------- + +CAsyncWaiter* CAsyncWaiter::NewL(TInt aPriority) + { + CAsyncWaiter* self = new(ELeave) CAsyncWaiter(aPriority); + return self; + } + +CAsyncWaiter* CAsyncWaiter::NewLC(TInt aPriority) + { + CAsyncWaiter* self = new(ELeave) CAsyncWaiter(aPriority); + CleanupStack::PushL(self); + return self; + } + +CAsyncWaiter::CAsyncWaiter(TInt aPriority) : CActive(aPriority) + { + CActiveScheduler::Add(this); + } + +CAsyncWaiter::~CAsyncWaiter() + { + Cancel(); + } + +void CAsyncWaiter::StartAndWait() + { + iStatus = KRequestPending; + SetActive(); + iWait.Start(); + } + +TInt CAsyncWaiter::Result() const + { + return iError; + } + +void CAsyncWaiter::RunL() + { + iError = iStatus.Int(); + //CAknEnv::StopSchedulerWaitWithBusyMessage( iWait ); + iWait.AsyncStop(); + } + +void CAsyncWaiter::DoCancel() + { + iError = KErrCancel; + if( iStatus == KRequestPending ) + { + TRequestStatus* s=&iStatus; + User::RequestComplete( s, KErrCancel ); + } + + //CAknEnv::StopSchedulerWaitWithBusyMessage( iWait ); + iWait.AsyncStop(); + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::OpenWithApparcL(TFileName aFileName) + { + if (iFileUtils != NULL) + { + iFileUtils->OpenWithApparcL(aFileName); + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::OpenWithDocHandlerL(TFileName aFileName, TBool aEmbed) + { + if (iFileUtils != NULL) + { + iFileUtils->OpenWithDocHandlerL(aFileName, aEmbed); + } + } + +// -------------------------------------------------------------------------------------------- + +//TInt CEngine::QueryCurrentItemIndex() +// { +// return iFileBrowserUI->QueryCurrentItemIndex(); +// } + +// -------------------------------------------------------------------------------------------- + +TSearchAttributes CEngine::GetSearchAttributes() + { + if (iFileUtils != NULL) + { + return iFileUtils->GetSearchAttributes(); + } + else + { + return TSearchAttributes(); + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::ChangeAttributes(TSearchAttributes attributes) + { + if (iFileUtils != NULL) + { + iFileUtils->ChangeAttributes(attributes); + } + } + +// -------------------------------------------------------------------------------------------- + +TSearchResults CEngine::SearchResults() + { + if (iFileUtils != NULL) + { + return iFileUtils->SearchResults(); + } + else + { + return TSearchResults(); + } + } + +// -------------------------------------------------------------------------------------------- + +CFileEntryList* CEngine::FoundFiles() + { + if (iFileUtils != NULL) + { + return iFileUtils->FoundFiles(); + } + else + { + return NULL; + } + } + +// -------------------------------------------------------------------------------------------- + +void CEngine::SearchL() + { + if (iFileUtils != NULL) + { + TRAP_IGNORE(iFileUtils->SearchL()); + } + } + +// -------------------------------------------------------------------------------------------- + +// End of File