mpviewplugins/mpplaybackviewplugin/src/mpplaybackwidget.cpp
branchRCL_3
changeset 25 14979e23cb5e
equal deleted inserted replaced
24:26a1709b9fec 25:14979e23cb5e
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: Playback widget for Music Player playback view.
       
    15 *
       
    16 */
       
    17 
       
    18 #include <QTime>
       
    19 
       
    20 #include <hbprogressslider.h>
       
    21 #include <hbinstance.h>
       
    22 #include <hblabel.h>
       
    23 #include <hbfontspec.h>
       
    24 #include <hbstackedlayout.h>
       
    25 
       
    26 #include "mpplaybackwidget.h"
       
    27 #include "mpplaybackdata.h"
       
    28 #include "mpalbumcoverwidget.h"
       
    29 #include "mpplaybackdocumentloader.h"
       
    30 #include "mptrace.h"
       
    31 
       
    32 const unsigned int KMicroSecToMiliSec( 1000 );
       
    33 
       
    34 /*!
       
    35     \class MpPlaybackWidget
       
    36     \brief Music Player playback widget.
       
    37 
       
    38     This widget displays playback information on the playback view.
       
    39 */
       
    40 
       
    41 /*!
       
    42     \fn void setPlaybackPosition(int value)
       
    43 
       
    44     This signal is emitted when the user drags the progressbar to a new
       
    45     position, \a value indicates the position.
       
    46  */
       
    47 
       
    48 /*!
       
    49  Constructs the collection view plugin.
       
    50  */
       
    51 MpPlaybackWidget::MpPlaybackWidget(MpPlaybackData *data, QGraphicsItem *parent )
       
    52     : HbWidget(parent),
       
    53       mPlaybackData(data),
       
    54       mDocumentLoader(0),
       
    55       mProgreesBarDragging(false),
       
    56       mDuration(0)
       
    57 {
       
    58     TX_ENTRY
       
    59     mLayout = new HbStackedLayout(this);
       
    60     mLayout->setContentsMargins( 0.0, 0.0, 0.0, 0.0 );
       
    61     mLayout->setMinimumSize( 0.0, 0.0 );
       
    62     setLayout( mLayout );
       
    63     bool widgetsOk = false;
       
    64     mDocumentLoader = new MpPlaybackDocumentLoader();
       
    65     HbMainWindow *mainWindow = hbInstance->allMainWindows()[0];
       
    66 
       
    67     if ( mDocumentLoader ) {
       
    68         mDocumentLoader->load( QString(":/playbackviewdocml/playbackwidget.docml"), &widgetsOk);
       
    69     }
       
    70     if ( widgetsOk ) {
       
    71         QGraphicsWidget *tmpWidgetPtr;
       
    72         tmpWidgetPtr = mDocumentLoader->findWidget(QString("playbackWidgetContainer"));
       
    73         tmpWidgetPtr->setParentItem(this);
       
    74         mLayout->addItem( qobject_cast<HbWidget*>( tmpWidgetPtr ) );
       
    75         tmpWidgetPtr = mDocumentLoader->findWidget(QString("albumText"));
       
    76         mAlbumName = qobject_cast<HbLabel*>(tmpWidgetPtr);
       
    77         tmpWidgetPtr = mDocumentLoader->findWidget(QString("artistText"));
       
    78         mArtistName = qobject_cast<HbLabel*>(tmpWidgetPtr);
       
    79         tmpWidgetPtr = mDocumentLoader->findWidget(QString("songText"));
       
    80         mSongTitle = qobject_cast<HbLabel*>(tmpWidgetPtr);
       
    81         tmpWidgetPtr = mDocumentLoader->findWidget(QString("albumArt"));
       
    82         mAlbumArt = qobject_cast<MpAlbumCoverWidget*>(tmpWidgetPtr);
       
    83         mAlbumArt->setEnabled( false );
       
    84         mAlbumArt->setDefaultIcon( HbIcon( "qtg_large_album_art" ) );
       
    85         tmpWidgetPtr = mDocumentLoader->findWidget(QString("realAudio"));
       
    86         mRealAudioIndicator = qobject_cast<HbLabel*>(tmpWidgetPtr);
       
    87         tmpWidgetPtr = mDocumentLoader->findWidget(QString("repeatIcon"));
       
    88         mRepeatIndicator = qobject_cast<HbLabel*>(tmpWidgetPtr);
       
    89                 
       
    90         tmpWidgetPtr = mDocumentLoader->findWidget(QString("progressBar"));
       
    91         mProgressBar = qobject_cast<HbProgressSlider*>(tmpWidgetPtr);
       
    92 
       
    93         //TODO: move this to docml when supported.
       
    94         mProgressBar->setMinMaxTextVisible(true);
       
    95     }
       
    96     else {
       
    97         TX_LOG_ARGS("Error: invalid xml file.");
       
    98         Q_ASSERT_X(widgetsOk, "MpPlaybackWidget", "invalid xml file - widget");
       
    99     }
       
   100 
       
   101     connect( mProgressBar, SIGNAL(sliderPressed()), this, SLOT(handleSliderPressed()) );
       
   102     connect( mProgressBar, SIGNAL(sliderReleased()), this, SLOT(handleSliderReleased()) );
       
   103     connect( mProgressBar, SIGNAL(sliderMoved(int)), this, SLOT(handleSliderMoved(int)) );
       
   104 
       
   105     connect( mPlaybackData, SIGNAL(playbackInfoChanged()), this, SLOT(playbackInfoChanged()) );
       
   106     connect( mPlaybackData, SIGNAL(durationChanged()), this, SLOT(durationChanged()) );
       
   107     connect( mPlaybackData, SIGNAL(positionChanged()), this, SLOT(positionChanged()) );
       
   108     connect( mPlaybackData, SIGNAL(albumArtReady()), this, SLOT(albumArtChanged()) );
       
   109     
       
   110     //Update to set initial conditions if playback has already started.
       
   111     if ( mPlaybackData->playbackState() != MpPlaybackData::NotPlaying ) {
       
   112         playbackInfoChanged();
       
   113         durationChanged();
       
   114         positionChanged();
       
   115         albumArtChanged();
       
   116     }
       
   117     TX_EXIT
       
   118 }
       
   119 
       
   120 /*!
       
   121  Constructs the collection view plugin.
       
   122  */
       
   123 MpPlaybackWidget::~MpPlaybackWidget()
       
   124 {
       
   125     TX_ENTRY
       
   126     delete mDocumentLoader;
       
   127     TX_EXIT
       
   128 }
       
   129 
       
   130 /*!
       
   131  Handle Repeat changed.
       
   132  */
       
   133 void MpPlaybackWidget::repeatChanged( bool value )
       
   134 {
       
   135     mRepeatIndicator->setVisible( value );   
       
   136 }
       
   137 
       
   138 /*!
       
   139  Slot to handle playback info changed.
       
   140  */
       
   141 void MpPlaybackWidget::playbackInfoChanged( )
       
   142 {
       
   143     TX_ENTRY
       
   144     //Title
       
   145     mSongTitle->setPlainText( mPlaybackData->title() );
       
   146     // Artist
       
   147     QString data = mPlaybackData->artist();
       
   148     if ( !data.isEmpty() ) {
       
   149         mArtistName->setPlainText( data );
       
   150     }
       
   151     else {
       
   152         mArtistName->setPlainText( hbTrId( "txt_mus_other_unknown3" ) );
       
   153     }
       
   154     // Album
       
   155     data = mPlaybackData->album();
       
   156     if ( !data.isEmpty() ) {
       
   157         mAlbumName->setPlainText( data );
       
   158     }
       
   159     else {
       
   160         mAlbumName->setPlainText( hbTrId( "txt_mus_other_unknown4" ) );
       
   161     }
       
   162     // RealAudioIcon
       
   163     mRealAudioIndicator->setVisible( mPlaybackData->realAudio() );
       
   164     emit signalPlaybackInfoChanged();
       
   165     TX_EXIT
       
   166 }
       
   167 
       
   168 /*!
       
   169  Slot to handle playback duration changed.
       
   170  */
       
   171 void MpPlaybackWidget::durationChanged()
       
   172 {
       
   173     TX_ENTRY
       
   174     mDuration = mPlaybackData->duration();
       
   175     mDuration /= KMicroSecToMiliSec;
       
   176 
       
   177     mProgressBar->setRange(0, mDuration);
       
   178     mProgressBar->setProgressValue(0);
       
   179     mProgressBar->setSliderValue(0);
       
   180     mProgressBar->setEnabled(true);
       
   181     TX_EXIT
       
   182 }
       
   183 
       
   184 /*!
       
   185  Slot to handle playback position changed.
       
   186  */
       
   187 void MpPlaybackWidget::positionChanged()
       
   188 {
       
   189     TX_ENTRY
       
   190     int position = mPlaybackData->position();
       
   191     position /= KMicroSecToMiliSec;
       
   192 
       
   193     if ( !mProgreesBarDragging ) {
       
   194         mProgressBar->setProgressValue(position);
       
   195         mProgressBar->setSliderValue(position);
       
   196         mProgressBar->setMinText( formatDuration(position) );
       
   197         mProgressBar->setMaxText( formatDuration(mDuration  - position) );
       
   198     }
       
   199     TX_EXIT
       
   200 }
       
   201 
       
   202 /*!
       
   203  Slot to handle Album art changed.
       
   204  */
       
   205 void MpPlaybackWidget::albumArtChanged( )
       
   206 {
       
   207     TX_ENTRY
       
   208     HbIcon icon;
       
   209     mPlaybackData->albumArt( icon );
       
   210     mAlbumArt->setIcon( icon );
       
   211     mAlbumArt->setEnabled( true );
       
   212     TX_EXIT
       
   213 }
       
   214 
       
   215 /*!
       
   216  Slot to handle slider pressed.
       
   217  */
       
   218 void MpPlaybackWidget::handleSliderPressed()
       
   219 {
       
   220     TX_LOG
       
   221     mProgreesBarDragging = true;
       
   222 }
       
   223 
       
   224 /*!
       
   225  Slot to handle progressbar relesed.
       
   226  */
       
   227 void MpPlaybackWidget::handleSliderReleased()
       
   228 {
       
   229     TX_ENTRY
       
   230     mProgreesBarDragging = false;
       
   231     emit setPlaybackPosition( KMicroSecToMiliSec * mProgressBar->progressValue() );
       
   232     TX_EXIT
       
   233 }
       
   234 
       
   235 
       
   236 /*!
       
   237  Slot to handle progressbar moved.
       
   238  */
       
   239 void MpPlaybackWidget::handleSliderMoved( int value )
       
   240 {
       
   241     TX_ENTRY_ARGS( "value  =" << value )
       
   242     mProgressBar->setProgressValue(value);
       
   243     mProgressBar->setSliderValue(value);
       
   244     mProgressBar->setMinText( formatDuration(value) );
       
   245     mProgressBar->setMaxText( formatDuration(mDuration  - value) );
       
   246     mProgressBar->setSliderToolTip( formatDuration(value) );
       
   247     if ( !mProgreesBarDragging ) {
       
   248         // Click on the progress bar, not a drag.
       
   249         emit setPlaybackPosition( KMicroSecToMiliSec * value );
       
   250     }
       
   251     TX_EXIT
       
   252 }
       
   253 
       
   254 /*!
       
   255  Returns the formated duration defined in \a seconds.
       
   256  */
       
   257 QString MpPlaybackWidget::formatDuration( int seconds )
       
   258 {
       
   259     TX_ENTRY
       
   260     QTime z(0,0,0,0);
       
   261     QTime duration;
       
   262     duration = z.addSecs( seconds );
       
   263     int hour = seconds / 3600;
       
   264     if ( hour == 0 ) {
       
   265         TX_EXIT
       
   266         return duration.toString( "mm:ss" );
       
   267     }
       
   268     else {
       
   269         TX_EXIT
       
   270         return duration.toString( "hh:mm:ss" );
       
   271     }
       
   272 }
       
   273 
       
   274