musicwidgetplugin/src/musicwidget.cpp
author hgs
Fri, 03 Sep 2010 19:58:01 -0500
changeset 55 f3930dda3342
parent 47 4cc1412daed0
child 59 cd9e40a08dda
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 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:  Music player home screen widget
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "musicwidget.h"
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include <QtGui>
hgs
parents:
diff changeset
    21
#include <hbpushbutton.h>
hgs
parents:
diff changeset
    22
#include <hblabel.h>
hgs
parents:
diff changeset
    23
#include <hbicon.h>
hgs
parents:
diff changeset
    24
#include <hbmarqueeitem.h>
hgs
parents:
diff changeset
    25
#include <hbanchorlayout.h>
hgs
parents:
diff changeset
    26
#include <hbwidget.h>
hgs
parents:
diff changeset
    27
#include <hbframeitem.h>
hgs
parents:
diff changeset
    28
#include <hbframedrawer.h>
hgs
parents:
diff changeset
    29
#include <hbcolorscheme.h>
hgs
parents:
diff changeset
    30
43
hgs
parents: 36
diff changeset
    31
#include "musicwidgetdocumentloader.h"
36
hgs
parents:
diff changeset
    32
#include "mptrace.h"
hgs
parents:
diff changeset
    33
#include "mpenginefactory.h"
43
hgs
parents: 36
diff changeset
    34
#include "mpalbumcoverwidget.h"
36
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// Constants
hgs
parents:
diff changeset
    37
/** Docml */
hgs
parents:
diff changeset
    38
const QString MUSIC_WIDGET_DOCML = ":/gfx/music_widget.docml";
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
/** File name suffix lists for push buttons */
hgs
parents:
diff changeset
    41
const QStringList PREV_BUTTON_SUFFIXES = (QStringList() << "_l" << "_c" << "_cr");
hgs
parents:
diff changeset
    42
const QStringList PLAY_BUTTON_SUFFIXES = (QStringList() << "_cl" << "_c" << "_cr");
hgs
parents:
diff changeset
    43
const QStringList NEXT_BUTTON_SUFFIXES = (QStringList() << "_cl" << "_c" << "_r");
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
/**  Prefixes for 3 piece button background graphics */
hgs
parents:
diff changeset
    46
const QLatin1String PUSH_BUTTON_NORMAL("qtg_fr_hsbutton_normal");
hgs
parents:
diff changeset
    47
const QLatin1String PUSH_BUTTON_PRESSED ("qtg_fr_hsbutton_pressed");
hgs
parents:
diff changeset
    48
const QLatin1String PUSH_BUTTON_DISABLED ("qtg_fr_hsbutton_disabled");
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
/**  Push button icon colors for each of the states (Normal, Pressed and Disabled) */
hgs
parents:
diff changeset
    51
const QLatin1String ICON_COLOR_NORMAL ("qtc_button_normal");
hgs
parents:
diff changeset
    52
const QLatin1String ICON_COLOR_PRESSED ("qtc_button_pressed");
hgs
parents:
diff changeset
    53
const QLatin1String ICON_COLOR_DISABLED ("qtc_button_disabled");
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
/**  Play and Pause icons */
hgs
parents:
diff changeset
    56
const QLatin1String ICON_PLAY ("qtg_mono_play");
hgs
parents:
diff changeset
    57
const QLatin1String ICON_PAUSE ("qtg_mono_pause");
hgs
parents:
diff changeset
    58
/**  Music Player shortcut icon */
47
hgs
parents: 45
diff changeset
    59
const QLatin1String ICON_LARGE_MUSIC_PLAYER ("qtg_large_music");
36
hgs
parents:
diff changeset
    60
/**  Music Player shortcut icon */
hgs
parents:
diff changeset
    61
const QLatin1String ICON_FIRST_TIME_USE ("qtg_large_music_empty");
45
hgs
parents: 43
diff changeset
    62
const QLatin1String ICON_DEFAULT_ART ("qtg_large_album_art");
36
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
/**  HsWidget normal background */
hgs
parents:
diff changeset
    65
const QLatin1String WIDGET_BG_NORMAL ("qtg_fr_hswidget_normal");
hgs
parents:
diff changeset
    66
/**  Text background */
hgs
parents:
diff changeset
    67
const QLatin1String TEXT_BG_NORMAL ("qtg_fr_multimedia_trans");
hgs
parents:
diff changeset
    68
/**  Separator : character and space between artist and song name */
hgs
parents:
diff changeset
    69
const QLatin1String SEPARATOR_TEXT (": ");
hgs
parents:
diff changeset
    70
/**  Temporary unknown artist */
hgs
parents:
diff changeset
    71
const QLatin1String TEMPORARY_UNKWNOWN_TEXT ("Unknown");
hgs
parents:
diff changeset
    72
/**  Localized unknown artist */
hgs
parents:
diff changeset
    73
const QLatin1String UNKWNOWN_TEXT ("txt_mus_other_unknown_1");
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
/**  Marquee width */
hgs
parents:
diff changeset
    76
const int MARQUEE_WIDTH = 170;
hgs
parents:
diff changeset
    77
/**  Infinite loop value for marquee */
hgs
parents:
diff changeset
    78
const int MARQUEE_LOOP_FOREVER = -1;
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
/**  Now playing view with random play */
hgs
parents:
diff changeset
    81
const QLatin1String SERVICEREQ_FIRST_TIME_USE ("appto://10207C62?activityname=MusicNowPlayingView&launchtype=standalone&shuffle=yes");
hgs
parents:
diff changeset
    82
/**  Main view */
hgs
parents:
diff changeset
    83
const QLatin1String SERVICEREQ_MAIN_VIEW ("appto://10207C62?activityname=MusicMainView&launchtype=standalone");
hgs
parents:
diff changeset
    84
/**  Now playing view */
hgs
parents:
diff changeset
    85
const QLatin1String SERVICEREQ_NOW_PLAYING_VIEW ("appto://10207C62?activityname=MusicNowPlayingView&launchtype=standalone");
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
/**  DOCML object name for main widget */
hgs
parents:
diff changeset
    88
const QLatin1String DOCML_CONTAINER_WIDGET ("containerWidget");
hgs
parents:
diff changeset
    89
/**  DOCML object name for widget background */
hgs
parents:
diff changeset
    90
const QLatin1String DOCML_BG_ICON ("widget_background_icon");
hgs
parents:
diff changeset
    91
/**  DOCML object name for album art image */
hgs
parents:
diff changeset
    92
const QLatin1String DOCML_ALBUM_ART ("album_art_image");
hgs
parents:
diff changeset
    93
/**  DOCML object name for shortcut icon background */
hgs
parents:
diff changeset
    94
const QLatin1String DOCML_SHORTCUT_ICON_BG ("shortcut_icon_background");
hgs
parents:
diff changeset
    95
/**  DOCML object name for shortcut icon */
hgs
parents:
diff changeset
    96
const QLatin1String DOCML_SHORTCUT_ICON ("shortcut_icon");
hgs
parents:
diff changeset
    97
/**  DOCML object name for scrolling text background */
hgs
parents:
diff changeset
    98
const QLatin1String DOCML_TEXT_BG ("text_bg");
hgs
parents:
diff changeset
    99
/**  DOCML object name for scrolling text */
hgs
parents:
diff changeset
   100
const QLatin1String DOCML_SCROLLING_TEXT ("scrolling_text");
hgs
parents:
diff changeset
   101
/**  DOCML object name for button group container */
hgs
parents:
diff changeset
   102
const QLatin1String DOCML_BUTTON_GROUP_CONTAINER ("button_group_container");
hgs
parents:
diff changeset
   103
/**  DOCML object name for prev button */
hgs
parents:
diff changeset
   104
const QLatin1String DOCML_PREV_BUTTON ("btn_previous");
hgs
parents:
diff changeset
   105
/**  DOCML object name for play button */
hgs
parents:
diff changeset
   106
const QLatin1String DOCML_PLAY_BUTTON ("btn_play");
hgs
parents:
diff changeset
   107
/**  DOCML object name for next button */
hgs
parents:
diff changeset
   108
const QLatin1String DOCML_NEXT_BUTTON ("btn_next");
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
MusicWidget::MusicWidget(QGraphicsItem* parent, Qt::WindowFlags flags):
hgs
parents:
diff changeset
   112
    HbWidget(parent, flags),
hgs
parents:
diff changeset
   113
    mShortcutArea(0),
hgs
parents:
diff changeset
   114
    mSongDataBG(0),
hgs
parents:
diff changeset
   115
    mInformationSongName(0),
hgs
parents:
diff changeset
   116
    mMarqueeText(0),    
hgs
parents:
diff changeset
   117
    mPreviousPushButton(0),
hgs
parents:
diff changeset
   118
    mPlayPushButton(0),    
hgs
parents:
diff changeset
   119
    mNextPushButton(0),
hgs
parents:
diff changeset
   120
    mMusicPlayerNoSongData(1),
hgs
parents:
diff changeset
   121
    mMusicPlayerUpdating(0),
hgs
parents:
diff changeset
   122
    mMusicPlayerBlocked(0),
43
hgs
parents: 36
diff changeset
   123
    mAlbumArt(0),
36
hgs
parents:
diff changeset
   124
    mArtist(0),
hgs
parents:
diff changeset
   125
    mTitle(0),    
hgs
parents:
diff changeset
   126
    mMpEngine(0),
hgs
parents:
diff changeset
   127
    mMpPlaybackData(0)
hgs
parents:
diff changeset
   128
{
hgs
parents:
diff changeset
   129
    TX_ENTRY
hgs
parents:
diff changeset
   130
    
hgs
parents:
diff changeset
   131
    // Setup UI
hgs
parents:
diff changeset
   132
    setupUi();
hgs
parents:
diff changeset
   133
    
hgs
parents:
diff changeset
   134
    // Connect to MP engine and playback data
55
hgs
parents: 47
diff changeset
   135
    mMpEngine = MpEngineFactory::createSharedEngine(MpCommon::KMusicPlayerUid, MpEngine::HomeScreen );
36
hgs
parents:
diff changeset
   136
    Q_ASSERT_X(mMpEngine, "music_widget", "no music player engine");
hgs
parents:
diff changeset
   137
    TX_LOG_ARGS("got mp engine")
hgs
parents:
diff changeset
   138
    
hgs
parents:
diff changeset
   139
    mMpPlaybackData = mMpEngine->playbackData();
hgs
parents:
diff changeset
   140
    Q_ASSERT_X(mMpPlaybackData, "music_widget", "no playback data");
hgs
parents:
diff changeset
   141
    TX_LOG_ARGS("got playback data")
hgs
parents:
diff changeset
   142
        
hgs
parents:
diff changeset
   143
    // Connect outgoing signals and slots
hgs
parents:
diff changeset
   144
    QObject::connect(mShortcutArea, SIGNAL(clicked()), this, SLOT(shortcutButton()));    
hgs
parents:
diff changeset
   145
    
hgs
parents:
diff changeset
   146
    // use signal mapper to indicate button identifiers to button event slots 
hgs
parents:
diff changeset
   147
    QSignalMapper* signalMapperPressed = new QSignalMapper( this ); 
hgs
parents:
diff changeset
   148
    signalMapperPressed->setMapping( mPreviousPushButton, EPrevious );
hgs
parents:
diff changeset
   149
    signalMapperPressed->setMapping( mPlayPushButton, EPlayPause);
hgs
parents:
diff changeset
   150
    signalMapperPressed->setMapping( mNextPushButton, ENext);
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
    // need to use different signal mapper for pressed and released events, 
hgs
parents:
diff changeset
   153
    // both have same mappings but they are mapped to different slots
hgs
parents:
diff changeset
   154
    QSignalMapper* signalMapperReleased = new QSignalMapper( this );
hgs
parents:
diff changeset
   155
    signalMapperReleased->setMapping( mPreviousPushButton, EPrevious );
hgs
parents:
diff changeset
   156
    signalMapperReleased->setMapping( mPlayPushButton, EPlayPause);
hgs
parents:
diff changeset
   157
    signalMapperReleased->setMapping( mNextPushButton, ENext);
hgs
parents:
diff changeset
   158
        
hgs
parents:
diff changeset
   159
    // Connect button events to signal maps
hgs
parents:
diff changeset
   160
    QObject::connect(mPreviousPushButton, SIGNAL(pressed()), signalMapperPressed, SLOT (map()));
hgs
parents:
diff changeset
   161
    QObject::connect(mPreviousPushButton, SIGNAL(released()), signalMapperReleased, SLOT (map()));
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
    QObject::connect(mPlayPushButton, SIGNAL(pressed()), signalMapperPressed, SLOT (map()));
hgs
parents:
diff changeset
   164
    QObject::connect(mPlayPushButton, SIGNAL(released()), signalMapperReleased, SLOT (map()));
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
    QObject::connect(mNextPushButton, SIGNAL(pressed()), signalMapperPressed, SLOT (map()));
hgs
parents:
diff changeset
   167
    QObject::connect(mNextPushButton, SIGNAL(released()), signalMapperReleased, SLOT (map()));
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
    // Connect mapper signals to self implemented slots
hgs
parents:
diff changeset
   170
    QObject::connect( signalMapperPressed, SIGNAL(mapped(int)), this, SLOT(mediaButtonPressed(int)));
hgs
parents:
diff changeset
   171
    QObject::connect( signalMapperReleased, SIGNAL(mapped(int)), this, SLOT(mediaButtonReleased(int)));
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    // Connect clicked events
hgs
parents:
diff changeset
   174
    QObject::connect(mPreviousPushButton, SIGNAL(clicked()), this, SLOT(prevSong()));
hgs
parents:
diff changeset
   175
    QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, SLOT(playSong()));   
hgs
parents:
diff changeset
   176
    QObject::connect(mNextPushButton, SIGNAL(clicked()), this, SLOT(nextSong()));
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
    // MpEngine
55
hgs
parents: 47
diff changeset
   179
    QObject::connect(mMpEngine, SIGNAL(libraryUpdateStarted()), this, SLOT(libraryUpdateStarted()));
36
hgs
parents:
diff changeset
   180
    QObject::connect(mMpEngine, SIGNAL(libraryUpdated()), this, SLOT(libraryUpdated()));
hgs
parents:
diff changeset
   181
    QObject::connect(mMpEngine, SIGNAL(usbBlocked(bool)), this, SLOT(usbBlocked(bool)));
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
    //MpPlaybackData
hgs
parents:
diff changeset
   184
    QObject::connect(mMpPlaybackData, SIGNAL(albumArtReady()), this, SLOT(albumArtReady()));
hgs
parents:
diff changeset
   185
    QObject::connect(mMpPlaybackData, SIGNAL(playbackStateChanged()), this, SLOT(playbackStateChanged()));
hgs
parents:
diff changeset
   186
    QObject::connect(mMpPlaybackData, SIGNAL(playbackInfoChanged()), this, SLOT(playbackInfoChanged()));  
hgs
parents:
diff changeset
   187
    
hgs
parents:
diff changeset
   188
    // Initial data from Music Player get by onShow method call
hgs
parents:
diff changeset
   189
    TX_EXIT
hgs
parents:
diff changeset
   190
}
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
/*!
hgs
parents:
diff changeset
   193
    Destructor
hgs
parents:
diff changeset
   194
*/
hgs
parents:
diff changeset
   195
MusicWidget::~MusicWidget()
hgs
parents:
diff changeset
   196
{
hgs
parents:
diff changeset
   197
}
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
/*!
hgs
parents:
diff changeset
   200
 Creates UI.
hgs
parents:
diff changeset
   201
 */
hgs
parents:
diff changeset
   202
void MusicWidget::setupUi()
hgs
parents:
diff changeset
   203
{
hgs
parents:
diff changeset
   204
    TX_ENTRY
hgs
parents:
diff changeset
   205
    
hgs
parents:
diff changeset
   206
    // Use document loader to load the contents
43
hgs
parents: 36
diff changeset
   207
    MusicWidgetDocumentLoader loader;
36
hgs
parents:
diff changeset
   208
    bool ok = false;
hgs
parents:
diff changeset
   209
    loader.load( MUSIC_WIDGET_DOCML, &ok);
hgs
parents:
diff changeset
   210
    Q_ASSERT_X(ok, "music_widget", "invalid title docml file");
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
    TX_LOG_ARGS("loaded docml")
hgs
parents:
diff changeset
   213
    
hgs
parents:
diff changeset
   214
    QGraphicsLinearLayout* mainLayout = new QGraphicsLinearLayout(Qt::Vertical, this);
hgs
parents:
diff changeset
   215
    QGraphicsWidget* container = loader.findWidget(DOCML_CONTAINER_WIDGET);
hgs
parents:
diff changeset
   216
    mainLayout->addItem(container);
hgs
parents:
diff changeset
   217
    //Sets parent
hgs
parents:
diff changeset
   218
    setLayout( mainLayout );
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
    // Load and set widget background
hgs
parents:
diff changeset
   221
    HbWidget *bgWidget = qobject_cast<HbWidget*> (loader.findWidget(DOCML_BG_ICON));
hgs
parents:
diff changeset
   222
    HbFrameItem *frameItem;
hgs
parents:
diff changeset
   223
    if (bgWidget)
hgs
parents:
diff changeset
   224
        {
hgs
parents:
diff changeset
   225
        HbFrameDrawer *drawer = new HbFrameDrawer(WIDGET_BG_NORMAL,
hgs
parents:
diff changeset
   226
            HbFrameDrawer::NinePieces);
hgs
parents:
diff changeset
   227
        frameItem = new HbFrameItem(drawer, bgWidget);
hgs
parents:
diff changeset
   228
        frameItem->setPreferredSize(bgWidget->preferredSize());
hgs
parents:
diff changeset
   229
        bgWidget->setZValue(1);
hgs
parents:
diff changeset
   230
        }
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
    // Setup album art area
hgs
parents:
diff changeset
   233
    QGraphicsWidget *tmpWidgetPtr;
hgs
parents:
diff changeset
   234
    tmpWidgetPtr = loader.findWidget(DOCML_ALBUM_ART);
43
hgs
parents: 36
diff changeset
   235
    mAlbumArt = qobject_cast<MpAlbumCoverWidget*>(tmpWidgetPtr);
hgs
parents: 36
diff changeset
   236
    mAlbumArt->setEnabled( false );
hgs
parents: 36
diff changeset
   237
    mAlbumArt->setDefaultIcon( HbIcon( ICON_DEFAULT_ART ) );
36
hgs
parents:
diff changeset
   238
        
hgs
parents:
diff changeset
   239
    // Load shortcut background
hgs
parents:
diff changeset
   240
    HbWidget *shortcutAreaLayout = qobject_cast<HbWidget*> (loader.findWidget(DOCML_SHORTCUT_ICON_BG));
hgs
parents:
diff changeset
   241
    HbFrameItem *shortcutFrameItem;
hgs
parents:
diff changeset
   242
    if (shortcutAreaLayout) {
hgs
parents:
diff changeset
   243
        HbFrameDrawer *drawer = new HbFrameDrawer(WIDGET_BG_NORMAL,
hgs
parents:
diff changeset
   244
            HbFrameDrawer::NinePieces);
hgs
parents:
diff changeset
   245
        shortcutFrameItem = new HbFrameItem(drawer, shortcutAreaLayout);
hgs
parents:
diff changeset
   246
        shortcutFrameItem->setPreferredSize(shortcutAreaLayout->preferredSize());
hgs
parents:
diff changeset
   247
        shortcutAreaLayout->setZValue(3);
hgs
parents:
diff changeset
   248
        }
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
    // Load shortcut widget and set background 
hgs
parents:
diff changeset
   251
    mShortcutArea = qobject_cast<HbPushButton*> (loader.findWidget(DOCML_SHORTCUT_ICON));
hgs
parents:
diff changeset
   252
    if ( mShortcutArea )
hgs
parents:
diff changeset
   253
        {
hgs
parents:
diff changeset
   254
        // icon needs to be put as a background so that it fills the whole button area
hgs
parents:
diff changeset
   255
        HbFrameDrawer* drawer = new HbFrameDrawer(ICON_LARGE_MUSIC_PLAYER, HbFrameDrawer::OnePiece);
hgs
parents:
diff changeset
   256
        mShortcutArea->setFrameBackground( drawer );
hgs
parents:
diff changeset
   257
        }
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
    // Set song data background
hgs
parents:
diff changeset
   260
    mSongDataBG = qobject_cast<HbWidget*> (loader.findWidget(DOCML_TEXT_BG));
hgs
parents:
diff changeset
   261
    HbFrameItem *scrollTextItem;
hgs
parents:
diff changeset
   262
    if (mSongDataBG) 
hgs
parents:
diff changeset
   263
        {
hgs
parents:
diff changeset
   264
        HbFrameDrawer *drawer = new HbFrameDrawer(TEXT_BG_NORMAL, 
hgs
parents:
diff changeset
   265
            HbFrameDrawer::NinePieces);
hgs
parents:
diff changeset
   266
        scrollTextItem = new HbFrameItem(drawer, mSongDataBG);
hgs
parents:
diff changeset
   267
        scrollTextItem->setPreferredSize(mSongDataBG->preferredSize());
hgs
parents:
diff changeset
   268
        mSongDataBG->setZValue(4);
hgs
parents:
diff changeset
   269
        mSongDataBG->hide(); // Hide initially...
hgs
parents:
diff changeset
   270
        }
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
    // Set scrolling song data
hgs
parents:
diff changeset
   273
    mInformationSongName = qobject_cast<HbLabel*> (loader.findWidget(DOCML_SCROLLING_TEXT));
hgs
parents:
diff changeset
   274
    if ( mInformationSongName )
hgs
parents:
diff changeset
   275
        {
hgs
parents:
diff changeset
   276
        // Setting primitive marquee item values from .css doesn't work well, set in code...
hgs
parents:
diff changeset
   277
        mMarqueeText = new HbMarqueeItem(mInformationSongName);
hgs
parents:
diff changeset
   278
        HbFontSpec fs(HbFontSpec::Secondary);
hgs
parents:
diff changeset
   279
        mMarqueeText->setFontSpec(fs);        
hgs
parents:
diff changeset
   280
        mMarqueeText->setTextColor(mInformationSongName->textColor());
hgs
parents:
diff changeset
   281
        mMarqueeText->setMinimumWidth(MARQUEE_WIDTH);
hgs
parents:
diff changeset
   282
        mMarqueeText->setLoopCount(MARQUEE_LOOP_FOREVER);
hgs
parents:
diff changeset
   283
        }
hgs
parents:
diff changeset
   284
    
hgs
parents:
diff changeset
   285
    HbWidget *buttonGroupContainer = qobject_cast<HbWidget*> (loader.findWidget(
hgs
parents:
diff changeset
   286
            DOCML_BUTTON_GROUP_CONTAINER));
hgs
parents:
diff changeset
   287
    if (buttonGroupContainer)
hgs
parents:
diff changeset
   288
        {
hgs
parents:
diff changeset
   289
        // Define push buttons in  state at this point, check the player status later and update buttons if needed
hgs
parents:
diff changeset
   290
        mPreviousPushButton = qobject_cast<HbPushButton*> (loader.findWidget(DOCML_PREV_BUTTON));
hgs
parents:
diff changeset
   291
        defineMediaButton( *mPreviousPushButton, PUSH_BUTTON_NORMAL, PREV_BUTTON_SUFFIXES, ICON_COLOR_NORMAL );
hgs
parents:
diff changeset
   292
        
hgs
parents:
diff changeset
   293
        mPlayPushButton = qobject_cast<HbPushButton*> (loader.findWidget(DOCML_PLAY_BUTTON));
hgs
parents:
diff changeset
   294
        defineMediaButton( *mPlayPushButton, PUSH_BUTTON_NORMAL, PLAY_BUTTON_SUFFIXES, ICON_COLOR_NORMAL );
hgs
parents:
diff changeset
   295
    
hgs
parents:
diff changeset
   296
        mNextPushButton = qobject_cast<HbPushButton*> (loader.findWidget(DOCML_NEXT_BUTTON));
hgs
parents:
diff changeset
   297
        defineMediaButton( *mNextPushButton, PUSH_BUTTON_NORMAL, NEXT_BUTTON_SUFFIXES, ICON_COLOR_NORMAL );
hgs
parents:
diff changeset
   298
        }
hgs
parents:
diff changeset
   299
    
hgs
parents:
diff changeset
   300
    TX_EXIT
hgs
parents:
diff changeset
   301
}
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
/*!
hgs
parents:
diff changeset
   304
    Makes the push button based on information aGraphicsId and aSuffix
hgs
parents:
diff changeset
   305
 */
hgs
parents:
diff changeset
   306
void MusicWidget::defineMediaButton( HbPushButton& aTarget, QString aGraphicsId, QStringList aSuffix, QString aIconColor )
hgs
parents:
diff changeset
   307
    {
hgs
parents:
diff changeset
   308
    TX_ENTRY
hgs
parents:
diff changeset
   309
    
hgs
parents:
diff changeset
   310
    TX_LOG_ARGS("graphics id: " << aGraphicsId)
hgs
parents:
diff changeset
   311
    TX_LOG_ARGS("icon color: " << aIconColor)
hgs
parents:
diff changeset
   312
    
hgs
parents:
diff changeset
   313
    HbFrameDrawer* drawer;
hgs
parents:
diff changeset
   314
hgs
parents:
diff changeset
   315
    // First check if the drawer is already created for this push button
hgs
parents:
diff changeset
   316
    if ( !aTarget.frameBackground()){
hgs
parents:
diff changeset
   317
        // Nope, create one now
hgs
parents:
diff changeset
   318
        drawer = new HbFrameDrawer(aGraphicsId, HbFrameDrawer::ThreePiecesHorizontal);
hgs
parents:
diff changeset
   319
        aTarget.setFrameBackground( drawer );
hgs
parents:
diff changeset
   320
        TX_LOG_ARGS("created drawer for button bg")
hgs
parents:
diff changeset
   321
        }
hgs
parents:
diff changeset
   322
    else {
hgs
parents:
diff changeset
   323
        // Frame drawer already created, only need to update frame graphics
hgs
parents:
diff changeset
   324
        drawer = aTarget.frameBackground();
hgs
parents:
diff changeset
   325
        drawer->setFrameGraphicsName( aGraphicsId );
hgs
parents:
diff changeset
   326
        TX_LOG_ARGS("using existing drawer for button bg")
hgs
parents:
diff changeset
   327
        }
hgs
parents:
diff changeset
   328
hgs
parents:
diff changeset
   329
    // Set file name suffix list, so that drawer can load correct 3-piece graphic files 
hgs
parents:
diff changeset
   330
    drawer->setFileNameSuffixList( aSuffix );
hgs
parents:
diff changeset
   331
hgs
parents:
diff changeset
   332
    // Update also the icon color
hgs
parents:
diff changeset
   333
    QColor color = HbColorScheme::color(aIconColor);
hgs
parents:
diff changeset
   334
    aTarget.icon().setColor( color );
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
    // Lastly, check if the buttton is disabled
hgs
parents:
diff changeset
   337
    if ( aIconColor == ICON_COLOR_DISABLED )
hgs
parents:
diff changeset
   338
        {
hgs
parents:
diff changeset
   339
        aTarget.setEnabled(false);
hgs
parents:
diff changeset
   340
        TX_LOG_ARGS("button disabled")
hgs
parents:
diff changeset
   341
        }
hgs
parents:
diff changeset
   342
    else
hgs
parents:
diff changeset
   343
        {
hgs
parents:
diff changeset
   344
        aTarget.setEnabled(true);
hgs
parents:
diff changeset
   345
        TX_LOG_ARGS("button enabled")
hgs
parents:
diff changeset
   346
        }
hgs
parents:
diff changeset
   347
    
hgs
parents:
diff changeset
   348
    TX_EXIT
hgs
parents:
diff changeset
   349
    }
hgs
parents:
diff changeset
   350
hgs
parents:
diff changeset
   351
/*!
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
 */
hgs
parents:
diff changeset
   354
void MusicWidget::mediaButtonEvent( MediaKeyIdentifier aMediaKeyId, QString aGraphicsId, QString aIconColor )
hgs
parents:
diff changeset
   355
    {
hgs
parents:
diff changeset
   356
    TX_ENTRY
hgs
parents:
diff changeset
   357
    
hgs
parents:
diff changeset
   358
    HbPushButton* target = NULL;
hgs
parents:
diff changeset
   359
    QStringList suffix;
hgs
parents:
diff changeset
   360
    
hgs
parents:
diff changeset
   361
    switch ( aMediaKeyId )
hgs
parents:
diff changeset
   362
        {
hgs
parents:
diff changeset
   363
        case EPrevious: {
hgs
parents:
diff changeset
   364
            TX_LOG_ARGS("previous")
hgs
parents:
diff changeset
   365
            target = mPreviousPushButton;
hgs
parents:
diff changeset
   366
            suffix = PREV_BUTTON_SUFFIXES;
hgs
parents:
diff changeset
   367
            break;
hgs
parents:
diff changeset
   368
            }
hgs
parents:
diff changeset
   369
        case EPlayPause: {
hgs
parents:
diff changeset
   370
            TX_LOG_ARGS("play/pause")
hgs
parents:
diff changeset
   371
            target = mPlayPushButton;
hgs
parents:
diff changeset
   372
            suffix = PLAY_BUTTON_SUFFIXES;
hgs
parents:
diff changeset
   373
            break;
hgs
parents:
diff changeset
   374
            }
hgs
parents:
diff changeset
   375
        case ENext: {
hgs
parents:
diff changeset
   376
            TX_LOG_ARGS("next")
hgs
parents:
diff changeset
   377
            target = mNextPushButton;
hgs
parents:
diff changeset
   378
            suffix = NEXT_BUTTON_SUFFIXES;
hgs
parents:
diff changeset
   379
            break;
hgs
parents:
diff changeset
   380
            }
hgs
parents:
diff changeset
   381
        default: {
hgs
parents:
diff changeset
   382
            // Do proper error handling.. should not be possible to get here ever tough
hgs
parents:
diff changeset
   383
            TX_LOG_ARGS("unknown button")
hgs
parents:
diff changeset
   384
            return;
hgs
parents:
diff changeset
   385
            }
hgs
parents:
diff changeset
   386
        }
hgs
parents:
diff changeset
   387
        
hgs
parents:
diff changeset
   388
    if ( target )
hgs
parents:
diff changeset
   389
    	{
hgs
parents:
diff changeset
   390
    	MusicWidget::defineMediaButton( *target, aGraphicsId, suffix, aIconColor );
hgs
parents:
diff changeset
   391
    	}
hgs
parents:
diff changeset
   392
    
hgs
parents:
diff changeset
   393
    TX_EXIT
hgs
parents:
diff changeset
   394
    }
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
/*!
hgs
parents:
diff changeset
   397
   Emited from HbPushButton:pressed() signal, changes the button layout to 'Pressed'
hgs
parents:
diff changeset
   398
 */
hgs
parents:
diff changeset
   399
void MusicWidget::mediaButtonPressed( int aMediaKeyId )
hgs
parents:
diff changeset
   400
    {
hgs
parents:
diff changeset
   401
    TX_LOG_ARGS("media key: " << aMediaKeyId )
hgs
parents:
diff changeset
   402
    mediaButtonEvent( (MediaKeyIdentifier)aMediaKeyId, PUSH_BUTTON_PRESSED, ICON_COLOR_PRESSED );
hgs
parents:
diff changeset
   403
    }
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
/*!
hgs
parents:
diff changeset
   406
   Emited from HbPushButton:released() signal, changes the button layout to 'Normal'
hgs
parents:
diff changeset
   407
 */
hgs
parents:
diff changeset
   408
void MusicWidget::mediaButtonReleased( int aMediaKeyId )
hgs
parents:
diff changeset
   409
    {
hgs
parents:
diff changeset
   410
    TX_LOG_ARGS("media key: " << aMediaKeyId )
hgs
parents:
diff changeset
   411
    mediaButtonEvent( (MediaKeyIdentifier)aMediaKeyId, PUSH_BUTTON_NORMAL, ICON_COLOR_NORMAL );
hgs
parents:
diff changeset
   412
    }
hgs
parents:
diff changeset
   413
hgs
parents:
diff changeset
   414
/*!
hgs
parents:
diff changeset
   415
   Disables specified push button
hgs
parents:
diff changeset
   416
 */
hgs
parents:
diff changeset
   417
void MusicWidget::mediaButtonDisabled( int aMediaKeyId )
hgs
parents:
diff changeset
   418
    {
hgs
parents:
diff changeset
   419
    TX_LOG_ARGS("media key: " << aMediaKeyId )
hgs
parents:
diff changeset
   420
    mediaButtonEvent( (MediaKeyIdentifier)aMediaKeyId, PUSH_BUTTON_DISABLED, ICON_COLOR_DISABLED );
hgs
parents:
diff changeset
   421
    }
hgs
parents:
diff changeset
   422
hgs
parents:
diff changeset
   423
/*!
hgs
parents:
diff changeset
   424
   Disables specified push button
hgs
parents:
diff changeset
   425
 */
hgs
parents:
diff changeset
   426
void MusicWidget::mediaButtonEnabled( int aMediaKeyId )
hgs
parents:
diff changeset
   427
    {
hgs
parents:
diff changeset
   428
    TX_LOG_ARGS("media key: " << aMediaKeyId )
hgs
parents:
diff changeset
   429
    mediaButtonEvent( (MediaKeyIdentifier)aMediaKeyId, PUSH_BUTTON_NORMAL, ICON_COLOR_NORMAL );
hgs
parents:
diff changeset
   430
    }
hgs
parents:
diff changeset
   431
hgs
parents:
diff changeset
   432
/*!
hgs
parents:
diff changeset
   433
 Manually update music widget state.
hgs
parents:
diff changeset
   434
 */
hgs
parents:
diff changeset
   435
void MusicWidget::refreshData()
hgs
parents:
diff changeset
   436
{ 
hgs
parents:
diff changeset
   437
    TX_ENTRY
hgs
parents:
diff changeset
   438
    // Get current player state
hgs
parents:
diff changeset
   439
    playbackStateChanged();
hgs
parents:
diff changeset
   440
    
hgs
parents:
diff changeset
   441
    // Get current song data, updates button states
hgs
parents:
diff changeset
   442
    playbackInfoChanged();
hgs
parents:
diff changeset
   443
hgs
parents:
diff changeset
   444
    // Get current album art
hgs
parents:
diff changeset
   445
    albumArtReady();
hgs
parents:
diff changeset
   446
    TX_EXIT
hgs
parents:
diff changeset
   447
}
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
/*!
hgs
parents:
diff changeset
   450
 Launch music player...
hgs
parents:
diff changeset
   451
 */
hgs
parents:
diff changeset
   452
void MusicWidget::launchMusicPlayer(int launchMode)
hgs
parents:
diff changeset
   453
{  
hgs
parents:
diff changeset
   454
    TX_ENTRY
hgs
parents:
diff changeset
   455
    //TODO: Detect if MusicPlayer is running or not properly, handle case where player not available?!
hgs
parents:
diff changeset
   456
    //TODO: Get service status from XQSettingManager
hgs
parents:
diff changeset
   457
    //TODO: Service status from signal:
hgs
parents:
diff changeset
   458
    //TODO: void statusChanged(const XQAiwInterfaceDescriptor& implementation,  ServiceStatus currentStatus);
hgs
parents:
diff changeset
   459
     
hgs
parents:
diff changeset
   460
    QUrl url;
hgs
parents:
diff changeset
   461
    XQAiwRequest* req;
hgs
parents:
diff changeset
   462
    
hgs
parents:
diff changeset
   463
    if ( launchMode == ELaunchFromPlay )
hgs
parents:
diff changeset
   464
        {
hgs
parents:
diff changeset
   465
        TX_LOG_ARGS("launch from play")
hgs
parents:
diff changeset
   466
        // Launch to now playing view, random play to be started!
hgs
parents:
diff changeset
   467
        url.setUrl(SERVICEREQ_FIRST_TIME_USE);        
hgs
parents:
diff changeset
   468
        }
hgs
parents:
diff changeset
   469
    else if (mMusicPlayerNoSongData)
hgs
parents:
diff changeset
   470
        {
hgs
parents:
diff changeset
   471
        TX_LOG_ARGS("to main view")
hgs
parents:
diff changeset
   472
        // Launch to main view
hgs
parents:
diff changeset
   473
        url.setUrl(SERVICEREQ_MAIN_VIEW);    
hgs
parents:
diff changeset
   474
        }
hgs
parents:
diff changeset
   475
    else
hgs
parents:
diff changeset
   476
        {
hgs
parents:
diff changeset
   477
        TX_LOG_ARGS("to now playing view")
hgs
parents:
diff changeset
   478
        // Launch to now playing view
hgs
parents:
diff changeset
   479
        url.setUrl(SERVICEREQ_NOW_PLAYING_VIEW);
hgs
parents:
diff changeset
   480
        }   
hgs
parents:
diff changeset
   481
    
hgs
parents:
diff changeset
   482
    req = mApplicationManager.create(url);    
hgs
parents:
diff changeset
   483
    if (req == NULL)
hgs
parents:
diff changeset
   484
        {
hgs
parents:
diff changeset
   485
        // No handlers for the URI
hgs
parents:
diff changeset
   486
        TX_LOG_ARGS("no req created")
hgs
parents:
diff changeset
   487
        return;
hgs
parents:
diff changeset
   488
        }
hgs
parents:
diff changeset
   489
    
hgs
parents:
diff changeset
   490
    req->setBackground(false);
hgs
parents:
diff changeset
   491
    req->setSynchronous(false);
hgs
parents:
diff changeset
   492
    
hgs
parents:
diff changeset
   493
    // Set function parameters
hgs
parents:
diff changeset
   494
   QList<QVariant> args;
hgs
parents:
diff changeset
   495
   args << url.toString();
hgs
parents:
diff changeset
   496
   req->setArguments(args);
hgs
parents:
diff changeset
   497
hgs
parents:
diff changeset
   498
   // Send the request
hgs
parents:
diff changeset
   499
   bool res = req->send();
hgs
parents:
diff changeset
   500
   if  (!res) 
hgs
parents:
diff changeset
   501
   {
hgs
parents:
diff changeset
   502
       // Request failed. 
hgs
parents:
diff changeset
   503
      int error = req->lastError();
hgs
parents:
diff changeset
   504
      // Handle error
hgs
parents:
diff changeset
   505
      TX_LOG_ARGS("req send error: " << error)
hgs
parents:
diff changeset
   506
   }
hgs
parents:
diff changeset
   507
hgs
parents:
diff changeset
   508
   delete req;
hgs
parents:
diff changeset
   509
   
hgs
parents:
diff changeset
   510
   TX_EXIT
hgs
parents:
diff changeset
   511
}
hgs
parents:
diff changeset
   512
hgs
parents:
diff changeset
   513
/*!
hgs
parents:
diff changeset
   514
    Return bounding rect
hgs
parents:
diff changeset
   515
*/
hgs
parents:
diff changeset
   516
QRectF MusicWidget::boundingRect() const
hgs
parents:
diff changeset
   517
{
hgs
parents:
diff changeset
   518
    return childrenBoundingRect();
hgs
parents:
diff changeset
   519
}
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
/*!
hgs
parents:
diff changeset
   522
    Return shape
hgs
parents:
diff changeset
   523
*/
hgs
parents:
diff changeset
   524
QPainterPath MusicWidget::shape() const
hgs
parents:
diff changeset
   525
{   
hgs
parents:
diff changeset
   526
    QPainterPath path;
hgs
parents:
diff changeset
   527
    path.addRect(boundingRect());
hgs
parents:
diff changeset
   528
    return path;
hgs
parents:
diff changeset
   529
}
hgs
parents:
diff changeset
   530
hgs
parents:
diff changeset
   531
/*!
hgs
parents:
diff changeset
   532
 Initializes the widget.
hgs
parents:
diff changeset
   533
 */
hgs
parents:
diff changeset
   534
void MusicWidget::onInitialize()
hgs
parents:
diff changeset
   535
{
hgs
parents:
diff changeset
   536
    TX_LOG
hgs
parents:
diff changeset
   537
}
hgs
parents:
diff changeset
   538
hgs
parents:
diff changeset
   539
/*!
hgs
parents:
diff changeset
   540
 Shows the widget.
hgs
parents:
diff changeset
   541
 */
hgs
parents:
diff changeset
   542
void MusicWidget::onShow()
hgs
parents:
diff changeset
   543
{
hgs
parents:
diff changeset
   544
    TX_LOG
hgs
parents:
diff changeset
   545
    refreshData();
hgs
parents:
diff changeset
   546
}
hgs
parents:
diff changeset
   547
hgs
parents:
diff changeset
   548
/*!
hgs
parents:
diff changeset
   549
 Hides the widget.
hgs
parents:
diff changeset
   550
 */
hgs
parents:
diff changeset
   551
void MusicWidget::onHide()
hgs
parents:
diff changeset
   552
{
hgs
parents:
diff changeset
   553
    TX_LOG
hgs
parents:
diff changeset
   554
}
hgs
parents:
diff changeset
   555
hgs
parents:
diff changeset
   556
/*!
hgs
parents:
diff changeset
   557
 Uninitializes the widget.
hgs
parents:
diff changeset
   558
 */
hgs
parents:
diff changeset
   559
void MusicWidget::onUninitialize()
hgs
parents:
diff changeset
   560
{
hgs
parents:
diff changeset
   561
    TX_LOG
hgs
parents:
diff changeset
   562
}
hgs
parents:
diff changeset
   563
hgs
parents:
diff changeset
   564
/*!
hgs
parents:
diff changeset
   565
 Slot for shortcut button clicked.
hgs
parents:
diff changeset
   566
 */
hgs
parents:
diff changeset
   567
void MusicWidget::shortcutButton()
hgs
parents:
diff changeset
   568
{
hgs
parents:
diff changeset
   569
    TX_LOG
hgs
parents:
diff changeset
   570
    launchMusicPlayer(ELaunchFromShortcut);
hgs
parents:
diff changeset
   571
}
hgs
parents:
diff changeset
   572
hgs
parents:
diff changeset
   573
/*!
hgs
parents:
diff changeset
   574
 Slot for previous button clicked.
hgs
parents:
diff changeset
   575
 */
hgs
parents:
diff changeset
   576
void MusicWidget::prevSong()
hgs
parents:
diff changeset
   577
{ 
hgs
parents:
diff changeset
   578
    TX_LOG
hgs
parents:
diff changeset
   579
    mMpEngine->skipBackward();
hgs
parents:
diff changeset
   580
}
hgs
parents:
diff changeset
   581
hgs
parents:
diff changeset
   582
/*!
hgs
parents:
diff changeset
   583
 Slot for play button clicked. Handles both Play and Pause!
hgs
parents:
diff changeset
   584
 */
hgs
parents:
diff changeset
   585
void MusicWidget::playSong()
hgs
parents:
diff changeset
   586
{
hgs
parents:
diff changeset
   587
    TX_ENTRY
hgs
parents:
diff changeset
   588
    if (mMusicPlayerNoSongData && mMpPlaybackData->playbackState() != MpPlaybackData::Playing )
hgs
parents:
diff changeset
   589
        {
hgs
parents:
diff changeset
   590
        //Signal music player to start playing all songs with random
hgs
parents:
diff changeset
   591
        launchMusicPlayer(ELaunchFromPlay);
hgs
parents:
diff changeset
   592
        }
hgs
parents:
diff changeset
   593
hgs
parents:
diff changeset
   594
    mMpEngine->playPause();
hgs
parents:
diff changeset
   595
    TX_EXIT
hgs
parents:
diff changeset
   596
}
hgs
parents:
diff changeset
   597
/*!
hgs
parents:
diff changeset
   598
 Slot for next button clicked.
hgs
parents:
diff changeset
   599
 */
hgs
parents:
diff changeset
   600
void MusicWidget::nextSong()
hgs
parents:
diff changeset
   601
{
hgs
parents:
diff changeset
   602
    TX_LOG
hgs
parents:
diff changeset
   603
    mMpEngine->skipForward();
hgs
parents:
diff changeset
   604
}
hgs
parents:
diff changeset
   605
hgs
parents:
diff changeset
   606
/*!
hgs
parents:
diff changeset
   607
hgs
parents:
diff changeset
   608
 */
hgs
parents:
diff changeset
   609
bool MusicWidget::eventFilter(QObject *target, QEvent *event)
hgs
parents:
diff changeset
   610
 {
hgs
parents:
diff changeset
   611
    // pass the event on to the parent class
hgs
parents:
diff changeset
   612
    return HbWidget::eventFilter(target, event);    
hgs
parents:
diff changeset
   613
}
hgs
parents:
diff changeset
   614
hgs
parents:
diff changeset
   615
/*!
hgs
parents:
diff changeset
   616
 MpEngine related
hgs
parents:
diff changeset
   617
 */
55
hgs
parents: 47
diff changeset
   618
void MusicWidget::libraryUpdateStarted()
36
hgs
parents:
diff changeset
   619
{
hgs
parents:
diff changeset
   620
    TX_LOG
hgs
parents:
diff changeset
   621
    //Refresh Library start
hgs
parents:
diff changeset
   622
    mMusicPlayerUpdating = true;
hgs
parents:
diff changeset
   623
    
hgs
parents:
diff changeset
   624
    // Update button enabled/disabled state
hgs
parents:
diff changeset
   625
    toggleButtons();
hgs
parents:
diff changeset
   626
}
hgs
parents:
diff changeset
   627
hgs
parents:
diff changeset
   628
/*!
hgs
parents:
diff changeset
   629
 MpEngine related
hgs
parents:
diff changeset
   630
 */
hgs
parents:
diff changeset
   631
void MusicWidget::libraryUpdated()
hgs
parents:
diff changeset
   632
{
hgs
parents:
diff changeset
   633
    TX_LOG
hgs
parents:
diff changeset
   634
    //Refresh Library done
hgs
parents:
diff changeset
   635
    mMusicPlayerUpdating = false;
hgs
parents:
diff changeset
   636
    
hgs
parents:
diff changeset
   637
    // Update button enabled/disabled state
hgs
parents:
diff changeset
   638
    toggleButtons();
hgs
parents:
diff changeset
   639
}
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
/*!
hgs
parents:
diff changeset
   642
 MpEngine related
hgs
parents:
diff changeset
   643
 */
hgs
parents:
diff changeset
   644
void MusicWidget::usbBlocked( bool blocked )
hgs
parents:
diff changeset
   645
{
hgs
parents:
diff changeset
   646
    TX_LOG_ARGS("blocked: " << blocked)
hgs
parents:
diff changeset
   647
    //Blocked state
hgs
parents:
diff changeset
   648
    //Mass storage mode
hgs
parents:
diff changeset
   649
    //Media transfer mode
hgs
parents:
diff changeset
   650
    //Ovi Suite mode
hgs
parents:
diff changeset
   651
    //Insert memory card
hgs
parents:
diff changeset
   652
    
hgs
parents:
diff changeset
   653
    mMusicPlayerBlocked = blocked;
hgs
parents:
diff changeset
   654
    
hgs
parents:
diff changeset
   655
    // Update button enabled/disabled state
hgs
parents:
diff changeset
   656
    toggleButtons();
hgs
parents:
diff changeset
   657
}
hgs
parents:
diff changeset
   658
hgs
parents:
diff changeset
   659
/*!
hgs
parents:
diff changeset
   660
 MpPlaybackData related
hgs
parents:
diff changeset
   661
 */
hgs
parents:
diff changeset
   662
void MusicWidget::albumArtReady()
hgs
parents:
diff changeset
   663
{   
hgs
parents:
diff changeset
   664
    TX_ENTRY
hgs
parents:
diff changeset
   665
    HbIcon icon;
hgs
parents:
diff changeset
   666
    
47
hgs
parents: 45
diff changeset
   667
    if ( mMpPlaybackData->playbackState() == MpPlaybackData::NotPlaying )
36
hgs
parents:
diff changeset
   668
        {
hgs
parents:
diff changeset
   669
        TX_LOG_ARGS("1st time album art")
hgs
parents:
diff changeset
   670
        icon = HbIcon(ICON_FIRST_TIME_USE);    
hgs
parents:
diff changeset
   671
        }
hgs
parents:
diff changeset
   672
    else
hgs
parents:
diff changeset
   673
        {
hgs
parents:
diff changeset
   674
        TX_LOG_ARGS("playback data album art")
hgs
parents:
diff changeset
   675
        mMpPlaybackData->albumArt( icon );
hgs
parents:
diff changeset
   676
        }
hgs
parents:
diff changeset
   677
    
43
hgs
parents: 36
diff changeset
   678
    mAlbumArt->setIcon( icon );
hgs
parents: 36
diff changeset
   679
    mAlbumArt->setEnabled( true );
36
hgs
parents:
diff changeset
   680
    
hgs
parents:
diff changeset
   681
    TX_EXIT
hgs
parents:
diff changeset
   682
}
hgs
parents:
diff changeset
   683
hgs
parents:
diff changeset
   684
void MusicWidget::playbackStateChanged()
hgs
parents:
diff changeset
   685
{
hgs
parents:
diff changeset
   686
    TX_ENTRY
hgs
parents:
diff changeset
   687
    // Set play/pause icon and start/stop marquee.   
hgs
parents:
diff changeset
   688
    QString iconName;
hgs
parents:
diff changeset
   689
    
hgs
parents:
diff changeset
   690
    int state = mMpPlaybackData->playbackState();
hgs
parents:
diff changeset
   691
    
hgs
parents:
diff changeset
   692
    TX_LOG_ARGS("state: " << state)
hgs
parents:
diff changeset
   693
    
hgs
parents:
diff changeset
   694
    switch (state)
hgs
parents:
diff changeset
   695
        {
hgs
parents:
diff changeset
   696
        case MpPlaybackData::Playing:
hgs
parents:
diff changeset
   697
            {
hgs
parents:
diff changeset
   698
            TX_LOG_ARGS("pause icon, start marquee")
hgs
parents:
diff changeset
   699
            iconName.append(ICON_PAUSE);
hgs
parents:
diff changeset
   700
            mMarqueeText->startAnimation();
hgs
parents:
diff changeset
   701
            break;
hgs
parents:
diff changeset
   702
            }
hgs
parents:
diff changeset
   703
        case MpPlaybackData::Paused:
hgs
parents:
diff changeset
   704
        case MpPlaybackData::Stopped:
hgs
parents:
diff changeset
   705
        case MpPlaybackData::NotPlaying:       
hgs
parents:
diff changeset
   706
            {
hgs
parents:
diff changeset
   707
            TX_LOG_ARGS("play icon, stop marquee")
hgs
parents:
diff changeset
   708
            iconName.append(ICON_PLAY);
hgs
parents:
diff changeset
   709
            mMarqueeText->stopAnimation();
hgs
parents:
diff changeset
   710
            break;
hgs
parents:
diff changeset
   711
            }
hgs
parents:
diff changeset
   712
        }
hgs
parents:
diff changeset
   713
hgs
parents:
diff changeset
   714
    HbIcon iconPlayPause(iconName);
hgs
parents:
diff changeset
   715
    mPlayPushButton->setIcon(iconPlayPause);
hgs
parents:
diff changeset
   716
    
hgs
parents:
diff changeset
   717
    TX_EXIT
hgs
parents:
diff changeset
   718
}
hgs
parents:
diff changeset
   719
hgs
parents:
diff changeset
   720
/*!
hgs
parents:
diff changeset
   721
 MpPlaybackData related
hgs
parents:
diff changeset
   722
 */
hgs
parents:
diff changeset
   723
void MusicWidget::playbackInfoChanged()
hgs
parents:
diff changeset
   724
{ 
hgs
parents:
diff changeset
   725
    TX_ENTRY
hgs
parents:
diff changeset
   726
    // Initialize maqruee with something (space), to ensure
hgs
parents:
diff changeset
   727
    // text updates to display as well.
hgs
parents:
diff changeset
   728
    QString songData;
hgs
parents:
diff changeset
   729
    
hgs
parents:
diff changeset
   730
    mArtist = mMpPlaybackData->artist();
hgs
parents:
diff changeset
   731
    mTitle = mMpPlaybackData->title();
hgs
parents:
diff changeset
   732
    
hgs
parents:
diff changeset
   733
    if ( !mTitle.length() )
hgs
parents:
diff changeset
   734
        {
hgs
parents:
diff changeset
   735
        mArtist.clear();
hgs
parents:
diff changeset
   736
        mTitle.clear();
hgs
parents:
diff changeset
   737
        songData = " ";
hgs
parents:
diff changeset
   738
hgs
parents:
diff changeset
   739
        //1st time launch
hgs
parents:
diff changeset
   740
        mMusicPlayerNoSongData = true;
hgs
parents:
diff changeset
   741
        
hgs
parents:
diff changeset
   742
        TX_LOG_ARGS("no song data")
hgs
parents:
diff changeset
   743
        }
hgs
parents:
diff changeset
   744
    else
hgs
parents:
diff changeset
   745
        {
hgs
parents:
diff changeset
   746
        if ( !mArtist.length() )
hgs
parents:
diff changeset
   747
            {
hgs
parents:
diff changeset
   748
            //Show localized "Unknown" if there is no artist name
hgs
parents:
diff changeset
   749
            
hgs
parents:
diff changeset
   750
            //TODO: Widget needs own localization?!?!
hgs
parents:
diff changeset
   751
            //mArtist.append( hbTrId(UNKWNOWN_TEXT) );
hgs
parents:
diff changeset
   752
hgs
parents:
diff changeset
   753
            //TODO: Remove temporary unknown string when localization resolved.
hgs
parents:
diff changeset
   754
            mArtist.append( TEMPORARY_UNKWNOWN_TEXT );
hgs
parents:
diff changeset
   755
            }
hgs
parents:
diff changeset
   756
        
hgs
parents:
diff changeset
   757
        songData.append(mArtist);
hgs
parents:
diff changeset
   758
        songData.append(SEPARATOR_TEXT);
hgs
parents:
diff changeset
   759
        songData.append(mTitle);
hgs
parents:
diff changeset
   760
        
hgs
parents:
diff changeset
   761
        mMusicPlayerNoSongData = false;
hgs
parents:
diff changeset
   762
        
hgs
parents:
diff changeset
   763
        TX_LOG_ARGS("song data received")
hgs
parents:
diff changeset
   764
        }    
hgs
parents:
diff changeset
   765
    
hgs
parents:
diff changeset
   766
    mMarqueeText->setText(songData);
hgs
parents:
diff changeset
   767
    TX_LOG_ARGS("marquee text: " << songData)
hgs
parents:
diff changeset
   768
hgs
parents:
diff changeset
   769
    // Show dark BG to songdata only if there is songdata...
hgs
parents:
diff changeset
   770
    if ( mMusicPlayerNoSongData && mSongDataBG->isVisible() )
hgs
parents:
diff changeset
   771
        {
hgs
parents:
diff changeset
   772
        TX_LOG_ARGS("hide marquee bg")
hgs
parents:
diff changeset
   773
        mSongDataBG->hide();
hgs
parents:
diff changeset
   774
        }
hgs
parents:
diff changeset
   775
    else if ( !mMusicPlayerNoSongData && !mSongDataBG->isVisible() )
hgs
parents:
diff changeset
   776
        {
hgs
parents:
diff changeset
   777
        TX_LOG_ARGS("show marquee bg")
hgs
parents:
diff changeset
   778
        mSongDataBG->show();  
hgs
parents:
diff changeset
   779
        }
hgs
parents:
diff changeset
   780
    
hgs
parents:
diff changeset
   781
    // Update button enabled/disabled state
hgs
parents:
diff changeset
   782
    toggleButtons();
hgs
parents:
diff changeset
   783
    
hgs
parents:
diff changeset
   784
    TX_EXIT
hgs
parents:
diff changeset
   785
}
hgs
parents:
diff changeset
   786
hgs
parents:
diff changeset
   787
/*!
hgs
parents:
diff changeset
   788
 Toggle buttons to disabled/enabled as required.
hgs
parents:
diff changeset
   789
 */
hgs
parents:
diff changeset
   790
void MusicWidget::toggleButtons()
hgs
parents:
diff changeset
   791
{ 
hgs
parents:
diff changeset
   792
    TX_ENTRY
hgs
parents:
diff changeset
   793
    // All buttons disabled if updating
hgs
parents:
diff changeset
   794
    if ( mMusicPlayerUpdating )
hgs
parents:
diff changeset
   795
        {
hgs
parents:
diff changeset
   796
        TX_LOG_ARGS("updating")
hgs
parents:
diff changeset
   797
        mediaButtonDisabled( EPlayPause );
hgs
parents:
diff changeset
   798
        mediaButtonDisabled( EPrevious );
hgs
parents:
diff changeset
   799
        mediaButtonDisabled( ENext );
hgs
parents:
diff changeset
   800
        }
hgs
parents:
diff changeset
   801
    
hgs
parents:
diff changeset
   802
    // All buttons disabled if blocked
hgs
parents:
diff changeset
   803
    else if ( mMusicPlayerBlocked )
hgs
parents:
diff changeset
   804
        {
hgs
parents:
diff changeset
   805
        TX_LOG_ARGS("blocked")
hgs
parents:
diff changeset
   806
        mediaButtonDisabled( EPlayPause );
hgs
parents:
diff changeset
   807
        mediaButtonDisabled( EPrevious );
hgs
parents:
diff changeset
   808
        mediaButtonDisabled( ENext );
hgs
parents:
diff changeset
   809
        }    
hgs
parents:
diff changeset
   810
    
hgs
parents:
diff changeset
   811
    // Only play button enabled if there is no song data, 1st time use
hgs
parents:
diff changeset
   812
    else if ( mMusicPlayerNoSongData )
hgs
parents:
diff changeset
   813
        {
hgs
parents:
diff changeset
   814
        TX_LOG_ARGS("no song data")
hgs
parents:
diff changeset
   815
        mediaButtonEnabled( EPlayPause );
hgs
parents:
diff changeset
   816
        mediaButtonDisabled( EPrevious );
hgs
parents:
diff changeset
   817
        mediaButtonDisabled( ENext );
hgs
parents:
diff changeset
   818
        }
hgs
parents:
diff changeset
   819
    
hgs
parents:
diff changeset
   820
    // Enable all buttons if there is song data
hgs
parents:
diff changeset
   821
    else
hgs
parents:
diff changeset
   822
        {
hgs
parents:
diff changeset
   823
        TX_LOG_ARGS("enable all buttons")
hgs
parents:
diff changeset
   824
        mediaButtonEnabled( EPlayPause );      
hgs
parents:
diff changeset
   825
        mediaButtonEnabled( EPrevious );
hgs
parents:
diff changeset
   826
        mediaButtonEnabled( ENext );      
hgs
parents:
diff changeset
   827
        }
hgs
parents:
diff changeset
   828
    TX_EXIT
hgs
parents:
diff changeset
   829
}