usbuis/usbuiqt/src/usbuisettingmodel.cpp
changeset 34 7858bc6ead78
parent 31 dfdd8240f7c8
child 35 9d8b04ca6939
--- a/usbuis/usbuiqt/src/usbuisettingmodel.cpp	Fri May 14 16:51:51 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,362 +0,0 @@
-/*
-* 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 "usbuisettingmodel.h"
-#include "usbuimodelactive.h"
-#include "mydebug.h"
-#include <QStringList>
-#include <UsbWatcherInternalCRKeys.h>
-#include <XQSettingsKey>
-#include <usbman.h>
-
-const QString TextIdPrefix = ("txt_usb_");
-const QString ModeIconNamePrefix = (":/icons/usb_icon_mode_");
-
-/*!
-    Constructor.
- */
-UsbUiSettingModel::UsbUiSettingModel( QObject *parent )
-    : QAbstractItemModel( parent )
-{
-    mModelActive = new UsbUiModelActive();
-    
-    for ( int i = 0; i < UsbUiSettingModel::EndOfSettings; i++ ) {
-        // Initialize the list with empty values.
-        mSettingsList.append( QMap< int, QVariant >() );
-    }
-    
-    mCurrentMode = currentMode();
-    mPreviousMode = mCurrentMode;
-    setUsbSettings(mCurrentMode);
-  	bool ret = mSettingsManager.startMonitoring( 
-   	        XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
-   	                KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) );
-    myDebug() << ">>> UsbUiSettingModel::startMonitoring value=" 
-              << ret; 
-                              
-   	// signal: personality changed in the central repository                
-   	connect( &mSettingsManager, 
-   	        SIGNAL( valueChanged( const XQSettingsKey&, const QVariant& ) ), 
-   	        this, 
-   	        SLOT( usbModeChanged( const XQSettingsKey&, const QVariant& ) ) );
-   	        
-   // signal: response from usbwatcher to our attempt to set the personality 	        
-   	connect( mModelActive, 
-   	        SIGNAL( requestCompleted( int status ) ), 
-   	        this, 
-   	        SLOT( setPersonalityCompleted (int status )));
-
-}
-/*!
- * calls the model's set functions to initialize the model's data
- */
-void UsbUiSettingModel::setUsbSettings( int aModeId )
-    {
-    setUsbModelistSetting( aModeId ); 
-    setDefaultModeSetting();
-    setDescriptionSetting();
-    }
-
-/*!
-    Destructor.
- */
-UsbUiSettingModel::~UsbUiSettingModel()
-{
-    myDebug() << ">>> UsbUiSettingModel::~UsbUiSettingModel";
-    mSettingsManager.stopMonitoring( 
-            XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
-                    KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) );
-    delete mModelActive;
-    myDebug() << "<<< UsbUiSettingModel::~UsbUiSettingModel";
-}
-
-/*!
-    Provides notification of changes in selected usb mode
- */
-void UsbUiSettingModel::usbModeChanged( const XQSettingsKey &key,  
-        const QVariant &value )  
-{
-Q_UNUSED(key);
-    myDebug() << ">>> UsbUiSettingModel::usbModeChanged";
-    // key is not checked, as we monitor only one key
- 
-    setNewUsbMode(value.toInt());
-                                  
-    myDebug() << "<<< UsbUiSettingModel::usbModeChanged"; 
-}
-/*!
- * updates the model rows and emits signal datachanged
- */
-void UsbUiSettingModel::setNewUsbMode(int newPersonality)
-    
-    {
-    myDebug() << ">>> UsbUiSettingModel::setNewUsbMode value=" 
-            << newPersonality; 
-            
-    mCurrentMode = newPersonality;
-    setUsbSettings(mCurrentMode);
-   	
-    emit dataChanged( createIndex( DefaultMode, KDefaultColumn ), 
-            createIndex( UsbModeList, KDefaultColumn ) );   
-         
-    myDebug() << "<<< UsbUiSettingModel::setNewUsbMode"; 
-    }
-/*!
- * Returns the index of the item in the model specified by the given row, column and parent index.
- */
-QModelIndex UsbUiSettingModel::index( int row, int column, const QModelIndex &parent ) const
-{
-    return hasIndex( row, column, parent ) ? createIndex( row, column ) : QModelIndex();
-}
-
-
-/*
-    This model does not support hierarchy, so this returns an empty model index. 
- */
-QModelIndex UsbUiSettingModel::parent( const QModelIndex &child ) const
-{
-    Q_UNUSED( child );
-    return QModelIndex();
-}
-/*!
- * Returns the number of rows under the given parent
- */
-int UsbUiSettingModel::rowCount( const QModelIndex &parent ) const
-{
-    Q_UNUSED( parent );
-    return mSettingsList.count();
-}
-
-
-/*!
- * Returns the number of columns for the children of the given parent.
- * This model is one-dimensional, so this returns 1.
- */
-int UsbUiSettingModel::columnCount( const QModelIndex &parent ) const
-{
-    Q_UNUSED( parent );
-    return 1;
-}
-/*!
- * Returns the data stored under the given role for the item referred to by the index.
- */
-QVariant UsbUiSettingModel::data( const QModelIndex &index, int role ) const
-{
-    return mSettingsList.value( index.row() ).value( role );
-}
-
-
-/*!
- * This is called when usb mode is changed, it only sets the personality when the given role is EditRole 
- */
-bool UsbUiSettingModel::setData(const QModelIndex &index, const QVariant &value, int role)
-{
-    myDebug() << ">>>  UsbUiSettingModel::setData";
-    bool success = false;
-    if ( role == Qt::EditRole ) {
-        // Only allow changes on the value with role EditRole. Others are managed here.
-        switch ( index.row() ) {
-        case UsbModeList: {            
-            mModelActive->SetUsbPersonality( mPersonalityIds.at( value.toInt() ) );
-            success = true;
-            // also update the rest of the model with the about to be selected mode right away
-            setNewUsbMode(mPersonalityIds.at( value.toInt() ));
-            break;
-            }
-        case DefaultMode:
-            //no break
-        case Description:
-            //no break
-        default:
-            myDebug() << "    UsbUiSettingModel::setData not supported row " << index.row();
-            break;
-        } 
-    }   
-    myDebug() << "<<<  UsbUiSettingModel::setData return " << success;
-    return success;
-}
-
-/*!
- * Getter for the source data.
- */
-const QModelIndex* UsbUiSettingModel::sourceData() const
-{
-    return new QModelIndex( createIndex( 0, 0 ) );
-}
-
-/*!
- * creats the logical name of the modename string for the list
- */
-QString UsbUiSettingModel::modeListName( int modeId )
-{
-    QString textId = TextIdPrefix + "modelistname_" + QString::number( modeId );
-    QString modeName = qtTrId( textId.toAscii() );
-    return modeName;
-}
-
-/*!
- * Get the current USB mode (personality) ID
- */
-int UsbUiSettingModel::currentMode()
-{
-    myDebug() << ">>>  UsbUiSettingModel::CurrentMode";
-    int currentMode = mSettingsManager.readItemValue(
-                XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
-                KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) ).toInt();
-    myDebug() << "<<< UsbUiSettingModel::CurrentMode " << currentMode;
-    return currentMode;
-}
-
-/*!
- * sets the value to different roles of the model's first row
- */
-void UsbUiSettingModel::setDefaultModeSetting()
-{    
-    QString iconName;
-    QString modeName;
-    //empty iconName and modeName are used for a hidden personality
-    if ( !isPersonalityHidden(mCurrentMode) ) {
-        iconName = ModeIconNamePrefix + QString::number( mCurrentMode ) + ".svg";
-        QString textId = TextIdPrefix + "modename_" + QString::number( mCurrentMode );
-        modeName = qtTrId( textId.toAscii() );
-    }
-
-    myDebug() << ">>> UsbUiSettingModel::setDefaultModeSetting iconName=" 
-            << iconName << " modeName=" << modeName;
-    QMap< int, QVariant > val = mSettingsList.at( DefaultMode );
-    if ( val.isEmpty() ) {
-        val[ SettingType ] = QVariant( DefaultMode );
-    }    
-    val[ Qt::DecorationRole ] = QVariant(iconName) ;
-    val[ Qt::DisplayRole ]= QVariant(modeName) ;
-    mSettingsList.replace( DefaultMode, val );
-    myDebug() << "<<< UsbUiSettingModel::setDefaultModeSetting";
-}
-
-/*!
-    Updates all values related to the mode description.
- */
-void UsbUiSettingModel::setDescriptionSetting()
-{
-    QString description;
-    //the description will be empty for a hidden personality
-    if ( !isPersonalityHidden(mCurrentMode) ) {
-        QString textId = TextIdPrefix + "description_" 
-                + QString::number( mCurrentMode );
-        description = qtTrId( textId.toAscii() );
-    }
-    myDebug() << ">>> UsbUiSettingModel::setDescriptionSetting description=" 
-            << description;
-    QMap< int, QVariant > val = mSettingsList.at( Description );
-    if ( val.isEmpty() ) {
-       
-        val[ SettingType ] = QVariant( Description );
-     
-    }
-    // The display role stores the string representation of the actual value.
-    val[ Qt::DisplayRole ] = QVariant( description );
-    	 mSettingsList.replace( Description, val );
-    myDebug() << "<<< UsbUiSettingModel::setDescriptionSetting";     
-}
-
-/*!
-    Updates all values related to the visibility setting.
-    Updates the selectable USB modes only in the 1st call.
- */
-bool UsbUiSettingModel::setUsbModelistSetting( int aModeId )
-{
-    myDebug() << ">>> UsbUiSettingModel::setUsbModelistSetting aModeIndex="
-            << aModeId;
-   bool ret = true;
-    QMap< int, QVariant > val = mSettingsList.at(UsbModeList);
-    if ( val.isEmpty() ) {
-        val[ SettingType ] = QVariant( UsbModeList );
-
-        RUsb iUsbman;
-        if ( iUsbman.Connect() == KErrNone ) {
-            
-            RArray<TInt> personalityIds;
-            mPersonalityIds.clear();
-            if ( iUsbman.GetPersonalityIds( personalityIds ) == KErrNone ) {
-                QStringList modeList;
-                for ( int i = 0; i < personalityIds.Count(); i++ ) {
-                    if ( !isPersonalityHidden(iUsbman, personalityIds[i]) ) {
-                        mPersonalityIds.append( personalityIds[i] );
-                        modeList.append( modeListName( mPersonalityIds[i] ) );                    
-                    }
-                }
-                val[ SettingsModeNameList ] = QVariant( modeList ); 
-            }
-        }
-        else{
-        ret = false;
-        }
-        iUsbman.Close();
-    }
-    //index will be -1 for hidden personality
-    val[ Qt::EditRole ] = QVariant( mPersonalityIds.indexOf(aModeId) );
-    mSettingsList.replace( UsbModeList, val );
-    myDebug() << "<<< UsbUiSettingModel::setUsbModelistSetting";
-    return ret;
-}
-
-/*!
- * it checks the response from usbwatcher to see if the new mode change has been successful
- * it will go back to the previous personality if it has not been successfull
- */
-void UsbUiSettingModel::setPersonalityCompleted (int status )
-{
-  myDebug() << ">>> UsbUiSettingModel::setPersonalityCompleted status= "
-    << status;    
-  // status contains Symbian error code from usbwatcher
-  // if the status is KErrNone, we are ready to process the next request
-  if (status != KErrNone) 
-    {
-    // changing the personality failed, so we need to set back the previous personality
-    // the value will be read from central repository and also updates mCurrentMode  
-    mPreviousMode = mSettingsManager.readItemValue(
-                   XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
-                   KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) ).toInt();
-    setNewUsbMode(mPreviousMode);
-    }
-   
-   // after handling the return code we know the the current personality works
-   // and we will not go back to the previous one 
-   mPreviousMode = mCurrentMode; 
-   myDebug() << "<<< UsbUiSettingModel::setPersonalityCompleted";      
-}
-
-bool UsbUiSettingModel::isPersonalityHidden(RUsb &usbman, TInt personalityId)
-{
-    myDebug() << ">>> UsbUiSettingModel::isPersonalityHidden from USB Manager";
-    bool hidden = false;
-    TUint32 property = 0;
-    TInt ret = usbman.GetPersonalityProperty(personalityId, property);
-    if (ret == KErrNone) {
-        myDebug() << "property " << property;
-        if (property & KUsbPersonalityPropertyHidden) {
-            hidden = true;
-        }
-    } 
-    myDebug() << "<<< UsbUiSettingModel::isPersonalityHidden " << hidden;
-    return hidden;
-}
-
-bool UsbUiSettingModel::isPersonalityHidden(TInt personalityId)
-{
-    return ( mPersonalityIds.indexOf(personalityId) == -1 );
-}