usbuis/usbsettingsapp/src/usbuisettingmodel.cpp
author hgs
Mon, 17 May 2010 11:03:15 +0300
changeset 52 831068540b07
permissions -rw-r--r--
201019_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52
831068540b07 201019_1
hgs
parents:
diff changeset
     1
/*
831068540b07 201019_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
831068540b07 201019_1
hgs
parents:
diff changeset
     3
* All rights reserved.
831068540b07 201019_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
831068540b07 201019_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
831068540b07 201019_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
831068540b07 201019_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
831068540b07 201019_1
hgs
parents:
diff changeset
     8
*
831068540b07 201019_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
831068540b07 201019_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
831068540b07 201019_1
hgs
parents:
diff changeset
    11
*
831068540b07 201019_1
hgs
parents:
diff changeset
    12
* Contributors:
831068540b07 201019_1
hgs
parents:
diff changeset
    13
*
831068540b07 201019_1
hgs
parents:
diff changeset
    14
* Description: 
831068540b07 201019_1
hgs
parents:
diff changeset
    15
*
831068540b07 201019_1
hgs
parents:
diff changeset
    16
*/
831068540b07 201019_1
hgs
parents:
diff changeset
    17
831068540b07 201019_1
hgs
parents:
diff changeset
    18
#include "usbuisettingmodel.h"
831068540b07 201019_1
hgs
parents:
diff changeset
    19
#include <QStringList>
831068540b07 201019_1
hgs
parents:
diff changeset
    20
#include <UsbWatcherInternalCRKeys.h>
831068540b07 201019_1
hgs
parents:
diff changeset
    21
#include <XQSettingsKey>
831068540b07 201019_1
hgs
parents:
diff changeset
    22
#include <usbman.h>
831068540b07 201019_1
hgs
parents:
diff changeset
    23
#include <HbIcon>
831068540b07 201019_1
hgs
parents:
diff changeset
    24
#include <QItemSelection>
831068540b07 201019_1
hgs
parents:
diff changeset
    25
#include <QItemSelectionModel>
831068540b07 201019_1
hgs
parents:
diff changeset
    26
#include "usbuimodelactive.h"
831068540b07 201019_1
hgs
parents:
diff changeset
    27
#include "usbdebug.h"
831068540b07 201019_1
hgs
parents:
diff changeset
    28
831068540b07 201019_1
hgs
parents:
diff changeset
    29
831068540b07 201019_1
hgs
parents:
diff changeset
    30
const QString TextIdPrefix = ("txt_usb_dblist_");
831068540b07 201019_1
hgs
parents:
diff changeset
    31
const QString DescriptionIdPostfix = ("_val");
831068540b07 201019_1
hgs
parents:
diff changeset
    32
const QString ModeIconNamePrefix = ("qtg_large_");
831068540b07 201019_1
hgs
parents:
diff changeset
    33
831068540b07 201019_1
hgs
parents:
diff changeset
    34
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
    35
    Constructor.
831068540b07 201019_1
hgs
parents:
diff changeset
    36
 */
831068540b07 201019_1
hgs
parents:
diff changeset
    37
UsbUiSettingModel::UsbUiSettingModel( QObject *parent )
831068540b07 201019_1
hgs
parents:
diff changeset
    38
    : QAbstractItemModel( parent), mSelectionModel(NULL)
831068540b07 201019_1
hgs
parents:
diff changeset
    39
{
831068540b07 201019_1
hgs
parents:
diff changeset
    40
    mModelActive = new UsbUiModelActive();
831068540b07 201019_1
hgs
parents:
diff changeset
    41
    mCurrentMode = currentMode();
831068540b07 201019_1
hgs
parents:
diff changeset
    42
    initializeModelData(mCurrentMode);
831068540b07 201019_1
hgs
parents:
diff changeset
    43
  	bool ret = mSettingsManager.startMonitoring( 
831068540b07 201019_1
hgs
parents:
diff changeset
    44
   	        XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
831068540b07 201019_1
hgs
parents:
diff changeset
    45
   	                KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) );
831068540b07 201019_1
hgs
parents:
diff changeset
    46
    myDebug() << ">>> UsbUiSettingModel::startMonitoring value=" 
831068540b07 201019_1
hgs
parents:
diff changeset
    47
              << ret; 
831068540b07 201019_1
hgs
parents:
diff changeset
    48
                              
831068540b07 201019_1
hgs
parents:
diff changeset
    49
   	// signal: personality changed in the central repository                
831068540b07 201019_1
hgs
parents:
diff changeset
    50
   	ret = connect( &mSettingsManager, 
831068540b07 201019_1
hgs
parents:
diff changeset
    51
   	        SIGNAL( valueChanged( const XQSettingsKey&, const QVariant& ) ), 
831068540b07 201019_1
hgs
parents:
diff changeset
    52
   	        this, 
831068540b07 201019_1
hgs
parents:
diff changeset
    53
   	        SLOT( cenrepChanged( const XQSettingsKey&, const QVariant& ) ) );
831068540b07 201019_1
hgs
parents:
diff changeset
    54
    myDebug() << ">>> UsbUiSettingModel::UsbUiSettingModel connect valueChanged="
831068540b07 201019_1
hgs
parents:
diff changeset
    55
            << ret;
831068540b07 201019_1
hgs
parents:
diff changeset
    56
   	        
831068540b07 201019_1
hgs
parents:
diff changeset
    57
    // signal: response from usbwatcher to our attempt to set the personality 	        
831068540b07 201019_1
hgs
parents:
diff changeset
    58
   	ret = connect( mModelActive, 
831068540b07 201019_1
hgs
parents:
diff changeset
    59
   	        SIGNAL( requestCompleted( int ) ), 
831068540b07 201019_1
hgs
parents:
diff changeset
    60
   	        this, 
831068540b07 201019_1
hgs
parents:
diff changeset
    61
   	        SLOT( personalitySetCompleted( int )));
831068540b07 201019_1
hgs
parents:
diff changeset
    62
    myDebug() << ">>> UsbUiSettingModel::UsbUiSettingModel connect requestCompleted="
831068540b07 201019_1
hgs
parents:
diff changeset
    63
            << ret;
831068540b07 201019_1
hgs
parents:
diff changeset
    64
}
831068540b07 201019_1
hgs
parents:
diff changeset
    65
831068540b07 201019_1
hgs
parents:
diff changeset
    66
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
    67
    Destructor.
831068540b07 201019_1
hgs
parents:
diff changeset
    68
 */
831068540b07 201019_1
hgs
parents:
diff changeset
    69
UsbUiSettingModel::~UsbUiSettingModel()
831068540b07 201019_1
hgs
parents:
diff changeset
    70
{
831068540b07 201019_1
hgs
parents:
diff changeset
    71
    myDebug() << ">>> UsbUiSettingModel::~UsbUiSettingModel";
831068540b07 201019_1
hgs
parents:
diff changeset
    72
    mSettingsManager.stopMonitoring( 
831068540b07 201019_1
hgs
parents:
diff changeset
    73
            XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
831068540b07 201019_1
hgs
parents:
diff changeset
    74
                    KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) );
831068540b07 201019_1
hgs
parents:
diff changeset
    75
    delete mModelActive;
831068540b07 201019_1
hgs
parents:
diff changeset
    76
    myDebug() << "<<< UsbUiSettingModel::~UsbUiSettingModel";
831068540b07 201019_1
hgs
parents:
diff changeset
    77
}
831068540b07 201019_1
hgs
parents:
diff changeset
    78
831068540b07 201019_1
hgs
parents:
diff changeset
    79
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
    80
    Provides notification of changes in selected usb mode
831068540b07 201019_1
hgs
parents:
diff changeset
    81
 */
831068540b07 201019_1
hgs
parents:
diff changeset
    82
void UsbUiSettingModel::cenrepChanged( const XQSettingsKey &key,  
831068540b07 201019_1
hgs
parents:
diff changeset
    83
        const QVariant &value )  
831068540b07 201019_1
hgs
parents:
diff changeset
    84
{
831068540b07 201019_1
hgs
parents:
diff changeset
    85
    Q_UNUSED(key);
831068540b07 201019_1
hgs
parents:
diff changeset
    86
    myDebug() << ">>> UsbUiSettingModel::cenrepChanged";
831068540b07 201019_1
hgs
parents:
diff changeset
    87
    // key is not checked, as we monitor only one key
831068540b07 201019_1
hgs
parents:
diff changeset
    88
    updateSelectionModel(value.toInt());                                 
831068540b07 201019_1
hgs
parents:
diff changeset
    89
    myDebug() << "<<< UsbUiSettingModel::cenrepChanged"; 
831068540b07 201019_1
hgs
parents:
diff changeset
    90
}
831068540b07 201019_1
hgs
parents:
diff changeset
    91
831068540b07 201019_1
hgs
parents:
diff changeset
    92
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
    93
 * updates the selection model
831068540b07 201019_1
hgs
parents:
diff changeset
    94
 * The selection model will signal the view.
831068540b07 201019_1
hgs
parents:
diff changeset
    95
 */
831068540b07 201019_1
hgs
parents:
diff changeset
    96
void UsbUiSettingModel::updateSelectionModel(int newPersonality)
831068540b07 201019_1
hgs
parents:
diff changeset
    97
{
831068540b07 201019_1
hgs
parents:
diff changeset
    98
    myDebug() << ">>> UsbUiSettingModel::updateSelectionModel value=" 
831068540b07 201019_1
hgs
parents:
diff changeset
    99
            << newPersonality; 
831068540b07 201019_1
hgs
parents:
diff changeset
   100
            
831068540b07 201019_1
hgs
parents:
diff changeset
   101
    mCurrentMode = newPersonality;
831068540b07 201019_1
hgs
parents:
diff changeset
   102
    mSelectionModel->clear();    
831068540b07 201019_1
hgs
parents:
diff changeset
   103
    int row = mPersonalityIds.indexOf(newPersonality);
831068540b07 201019_1
hgs
parents:
diff changeset
   104
    myDebug() << ">>> UsbUiSettingModel::updateSelectionModel row=" 
831068540b07 201019_1
hgs
parents:
diff changeset
   105
            << row; 
831068540b07 201019_1
hgs
parents:
diff changeset
   106
    // in case of the hidden personality , the selection model is left empty
831068540b07 201019_1
hgs
parents:
diff changeset
   107
    if ( row >= 0 ) {
831068540b07 201019_1
hgs
parents:
diff changeset
   108
        //set selection model for the new selection
831068540b07 201019_1
hgs
parents:
diff changeset
   109
        QModelIndex selectionIndex = index(row, 0, QModelIndex());
831068540b07 201019_1
hgs
parents:
diff changeset
   110
        QItemSelection selection(selectionIndex, selectionIndex);
831068540b07 201019_1
hgs
parents:
diff changeset
   111
        mSelectionModel->select(selection, QItemSelectionModel::Select);    
831068540b07 201019_1
hgs
parents:
diff changeset
   112
    }
831068540b07 201019_1
hgs
parents:
diff changeset
   113
    myDebug() << "<<< UsbUiSettingModel::updateSelectionModel"; 
831068540b07 201019_1
hgs
parents:
diff changeset
   114
}
831068540b07 201019_1
hgs
parents:
diff changeset
   115
831068540b07 201019_1
hgs
parents:
diff changeset
   116
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
   117
 * Returns the index of the item in the model specified by the given row, column and parent index.
831068540b07 201019_1
hgs
parents:
diff changeset
   118
 */
831068540b07 201019_1
hgs
parents:
diff changeset
   119
QModelIndex UsbUiSettingModel::index( int row, int column, const QModelIndex &parent ) const
831068540b07 201019_1
hgs
parents:
diff changeset
   120
{
831068540b07 201019_1
hgs
parents:
diff changeset
   121
    return hasIndex( row, column, parent ) ? createIndex( row, column ) : QModelIndex();
831068540b07 201019_1
hgs
parents:
diff changeset
   122
}
831068540b07 201019_1
hgs
parents:
diff changeset
   123
831068540b07 201019_1
hgs
parents:
diff changeset
   124
/*
831068540b07 201019_1
hgs
parents:
diff changeset
   125
    This model does not support hierarchy, so this returns an empty model index. 
831068540b07 201019_1
hgs
parents:
diff changeset
   126
 */
831068540b07 201019_1
hgs
parents:
diff changeset
   127
QModelIndex UsbUiSettingModel::parent( const QModelIndex &child ) const
831068540b07 201019_1
hgs
parents:
diff changeset
   128
{
831068540b07 201019_1
hgs
parents:
diff changeset
   129
    Q_UNUSED( child );
831068540b07 201019_1
hgs
parents:
diff changeset
   130
    return QModelIndex();
831068540b07 201019_1
hgs
parents:
diff changeset
   131
}
831068540b07 201019_1
hgs
parents:
diff changeset
   132
831068540b07 201019_1
hgs
parents:
diff changeset
   133
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
   134
 * Returns the number of rows under the given parent
831068540b07 201019_1
hgs
parents:
diff changeset
   135
 */
831068540b07 201019_1
hgs
parents:
diff changeset
   136
int UsbUiSettingModel::rowCount( const QModelIndex &parent ) const
831068540b07 201019_1
hgs
parents:
diff changeset
   137
{
831068540b07 201019_1
hgs
parents:
diff changeset
   138
    Q_UNUSED( parent );
831068540b07 201019_1
hgs
parents:
diff changeset
   139
    return mSettingsList.count();
831068540b07 201019_1
hgs
parents:
diff changeset
   140
}
831068540b07 201019_1
hgs
parents:
diff changeset
   141
831068540b07 201019_1
hgs
parents:
diff changeset
   142
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
   143
 * Returns the number of columns for the children of the given parent.
831068540b07 201019_1
hgs
parents:
diff changeset
   144
 * This model is one-dimensional, so this returns 1.
831068540b07 201019_1
hgs
parents:
diff changeset
   145
 */
831068540b07 201019_1
hgs
parents:
diff changeset
   146
int UsbUiSettingModel::columnCount( const QModelIndex &parent ) const
831068540b07 201019_1
hgs
parents:
diff changeset
   147
{
831068540b07 201019_1
hgs
parents:
diff changeset
   148
    Q_UNUSED( parent );
831068540b07 201019_1
hgs
parents:
diff changeset
   149
    return 1;
831068540b07 201019_1
hgs
parents:
diff changeset
   150
}
831068540b07 201019_1
hgs
parents:
diff changeset
   151
831068540b07 201019_1
hgs
parents:
diff changeset
   152
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
   153
 * Returns the data stored under the given role for the item referred to by the index.
831068540b07 201019_1
hgs
parents:
diff changeset
   154
 */
831068540b07 201019_1
hgs
parents:
diff changeset
   155
QVariant UsbUiSettingModel::data( const QModelIndex &index, int role ) const
831068540b07 201019_1
hgs
parents:
diff changeset
   156
{
831068540b07 201019_1
hgs
parents:
diff changeset
   157
    return mSettingsList.value( index.row() ).value( role );
831068540b07 201019_1
hgs
parents:
diff changeset
   158
}
831068540b07 201019_1
hgs
parents:
diff changeset
   159
831068540b07 201019_1
hgs
parents:
diff changeset
   160
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
   161
 * This is called when usb selection is changed in the view (selection model). 
831068540b07 201019_1
hgs
parents:
diff changeset
   162
 */
831068540b07 201019_1
hgs
parents:
diff changeset
   163
void UsbUiSettingModel::handleSelectionChange(const QItemSelection &selected, 
831068540b07 201019_1
hgs
parents:
diff changeset
   164
        const QItemSelection &deselected )
831068540b07 201019_1
hgs
parents:
diff changeset
   165
{
831068540b07 201019_1
hgs
parents:
diff changeset
   166
    Q_UNUSED( deselected );
831068540b07 201019_1
hgs
parents:
diff changeset
   167
    myDebug() << ">>>  UsbUiSettingModel::handleSelectionChange";
831068540b07 201019_1
hgs
parents:
diff changeset
   168
    QModelIndexList items = selected.indexes();
831068540b07 201019_1
hgs
parents:
diff changeset
   169
    if (!items.isEmpty()) {
831068540b07 201019_1
hgs
parents:
diff changeset
   170
        myDebug() << "     UsbUiSettingModel::handleSelectionChange item exists";
831068540b07 201019_1
hgs
parents:
diff changeset
   171
        QModelIndex index = items[0];
831068540b07 201019_1
hgs
parents:
diff changeset
   172
        int newPersonalityId = mPersonalityIds.at(index.row());
831068540b07 201019_1
hgs
parents:
diff changeset
   173
        if ( newPersonalityId != mCurrentMode ) {
831068540b07 201019_1
hgs
parents:
diff changeset
   174
            myDebug() << "     UsbUiSettingModel::handleSelectionChange setting personality";
831068540b07 201019_1
hgs
parents:
diff changeset
   175
            mModelActive->SetUsbPersonality(newPersonalityId);
831068540b07 201019_1
hgs
parents:
diff changeset
   176
        }
831068540b07 201019_1
hgs
parents:
diff changeset
   177
    }
831068540b07 201019_1
hgs
parents:
diff changeset
   178
    myDebug() << "<<<  UsbUiSettingModel::handleSelectionChange return";
831068540b07 201019_1
hgs
parents:
diff changeset
   179
}
831068540b07 201019_1
hgs
parents:
diff changeset
   180
831068540b07 201019_1
hgs
parents:
diff changeset
   181
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
   182
 * Getter for the source data.
831068540b07 201019_1
hgs
parents:
diff changeset
   183
 */
831068540b07 201019_1
hgs
parents:
diff changeset
   184
const QModelIndex* UsbUiSettingModel::sourceData() const
831068540b07 201019_1
hgs
parents:
diff changeset
   185
{
831068540b07 201019_1
hgs
parents:
diff changeset
   186
    return new QModelIndex( createIndex( 0, 0 ) );
831068540b07 201019_1
hgs
parents:
diff changeset
   187
}
831068540b07 201019_1
hgs
parents:
diff changeset
   188
831068540b07 201019_1
hgs
parents:
diff changeset
   189
void  UsbUiSettingModel::setSelectionModel(QItemSelectionModel *selectionModel)
831068540b07 201019_1
hgs
parents:
diff changeset
   190
    {
831068540b07 201019_1
hgs
parents:
diff changeset
   191
    myDebug() << ">>>  UsbUiSettingModel::setSelectionModel";
831068540b07 201019_1
hgs
parents:
diff changeset
   192
    mSelectionModel = selectionModel;
831068540b07 201019_1
hgs
parents:
diff changeset
   193
    connect( mSelectionModel, 
831068540b07 201019_1
hgs
parents:
diff changeset
   194
                SIGNAL( selectionChanged( const QItemSelection &, const QItemSelection & ) ), 
831068540b07 201019_1
hgs
parents:
diff changeset
   195
                this, 
831068540b07 201019_1
hgs
parents:
diff changeset
   196
                SLOT( handleSelectionChange( const QItemSelection &, const QItemSelection & ) ) );
831068540b07 201019_1
hgs
parents:
diff changeset
   197
    updateSelectionModel(mCurrentMode);
831068540b07 201019_1
hgs
parents:
diff changeset
   198
    myDebug() << "<<<  UsbUiSettingModel::setSelectionModel return";
831068540b07 201019_1
hgs
parents:
diff changeset
   199
    }
831068540b07 201019_1
hgs
parents:
diff changeset
   200
831068540b07 201019_1
hgs
parents:
diff changeset
   201
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
   202
 * Get the translated mode name for the personality friendly name.
831068540b07 201019_1
hgs
parents:
diff changeset
   203
 */
831068540b07 201019_1
hgs
parents:
diff changeset
   204
QString UsbUiSettingModel::modeName( QString &friendlyName )
831068540b07 201019_1
hgs
parents:
diff changeset
   205
{
831068540b07 201019_1
hgs
parents:
diff changeset
   206
    myDebug() << ">>>  UsbUiSettingModel::modeName";
831068540b07 201019_1
hgs
parents:
diff changeset
   207
    QString textId = TextIdPrefix + friendlyName;
831068540b07 201019_1
hgs
parents:
diff changeset
   208
    QString modeName = hbTrId( textId.toAscii() );
831068540b07 201019_1
hgs
parents:
diff changeset
   209
    myDebug() << "<<< UsbUiSettingModel::modeName " << modeName;
831068540b07 201019_1
hgs
parents:
diff changeset
   210
    return modeName;
831068540b07 201019_1
hgs
parents:
diff changeset
   211
}
831068540b07 201019_1
hgs
parents:
diff changeset
   212
831068540b07 201019_1
hgs
parents:
diff changeset
   213
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
   214
 * Get the current USB mode (personality) ID
831068540b07 201019_1
hgs
parents:
diff changeset
   215
 */
831068540b07 201019_1
hgs
parents:
diff changeset
   216
int UsbUiSettingModel::currentMode()
831068540b07 201019_1
hgs
parents:
diff changeset
   217
{
831068540b07 201019_1
hgs
parents:
diff changeset
   218
    myDebug() << ">>>  UsbUiSettingModel::CurrentMode";
831068540b07 201019_1
hgs
parents:
diff changeset
   219
    int currentMode = mSettingsManager.readItemValue(
831068540b07 201019_1
hgs
parents:
diff changeset
   220
                XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
831068540b07 201019_1
hgs
parents:
diff changeset
   221
                KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) ).toInt();
831068540b07 201019_1
hgs
parents:
diff changeset
   222
    myDebug() << "<<< UsbUiSettingModel::CurrentMode " << currentMode;
831068540b07 201019_1
hgs
parents:
diff changeset
   223
    return currentMode;
831068540b07 201019_1
hgs
parents:
diff changeset
   224
}
831068540b07 201019_1
hgs
parents:
diff changeset
   225
831068540b07 201019_1
hgs
parents:
diff changeset
   226
void UsbUiSettingModel::initializeModelData( int aModeId )
831068540b07 201019_1
hgs
parents:
diff changeset
   227
{
831068540b07 201019_1
hgs
parents:
diff changeset
   228
    myDebug() << ">>> UsbUiSettingModel::initializeModelData aModeId="
831068540b07 201019_1
hgs
parents:
diff changeset
   229
            << aModeId;
831068540b07 201019_1
hgs
parents:
diff changeset
   230
    RUsb usbMan;
831068540b07 201019_1
hgs
parents:
diff changeset
   231
    if ( usbMan.Connect() == KErrNone ) {
831068540b07 201019_1
hgs
parents:
diff changeset
   232
        RArray<TInt> personalityIds;
831068540b07 201019_1
hgs
parents:
diff changeset
   233
        mPersonalityIds.clear();
831068540b07 201019_1
hgs
parents:
diff changeset
   234
        if ( usbMan.GetPersonalityIds( personalityIds ) == KErrNone ) {
831068540b07 201019_1
hgs
parents:
diff changeset
   235
            for ( int i = 0; i < personalityIds.Count(); i++ ) {
831068540b07 201019_1
hgs
parents:
diff changeset
   236
                myDebug() << ">>> UsbUiSettingModel::initializeModelData personality ID ="
831068540b07 201019_1
hgs
parents:
diff changeset
   237
                    << personalityIds[i];
831068540b07 201019_1
hgs
parents:
diff changeset
   238
                if ( !isPersonalityHidden(usbMan, personalityIds[i]) ) {
831068540b07 201019_1
hgs
parents:
diff changeset
   239
                    mPersonalityIds.append( personalityIds[i] );                    
831068540b07 201019_1
hgs
parents:
diff changeset
   240
                    QString friendlyName = getFriendlyName(usbMan, personalityIds[i]);
831068540b07 201019_1
hgs
parents:
diff changeset
   241
                    
831068540b07 201019_1
hgs
parents:
diff changeset
   242
                    QStringList displayList;
831068540b07 201019_1
hgs
parents:
diff changeset
   243
                    //text-1 mode name
831068540b07 201019_1
hgs
parents:
diff changeset
   244
                    displayList.append( modeName( friendlyName ) );
831068540b07 201019_1
hgs
parents:
diff changeset
   245
                    
831068540b07 201019_1
hgs
parents:
diff changeset
   246
                    //text-2 description
831068540b07 201019_1
hgs
parents:
diff changeset
   247
                    QString textId = TextIdPrefix + friendlyName + DescriptionIdPostfix;
831068540b07 201019_1
hgs
parents:
diff changeset
   248
                    displayList.append( hbTrId(textId.toAscii()) );
831068540b07 201019_1
hgs
parents:
diff changeset
   249
                    
831068540b07 201019_1
hgs
parents:
diff changeset
   250
                    QMap< int, QVariant > dataRow;
831068540b07 201019_1
hgs
parents:
diff changeset
   251
                    dataRow[ Qt::DisplayRole ] = QVariant( displayList );
831068540b07 201019_1
hgs
parents:
diff changeset
   252
                    
831068540b07 201019_1
hgs
parents:
diff changeset
   253
                    //icon-1
831068540b07 201019_1
hgs
parents:
diff changeset
   254
                    QString iconName = ModeIconNamePrefix + friendlyName;
831068540b07 201019_1
hgs
parents:
diff changeset
   255
                    HbIcon icon(iconName);
831068540b07 201019_1
hgs
parents:
diff changeset
   256
                    QList<QVariant> icons;
831068540b07 201019_1
hgs
parents:
diff changeset
   257
                    icons << icon;                    
831068540b07 201019_1
hgs
parents:
diff changeset
   258
                    dataRow[ Qt::DecorationRole ] = QVariant( icons );
831068540b07 201019_1
hgs
parents:
diff changeset
   259
                    
831068540b07 201019_1
hgs
parents:
diff changeset
   260
                    mSettingsList << dataRow;
831068540b07 201019_1
hgs
parents:
diff changeset
   261
                }
831068540b07 201019_1
hgs
parents:
diff changeset
   262
            }
831068540b07 201019_1
hgs
parents:
diff changeset
   263
        }
831068540b07 201019_1
hgs
parents:
diff changeset
   264
        personalityIds.Close();
831068540b07 201019_1
hgs
parents:
diff changeset
   265
        usbMan.Close();
831068540b07 201019_1
hgs
parents:
diff changeset
   266
    }
831068540b07 201019_1
hgs
parents:
diff changeset
   267
    myDebug() << "<<< UsbUiSettingModel::initializeModelData";
831068540b07 201019_1
hgs
parents:
diff changeset
   268
}
831068540b07 201019_1
hgs
parents:
diff changeset
   269
831068540b07 201019_1
hgs
parents:
diff changeset
   270
/*!
831068540b07 201019_1
hgs
parents:
diff changeset
   271
 * it checks the response from usbwatcher to see if the new mode change has been successful
831068540b07 201019_1
hgs
parents:
diff changeset
   272
 * it will go back to the previous personality if it has not been successful
831068540b07 201019_1
hgs
parents:
diff changeset
   273
 */
831068540b07 201019_1
hgs
parents:
diff changeset
   274
void UsbUiSettingModel::personalitySetCompleted (int status )
831068540b07 201019_1
hgs
parents:
diff changeset
   275
{
831068540b07 201019_1
hgs
parents:
diff changeset
   276
    myDebug() << ">>> UsbUiSettingModel::personalitySetCompleted status= "
831068540b07 201019_1
hgs
parents:
diff changeset
   277
        << status;      
831068540b07 201019_1
hgs
parents:
diff changeset
   278
    // status contains Symbian error code from usbwatcher
831068540b07 201019_1
hgs
parents:
diff changeset
   279
    // if the status is KErrNone, we are ready to process the next request
831068540b07 201019_1
hgs
parents:
diff changeset
   280
    if (status != KErrNone) {
831068540b07 201019_1
hgs
parents:
diff changeset
   281
        // changing the personality failed, so we need to set back the previous personality
831068540b07 201019_1
hgs
parents:
diff changeset
   282
        // the value will be read from central repository and also updates mCurrentMode  
831068540b07 201019_1
hgs
parents:
diff changeset
   283
        updateSelectionModel(currentMode());
831068540b07 201019_1
hgs
parents:
diff changeset
   284
    }
831068540b07 201019_1
hgs
parents:
diff changeset
   285
   
831068540b07 201019_1
hgs
parents:
diff changeset
   286
    myDebug() << "<<< UsbUiSettingModel::personalitySetCompleted";      
831068540b07 201019_1
hgs
parents:
diff changeset
   287
}
831068540b07 201019_1
hgs
parents:
diff changeset
   288
831068540b07 201019_1
hgs
parents:
diff changeset
   289
bool UsbUiSettingModel::isPersonalityHidden(RUsb &usbman, TInt personalityId)
831068540b07 201019_1
hgs
parents:
diff changeset
   290
{
831068540b07 201019_1
hgs
parents:
diff changeset
   291
    myDebug() << ">>> UsbUiSettingModel::isPersonalityHidden from USB Manager";
831068540b07 201019_1
hgs
parents:
diff changeset
   292
    bool hidden = false;
831068540b07 201019_1
hgs
parents:
diff changeset
   293
    TUint32 property = 0;
831068540b07 201019_1
hgs
parents:
diff changeset
   294
    TInt ret = usbman.GetPersonalityProperty(personalityId, property);
831068540b07 201019_1
hgs
parents:
diff changeset
   295
    if (ret == KErrNone) {
831068540b07 201019_1
hgs
parents:
diff changeset
   296
        myDebug() << "property " << property;
831068540b07 201019_1
hgs
parents:
diff changeset
   297
        if (property & KUsbPersonalityPropertyHidden) {
831068540b07 201019_1
hgs
parents:
diff changeset
   298
            hidden = true;
831068540b07 201019_1
hgs
parents:
diff changeset
   299
        }
831068540b07 201019_1
hgs
parents:
diff changeset
   300
    } 
831068540b07 201019_1
hgs
parents:
diff changeset
   301
    myDebug() << "<<< UsbUiSettingModel::isPersonalityHidden " << hidden;
831068540b07 201019_1
hgs
parents:
diff changeset
   302
    return hidden;
831068540b07 201019_1
hgs
parents:
diff changeset
   303
}
831068540b07 201019_1
hgs
parents:
diff changeset
   304
831068540b07 201019_1
hgs
parents:
diff changeset
   305
QString UsbUiSettingModel::getFriendlyName(RUsb &usbman, TInt personalityId)
831068540b07 201019_1
hgs
parents:
diff changeset
   306
{
831068540b07 201019_1
hgs
parents:
diff changeset
   307
    myDebug() << ">>> UsbUiSettingModel::getFriendlyName";
831068540b07 201019_1
hgs
parents:
diff changeset
   308
    QString friendlyName;
831068540b07 201019_1
hgs
parents:
diff changeset
   309
    HBufC* description = NULL;
831068540b07 201019_1
hgs
parents:
diff changeset
   310
    TInt err = usbman.GetDescription(personalityId, description);
831068540b07 201019_1
hgs
parents:
diff changeset
   311
    if (err == KErrNone) {
831068540b07 201019_1
hgs
parents:
diff changeset
   312
        friendlyName = QString::fromUtf16(description->Ptr(), description->Length());
831068540b07 201019_1
hgs
parents:
diff changeset
   313
        friendlyName.replace( QChar(' '), QChar('_') );
831068540b07 201019_1
hgs
parents:
diff changeset
   314
        delete description;
831068540b07 201019_1
hgs
parents:
diff changeset
   315
    } else {
831068540b07 201019_1
hgs
parents:
diff changeset
   316
        myDebug() << "    UsbUiSettingModel::getFriendlyName RUsb error "
831068540b07 201019_1
hgs
parents:
diff changeset
   317
            << err;    
831068540b07 201019_1
hgs
parents:
diff changeset
   318
    }
831068540b07 201019_1
hgs
parents:
diff changeset
   319
    myDebug() << "    UsbUiSettingModel::getFriendlyName friendlyName=" << friendlyName;
831068540b07 201019_1
hgs
parents:
diff changeset
   320
    myDebug() << "<<< UsbUiSettingModel::getFriendlyName";
831068540b07 201019_1
hgs
parents:
diff changeset
   321
    return friendlyName;
831068540b07 201019_1
hgs
parents:
diff changeset
   322
}