diff -r cce62ebc198e -r 93c594350b9a radioapp/radiowidgets/src/radiocarouselitem.cpp --- a/radioapp/radiowidgets/src/radiocarouselitem.cpp Tue Aug 31 15:15:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,419 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -// System includes -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "radiocarouselitem.h" -#include "radiocarouselitemobserver.h" -#include "radiostation.h" -#include "radiologger.h" - -const QLatin1String FILE_PATH_WIDGETML ( ":/layout/radiocarouselitem.widgetml" ); -const QLatin1String FILE_PATH_CSS ( ":/layout/radiocarouselitem.css" ); -const QLatin1String ICON_BUTTON ( "star_button" ); -const QLatin1String GENRE_LABEL ( "genre_label" ); -const QLatin1String FAVORITE_TOUCH_AREA ( "favorite_touch_area" ); -const QLatin1String NAME_LABEL ( "name_label" ); -const QLatin1String RT_LABEL ( "rt_label" ); -const QLatin1String URL_LABEL ( "url_label" ); - -const QLatin1String SEEKING_TEXT ( "txt_rad_list_tuning" ); -const QLatin1String CONNECT_HEADSET_TEXT( "txt_rad_list_connect_wireless_antenna_headset_with" ); - -/*! - * - */ -static void registerAndCheck( const QString& file ) { - bool registered = HbStyleLoader::registerFilePath( file ); - Q_ASSERT_X( registered, "RadioCarouselItem", "Failed to register CSS or WIDGETML!" ); -} - -/*! - * - */ -RadioCarouselItem::RadioCarouselItem( RadioCarouselItemObserver& observer, QGraphicsItem* parent, bool registerCss ) : - HbWidget( parent ), - mObserver( observer ), - mFavoriteItem( NULL ), - mGenreItem( NULL ), - mFavoriteTouchArea( NULL ), - mNameItem( NULL ), - mRadiotextItem( NULL ), - mUrlItem( NULL ), - mAppearance( Default ), - mOwnsCss( registerCss ), - mLandscapeMode( false ), - mFlags( DefaultFlags ) -{ - mStation.reset( new RadioStation() ); - - if ( mOwnsCss ) { - registerAndCheck( FILE_PATH_CSS ); - registerAndCheck( FILE_PATH_WIDGETML ); - } - - createPrimitives(); - updatePrimitives(); - - updateFavoriteIcon( false ); - - updateVisibilities(); - - grabGesture( Qt::TapGesture ); -} - -/*! - * - */ -RadioCarouselItem::~RadioCarouselItem() -{ - if ( mOwnsCss ) { - HbStyleLoader::unregisterFilePath( FILE_PATH_CSS ); - HbStyleLoader::unregisterFilePath( FILE_PATH_WIDGETML ); - } -} - -/*! - * - */ -void RadioCarouselItem::createPrimitives() -{ - mFavoriteItem = new HbIconItem( this ); - HbStyle::setItemName( mFavoriteItem, ICON_BUTTON ); - - mGenreItem = new HbTextItem( this ); - HbStyle::setItemName( mGenreItem, GENRE_LABEL ); - - mNameItem = new HbTextItem( this ); - HbStyle::setItemName( mNameItem, NAME_LABEL ); - - mRadiotextItem = new HbRichTextItem( this ); - HbStyle::setItemName( mRadiotextItem, RT_LABEL ); - - mUrlItem = new HbTextItem( this ); - HbStyle::setItemName( mUrlItem, URL_LABEL ); - - mFavoriteTouchArea = new HbTouchArea( this ); - HbStyle::setItemName( mFavoriteTouchArea, FAVORITE_TOUCH_AREA ); - - // Matti testing needs these - mFavoriteItem->setObjectName( ICON_BUTTON ); - mGenreItem->setObjectName( GENRE_LABEL ); - mNameItem->setObjectName( NAME_LABEL ); - mRadiotextItem->setObjectName( RT_LABEL ); - mUrlItem->setObjectName( URL_LABEL ); - mFavoriteTouchArea->setObjectName( FAVORITE_TOUCH_AREA ); -} - -/*! - * - */ -void RadioCarouselItem::drawOffScreen( QPainter& painter ) -{ - QStyleOptionGraphicsItem option; - - foreach ( QGraphicsItem* child, childItems() ) { - QGraphicsWidget* childWidget = static_cast( child ); - option.exposedRect = childWidget->rect(); - painter.save(); - painter.translate( childWidget->pos() ); - childWidget->paint( &painter, &option, NULL ); - painter.restore(); - } -} - -/*! - * - */ -void RadioCarouselItem::updatePrimitives() -{ - update(); -} - -/*! - * \reimp - */ -void RadioCarouselItem::gestureEvent( QGestureEvent* event ) -{ - if ( HbTapGesture* gesture = qobject_cast( event->gesture( Qt::TapGesture ) ) ) { - if ( gesture->state() == Qt::GestureFinished ) { - const QPointF mappedHotSpot = event->mapToGraphicsScene( gesture->hotSpot() ); - - if ( mFlags.testFlag( FavoriteTouchable ) && - mFavoriteTouchArea->sceneBoundingRect().contains( mappedHotSpot ) ) { - - mObserver.handleIconClicked( *mStation ); - - } else if ( mFlags.testFlag( RadiotextTouchable ) && - mRadiotextItem->sceneBoundingRect().contains( mappedHotSpot ) ) { - - mObserver.handleRadiotextClicked( *mStation ); - - } else if ( mFlags.testFlag( UrlTouchable ) && - mUrlItem->sceneBoundingRect().contains( mappedHotSpot ) ) { - - mObserver.handleUrlClicked( *mStation ); - - } - } - } -} - -/*! - * - */ -void RadioCarouselItem::setFlags( CarouselItemFlags flags ) -{ - mFlags |= flags; - updateVisibilities(); -} - -/*! - * - */ -void RadioCarouselItem::clearFlags( CarouselItemFlags flags ) -{ - for ( int i = 1; i < LastFlagMarker; i = i << 1 ) { - if ( flags.testFlag( static_cast( i ) ) ) { - mFlags &= ~i; - } - } - updateVisibilities(); -} - -/*! - * - */ -void RadioCarouselItem::updateVisibilities() -{ - mFavoriteItem->setVisible( mFlags.testFlag( FavoriteVisible ) ); - mGenreItem->setVisible( mFlags.testFlag( GenreVisible ) ); - mRadiotextItem->setVisible( mFlags.testFlag( RadiotextVisible ) ); - mUrlItem->setVisible( mFlags.testFlag( UrlVisible ) ); -} - -/*! - * - */ -void RadioCarouselItem::setAppearance( Appearance appearance ) -{ - mAppearance = appearance; - - if ( mAppearance == ManualSeek ) { - mFlags = ManualSeekFlags; - mGenreItem->setText( "" ); - mRadiotextItem->setText( "" ); - mUrlItem->setText( "" ); - mNameItem->setText( mStation->frequencyString() ); - updateFavoriteIcon( false ); - } else { - mFlags = DefaultFlags; - } - - updateVisibilities(); - - repolish(); -} - -/*! - * - */ -RadioCarouselItem::Appearance RadioCarouselItem::appearance() const -{ - return mAppearance; -} - -/*! - * - */ -void RadioCarouselItem::setLandscape( bool landscape ) -{ - mLandscapeMode = landscape; -} - -/*! - * - */ -bool RadioCarouselItem::landscape() const -{ - return mLandscapeMode; -} - -/*! - * - */ -void RadioCarouselItem::setSeekLayout( bool seekLayout ) -{ - if ( seekLayout ) { - setAppearance( ManualSeek ); - } else { - setAppearance( mStation->radioText().isEmpty() ? Default : Full ); - } -} - -/*! - * - */ -void RadioCarouselItem::setStation( const RadioStation& station ) -{ - *mStation = station; - - updateLayout(); - - update(); -} - -/*! - * - */ -uint RadioCarouselItem::frequency() const -{ - return mStation->frequency(); -} - -/*! - * - */ -void RadioCarouselItem::update( const RadioStation* station ) -{ - if ( station ) { - *mStation = *station; - updateLayout(); - } - - if ( mStation->isValid() ) { - mGenreItem->setText( mObserver.localizeGenre( mStation->genre() ) ); - - const bool hasName = mStation->hasName(); - if ( hasName ) { - mNameItem->setText( mStation->name() ); - } else { - mNameItem->setText( mStation->frequencyString() ); - } - - if ( mStation->hasRadiotext() ) { - mRadiotextItem->setText( mStation->radioText() ); - } else { - if ( mStation->hasDynamicPs() ) { - mRadiotextItem->setText( mStation->dynamicPsText() ); - } else if ( hasName ) { - const QString loc = "%L1 Mhz"; //hbTrId( "txt_rad_list_l1_mhz_small" ); - mRadiotextItem->setText( loc.arg( mStation->frequencyString() ) ); - } else { - mRadiotextItem->setText( "" ); - } - } - - mUrlItem->setText( mStation->url() ); - if ( mStation->hasUrl() ) { - HbStyle::setItemName( mUrlItem, URL_LABEL ); - setFlags( UrlVisible | UrlTouchable ); - } else { - HbStyle::setItemName( mUrlItem, "" ); // Clear the name so the item disappears from layout - clearFlags( UrlVisible | UrlTouchable ); - } - - updateFavoriteIcon( mStation->isFavorite() ); - } else { - cleanRdsData(); - } -} - -/*! - * - */ -void RadioCarouselItem::setFrequency( uint frequency ) -{ - LOG_FORMAT( "RadioCarouselItem::setFrequency: %d", frequency ); - - mNameItem->setText( RadioStation::parseFrequency( frequency ) ); - - if ( !mObserver.isInManualSeek() ) { - *mStation = mObserver.findStation( frequency ); - } -} - -/*! - * - */ -void RadioCarouselItem::cleanRdsData() -{ - mGenreItem->setText( "" ); - mRadiotextItem->setText( "" ); - mUrlItem->setText( "" ); -} - -/*! - * - */ -void RadioCarouselItem::setRadioText( const QString& text ) -{ - mRadiotextItem->setText( text ); -} - -/*! - * - */ -void RadioCarouselItem::setItemVisibility( ItemVisibility visibility ) -{ - CarouselItemFlags flags = 0; - if ( visibility == AllVisible ) { - flags = DefaultFlags; - } else if ( visibility == AllHidden ) { - - } else if ( visibility == IconVisible ) { - flags = FavoriteVisible; - } - - setFlags( flags ); -} - -/*! - * - */ -void RadioCarouselItem::setIconOpacity( qreal opacity ) -{ - mFavoriteItem->setOpacity( opacity ); -} - -/*! - * - */ -void RadioCarouselItem::updateFavoriteIcon( bool isFavorite ) -{ - if ( isFavorite ) { - mFavoriteItem->setIcon( mObserver.favoriteIcon() ); - } else { - mFavoriteItem->setIcon( mObserver.nonFavoriteIcon() ); - } -} - -/*! - * - */ -void RadioCarouselItem::updateLayout() -{ - setAppearance( mStation->hasSentRds() ? Full : Default ); -}