diff -r d9ec2b8c6bad -r 2fbd1d709fe7 wlanutilities/wlanlogin/wlanloginapp/src/wlanloginview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanutilities/wlanlogin/wlanloginapp/src/wlanloginview.cpp Tue Jul 06 15:29:22 2010 +0300 @@ -0,0 +1,482 @@ +/* +* Copyright (c) 2010 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: +* Main view for the WLAN Login application +* +*/ + + +#include +#include + +// System includes +#include +#include +#include +#include +#include +#include +#include + +// User includes +#include "wlanloginview.h" +#include "wlanloginwebview.h" +#include "wlanloginwebpage.h" +#include "wlanloginmainwindow.h" +#include "wlanloginengine.h" +#include "ictsqtwrapper.h" + +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "wlanloginviewTraces.h" +#endif + +/*! + \class WlanLoginView + \brief Main view for the WLAN Login application +*/ + +// External function prototypes + +// Local constants + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +/*! + Constructor + */ +WlanLoginView::WlanLoginView(WlanLoginApplication* appRef): + mAppRef(appRef), + mMainLayout(NULL), + mContentLayout(NULL), + mProgressBar(NULL), + mScrollArea(NULL), + mScrollAreaContent(NULL), + mWebView(NULL), + mToolBar(NULL), + mCancelAction(NULL), + mNextAction(NULL), + mContinueAction(NULL) +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_WLANLOGINVIEW_ENTRY); + + setTitleBarVisible(false); + setStatusBarVisible(false); + + mMainLayout = new QGraphicsLinearLayout(Qt::Vertical); + mMainLayout->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + mMainLayout->setContentsMargins(0,0,0,0); + setLayout(mMainLayout); + + mScrollArea = new HbScrollArea(); + mScrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + mScrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); + mScrollArea->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); + mScrollArea->setScrollDirections(Qt::Vertical | Qt::Horizontal); + mScrollArea->setClampingStyle( HbScrollArea::StrictClamping ); + mScrollArea->setScrollingStyle( HbScrollArea::PanWithFollowOn ); + mMainLayout->addItem(mScrollArea); + + mScrollAreaContent = new HbWidget(); + mScrollAreaContent->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + mContentLayout = new QGraphicsLinearLayout(Qt::Vertical); + mContentLayout->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + mContentLayout->setContentsMargins(0,0,0,0); + mScrollAreaContent->setLayout(mContentLayout); + mScrollArea->setContentWidget(mScrollAreaContent); + + // Set white background to content widget + QPixmap pixmap(10,10); + pixmap.fill(Qt::white); + QGraphicsPixmapItem *pixmapItem = new QGraphicsPixmapItem(pixmap); + mScrollAreaContent->setBackgroundItem(pixmapItem); + + //Note: Progress bar is added to layout when loadStarted signal is handled and + //removed when loadFinished signal is handled + mProgressBar = new HbProgressBar(); + mProgressBar->setRange( 0,100); + mProgressBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + mProgressBar->setVisible(false); + + mWebView = new WlanLoginWebView(); + mContentLayout->addItem(mWebView); + mWebView->page()->setNetworkAccessManager(appRef->engine()->networkAccessManager()); + + //Create tool bar + mToolBar = new HbToolBar(); + mCancelAction = mToolBar->addAction(HbIcon("qtg_mono_exit"),""); + mNextAction = mToolBar->addAction(HbIcon("qtg_mono_arrow_right"),""); + mContinueAction = mToolBar->addAction(HbIcon("qtg_mono_tick"),""); + + setToolBar(mToolBar); + setActiveToolBarAction(Cancel); + + mToolBar->show(); + mWebView->show(); + mScrollArea->show(); + + bool connectStatus = connect( + mWebView, + SIGNAL(loadStarted()), + this, + SLOT(handleLoadStarted())); + Q_ASSERT(connectStatus == true); + + connectStatus = connect( + mWebView, + SIGNAL(loadProgress(int)), + this, + SLOT(handleLoadProgress(int))); + Q_ASSERT(connectStatus == true); + + connectStatus = connect( + mWebView, + SIGNAL(loadFinished(bool)), + this, + SLOT(handleLoadFinished(bool))); + Q_ASSERT(connectStatus == true); + + connectStatus = connect( + mWebView, + SIGNAL(urlChanged(const QUrl&)), + this, + SLOT(handleUrlChanged(const QUrl&))); + Q_ASSERT(connectStatus == true); + + connectStatus = connect( + mWebView->page(), + SIGNAL(formSubmitted()), + this, + SLOT(handleFormSubmitted())); + Q_ASSERT(connectStatus == true); + + connectStatus = connect( + mCancelAction, + SIGNAL(triggered()), + this, + SLOT(handleCancelAction())); + Q_ASSERT(connectStatus == true); + + connectStatus = connect( + mNextAction, + SIGNAL(triggered()), + this, + SLOT(handleNextAction())); + Q_ASSERT(connectStatus == true); + + connectStatus = connect( + mContinueAction, + SIGNAL(triggered()), + this, + SLOT(handleContinueAction())); + Q_ASSERT(connectStatus == true); + + show(); + + OstTraceFunctionExit0(WLANLOGINVIEW_WLANLOGINVIEW_EXIT); +} + + +/*! + Destructor + */ +WlanLoginView::~WlanLoginView() +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_DESTRUCTOR_ENTRY); + + //delete progress bar here as it is not on the layout all the time and + //thus may not have a parent at all. + if (mProgressBar) { + delete mProgressBar; + } + + OstTraceFunctionExit0(WLANLOGINVIEW_DESTRUCTOR_EXIT); +} + + +/*! + This function handles connectionReady signal from engine and starts loading of + provided web page + + @param [in] url URL to be loaded + */ +void WlanLoginView::handleConnectionReady(QUrl url) +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_HANDLECONNECTIONREADY_ENTRY); + + mWebView->load(url); + + OstTraceFunctionExit0(WLANLOGINVIEW_HANDLECONNECTIONREADY_EXIT); +} + + +/*! + This function handles orientationChanged signal + + @param [in] orientation New Orientation of the screen + */ +void WlanLoginView::handleOrientationChanged(Qt::Orientation orientation) +{ + Q_UNUSED(orientation); + OstTraceFunctionEntry0( WLANLOGINVIEW_ORIENTATIONCHANGED_ENTRY ); + + adjustViewSize(); + + OstTraceFunctionEntry0( WLANLOGINVIEW_ORIENTATIONCHANGED_EXIT ); +} + +void WlanLoginView::adjustViewSize() +{ + OstTraceFunctionEntry0( WLANLOGINVIEW_ADJUSTVIEWSIZE_ENTRY ); + + //Store current screen size + QSizeF screenSize = mAppRef->mainWindow()->layoutRect().size(); + + //Store current content size + QSize contentSize = mWebView->page()->mainFrame()->contentsSize(); + + //Set viewPortSize to biggest values of content size or current screen size + QSize newViewPortSize; + if (screenSize.toSize().width() > contentSize.width()) { + newViewPortSize.setWidth(screenSize.toSize().width()); + } else { + newViewPortSize.setWidth(contentSize.width()); + } + + if (screenSize.toSize().height() > contentSize.height()) { + newViewPortSize.setHeight(screenSize.toSize().height()); + } else { + newViewPortSize.setHeight(contentSize.height()); + } + mWebView->page()->setViewportSize(newViewPortSize); + + + //Set Web View size to same size as viewport + mWebView->setMinimumWidth((qreal)newViewPortSize.width()); + mWebView->setMaximumWidth((qreal)newViewPortSize.width()); + mWebView->setPreferredWidth((qreal)newViewPortSize.width()); + + mWebView->setMinimumHeight((qreal)newViewPortSize.height()); + mWebView->setMaximumHeight((qreal)newViewPortSize.height()); + mWebView->setPreferredHeight((qreal)newViewPortSize.height()); + + + //Set preferred content size to current screen size + mWebView->page()->setPreferredContentsSize(mAppRef->mainWindow()->layoutRect().size().toSize()); + + OstTraceFunctionEntry0( WLANLOGINVIEW_ADJUSTVIEWSIZE_EXIT ); +} + + +/*! + This function handles urlChanged signal from QGraphicsWebView + + @param [in] newUrl New URL + */ +void WlanLoginView::handleUrlChanged(const QUrl& newUrl ) +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_HANDLEURLCHANGED_ENTRY); + +#ifdef OST_TRACE_COMPILER_IN_USE + QString url = newUrl.toString(); + TPtrC tmp(url.utf16(),url.length() ); + + OstTraceExt1( + TRACE_NORMAL, + WLANLOGINVIEW_HANDLEURLCHANGED_URL_TRACE, + "WlanLoginEngine::handleUrlChanged;newUrl=%S", + tmp); +#endif + + OstTraceFunctionExit0(WLANLOGINVIEW_HANDLEURLCHANGED_EXIT); +} + + +/*! + This function handles loadStarted signal from QGraphicsWebView + */ +void WlanLoginView::handleLoadStarted() +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_HANDLELOADSTARTED_ENTRY); + + mContentLayout->insertItem(0, mProgressBar); + mProgressBar->setVisible(true); + + OstTraceFunctionExit0(WLANLOGINVIEW_HANDLELOADSTARTED_EXIT); +} + + +/*! + This function handles loadProgress signal from QGraphicsWebView + + @param [in] progressValue Indicates page loading progress: 0..100 + */ +void WlanLoginView::handleLoadProgress(int progressValue) +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_HANDLELOADPROGRESS_ENTRY); + + mProgressBar->setProgressValue(progressValue); + + OstTraceFunctionExit0(WLANLOGINVIEW_HANDLELOADPROGRESS_EXIT); +} + + +/*! + This function handles loadfinished signal from QGraphicsWebView + + @param [in] status Success status + */ +void WlanLoginView::handleLoadFinished(bool status) +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_HANDLELOADFINISHED_ENTRY); + + if(status) + { + adjustViewSize(); + } + + mProgressBar->setVisible(false); + mContentLayout->removeItem(mProgressBar); + + OstTraceFunctionExit0(WLANLOGINVIEW_HANDLELOADFINISHED_EXIT); +} + + +/*! + This function handles formSumitted signal from WlanLoginWebPage + + */ +void WlanLoginView::handleFormSubmitted() +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_HANDLEFORMSUBMITTED_ENTRY); + + //TODO: Check why QWebPage sends this signal to times in a row when user pushes submit button in a web page + + //User has submitted credentials, let's start internet connectivity test + emit startIcts(); + + OstTraceFunctionExit0(WLANLOGINVIEW_HANDLEFORMSUBMITTED_EXIT); +} + + +/*! + This function handles triggered signal from "cancel" button + + */ +void WlanLoginView::handleCancelAction() +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_HANDLECANCELACTION_ENTRY); + + emit cancelTriggered(); + + OstTraceFunctionExit0(WLANLOGINVIEW_HANDLECANCELACTION_EXIT); +} + + +/*! + This function handles triggered signal from "next" button + + */ +void WlanLoginView::handleNextAction() +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_HANDLENEXTACTION_ENTRY); + + emit nextTriggered(); + + //Change toolabr action to "Continue" as we are going to background + setActiveToolBarAction(Continue); + + OstTraceFunctionExit0(WLANLOGINVIEW_HANDLENEXTACTION_EXIT); +} + + +/*! + This function handles triggered signal from "continue" button + + */ +void WlanLoginView::handleContinueAction() +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_HANDLECONTINUEACTION_ENTRY); + + emit continueTriggered(); + + OstTraceFunctionExit0(WLANLOGINVIEW_HANDLECONTINUEACTION_EXIT); +} + + +/*! + This function handles ictsOk signal from engine + + */ +void WlanLoginView::handleIctsOk() +{ + OstTraceFunctionEntry0(WLANLOGINVIEW_HANDLEICTSRESULT_ENTRY); + + setActiveToolBarAction(Next); + + OstTraceFunctionExit0(WLANLOGINVIEW_HANDLEICTSRESULT_EXIT); +} + +/*! + This function sets active action to the toolbar and hides other actions + + @param [in] newAction Action to be set to toolbar + */ +void WlanLoginView::setActiveToolBarAction(ActionType newAction) +{ + OstTraceFunctionEntry0( WLANLOGINVIEW_SETACTIVETOOLBARACTION_ENTRY ); + + switch (newAction) { + case Cancel: + mNextAction->setEnabled(false); + mNextAction->setVisible(false); + + mContinueAction->setEnabled(false); + mContinueAction->setVisible(false); + + mCancelAction->setVisible(true); + mCancelAction->setEnabled(true); + break; + + case Next: + mCancelAction->setEnabled(false); + mCancelAction->setVisible(false); + + mContinueAction->setEnabled(false); + mContinueAction->setVisible(false); + + mNextAction->setVisible(true); + mNextAction->setEnabled(true); + break; + + case Continue: + mCancelAction->setEnabled(false); + mCancelAction->setVisible(false); + + mNextAction->setEnabled(false); + mNextAction->setVisible(false); + + mContinueAction->setVisible(true); + mContinueAction->setEnabled(true); + break; + + default: + break; + + } + + OstTraceFunctionExit0( WLANLOGINVIEW_SETACTIVETOOLBARACTION_EXIT ); +}