messagingapp/msgui/msgaudiofetcher/src/msgaudiofetcherdialog.cpp
author hgs
Tue, 31 Aug 2010 18:53:38 +0530
changeset 56 f42d9a78f435
permissions -rw-r--r--
201033_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
f42d9a78f435 201033_02
hgs
parents:
diff changeset
     1
/*
f42d9a78f435 201033_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
f42d9a78f435 201033_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
f42d9a78f435 201033_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
f42d9a78f435 201033_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
f42d9a78f435 201033_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
f42d9a78f435 201033_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
f42d9a78f435 201033_02
hgs
parents:
diff changeset
     8
 *
f42d9a78f435 201033_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    11
 *
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    12
 * Contributors:
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    13
 *
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    14
 * Description:
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    15
 *     The source file for messaging's audio fetcher dialog.
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    16
 *
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    17
 */
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    18
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    19
// SYSTEM INCLUDES
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    20
#include <hbaction.h>
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    21
#include <HbStyleLoader>
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    22
#include <HbTextItem>
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    23
#include <HbColorScheme>
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    24
#include <HbListView>
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    25
#include <QModelIndex>
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    26
#include <QStandardItemModel>
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    27
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    28
// USER INCLUDES
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    29
#include "msgaudiofetcherdialog.h"
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    30
#include "msgaudiofetchermodel.h"
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    31
#include "msgaudiopreview.h"
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    32
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    33
#define LOC_SELECT_SELECT hbTrId("txt_common_button_select")
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    34
#define LOC_SELECT_CANCEL hbTrId("txt_common_button_cancel")
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    35
#define LOC_SELECT_SOUND  hbTrId("txt_messaging_title_select_a_sound")
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    36
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    37
const QString LIST_ITEM_TITLE("qtc_list_item_title_normal");
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    38
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    39
MsgAudioFetcherDialog::MsgAudioFetcherDialog(QGraphicsItem *parent) :
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    40
	HbDialog(parent),
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    41
	mListView(NULL),
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    42
	mFetcherModel(NULL),
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    43
	mAudioPreview(NULL),
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    44
	mSelected(false)
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    45
{
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    46
    setDismissPolicy(HbDialog::NoDismiss);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    47
    setFrameType(HbDialog::Strong);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    48
    setModal(true);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    49
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    50
    initActions();
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    51
    initMainWidget();  
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    52
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    53
    connect(
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    54
            this, 
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    55
            SIGNAL(aboutToClose()), 
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    56
            this, 
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    57
            SLOT(reset()));
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    58
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    59
    //TODO: Goal was to put in viewReady, but connect is
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    60
    //not working since it only works for views not dialogs
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    61
    doDelayedConstruction();
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    62
}
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    63
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    64
MsgAudioFetcherDialog::~MsgAudioFetcherDialog()
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    65
{
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    66
    //do nothing
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    67
}
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    68
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    69
void MsgAudioFetcherDialog::initMainWidget()
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    70
{
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    71
	//set heading
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    72
	HbTextItem* heading = new HbTextItem(
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    73
	        LOC_SELECT_SOUND, 
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    74
	        this);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    75
	QColor color = HbColorScheme::color( LIST_ITEM_TITLE );
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    76
	heading->setTextColor( color );
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    77
	heading->setAlignment(Qt::AlignLeft);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    78
	setHeadingWidget(heading);	
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    79
}
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    80
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    81
void MsgAudioFetcherDialog::initActions()
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    82
{
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    83
    mLeftAction = new HbAction(this);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    84
    mLeftAction->setText(LOC_SELECT_SELECT);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    85
    addAction(mLeftAction);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    86
    mLeftAction->setEnabled(false);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    87
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    88
    HbAction* rightAction = new HbAction(this);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    89
    rightAction->setText(LOC_SELECT_CANCEL);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    90
    rightAction->setEnabled(true);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    91
    addAction(rightAction);    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    92
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    93
    connect(mLeftAction,
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    94
                SIGNAL(triggered()),
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    95
                this,
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    96
                SLOT(onSelectAction()));
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    97
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    98
    connect(rightAction,
f42d9a78f435 201033_02
hgs
parents:
diff changeset
    99
                SIGNAL(triggered()),
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   100
                this,
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   101
                SLOT(onCancelAction()));    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   102
}
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   103
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   104
QString MsgAudioFetcherDialog::getCurrentItemPath()
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   105
{
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   106
    if (mSeletedItem.isValid())
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   107
    {
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   108
        QString temppath = 
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   109
                    mFetcherModel->data(
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   110
                            mSeletedItem, 
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   111
                            Qt::UserRole).toString();
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   112
        //return the path
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   113
        return QDir::toNativeSeparators(temppath);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   114
    }
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   115
    return QString();
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   116
}
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   117
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   118
void MsgAudioFetcherDialog::doDelayedConstruction()
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   119
{
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   120
    //set the content list
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   121
    mListView = new HbListView(this);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   122
    Q_ASSERT(mListView);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   123
    mListView->setSelectionMode(
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   124
            HbAbstractItemView::SingleSelection);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   125
    mFetcherModel = new MsgAudioFetcherModel(this);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   126
    mListView->setModel(mFetcherModel);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   127
    mListView->setUniformItemSizes(true);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   128
    setContentWidget(mListView);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   129
    connect(mListView, SIGNAL(activated(QModelIndex)),
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   130
            this, SLOT(on_list_activated(QModelIndex)));
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   131
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   132
    //initializes the audio preview
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   133
    mAudioPreview = new MsgAudioPreview(this);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   134
}
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   135
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   136
void MsgAudioFetcherDialog::onSelectAction()
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   137
{
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   138
	//stop the playing file
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   139
    if (mAudioPreview->IsPlaying()) {
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   140
            mAudioPreview->Stop();        
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   141
        }
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   142
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   143
    //emit the selected sound file
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   144
    QString filePath = getCurrentItemPath();
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   145
    emit audioSelected(filePath);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   146
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   147
    //close the dialog
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   148
    close();
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   149
}
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   150
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   151
void MsgAudioFetcherDialog::onCancelAction()
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   152
{    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   153
    //stop the playing file and return
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   154
    if (mAudioPreview->IsPlaying()) {
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   155
                mAudioPreview->Stop();        
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   156
            }
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   157
    close();
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   158
    return;
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   159
}
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   160
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   161
void MsgAudioFetcherDialog::reset()
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   162
{
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   163
    mSelected = false;
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   164
    mLeftAction->setEnabled(false);
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   165
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   166
    //list scroll to top
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   167
    mListView->scrollTo(
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   168
            mListView->model(
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   169
                    )->index(0,0));
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   170
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   171
    //deselect the selected item
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   172
    mListView->selectionModel(
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   173
            )->select(
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   174
                    mSeletedItem, 
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   175
                    QItemSelectionModel::Deselect);    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   176
}
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   177
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   178
void MsgAudioFetcherDialog::on_list_activated(
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   179
        const QModelIndex &index)
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   180
{
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   181
    //stop previewing when clicking another item.
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   182
    if (mAudioPreview->IsPlaying()) {
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   183
        mAudioPreview->SetAttr(getCurrentItemPath());
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   184
        mAudioPreview->Play();        
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   185
    }
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   186
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   187
    //enable the action select
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   188
    if(!mSelected)
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   189
    {
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   190
        mLeftAction->setEnabled(true);        
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   191
        mSelected = true;
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   192
    }     
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   193
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   194
    //save the latest selected
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   195
    mSeletedItem = index;
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   196
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   197
    //start play the item
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   198
    mAudioPreview->SetAttr(getCurrentItemPath());
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   199
    mAudioPreview->Play();
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   200
    
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   201
    return;
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   202
}
f42d9a78f435 201033_02
hgs
parents:
diff changeset
   203
//End of File