--- /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 <hbapplication.h>
+#include <hbmenu.h>
+#include <hbtoolbar.h>
+#include <hbpushbutton.h>
+#include <hblineedit.h>
+#include <hbinstance.h>
+
+#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<HbLineEdit *> (iLoader.findObject("streamURL"));
+ iName = qobject_cast<IrLineEditor *> (iLoader.findObject("stationName"));
+ iDescription = qobject_cast<HbLineEdit *> (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<HbPushButton *> (iLoader.findObject("playButton"));
+ iAdd2FavButton = qobject_cast<HbPushButton *> (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");
+ }
+}