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