diff -r 000000000000 -r 09774dfdd46b qtinternetradio/ui/src/irsearchchannelsview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtinternetradio/ui/src/irsearchchannelsview.cpp Mon Apr 19 14:01:53 2010 +0300 @@ -0,0 +1,384 @@ +/* +* 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: +* +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "irqisdsdatastructure.h" +#include "irsearchchannelsview.h" +#include "irabstractviewmanager.h" +#include "irstationsview.h" +#include "irqnetworkcontroller.h" +#include "irbannerlabel.h" +#include "irqmetadata.h" +#include "irplaycontroller.h" +#include "irqisdsclient.h" +#include "irapplication.h" +#include "irsearchcriteriadb.h" +#include "ircombobox.h" +#include "iruidefines.h" + +const QString KInitialString = "Input key string"; + +IRSearchChannelsView::IRSearchChannelsView(IRApplication* aApplication, + TIRViewId aViewId): IRBaseView(aApplication, aViewId),iCollectionsAction(NULL),iFavoritesAction(NULL), + iGenresAction(NULL),iSearchAction(NULL),iSearchButton(NULL),iSearchText(NULL),iSearchIconLabel(NULL), + iSearchCombobox(NULL),iFirstTime(true),iBannerLabel(NULL),iDB(NULL) + +{ + // Create widget hierarchy + setObjectName( SEARCH_CHANNELS_VIEW_OBJECT_VIEW ); + + // List existing root elements - this allows us to refer to objects in the XML + // which are created outside the document. + QObjectList roots; + roots.append( this ); + iLoader.setObjectTree( roots ); + + iLoader.load(SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME); + iLoader.load(SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME,SEARCH_CHANNELS_VIEW_NO_PLAYINGBANNER_SECTION); + + iSearchCombobox = qobject_cast (iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SEARCHKEY_LABEL)); + iSearchButton = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SEARCHKEY_BUTTON)); + iBannerLabel = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_PLAYING_BANNER)); + + initContentWidget(); + initToolBar(); + initMenu(); + createDB(); +} + +IRSearchChannelsView::~IRSearchChannelsView() +{ + delete iDB; + iDB = NULL; +} + + +void IRSearchChannelsView::helpAction() +{ + popupNote(tr("Not ready"), HbMessageBox::MessageTypeInformation); +} + + + +TIRHandleResult IRSearchChannelsView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason) +{ + Q_UNUSED(aReason); + TIRHandleResult ret = EIR_DoDefault; + QString str = ""; + + switch (aCommand) + { + case EIR_ViewCommand_ACTIVATED: + updateView(); + iBannerLabel->startAnimation(); + str = iSearchCombobox->currentText(); + str = str.trimmed(); + if( str == KInitialString || "" == str) + iSearchButton->setEnabled(false); + else + iSearchButton->setEnabled(true); + + iSearchAction->setChecked(true); + break; + + case EIR_ViewCommand_DEACTIVATE: + iBannerLabel->stopAnimation(); + break; + } + + return ret; +} + + +void IRSearchChannelsView::initContentWidget() +{ + iBannerLabel->setFontSpec(HbFontSpec(HbFontSpec::Primary)); + + iSearchButton->setEnabled(false); + iSearchCombobox->setEditable(true); + iSearchCombobox->setEditText(KInitialString); + + connect(iSearchButton, SIGNAL(clicked(bool)),this, SLOT(startSearch(bool))); + connect(iSearchCombobox, SIGNAL(editTextChanged(const QString&)), this, SLOT(searchBoxTextChanged(const QString&))); + connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)), this, SLOT(networkRequestNotified(IRQNetworkEvent))); + connect(iSearchCombobox, SIGNAL(pressed()), this, SLOT(comboboxClicked())); + connect(iPlayController, SIGNAL(metaDataAvailable(IRQMetaData*)), this, + SLOT(metaDataAvailable(IRQMetaData*))); + connect(iPlayController, SIGNAL(playingStopped()), this, + SLOT(removeBanner())); + connect(iBannerLabel, SIGNAL(pressed()), this, SLOT(gotoNowPlaying())); +} + +void IRSearchChannelsView::initMenu() +{ + + HbAction *settings = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SETTING_ACTION)); + HbAction *openWebAdressAction = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_OPEN_WEB_ADDRESS_ACTION)); + HbAction *helpAction = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_HELP_ACTION)); + HbAction *exitAction = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_EXIT_ACTION)); + + connect(settings, SIGNAL(triggered()), this, SLOT(launchSettingsView())); + connect(openWebAdressAction, SIGNAL(triggered()), this, SLOT(openWebAddress())); + connect(helpAction, SIGNAL(triggered()), this, SLOT(helpAction())); + connect(exitAction, SIGNAL(triggered()), iApplication, SIGNAL(quit())); +} + + +void IRSearchChannelsView::initToolBar() +{ + HbToolBar *viewToolBar = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_TOOLBAR)); + + QActionGroup *actionGroup = new QActionGroup(this); + + iCollectionsAction = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_COLLECTION_ACTION)); + iCollectionsAction->setActionGroup(actionGroup); + + iFavoritesAction = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_FAVORITES_ACTION)); + iFavoritesAction->setActionGroup(actionGroup); + + iGenresAction = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_GENRES_ACTION)); + iGenresAction->setActionGroup(actionGroup); + + iSearchAction = qobject_cast(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SEARCH_ACTION)); + iSearchAction->setActionGroup(actionGroup); + + connect(iCollectionsAction, SIGNAL(triggered()), this, SLOT(collectionsActionClicked())); + connect(iFavoritesAction, SIGNAL(triggered()), this, SLOT(favoritesActionClicked())); + connect(iGenresAction, SIGNAL(triggered()), iApplication, SLOT(loadGenre())); + + iSearchAction->setChecked(true); +} + +void IRSearchChannelsView::collectionsActionClicked() +{ + getViewManager()->activateView(EIRView_MainView); +} + +void IRSearchChannelsView::favoritesActionClicked() +{ + getViewManager()->activateView(EIRView_FavoritesView); +} + +void IRSearchChannelsView::startSearch(bool aBool) +{ + Q_UNUSED(aBool); + setUseNetworkReason(EIR_UseNetwork_StartSearch); + if (false == iApplication->verifyNetworkConnectivity()) + { + return; + } + setUseNetworkReason(EIR_UseNetwork_NoReason); + + QString str = iSearchCombobox->currentText(); + str = str.trimmed(); + + if( "" == str ) + { + return; + } + + bool exists = iDB->isAlreadyExist(str); + if (!exists) + { + iDB->addOneCriteria(str); + } + + IRStationsView *searchResultView = + static_cast (getViewManager()->getView( + EIRView_SearchResultView, true)); + + searchResultView->loadSearchResult(str); +} + + +void IRSearchChannelsView::searchBoxTextChanged(const QString &aString) +{ + QString str = aString.trimmed(); + if( "" != str ) + { + iSearchButton->setEnabled(true); + } + else + { + iSearchButton->setEnabled(false); + } +} + +void IRSearchChannelsView::cancelRequest() +{ + iIsdsClient->isdsCancelRequest(); +} + +void IRSearchChannelsView::networkRequestNotified(IRQNetworkEvent aEvent) +{ + if (getViewManager()->currentView() != this) + { + return; + } + + switch (aEvent) + { + case EIRQNetworkConnectionEstablished: + iApplication->closeConnectingDialog(); + if(EIR_UseNetwork_StartSearch == getUseNetworkReason()) + { + QString str = iSearchCombobox->currentText(); + str = str.trimmed(); + + if ("" == str) + { + return; + } + + bool exists = iDB->isAlreadyExist(str); + if (!exists) + { + iDB->addOneCriteria(str); + } + + IRStationsView *searchResultView = static_cast (getViewManager()->getView( + EIRView_SearchResultView, true)); + + searchResultView->loadSearchResult(str); + } + + setUseNetworkReason(EIR_UseNetwork_NoReason); + break; + + default: + iSearchAction->setChecked(true); + break; + } +} + +void IRSearchChannelsView::comboboxClicked() +{ + if( iFirstTime ) + { + iSearchCombobox->clearEditText(); + iFirstTime = false; + } +} + + +void IRSearchChannelsView::launchSettingsView() +{ + getViewManager()->activateView(EIRView_SettingsView); +} + +void IRSearchChannelsView::openWebAddress() +{ + getViewManager()->activateView(EIRView_OpenWebAddressView); +} + +void IRSearchChannelsView::gotoNowPlaying() +{ + Q_ASSERT(iPlayController->isPlaying()); + + getViewManager()->activateView(EIRView_PlayingView); +} + +void IRSearchChannelsView::addBanner(const QString &aText) +{ + iLoader.load(SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME, SEARCH_CHANNELS_VIEW_WITH_PLAYINGBANNER_SECTION); + iBannerLabel->setText(aText); + iBannerLabel->setLoopCount(-1); +} + +void IRSearchChannelsView::metaDataAvailable(IRQMetaData* aMetaData) +{ + if (!aMetaData) + { + return; + } + + const QString artistSongName = aMetaData->getArtistSongName(); + if ("" != artistSongName.trimmed() && "-" != artistSongName.trimmed()) + { + addBanner(aMetaData->getArtistSongName()); + } + else + { + //set the banner text as station name + IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset(); + Q_ASSERT(nowPlayingPreset); + addBanner(nowPlayingPreset->name); + } +} + +void IRSearchChannelsView::updateView() +{ + if (iPlayController->isPlaying()) + { + IRQMetaData *metaData = iPlayController->getMetaData(); + if (metaData && "" != metaData->getArtistSongName().trimmed() && + "-" != metaData->getArtistSongName().trimmed()) + { + //set the banner text as song name + addBanner(metaData->getArtistSongName()); + } + else + { + //set the banner text as station name + IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset(); + Q_ASSERT(nowPlayingPreset); + addBanner(nowPlayingPreset->name); + } + } + else + { + removeBanner(); + } +} + +void IRSearchChannelsView::removeBanner() +{ + iBannerLabel->stopAnimation(); + iLoader.load(SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME,SEARCH_CHANNELS_VIEW_NO_PLAYINGBANNER_SECTION); +} + +void IRSearchChannelsView::createDB() +{ + iDB = new IRSearchCriteriaDB(); + QStringList strList; + iDB->getAllCriteria(strList); + QStringListModel* comboboxListModel = new QStringListModel(iSearchCombobox); + iSearchCombobox->setModel(comboboxListModel); + comboboxListModel->setStringList(strList); + connect(iDB, SIGNAL(dataAdded()),this, SLOT(dbDataChanged())); +} + +void IRSearchChannelsView::dbDataChanged() +{ + QStringList strList; + bool ret = iDB->getAllCriteria(strList); + + if (ret) + { + (static_cast (iSearchCombobox->model()))->setStringList( + strList); + } +} +