--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/src/filemanager/src/fmviewmanager.h Tue Aug 31 15:06:05 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* The header file of filemanager view manager
+*
+*/
+
+#ifndef FMVIEWMANAGER_H
+#define FMVIEWMANAGER_H
+
+#include <QObject>
+#include <QList>
+#include "fmcommon.h"
+#include <QPixmap>
+
+class FmMainWindow;
+class HbView;
+class FmViewManager;
+class FmOperationService;
+class FmOperationBase;
+class QFileSystemWatcher;
+class FmDriveWatcher;
+class FmDialog;
+
+/*
+ * this class is used to record relationship between dialog and drive name
+ * FmViewManager will auto-close dialog which related drive is not available again.
+ * for example. set name to MMC will pop a dialog, if add the dialog to FmViewManager::addDlgCloseUnit
+ * then after eject MMC, the dialog will be auto-closed by FmViewManager::checkDlgCloseUnit()
+ */
+class FmDlgCloseUnit
+{
+public:
+ FmDlgCloseUnit( FmDialog *dialog );
+ ~FmDlgCloseUnit();
+
+ void addAssociatedDrives( QString drives );
+ void removeAssociatedDrives( QString drives );
+ QString associatedDrives();
+ FmDialog *dialog();
+
+private:
+ FmDialog *mDialog;
+ QString mAssociatedDrives;
+};
+
+class FmViewManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ int viewCount();
+ static FmViewManager *CreateViewManager( FmMainWindow* mainWindow );
+ static void RemoveViewManager();
+ static FmViewManager *viewManager();
+ FmOperationService *operationService();
+
+ Qt::Orientation orientation();
+
+ void createFileView( const QString &path,
+ bool enableBackPathCheck = true, bool disableFind = false );
+ void createFindView( const QString &keyword, const QString &path );
+ void createDriverView();
+ void createSplitView();
+ void createBackupView();
+ void createRestoreView();
+ void createDeleteBackupView();
+ void saveActivity();
+ // add a close unit. this is used to auto-close dialog which related drive is not available again.
+ void addDlgCloseUnit( FmDlgCloseUnit* unit )
+ {
+ FM_LOG( "FmViewManager::addDlgCloseUnit_" + unit->associatedDrives() );
+ mDlgCloseUnitList.append( unit );
+ }
+
+ // remove a close unit.
+ void removeDlgCloseUnit( FmDlgCloseUnit* unit )
+ {
+ FM_LOG( "FmViewManager::removeDlgCloseUnit_" + unit->associatedDrives() );
+ mDlgCloseUnitList.removeOne( unit );
+ }
+
+protected:
+ explicit FmViewManager( FmMainWindow* mainWindow );
+ ~FmViewManager();
+
+public slots:
+ /// popViewAndShow will delete current view and pop view from stack, then show it.
+ void popViewAndShow();
+
+ // triggered when drive space is changed
+ // this slots is used to watch filemanager internal events
+ // drive space event from other applictaion will not be observed here
+ void on_operationService_driveSpaceChanged( FmOperationBase* operationBase );
+
+ // triggered when drive is ejected/inserted, or other drive event. it will impact available property
+ void on_driveWatcher_driveAddedOrChanged();
+
+ // if operation finished, some addition works( such as refresh... ) should be done in some views
+ // so this is the central controller function
+ void on_operationService_notifyFinish( FmOperationBase *operationBase );
+
+ void onAboutToChangeView(HbView * oldView, HbView *newView);
+
+signals:
+ // emit when drive space is changed by some operation inside filemanager.
+ void driveSpaceChanged();
+
+ // emit when drive is ejected/inserted, this is watched by FmDriveWatcher
+ void driveChanged();
+
+ // when backup is created, backup date should be updated.
+ void refreshBackupDate();
+
+private:
+ // when drive is ejected, this function will be called and exam dialogs in mDlgCloseUnitList
+ // it will colse dialogs if related drive is not available
+ void checkDlgCloseUnit();
+
+private:
+ static FmViewManager *mViewManager;
+
+private:
+ // main window
+ FmMainWindow *mMainWindow;
+
+ // operation service, used to start operations such as copy, move, delete, format...
+ FmOperationService *mOperationService;
+
+ // used to watch drive event, for example, eject/insert drive
+ FmDriveWatcher *mDriveWatcher;
+
+ // used to record some dialogs that related to drive
+ // the dialog should be closed in checkDlgCloseUnit if drive is not available
+ QList<FmDlgCloseUnit*> mDlgCloseUnitList;
+
+ QPixmap mScreenShot;
+};
+
+
+
+
+
+#endif
+
+