controlpanelui/src/tonefetcher/src/tonefetcherwidget.cpp
branchRCL_3
changeset 13 90fe62538f66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/controlpanelui/src/tonefetcher/src/tonefetcherwidget.cpp	Tue Aug 31 15:15:28 2010 +0300
@@ -0,0 +1,240 @@
+/*
+ * 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 source file for tone fetcher widget.
+ *     
+ */
+#include "tonefetcherwidget.h"
+#include "hbabstractviewitem.h"
+#include "hbstyle.h"
+#include "hbabstractitemview.h"
+#include <hblistview.h>
+#include <hbmenu.h>
+#include <hbaction.h>
+#include <QModelIndex>
+#include <QGraphicsLinearLayout>
+#include <QDirModel>
+#include <QTime>
+#include <QFileInfo>
+#include <QString>
+#include <QStandardItemModel>
+#include <XQUtils>
+#include <hblabel.h>
+#include "tonefetcherview.h"
+#include "tonefetchermodel.h"
+#include <hbmessagebox.h>
+#include <hbprogressdialog.h>
+
+ToneFetcherWidget::ToneFetcherWidget(HbWidget *parent, ToneFetcherView *serviceView)
+    : HbWidget(parent),
+      mLabel(0),
+      mListView(0),
+      mLayout(0),
+      mToneModel(0),
+      mServiceView(serviceView),         
+      mServiceEngine(0),
+      mWaitNote(0)
+      
+{    
+    init();
+    connect(mServiceEngine, SIGNAL(mdeSessionOpened()), 
+            this, SLOT(mdeSessionOpened()));
+    connect(mServiceEngine, SIGNAL(mdeSessionError(int)),
+            this, SLOT(mdeSessionError(int)));
+    connect(mServiceEngine, SIGNAL(queryComplete(QStringList)), 
+            this, SLOT(queryComplete(QStringList)));
+    connect(mServiceEngine, SIGNAL(queryError(int)), 
+            this, SLOT(queryError(int)));
+    connect(mServiceEngine, 
+           SIGNAL(notifyPreviewEvent(int)), 
+           this, SLOT(previewEvent(int)));
+    connect( mServiceEngine, SIGNAL(notifyObjectChanged()),
+            this, SLOT(onObjectChanged()));
+}
+
+ToneFetcherWidget::~ToneFetcherWidget()
+{
+    delete mToneModel;
+    mToneModel = 0;
+    delete mWaitNote;
+    mWaitNote = 0;
+}
+
+void ToneFetcherWidget::on_list_activated(const QModelIndex &index)
+{  
+    //stop previewing when clicking another item.
+    if (mServiceEngine->isPlaying()) {
+        mServiceEngine->stopPlaying();
+    }
+    /*
+     * when one item is selected, reselecting it will deselect it. selecting another 
+     * will also deselect it, while the other is selected.
+     */
+    QItemSelectionModel *selectionModel = mListView->selectionModel();        
+    if (mOldSeletedItem == index) {
+        selectionModel->select(index,QItemSelectionModel::Toggle);
+    }
+    
+    QModelIndexList modelIndexList = selectionModel->selectedIndexes();
+    if (modelIndexList.isEmpty()) {
+        mOldSeletedItem = QModelIndex();
+    }
+    else {
+        mOldSeletedItem = modelIndexList.front();
+    }
+    emit triggerToolBar(selectionModel->hasSelection());
+
+    
+}
+
+void ToneFetcherWidget::init()
+{
+    mLayout = new QGraphicsLinearLayout(this);
+    mLayout->setOrientation(Qt::Vertical);
+    setLayout(mLayout);
+
+    mLabel = new HbLabel(this);
+    mLabel->setPlainText(hbTrId("Select tone"));
+    mLayout->addItem(mLabel);
+    
+    mListView = new HbListView(this);
+    mListView->setObjectName("list");
+    mLayout->addItem(mListView);
+    mListView->setSelectionMode(HbAbstractItemView::SingleSelection);
+     
+    mServiceEngine = new ToneFetcherEngine(this);     
+    mToneModel = new ToneFetcherModel(this);    
+    
+    initRomSoundList();    
+    
+    connect(mListView, SIGNAL(activated(QModelIndex)),
+        this, SLOT(on_list_activated(QModelIndex )));
+    if( !mWaitNote ){
+        mWaitNote = new HbProgressDialog( HbProgressDialog::WaitDialog );
+        mWaitNote->setText( hbTrId( "Refreshing..." ) );
+        QAction *action = mWaitNote->actions().at(0);//disable Cancel buttion.
+        action->setEnabled(false);
+    }
+}
+
+void ToneFetcherWidget::mdeSessionOpened()
+{
+    mServiceEngine->getTones();
+}
+
+void ToneFetcherWidget::queryComplete(const QStringList &uriList)
+{
+    addFilesFromMDE(uriList);
+    addFilesFromRom();
+    mToneModel->sort();
+    mToneModel->layoutHasChanged();
+    if (!mListView->model()) {    
+        mListView->setModel(mToneModel);
+    }
+    refreshFinish();
+}
+
+void ToneFetcherWidget::queryError(int error)
+{
+    Q_UNUSED(error);
+        
+}
+
+void ToneFetcherWidget::mdeSessionError(int error)
+{
+    Q_UNUSED(error);
+}
+
+QString ToneFetcherWidget::getCurrentItemPath() 
+{
+    QModelIndexList modelIndexList = mListView->selectionModel()->selectedIndexes();
+    if (modelIndexList.count() > 0) {
+        QModelIndex index = modelIndexList.front();
+        QString path = mToneModel->getPath(index);
+        return path;
+    }
+    return QString();
+}
+
+void ToneFetcherWidget::playOrPause() 
+{
+    if(mServiceEngine->isPlaying()) {
+        mServiceEngine->stopPlaying();
+    } else {    
+        mServiceEngine->play(getCurrentItemPath());
+    }
+    
+}
+
+void ToneFetcherWidget::previewEvent(int event) 
+{
+    if (event == 0) {
+        //preview successful, reserved
+    } else {
+        HbMessageBox::information(QString(hbTrId("Preview Error")));
+    }
+}
+
+void ToneFetcherWidget::onObjectChanged()
+{
+    refreshStart();
+    if (mServiceEngine->isPlaying()) {
+        mServiceEngine->stopPlaying();      
+    }
+    mToneModel->layoutToBeChanged();
+    emit triggerToolBar(false);    
+    mToneModel->removeRows(0, mToneModel->rowCount());           
+    mServiceEngine->getTones();    
+}
+
+void ToneFetcherWidget::addFilesFromRom() 
+{     
+    int currentCount = mToneModel->rowCount();
+    mToneModel->insertRows(currentCount, mRomSoundList.size());
+    for (int i = 0; i < mRomSoundList.size(); ++i) {
+        mToneModel->setData(mToneModel->index(i + currentCount), 
+            QFileInfo(mRomSoundList.at(i)).absoluteFilePath());
+    }  
+}
+
+void ToneFetcherWidget::addFilesFromMDE(const QStringList &uriList)
+{
+    int currentCount = mToneModel->rowCount();
+    mToneModel->insertRows(currentCount, uriList.size());
+    for (int i = 0; i < uriList.size(); ++i) {
+        mToneModel->setData(mToneModel->index(i + currentCount), QFileInfo(uriList.at(i)).absoluteFilePath());
+    }   
+}
+
+void ToneFetcherWidget::refreshFinish()
+{
+    if (mWaitNote) {
+        mWaitNote->close();
+    }
+}
+
+void ToneFetcherWidget::refreshStart()
+{
+    if (mWaitNote) {
+        mWaitNote->open();
+    }
+}
+
+void ToneFetcherWidget::initRomSoundList()
+{
+    QDir digitalSoundPath(XQUtils::romRootPath() + XQUtils::digitalSoundsPath());
+    QDir simpleSoundPath(XQUtils::romRootPath() + XQUtils::simpleSoundsPath());
+    mRomSoundList = digitalSoundPath.entryInfoList() + simpleSoundPath.entryInfoList();
+}
+//End of File