diff -r 000000000000 -r 09774dfdd46b qtinternetradio/ui/src/iropenwebaddressview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtinternetradio/ui/src/iropenwebaddressview.cpp Mon Apr 19 14:01:53 2010 +0300 @@ -0,0 +1,306 @@ +/* +* 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 "irabstractviewmanager.h" +#include "irapplication.h" +#include "irplaycontroller.h" +#include "iropenwebaddressview.h" +#include "irqisdsdatastructure.h" +#include "irqfavoritesdb.h" +#include "irqnetworkcontroller.h" +#include "irqutility.h" +#include "irlineeditor.h" +#include "irqenums.h" +#include "iruidefines.h" + +// Const strings +const char* OPEN_WEB_ADDRESS_VIEW_OBJECT_NAME = "ex-IRQOpenWebAddressView"; // object name in the XML + +IROpenWebAddressView::IROpenWebAddressView(IRApplication* aApplication, TIRViewId aViewId) : + IRBaseView(aApplication, aViewId), + iUrl(NULL), + iName(NULL), + iDescription(NULL), + iNameClicked(false), + iPlayButton(NULL), + iAdd2FavButton(NULL) +{ + connect( getViewManager(), SIGNAL( orientationChanged(Qt::Orientation) ), + this, SLOT( handleOrientationChanged(Qt::Orientation) ) ); + + // Create widget hierarchy + setObjectName(OPEN_WEB_ADDRESS_VIEW_OBJECT_NAME); + + // 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); // IROpenWebAddressView is referred in the XML file + iLoader.setObjectTree(roots); + + // Load the XML file + iLoader.load(OPEN_WEB_ADDRESS_VIEW_LAYOUT_FILENAME); + + // Find the HbLineEdit objects + iUrl = qobject_cast (iLoader.findObject("streamURL")); + iName = qobject_cast (iLoader.findObject("stationName")); + iDescription = qobject_cast (iLoader.findObject("description")); + + initButtons(); + + // This view need not to be stacked. + setFlag(EViewFlag_UnStackable); + + connect(iName, SIGNAL(pressed()), this, SLOT(nameEditorClicked())); + connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)), + this, SLOT(networkRequestNotified(IRQNetworkEvent))); + + connect(iUrl, SIGNAL(textChanged(const QString&)), + this, SLOT(urlEditorTextChanged(const QString&))); + + handleOrientationChanged(getViewManager()->orientation()); +} + +IROpenWebAddressView::~IROpenWebAddressView() +{ +} + +/* + * Description : from base class IRBaseView. + * handle view commands. + * Parameters : aCommand : see the definition of TIRViewCommand + * Return : EIR_DoDefault : caller does default handling + * EIR_NoDefault : caller doesn't do default handling + */ +TIRHandleResult IROpenWebAddressView::handleCommand(TIRViewCommand aCommand, + TIRViewCommandReason aReason) +{ + Q_UNUSED(aReason); + + switch (aCommand) + { + case EIR_ViewCommand_ACTIVATED: + initDetails(); + return EIR_NoDefault; + + case EIR_ViewCommand_DEACTIVATE: + default: + break; + } + + return EIR_DoDefault; +} + +/* + * Description : initialize the details. + */ +void IROpenWebAddressView::initDetails() +{ + // Set the initial text for line editor. + iUrl->setText("http://"); + iName->setText(hbTrId("txt_irad_info_unnamed")); + iDescription->setText(""); + iNameClicked = false; +} + +/* + * Description : initialize the buttons. + */ +void IROpenWebAddressView::initButtons() +{ + // Find the HbAction objects + iPlayButton = qobject_cast (iLoader.findObject("playButton")); + iAdd2FavButton = qobject_cast (iLoader.findObject("add2FavButton")); + + connect(iPlayButton, SIGNAL(released()), this, SLOT(play())); + connect(iAdd2FavButton, SIGNAL(released()), this, SLOT(add2Fav())); +} + +/* + * Description : add the station to favorites. + */ +void IROpenWebAddressView::add2Fav() +{ + // Create a IRQPreset using the inputted information. + IRQPreset preset; + + if (!initPreset(preset)) + { + return; + } + + // Add to favorites. + int retValue = iFavorites->addPreset(preset); + + // Show the information from favorites. + if (EIRQErrorAlreadyExist == retValue) + { + popupNote(hbTrId("txt_irad_info_favorite_updated"), HbMessageBox::MessageTypeInformation); + } + else if (EIRQErrorNone == retValue) + { + popupNote(hbTrId("txt_irad_info_added_to_favorites"), HbMessageBox::MessageTypeInformation); + } + else if (EIRQErrorOutOfMemory == retValue) + { + popupNote(hbTrId("txt_irad_info_can_not_add_more"), HbMessageBox::MessageTypeInformation); + } + else + { + Q_ASSERT(false); + } +} + +/* + * Description : Play this station. + */ +void IROpenWebAddressView::play() +{ + // Create a IRQPreset using the inputted information + IRQPreset preset; + + if (!initPreset(preset)) + { + return; + } + + setUseNetworkReason(EIR_UseNetwork_OpenWebAddress); + + // Verify the connectivity + if (false == iApplication->verifyNetworkConnectivity()) + { + return; + } + + setUseNetworkReason(EIR_UseNetwork_NoReason); + + // Play this preset + iPlayController->connectToChannel(&preset,EIRQAdhocManual); +} + +/* + * Description : Handle the network event from network controller. + */ +void IROpenWebAddressView::networkRequestNotified(IRQNetworkEvent aEvent) +{ + if (getViewManager()->currentView() != this) + { + return; + } + + switch (aEvent) + { + case EIRQNetworkConnectionEstablished: + iApplication->closeConnectingDialog(); + + if (EIR_UseNetwork_OpenWebAddress == getUseNetworkReason()) + { + play(); + } + + setUseNetworkReason(EIR_UseNetwork_NoReason); + break; + + default: + break; + } +} + +/* + * Description : Clear the name editor. + */ +void IROpenWebAddressView::nameEditorClicked() +{ + if(!iNameClicked) + { + iName->setText(""); + iNameClicked = true; + } +} + +/* + * Description : initialize a preset. + * return parameter: true, initialization succeeds; vice versa. + */ +bool IROpenWebAddressView::initPreset(IRQPreset &aPreset) +{ + IRQChannelServerURL server; + + server.url = iUrl->text(); + server.url.remove(" "); + + // check the URL + if (!IRQUtility::isValidUrl(server.url)) + { + popupNote(hbTrId("txt_irad_info_invalid_link_please_change_it"), HbMessageBox::MessageTypeInformation); + return false; + } + + // Give it an initial value, supposed to be 32 kbps. + server.bitrate = 32; + server.serverName = iName->text(); + if (0 == server.serverName.size()) + { + server.serverName = hbTrId("txt_irad_info_unnamed"); + } + + aPreset.insertChannelServer(server); + aPreset.name = server.serverName; + aPreset.description = iDescription->text(); + aPreset.shortDesc = aPreset.description; + aPreset.type = 0; + aPreset.presetId = 0; + aPreset.uniqID = 0; + + return true; +} + + +void IROpenWebAddressView::urlEditorTextChanged(const QString &aString) +{ + if(aString.size() < 8) + { + iPlayButton->setEnabled(false); + iAdd2FavButton->setEnabled(false); + } + else + { + iPlayButton->setEnabled(true); + iAdd2FavButton->setEnabled(true); + } +} + +/* + * Description : resize the container if the direction changes. + */ +void IROpenWebAddressView::handleOrientationChanged(Qt::Orientation aOrientation) +{ + // Load the XML file + if (aOrientation == Qt::Vertical) + { + iLoader.load(OPEN_WEB_ADDRESS_VIEW_LAYOUT_FILENAME, "portrait"); + } + else + { + iLoader.load(OPEN_WEB_ADDRESS_VIEW_LAYOUT_FILENAME, "landscape"); + } +}