qtinternetradio/irhswidgetplugin/src/irhswidgetmetadatarow.cpp
changeset 12 608f67c22514
child 14 896e9dbc5f19
equal deleted inserted replaced
11:f683e24efca3 12:608f67c22514
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Internet Radio home screen widget
       
    15 *
       
    16 */
       
    17 // System includes
       
    18 #include <QGraphicsLinearLayout>
       
    19 #include <HbLabel>
       
    20 #include <HbMarqueeItem>
       
    21 #include <HbIconAnimationManager>
       
    22 #include <HbIconAnimationDefinition>
       
    23 #include <HbColorScheme>
       
    24 #include <HbStyleLoader>
       
    25 
       
    26 // User includes
       
    27 #include "irhswidgetmetadatarow.h"
       
    28 #include "irhswidgetuiloader.h"
       
    29 
       
    30 // Constants
       
    31 static const QString KIrHsWidgetMetaDataRowDocML       = ":/resource/irhswidgetmetadatarow.docml";
       
    32 static const QString KIrHsWidgetMetaDataRowContainer   = "metadatarow_layout";
       
    33 static const QString KIrHsWidgetMetaDataLabel          = "metadata_label";
       
    34 static const QString KNmHsWidgetControlLabel           = "control_label";
       
    35 
       
    36 static const QString KPlayButtonIcon     = "qtg_mono_play";
       
    37 static const QString KStopButtonIcon     = "qtg_mono_stop";
       
    38 static const QString KMetaDataColor      = "qtc_hs_list_item_title";
       
    39 
       
    40 static const QString KLoadingAnimationPrefix  = "qtg_anim_loading_";
       
    41 static const QString KLoadingIconName         = "LoadingAnimation";
       
    42 
       
    43 static const int KIrHsWidgetContentsMargin  = 0;
       
    44 static const int KLoadingFramePostfixMin    = 1;  // loading animation frame name postfix (min value) defined in layout guide.
       
    45 static const int KLoadingFramePostfixMax    = 10; // loading animation frame name postfix (max value) defined in layout guide.
       
    46 static const int KLoadingAnimationDuration  = 100; // duration for frames to construct a animation, unit : ms
       
    47 
       
    48 IrHsWidgetMetaDataRow::IrHsWidgetMetaDataRow(QGraphicsItem *aParent, Qt::WindowFlags aFlags) :
       
    49     HbWidget(aParent, aFlags), 
       
    50     mMetaData(NULL), 
       
    51     mControlLabel(NULL)
       
    52 {
       
    53     loadUi();
       
    54     createLoadingIcon();
       
    55 }
       
    56 
       
    57 
       
    58 IrHsWidgetMetaDataRow::~IrHsWidgetMetaDataRow()
       
    59 {
       
    60 }
       
    61 
       
    62 void IrHsWidgetMetaDataRow::loadUi()
       
    63 {
       
    64     IRHsWidgetUiLoader loader;
       
    65     loader.load(KIrHsWidgetMetaDataRowDocML);
       
    66 
       
    67     QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
       
    68     layout->setContentsMargins(KIrHsWidgetContentsMargin, KIrHsWidgetContentsMargin,
       
    69         KIrHsWidgetContentsMargin, KIrHsWidgetContentsMargin);
       
    70     layout->setSpacing(KIrHsWidgetContentsMargin);
       
    71     setLayout(layout);
       
    72 
       
    73     QGraphicsWidget *container = loader.findWidget(KIrHsWidgetMetaDataRowContainer);
       
    74     layout->addItem(container);   
       
    75                       
       
    76     mMetaData = static_cast<HbMarqueeItem*> (loader.findWidget(KIrHsWidgetMetaDataLabel));
       
    77     mControlLabel  = static_cast<HbLabel*> (loader.findWidget(KNmHsWidgetControlLabel));
       
    78     mMetaData->setTextColor(HbColorScheme::color(KMetaDataColor));  
       
    79     mMetaData->setLoopCount(-1);
       
    80                     
       
    81     mMetaData->installEventFilter(this);
       
    82     mControlLabel->installEventFilter(this);        
       
    83 }
       
    84 
       
    85 void IrHsWidgetMetaDataRow::setMetaData(const QString &aMetaData)
       
    86 {      
       
    87     if (mMetaData->text() != aMetaData)
       
    88     {
       
    89         mMetaData->setText(aMetaData);
       
    90         if (aMetaData.isEmpty())
       
    91         {
       
    92             mMetaData->stopAnimation();        
       
    93         }
       
    94         else
       
    95         {
       
    96             mMetaData->startAnimation();
       
    97         }
       
    98     }    
       
    99 }
       
   100 
       
   101 void IrHsWidgetMetaDataRow::startMetaDataMarquee()
       
   102 {    
       
   103     if (!mMetaData->text().isEmpty())
       
   104     {
       
   105         mMetaData->startAnimation();        
       
   106     }      
       
   107 }
       
   108     
       
   109 void IrHsWidgetMetaDataRow::stopMetaDataMarquee()
       
   110 {
       
   111     mMetaData->stopAnimation(); 
       
   112 }   
       
   113 
       
   114 void IrHsWidgetMetaDataRow::setPlayIcon()
       
   115 {
       
   116     mControlLabel->setIcon(KPlayButtonIcon);
       
   117 }
       
   118     
       
   119 void IrHsWidgetMetaDataRow::setStopIcon()
       
   120 {
       
   121     mControlLabel->setIcon(KStopButtonIcon);
       
   122 }
       
   123     
       
   124 void IrHsWidgetMetaDataRow::setLoadingIcon()
       
   125 {
       
   126     mControlLabel->setIcon(mLoadingIcon);
       
   127 }    
       
   128     
       
   129 bool IrHsWidgetMetaDataRow::eventFilter(QObject *aObject, QEvent *aEvent)
       
   130 {
       
   131     QString objectName     = aObject->objectName();
       
   132     
       
   133     if (QEvent::GraphicsSceneMousePress == aEvent->type())
       
   134     {
       
   135         
       
   136         if (KIrHsWidgetMetaDataLabel == objectName)
       
   137         {
       
   138             emit metaDataAreaClicked();
       
   139         }
       
   140         else if (KNmHsWidgetControlLabel == objectName)
       
   141         {
       
   142             emit controlAreaClicked();
       
   143         }
       
   144     }
       
   145         
       
   146     return false;
       
   147 }
       
   148 
       
   149 void IrHsWidgetMetaDataRow::createLoadingIcon()
       
   150 {
       
   151     HbIconAnimationManager *animationManager = HbIconAnimationManager::global();
       
   152     HbIconAnimationDefinition animationDefinition;
       
   153     HbIconAnimationDefinition::AnimationFrame animationFrame;
       
   154     QList<HbIconAnimationDefinition::AnimationFrame> animationFrameList;
       
   155     
       
   156     QString animationFrameIconName;
       
   157     for (int i = KLoadingFramePostfixMin; i <= KLoadingFramePostfixMax; i++)
       
   158     {
       
   159         animationFrame.duration = KLoadingAnimationDuration;
       
   160         animationFrameIconName.clear();
       
   161         animationFrameIconName.append(KLoadingAnimationPrefix);
       
   162         animationFrameIconName.append(animationFrameIconName.number(i));
       
   163         animationFrame.iconName = animationFrameIconName;
       
   164         animationFrameList.append(animationFrame);
       
   165     }
       
   166     animationDefinition.setPlayMode(HbIconAnimationDefinition::Loop);
       
   167     animationDefinition.setFrameList(animationFrameList);
       
   168     animationManager->addDefinition(KLoadingIconName, animationDefinition);
       
   169 
       
   170     mLoadingIcon.setIconName(KLoadingIconName);        
       
   171 }