homescreenapp/examples/minibrowserwidgetplugin/src/minibrowserwidget.cpp
changeset 77 4b195f3bea29
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/examples/minibrowserwidgetplugin/src/minibrowserwidget.cpp	Wed Aug 18 09:40:07 2010 +0300
@@ -0,0 +1,221 @@
+/*
+* 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:  Example of home screen widget
+*
+*/
+
+#include <QDebug>
+#include <QGraphicsLinearLayout>
+#include <QGraphicsWebView>
+#include <HbPushButton>
+#include <HbLineEdit>
+#include <HbFrameDrawer>
+#include <HbFrameItem>
+#include <HbDeviceProfile>
+#include "minibrowserwidget.h"
+
+/*!
+    \ingroup group_minibrowser_widget
+    \class MiniBrowserWidget
+    \brief Example implementation for home screen widget.
+
+    MiniBrowserWidget derived from the HbWidget and implements 
+    needed functions for the home screen widget. 
+    As name suggests MiniBrowserWidget is a small web browser widget in
+    the home screen. 
+    
+    Mini browser widget demonstrates the following home screen widget features:
+    <ol>
+    <li> home screen online/offline state, see \ref sssection_isonline </li>
+    <li> preferences, see \ref sssection_setpreferences </li>
+    </ol>
+    It also shows use of HbPushButton and HbLineEdit widgets. 
+    @image html hs_minibrowser.png
+    
+    
+*/
+
+/*!
+    Constructs a widget which is a child of \a parent, with widget flags set to \a flags.
+    Widget creates two buttons ('go' and 'stop'), text field to write url and browser view.
+    Note that this is just an simple example so this creates child widgets directly to the layout.
+    For more complicated widget layouting, see Orbit documentation and especially WidgetML section of it.
+*/
+MiniBrowserWidget::MiniBrowserWidget(QGraphicsItem* parent, Qt::WindowFlags flags)
+    : HbWidget(parent, flags)
+{
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+    setLayout(layout);
+    
+    QGraphicsLinearLayout *buttonLayout = new QGraphicsLinearLayout(Qt::Horizontal);
+    mGoButton = new HbPushButton("Go");
+    connect(mGoButton, SIGNAL(pressed()), SLOT(pressGoButton()));
+    buttonLayout->addItem(mGoButton);
+    mStopButton = new HbPushButton("Stop");
+    connect(mStopButton, SIGNAL(pressed()), SLOT(pressStopButton()));
+    buttonLayout->addItem(mStopButton);
+    mStopButton->setEnabled(false);
+    mEditor = new HbLineEdit();
+    buttonLayout->addItem(mEditor);
+    
+    layout->addItem(buttonLayout);
+
+    mWeb = new QGraphicsWebView();
+    layout->addItem(mWeb);
+    
+    connect(mWeb, SIGNAL(loadStarted()), SLOT(loadStarted()));
+    connect(mWeb, SIGNAL(loadProgress(int)), SLOT(loadProgress(int)));
+    connect(mWeb, SIGNAL(loadFinished(bool)), SLOT(loadFinished(bool)));
+
+    // maximum size of the home screen widget is (48,39) units. Convert units to pixels and 
+    // resize minibrowser as maximum size
+    HbFrameDrawer *drawer = new HbFrameDrawer(
+        QLatin1String("qtg_fr_hsshortcut_normal"), HbFrameDrawer::NinePieces);
+    setBackgroundItem(new HbFrameItem(drawer));
+    
+    HbDeviceProfile profile;
+    qreal factor = profile.unitValue();
+    setPreferredSize(48*factor, 39*factor);
+    resize(preferredSize());
+    
+    mUrl = QString("http://www.nokia.com");
+}
+
+/*!
+    Destructor
+*/
+MiniBrowserWidget::~MiniBrowserWidget()
+{
+}
+
+/*!
+    Returns widget's online state
+*/
+// Start of snippet 1
+bool MiniBrowserWidget::isOnline()
+{ 
+    return mOnline;
+}
+
+/*!
+    Sets online state of the widget as \a online
+*/
+void MiniBrowserWidget::setOnline(bool online)
+{ 
+    mOnline = online;
+}
+// End of snippet 1
+
+/*!
+    Returns url of the widget currently showing.
+*/
+// Start of snippet 2
+QString MiniBrowserWidget::url() const
+{
+    return mUrl;
+}
+
+/*!
+    Sets url of the widget as \a url
+*/
+void MiniBrowserWidget::setUrl(const QString& url)
+{
+    mUrl = url;
+}
+// End of snippet 2
+
+/*!
+    Called when widget is initialized and all to properties are set
+*/
+void MiniBrowserWidget::onInitialize()
+{
+    mGoButton->setEnabled(mOnline);
+    mEditor->setText(mUrl);
+}
+
+/*!
+    Called when widget is shown in the home screen
+*/
+// Start of snippet 3
+void MiniBrowserWidget::onShow()
+{
+    if (mOnline) {
+        mWeb->load(QUrl(mUrl));
+        mStopButton->setEnabled(true);
+        }
+}
+// End of snippet 3
+
+/*!
+    Called when widget is hidden from the home screen.
+    Widget can decide what is appropriate action when 
+    widget is not visible on the screen. At least it
+    should not update itself as often as when on the 
+    screen to save battery etc.
+*/
+// Start of snippet 4
+void MiniBrowserWidget::onHide()
+{
+    mWeb->stop();
+}
+// End of snippet 4
+
+/*!
+    Slot connected to 'go' button
+*/
+// Start of snippet 5
+void MiniBrowserWidget::pressGoButton()
+{
+    setUrl(mEditor->text());
+    if (mOnline) {
+        mWeb->load(QUrl(mUrl));
+        mStopButton->setEnabled(true);
+        }
+    QStringList list;
+    list.append("url");
+    emit setPreferences(list);
+}
+// End of snippet 5
+
+/*!
+    Slot connected to 'stop' button
+*/
+void MiniBrowserWidget::pressStopButton()
+{
+    mWeb->stop();
+    //mStopButton->setEnabled(false);
+}
+
+/*!
+    Slot connected to webview's loadProgress signal
+    TODO: check if this is needed.
+*/
+void MiniBrowserWidget::loadProgress(int progress)
+{
+    Q_UNUSED(progress)
+    qDebug() << progress;
+}
+
+/*!
+    Slot connected to webview's loadFinished signal
+*/
+void MiniBrowserWidget::loadFinished(bool ok)
+{
+    Q_UNUSED(ok)
+    mStopButton->setEnabled(false);
+}
+void MiniBrowserWidget::loadStarted()
+{
+}
+