--- /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 <hbpushbutton.h>
+#include <hbtoolbar.h>
+#include <hbaction.h>
+#include <QFont>
+#include <QActionGroup>
+#include <QSizePolicy>
+#include <QStringList>
+#include <QStringListModel>
+#include <QTimer>
+
+#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<IrComboBox *> (iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SEARCHKEY_LABEL));
+ iSearchButton = qobject_cast<HbPushButton *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SEARCHKEY_BUTTON));
+ iBannerLabel = qobject_cast<IrNowPlayingBannerLabel *>(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<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SETTING_ACTION));
+ HbAction *openWebAdressAction = qobject_cast<HbAction*>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_OPEN_WEB_ADDRESS_ACTION));
+ HbAction *helpAction = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_HELP_ACTION));
+ HbAction *exitAction = qobject_cast<HbAction *>(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<HbToolBar *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_TOOLBAR));
+
+ QActionGroup *actionGroup = new QActionGroup(this);
+
+ iCollectionsAction = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_COLLECTION_ACTION));
+ iCollectionsAction->setActionGroup(actionGroup);
+
+ iFavoritesAction = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_FAVORITES_ACTION));
+ iFavoritesAction->setActionGroup(actionGroup);
+
+ iGenresAction = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_GENRES_ACTION));
+ iGenresAction->setActionGroup(actionGroup);
+
+ iSearchAction = qobject_cast<HbAction *>(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<IRStationsView*> (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<IRStationsView*> (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<QStringListModel*> (iSearchCombobox->model()))->setStringList(
+ strList);
+ }
+}
+