controlpanelui/src/tonefetcher/src/tonefetcherwidget.cpp
author hgs
Thu, 10 Jun 2010 16:07:41 +0800
changeset 21 2883a5458389
parent 19 36aa4756ee82
child 22 a5692c68d772
permissions -rw-r--r--
201023
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * Initial Contributors:
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
 * 
hgs
parents:
diff changeset
    12
 * Contributors:
hgs
parents:
diff changeset
    13
 * 
hgs
parents:
diff changeset
    14
 * Description:
hgs
parents:
diff changeset
    15
 *     The source file for tone fetcher widget.
hgs
parents:
diff changeset
    16
 *     
hgs
parents:
diff changeset
    17
 */
hgs
parents:
diff changeset
    18
#include "tonefetcherwidget.h"
hgs
parents:
diff changeset
    19
#include "hbabstractviewitem.h"
hgs
parents:
diff changeset
    20
#include "hbstyle.h"
hgs
parents:
diff changeset
    21
#include "hbabstractitemview.h"
hgs
parents:
diff changeset
    22
#include <hblistview.h>
hgs
parents:
diff changeset
    23
#include <hbmenu.h>
hgs
parents:
diff changeset
    24
#include <hbaction.h>
hgs
parents:
diff changeset
    25
#include <QModelIndex>
hgs
parents:
diff changeset
    26
#include <QGraphicsLinearLayout>
hgs
parents:
diff changeset
    27
#include <QDirModel>
hgs
parents:
diff changeset
    28
#include <QTime>
hgs
parents:
diff changeset
    29
#include <QFileInfo>
hgs
parents:
diff changeset
    30
#include <QString>
hgs
parents:
diff changeset
    31
#include <QStandardItemModel>
hgs
parents:
diff changeset
    32
#include <XQUtils>
hgs
parents:
diff changeset
    33
#include <hblabel.h>
hgs
parents:
diff changeset
    34
#include "tonefetcherview.h"
hgs
parents:
diff changeset
    35
#include "tonefetchermodel.h"
hgs
parents:
diff changeset
    36
#include <hbmessagebox.h>
21
hgs
parents: 19
diff changeset
    37
#include <hbprogressdialog.h>
19
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
ToneFetcherWidget::ToneFetcherWidget( ToneFetcherView *serviceView  ) 
hgs
parents:
diff changeset
    40
    : HbWidget(this),
hgs
parents:
diff changeset
    41
      mLabel(0),
hgs
parents:
diff changeset
    42
      mListView(0),
hgs
parents:
diff changeset
    43
      mLayout(0),
hgs
parents:
diff changeset
    44
      mToneModel(0),
hgs
parents:
diff changeset
    45
      mServiceView(serviceView),         
21
hgs
parents: 19
diff changeset
    46
      mServiceEngine(0),
hgs
parents: 19
diff changeset
    47
      mWaitNote(0)
19
hgs
parents:
diff changeset
    48
      
hgs
parents:
diff changeset
    49
{
hgs
parents:
diff changeset
    50
    mSelected = false;
hgs
parents:
diff changeset
    51
    init();
hgs
parents:
diff changeset
    52
    connect(mServiceEngine, SIGNAL(mdeSessionOpened()), 
hgs
parents:
diff changeset
    53
            this, SLOT(mdeSessionOpened()));
hgs
parents:
diff changeset
    54
    connect(mServiceEngine, SIGNAL(mdeSessionError(int)),
hgs
parents:
diff changeset
    55
            this, SLOT(mdeSessionError(int)));
hgs
parents:
diff changeset
    56
    connect(mServiceEngine, SIGNAL(queryComplete(QStringList, QStringList)), 
hgs
parents:
diff changeset
    57
            this, SLOT(queryComplete(QStringList, QStringList)));
hgs
parents:
diff changeset
    58
    connect(mServiceEngine, SIGNAL(queryError(int)), 
hgs
parents:
diff changeset
    59
            this, SLOT(queryError(int)));
hgs
parents:
diff changeset
    60
    connect(mServiceEngine, 
hgs
parents:
diff changeset
    61
           SIGNAL(notifyPreviewEvent(ToneServiceEngine::TPreviewEvent, int)), 
hgs
parents:
diff changeset
    62
           this, SLOT(previewEvent(ToneServiceEngine::TPreviewEvent, int)));
hgs
parents:
diff changeset
    63
    connect( mServiceEngine, SIGNAL(notifyObjectChanged()),
hgs
parents:
diff changeset
    64
            this, SLOT(onObjectChanged()));
21
hgs
parents: 19
diff changeset
    65
    connect( mServiceEngine, SIGNAL(notifyRefreshStart()),
hgs
parents: 19
diff changeset
    66
                this, SLOT(refreshStart()));
hgs
parents: 19
diff changeset
    67
    connect( mServiceEngine, SIGNAL(notifyRefreshFinish()),
hgs
parents: 19
diff changeset
    68
                this, SLOT(refreshFinish()));
19
hgs
parents:
diff changeset
    69
}
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
ToneFetcherWidget::~ToneFetcherWidget()
hgs
parents:
diff changeset
    72
{
21
hgs
parents: 19
diff changeset
    73
    delete mToneModel;
hgs
parents: 19
diff changeset
    74
    mToneModel = 0;
hgs
parents: 19
diff changeset
    75
    delete mWaitNote;
hgs
parents: 19
diff changeset
    76
    mWaitNote = 0;
19
hgs
parents:
diff changeset
    77
}
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
void ToneFetcherWidget::on_list_activated(const QModelIndex &index)
hgs
parents:
diff changeset
    80
{  
hgs
parents:
diff changeset
    81
    QModelIndexList modelIndexList = mListView->selectionModel()->selectedIndexes();
hgs
parents:
diff changeset
    82
    
hgs
parents:
diff changeset
    83
    //stop previewing when clicking another item.
hgs
parents:
diff changeset
    84
    if (mServiceEngine->IsPlaying()) {
21
hgs
parents: 19
diff changeset
    85
        mServiceEngine->stop();
19
hgs
parents:
diff changeset
    86
    }
hgs
parents:
diff changeset
    87
    /*
hgs
parents:
diff changeset
    88
     * when one item is selected, reselecting it will deselect it. selecting another 
hgs
parents:
diff changeset
    89
     * will also deselect it, while the other is selected.
hgs
parents:
diff changeset
    90
     */
hgs
parents:
diff changeset
    91
    if (mSelected){
hgs
parents:
diff changeset
    92
        if(mOldSeletedItem != index) {
hgs
parents:
diff changeset
    93
            mListView->selectionModel()->select(index, QItemSelectionModel::Select);
hgs
parents:
diff changeset
    94
            mOldSeletedItem = index;
hgs
parents:
diff changeset
    95
            emit triggerToolBar(true);
hgs
parents:
diff changeset
    96
        } else {
hgs
parents:
diff changeset
    97
            mListView->selectionModel()->select(index, QItemSelectionModel::Deselect);
hgs
parents:
diff changeset
    98
            mSelected = false;
hgs
parents:
diff changeset
    99
            emit triggerToolBar(false);
hgs
parents:
diff changeset
   100
        }        
hgs
parents:
diff changeset
   101
        return;
hgs
parents:
diff changeset
   102
    }
hgs
parents:
diff changeset
   103
    if (modelIndexList.count() > 0) {
hgs
parents:
diff changeset
   104
        for (QModelIndexList::const_iterator it = modelIndexList.begin(); it != modelIndexList.end(); ++it) {
hgs
parents:
diff changeset
   105
            if ((*it) == index) {
hgs
parents:
diff changeset
   106
                mSelected = true;
hgs
parents:
diff changeset
   107
                mOldSeletedItem = index;
hgs
parents:
diff changeset
   108
                emit triggerToolBar(true);
hgs
parents:
diff changeset
   109
            }            
hgs
parents:
diff changeset
   110
        }
hgs
parents:
diff changeset
   111
        
hgs
parents:
diff changeset
   112
    }   
hgs
parents:
diff changeset
   113
    
hgs
parents:
diff changeset
   114
}
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
void ToneFetcherWidget::init()
hgs
parents:
diff changeset
   117
{
hgs
parents:
diff changeset
   118
    mLayout = new QGraphicsLinearLayout(this);
hgs
parents:
diff changeset
   119
    mLayout->setOrientation(Qt::Vertical);
hgs
parents:
diff changeset
   120
    setLayout(mLayout);
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
    mLabel = new HbLabel(this);
hgs
parents:
diff changeset
   123
    mLabel->setPlainText(hbTrId("Select tone"));
hgs
parents:
diff changeset
   124
    mLayout->addItem(mLabel);
hgs
parents:
diff changeset
   125
    
hgs
parents:
diff changeset
   126
    mListView = new HbListView(this);
hgs
parents:
diff changeset
   127
    mListView->setObjectName("list");
hgs
parents:
diff changeset
   128
    mLayout->addItem(mListView);
hgs
parents:
diff changeset
   129
    mListView->setSelectionMode(HbAbstractItemView::SingleSelection);
hgs
parents:
diff changeset
   130
     
hgs
parents:
diff changeset
   131
    mServiceEngine = new ToneFetcherEngine(this);     
hgs
parents:
diff changeset
   132
    mToneModel = new ToneFetcherModel(this);
hgs
parents:
diff changeset
   133
    addRomFiles();
hgs
parents:
diff changeset
   134
    
hgs
parents:
diff changeset
   135
    connect(mListView, SIGNAL(activated(QModelIndex)),
hgs
parents:
diff changeset
   136
        this, SLOT(on_list_activated(QModelIndex )));
21
hgs
parents: 19
diff changeset
   137
    if( !mWaitNote ){
hgs
parents: 19
diff changeset
   138
        mWaitNote = new HbProgressDialog( HbProgressDialog::WaitDialog );
hgs
parents: 19
diff changeset
   139
        mWaitNote->setText( hbTrId( "Refreshing..." ) );
hgs
parents: 19
diff changeset
   140
        QAction *action = mWaitNote->actions().at(0);//disable Cancel buttion.
hgs
parents: 19
diff changeset
   141
        action->setEnabled(false);
hgs
parents: 19
diff changeset
   142
    }
19
hgs
parents:
diff changeset
   143
}
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
void ToneFetcherWidget::mdeSessionOpened()
hgs
parents:
diff changeset
   146
{
hgs
parents:
diff changeset
   147
    mServiceEngine->getTone();
hgs
parents:
diff changeset
   148
}
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
void ToneFetcherWidget::queryComplete(const QStringList &nameList, const QStringList &uriList)
hgs
parents:
diff changeset
   151
{
hgs
parents:
diff changeset
   152
    QStandardItem *fileName = 0;
hgs
parents:
diff changeset
   153
    QStandardItem *filePath = 0; 
hgs
parents:
diff changeset
   154
    for (int i = 0; i < nameList.size(); ++i) { 
hgs
parents:
diff changeset
   155
        QString tr1 = nameList.at(i);
hgs
parents:
diff changeset
   156
        tr1 = uriList.at(i);
hgs
parents:
diff changeset
   157
        fileName = new QStandardItem(nameList.at(i));
hgs
parents:
diff changeset
   158
        filePath = new QStandardItem(uriList.at(i));
hgs
parents:
diff changeset
   159
        mToneModel->insertInOrder(fileName, filePath);       
hgs
parents:
diff changeset
   160
    }   
hgs
parents:
diff changeset
   161
    mLabel->setPlainText(QString::number(mSimpleSoundList.size() + mDigitalSoundList.size() + nameList.size()) + " tones");
hgs
parents:
diff changeset
   162
    mListView->setModel(mToneModel);
hgs
parents:
diff changeset
   163
    mToneModel->refresh();
hgs
parents:
diff changeset
   164
}
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
void ToneFetcherWidget::queryError(int error)
hgs
parents:
diff changeset
   167
{
hgs
parents:
diff changeset
   168
    Q_UNUSED(error);
hgs
parents:
diff changeset
   169
        
hgs
parents:
diff changeset
   170
}
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
void ToneFetcherWidget::mdeSessionError(int error)
hgs
parents:
diff changeset
   173
{
hgs
parents:
diff changeset
   174
    Q_UNUSED(error);
hgs
parents:
diff changeset
   175
}
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
QString ToneFetcherWidget::getCurrentItemPath() 
hgs
parents:
diff changeset
   178
{
hgs
parents:
diff changeset
   179
    QModelIndexList modelIndexList = mListView->selectionModel()->selectedIndexes();
hgs
parents:
diff changeset
   180
    if (modelIndexList.count() > 0) {
hgs
parents:
diff changeset
   181
        QModelIndex index = modelIndexList.at(0);
hgs
parents:
diff changeset
   182
        return mToneModel->data(index, Qt::UserRole).toString();
hgs
parents:
diff changeset
   183
    }
hgs
parents:
diff changeset
   184
    return QString();
hgs
parents:
diff changeset
   185
}
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
void ToneFetcherWidget::playOrPause() 
hgs
parents:
diff changeset
   188
{
21
hgs
parents: 19
diff changeset
   189
    if(mServiceEngine->IsPlaying()) {
hgs
parents: 19
diff changeset
   190
        mServiceEngine->stop();
hgs
parents: 19
diff changeset
   191
    } else {    
19
hgs
parents:
diff changeset
   192
    mServiceEngine->preview(getCurrentItemPath());
21
hgs
parents: 19
diff changeset
   193
    }
hgs
parents: 19
diff changeset
   194
    
19
hgs
parents:
diff changeset
   195
}
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
void ToneFetcherWidget::previewEvent(ToneFetcherEngine::TPreviewEvent event, int errorId) 
hgs
parents:
diff changeset
   198
{
hgs
parents:
diff changeset
   199
    Q_UNUSED(errorId);
hgs
parents:
diff changeset
   200
    if (event == ToneFetcherEngine::EAudioPreviewComplete) {
hgs
parents:
diff changeset
   201
        //reserved
hgs
parents:
diff changeset
   202
    } else {
hgs
parents:
diff changeset
   203
        HbMessageBox::information(QString(hbTrId("Preview Error")));
hgs
parents:
diff changeset
   204
    }
hgs
parents:
diff changeset
   205
}
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
void ToneFetcherWidget::onObjectChanged()
hgs
parents:
diff changeset
   208
{
21
hgs
parents: 19
diff changeset
   209
    if (mServiceEngine->IsPlaying()) {
hgs
parents: 19
diff changeset
   210
        mServiceEngine->stop();      
hgs
parents: 19
diff changeset
   211
    }
hgs
parents: 19
diff changeset
   212
    emit triggerToolBar(false);
hgs
parents: 19
diff changeset
   213
    mToneModel->toBeFreshed();
19
hgs
parents:
diff changeset
   214
    mToneModel->clearAll();
hgs
parents:
diff changeset
   215
    mDigitalSoundList.clear();
hgs
parents:
diff changeset
   216
    mSimpleSoundList.clear();
hgs
parents:
diff changeset
   217
    addRomFiles();
hgs
parents:
diff changeset
   218
    mServiceEngine->getTone();    
hgs
parents:
diff changeset
   219
}
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
void ToneFetcherWidget::addRomFiles() 
hgs
parents:
diff changeset
   222
{
hgs
parents:
diff changeset
   223
    QStandardItem *fileName = 0;
hgs
parents:
diff changeset
   224
    QStandardItem *filePath = 0;
hgs
parents:
diff changeset
   225
    QDir digitalSoundPath(XQUtils::romRootPath() + XQUtils::digitalSoundsPath());
hgs
parents:
diff changeset
   226
    mDigitalSoundList = digitalSoundPath.entryInfoList();  
hgs
parents:
diff changeset
   227
           
hgs
parents:
diff changeset
   228
    QDir simpleSoundPath(XQUtils::romRootPath() + XQUtils::simpleSoundsPath());
hgs
parents:
diff changeset
   229
    mSimpleSoundList = simpleSoundPath.entryInfoList();
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
    for (int i = 0; i < mDigitalSoundList.size(); ++i) {
hgs
parents:
diff changeset
   232
        QFileInfo fileInfo = mDigitalSoundList.at(i);        
hgs
parents:
diff changeset
   233
        fileName = new QStandardItem(fileInfo.fileName());
hgs
parents:
diff changeset
   234
        filePath = new QStandardItem(fileInfo.absoluteFilePath());
hgs
parents:
diff changeset
   235
        mToneModel->insertInOrder(fileName, filePath);
hgs
parents:
diff changeset
   236
    }
hgs
parents:
diff changeset
   237
      
hgs
parents:
diff changeset
   238
    for (int i = 0; i < mSimpleSoundList.size(); ++i) {
hgs
parents:
diff changeset
   239
        QFileInfo fileInfo = mSimpleSoundList.at(i);       
hgs
parents:
diff changeset
   240
        fileName = new QStandardItem(fileInfo.fileName());
hgs
parents:
diff changeset
   241
        filePath = new QStandardItem(fileInfo.absoluteFilePath());
hgs
parents:
diff changeset
   242
        mToneModel->insertInOrder(fileName, filePath);  
hgs
parents:
diff changeset
   243
    }
hgs
parents:
diff changeset
   244
}
21
hgs
parents: 19
diff changeset
   245
hgs
parents: 19
diff changeset
   246
void ToneFetcherWidget::refreshFinish()
hgs
parents: 19
diff changeset
   247
{
hgs
parents: 19
diff changeset
   248
    if (mWaitNote) {
hgs
parents: 19
diff changeset
   249
        mWaitNote->close();
hgs
parents: 19
diff changeset
   250
    }
hgs
parents: 19
diff changeset
   251
}
hgs
parents: 19
diff changeset
   252
hgs
parents: 19
diff changeset
   253
void ToneFetcherWidget::refreshStart()
hgs
parents: 19
diff changeset
   254
{
hgs
parents: 19
diff changeset
   255
    if (mWaitNote) {
hgs
parents: 19
diff changeset
   256
        mWaitNote->open();
hgs
parents: 19
diff changeset
   257
    }
hgs
parents: 19
diff changeset
   258
}
19
hgs
parents:
diff changeset
   259
//End of File