filemanager/src/inc/fmdrivemodel.cpp
changeset 37 15bc28c9dd51
parent 16 ada7962b4308
--- a/filemanager/src/inc/fmdrivemodel.cpp	Mon May 03 12:24:39 2010 +0300
+++ b/filemanager/src/inc/fmdrivemodel.cpp	Tue Aug 24 10:24:14 2010 +0800
@@ -22,8 +22,11 @@
 #include <QDir>
 #include <QFileInfo>
 
-FmDriveModel::FmDriveModel( QObject *parent, Options options ) :
-    QAbstractListModel( parent ), mOptions( options )
+#include <hbglobal.h>
+
+FmDriveModel::FmDriveModel( QObject *parent, Options options,
+        FmDriveListProvider *driveListProvider ) :
+    QAbstractListModel( parent ), mOptions( options ), mDriveListProvider( driveListProvider )
 {
     mIconProvider = new FmFileIconProvider();
     refresh();
@@ -36,17 +39,27 @@
 
 void FmDriveModel::refresh()
 {
-    QFileInfoList infoList = QDir::drives();
-
+    emit layoutAboutToBeChanged();
     mDriveList.clear();
-    if( mOptions & HideUnAvailableDrive ) {
-        FmLogger::log( QString( "FmDriveModel::refresh HideUnAvailableDrive_true" ) );
-        FmUtils::getDriveList( mDriveList, true );
+    
+    // if mDriveListProvider existed, use it to fetch drive list
+    // otherwise use FmUtils::getDriveList to fetch drive list.
+    if( mDriveListProvider ) {
+        mDriveListProvider->getDriveList( mDriveList );
     } else {
-        FmLogger::log( QString( "FmDriveModel::refresh HideUnAvailableDrive_false" ) );
-        FmUtils::getDriveList( mDriveList, false );
+        if( mOptions & HideUnAvailableDrive ) {
+            FM_LOG( QString( "FmDriveModel::refresh HideUnAvailableDrive_true" ) );
+            FmUtils::getDriveList( mDriveList, true );
+        } else {
+            FM_LOG( QString( "FmDriveModel::refresh HideUnAvailableDrive_false" ) );
+            FmUtils::getDriveList( mDriveList, false );
+        }
     }
-    emit layoutChanged();
+
+	emit layoutChanged();
+	for( int i=0; i<mDriveList.count(); i++ ) {
+        emit dataChanged(index( i, 0 ), index( i, 0 ));
+	}
 }
 
 
@@ -71,10 +84,7 @@
 
     if (role == Qt::DisplayRole ) {
        return displayString( index );
-    } else if (role == Qt::UserRole ) {
-       return driveName( index );
-    }
-
+    } 
     if (index.column() == 0) {
         if (role == Qt::DecorationRole ) {
             QString path = driveName( index );
@@ -97,10 +107,10 @@
             return QVariant();
 
         switch (section) {
-            case 0: return tr("Name");
-            case 1: return tr("Size");
-            case 2: return tr("Type");
-            case 3: return tr("Date Modified");
+            case 0: return hbTrId("Name");
+            case 1: return hbTrId("Size");
+            case 2: return hbTrId("Type");
+            case 3: return hbTrId("Date Modified");
             default: return QVariant();
         }
     }
@@ -126,17 +136,39 @@
     return data;
 }
 
-QString FmDriveModel::displayString( const QModelIndex &index ) const
+QVariant FmDriveModel::displayString( const QModelIndex &index ) const
 {
-    QString data;
+    QStringList data;
     if (index.row() >= 0 && index.row() < mDriveList.size()) {
         int row = index.row();
         QString diskName = mDriveList[ row ];
 
         if( mOptions & FillWithVolume ) {
-            data = FmUtils::fillDriveVolume( diskName, mOptions & FillWithDefaultVolume );
+            data << FmUtils::fillDriveVolume( diskName, mOptions & FillWithDefaultVolume );
         } else {
-            data = FmUtils::removePathSplash( diskName );
+            data << FmUtils::removePathSplash( diskName );
+        }
+        diskName = FmUtils::fillPathWithSplash( diskName );
+        FmDriverInfo driverInfo = FmUtils::queryDriverInfo( diskName );
+        if ( mOptions & FillWithTotalSize ) {                    
+            if( driverInfo.driveState() & FmDriverInfo::EDriveAvailable ) {
+                data << QString( hbTrId ( "Size: " ) + FmUtils::formatStorageSize( driverInfo.size() ) );                
+            } else if( driverInfo.driveState() & FmDriverInfo::EDriveLocked ) {
+                data << QString( hbTrId ( "Locked" ) );                
+            } else if( driverInfo.driveState() & FmDriverInfo::EDriveCorrupted ) {
+                data << QString( hbTrId ( "Corrupted" ) );                
+            } else if( driverInfo.driveState() & FmDriverInfo::EDriveNotPresent ) {
+                data << QString( hbTrId ( "Not Ready" ) );                
+            }            
+        }
+        if ( mOptions & FillWithFreeSize ) {        
+            if( driverInfo.driveState() & FmDriverInfo::EDriveAvailable ) {                
+                data << QString( hbTrId ( "Free: " ) + FmUtils::formatStorageSize( driverInfo.freeSize() ) );
+            } else if( ( driverInfo.driveState() & FmDriverInfo::EDriveLocked ) ||
+                    ( driverInfo.driveState() & FmDriverInfo::EDriveCorrupted ) ||
+                    ( driverInfo.driveState() & FmDriverInfo::EDriveNotPresent )) {                
+                data << QString( QString(" ") );
+            }            
         }
     }
     return data;