homescreenapp/examples/minibrowserwidgetplugin/src/minibrowserwidget.cpp
author hgs
Fri, 09 Jul 2010 14:36:01 +0300
changeset 63 52b0f64eeb51
permissions -rw-r--r--
201027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
63
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Example of home screen widget
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <QDebug>
hgs
parents:
diff changeset
    19
#include <QGraphicsLinearLayout>
hgs
parents:
diff changeset
    20
#include <QGraphicsWebView>
hgs
parents:
diff changeset
    21
#include <HbPushButton>
hgs
parents:
diff changeset
    22
#include <HbLineEdit>
hgs
parents:
diff changeset
    23
#include <HbFrameDrawer>
hgs
parents:
diff changeset
    24
#include <HbFrameItem>
hgs
parents:
diff changeset
    25
#include <HbDeviceProfile>
hgs
parents:
diff changeset
    26
#include "minibrowserwidget.h"
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
/*!
hgs
parents:
diff changeset
    29
    \ingroup group_minibrowser_widget
hgs
parents:
diff changeset
    30
    \class MiniBrowserWidget
hgs
parents:
diff changeset
    31
    \brief Example implementation for home screen widget.
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
    MiniBrowserWidget derived from the HbWidget and implements 
hgs
parents:
diff changeset
    34
    needed functions for the home screen widget. 
hgs
parents:
diff changeset
    35
    As name suggests MiniBrowserWidget is a small web browser widget in
hgs
parents:
diff changeset
    36
    the home screen. 
hgs
parents:
diff changeset
    37
    
hgs
parents:
diff changeset
    38
    Mini browser widget demonstrates the following home screen widget features:
hgs
parents:
diff changeset
    39
    <ol>
hgs
parents:
diff changeset
    40
    <li> home screen online/offline state, see \ref sssection_isonline </li>
hgs
parents:
diff changeset
    41
    <li> preferences, see \ref sssection_setpreferences </li>
hgs
parents:
diff changeset
    42
    </ol>
hgs
parents:
diff changeset
    43
    It also shows use of HbPushButton and HbLineEdit widgets. 
hgs
parents:
diff changeset
    44
    @image html hs_minibrowser.png
hgs
parents:
diff changeset
    45
    
hgs
parents:
diff changeset
    46
    
hgs
parents:
diff changeset
    47
*/
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
/*!
hgs
parents:
diff changeset
    50
    Constructs a widget which is a child of \a parent, with widget flags set to \a flags.
hgs
parents:
diff changeset
    51
    Widget creates two buttons ('go' and 'stop'), text field to write url and browser view.
hgs
parents:
diff changeset
    52
    Note that this is just an simple example so this creates child widgets directly to the layout.
hgs
parents:
diff changeset
    53
    For more complicated widget layouting, see Orbit documentation and especially WidgetML section of it.
hgs
parents:
diff changeset
    54
*/
hgs
parents:
diff changeset
    55
MiniBrowserWidget::MiniBrowserWidget(QGraphicsItem* parent, Qt::WindowFlags flags)
hgs
parents:
diff changeset
    56
    : HbWidget(parent, flags)
hgs
parents:
diff changeset
    57
{
hgs
parents:
diff changeset
    58
    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
hgs
parents:
diff changeset
    59
    setLayout(layout);
hgs
parents:
diff changeset
    60
    
hgs
parents:
diff changeset
    61
    QGraphicsLinearLayout *buttonLayout = new QGraphicsLinearLayout(Qt::Horizontal);
hgs
parents:
diff changeset
    62
    mGoButton = new HbPushButton("Go");
hgs
parents:
diff changeset
    63
    connect(mGoButton, SIGNAL(pressed()), SLOT(pressGoButton()));
hgs
parents:
diff changeset
    64
    buttonLayout->addItem(mGoButton);
hgs
parents:
diff changeset
    65
    mStopButton = new HbPushButton("Stop");
hgs
parents:
diff changeset
    66
    connect(mStopButton, SIGNAL(pressed()), SLOT(pressStopButton()));
hgs
parents:
diff changeset
    67
    buttonLayout->addItem(mStopButton);
hgs
parents:
diff changeset
    68
    mStopButton->setEnabled(false);
hgs
parents:
diff changeset
    69
    mEditor = new HbLineEdit();
hgs
parents:
diff changeset
    70
    buttonLayout->addItem(mEditor);
hgs
parents:
diff changeset
    71
    
hgs
parents:
diff changeset
    72
    layout->addItem(buttonLayout);
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
    mWeb = new QGraphicsWebView();
hgs
parents:
diff changeset
    75
    layout->addItem(mWeb);
hgs
parents:
diff changeset
    76
    
hgs
parents:
diff changeset
    77
    connect(mWeb, SIGNAL(loadStarted()), SLOT(loadStarted()));
hgs
parents:
diff changeset
    78
    connect(mWeb, SIGNAL(loadProgress(int)), SLOT(loadProgress(int)));
hgs
parents:
diff changeset
    79
    connect(mWeb, SIGNAL(loadFinished(bool)), SLOT(loadFinished(bool)));
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
    // maximum size of the home screen widget is (48,39) units. Convert units to pixels and 
hgs
parents:
diff changeset
    82
    // resize minibrowser as maximum size
hgs
parents:
diff changeset
    83
    HbFrameDrawer *drawer = new HbFrameDrawer(
hgs
parents:
diff changeset
    84
        QLatin1String("qtg_fr_hsshortcut_normal"), HbFrameDrawer::NinePieces);
hgs
parents:
diff changeset
    85
    setBackgroundItem(new HbFrameItem(drawer));
hgs
parents:
diff changeset
    86
    
hgs
parents:
diff changeset
    87
    HbDeviceProfile profile;
hgs
parents:
diff changeset
    88
    qreal factor = profile.unitValue();
hgs
parents:
diff changeset
    89
    setPreferredSize(48*factor, 39*factor);
hgs
parents:
diff changeset
    90
    resize(preferredSize());
hgs
parents:
diff changeset
    91
    
hgs
parents:
diff changeset
    92
    mUrl = QString("http://www.nokia.com");
hgs
parents:
diff changeset
    93
}
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
/*!
hgs
parents:
diff changeset
    96
    Destructor
hgs
parents:
diff changeset
    97
*/
hgs
parents:
diff changeset
    98
MiniBrowserWidget::~MiniBrowserWidget()
hgs
parents:
diff changeset
    99
{
hgs
parents:
diff changeset
   100
}
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
/*!
hgs
parents:
diff changeset
   103
    Returns widget's online state
hgs
parents:
diff changeset
   104
*/
hgs
parents:
diff changeset
   105
// Start of snippet 1
hgs
parents:
diff changeset
   106
bool MiniBrowserWidget::isOnline()
hgs
parents:
diff changeset
   107
{ 
hgs
parents:
diff changeset
   108
    return mOnline;
hgs
parents:
diff changeset
   109
}
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
/*!
hgs
parents:
diff changeset
   112
    Sets online state of the widget as \a online
hgs
parents:
diff changeset
   113
*/
hgs
parents:
diff changeset
   114
void MiniBrowserWidget::setOnline(bool online)
hgs
parents:
diff changeset
   115
{ 
hgs
parents:
diff changeset
   116
    mOnline = online;
hgs
parents:
diff changeset
   117
}
hgs
parents:
diff changeset
   118
// End of snippet 1
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
/*!
hgs
parents:
diff changeset
   121
    Returns url of the widget currently showing.
hgs
parents:
diff changeset
   122
*/
hgs
parents:
diff changeset
   123
// Start of snippet 2
hgs
parents:
diff changeset
   124
QString MiniBrowserWidget::url() const
hgs
parents:
diff changeset
   125
{
hgs
parents:
diff changeset
   126
    return mUrl;
hgs
parents:
diff changeset
   127
}
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
/*!
hgs
parents:
diff changeset
   130
    Sets url of the widget as \a url
hgs
parents:
diff changeset
   131
*/
hgs
parents:
diff changeset
   132
void MiniBrowserWidget::setUrl(const QString& url)
hgs
parents:
diff changeset
   133
{
hgs
parents:
diff changeset
   134
    mUrl = url;
hgs
parents:
diff changeset
   135
}
hgs
parents:
diff changeset
   136
// End of snippet 2
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
/*!
hgs
parents:
diff changeset
   139
    Called when widget is initialized and all to properties are set
hgs
parents:
diff changeset
   140
*/
hgs
parents:
diff changeset
   141
void MiniBrowserWidget::onInitialize()
hgs
parents:
diff changeset
   142
{
hgs
parents:
diff changeset
   143
    mGoButton->setEnabled(mOnline);
hgs
parents:
diff changeset
   144
    mEditor->setText(mUrl);
hgs
parents:
diff changeset
   145
}
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
/*!
hgs
parents:
diff changeset
   148
    Called when widget is shown in the home screen
hgs
parents:
diff changeset
   149
*/
hgs
parents:
diff changeset
   150
// Start of snippet 3
hgs
parents:
diff changeset
   151
void MiniBrowserWidget::onShow()
hgs
parents:
diff changeset
   152
{
hgs
parents:
diff changeset
   153
    if (mOnline) {
hgs
parents:
diff changeset
   154
        mWeb->load(QUrl(mUrl));
hgs
parents:
diff changeset
   155
        mStopButton->setEnabled(true);
hgs
parents:
diff changeset
   156
        }
hgs
parents:
diff changeset
   157
}
hgs
parents:
diff changeset
   158
// End of snippet 3
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
/*!
hgs
parents:
diff changeset
   161
    Called when widget is hidden from the home screen.
hgs
parents:
diff changeset
   162
    Widget can decide what is appropriate action when 
hgs
parents:
diff changeset
   163
    widget is not visible on the screen. At least it
hgs
parents:
diff changeset
   164
    should not update itself as often as when on the 
hgs
parents:
diff changeset
   165
    screen to save battery etc.
hgs
parents:
diff changeset
   166
*/
hgs
parents:
diff changeset
   167
// Start of snippet 4
hgs
parents:
diff changeset
   168
void MiniBrowserWidget::onHide()
hgs
parents:
diff changeset
   169
{
hgs
parents:
diff changeset
   170
    mWeb->stop();
hgs
parents:
diff changeset
   171
}
hgs
parents:
diff changeset
   172
// End of snippet 4
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
/*!
hgs
parents:
diff changeset
   175
    Slot connected to 'go' button
hgs
parents:
diff changeset
   176
*/
hgs
parents:
diff changeset
   177
// Start of snippet 5
hgs
parents:
diff changeset
   178
void MiniBrowserWidget::pressGoButton()
hgs
parents:
diff changeset
   179
{
hgs
parents:
diff changeset
   180
    setUrl(mEditor->text());
hgs
parents:
diff changeset
   181
    if (mOnline) {
hgs
parents:
diff changeset
   182
        mWeb->load(QUrl(mUrl));
hgs
parents:
diff changeset
   183
        mStopButton->setEnabled(true);
hgs
parents:
diff changeset
   184
        }
hgs
parents:
diff changeset
   185
    QStringList list;
hgs
parents:
diff changeset
   186
    list.append("url");
hgs
parents:
diff changeset
   187
    emit setPreferences(list);
hgs
parents:
diff changeset
   188
}
hgs
parents:
diff changeset
   189
// End of snippet 5
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
/*!
hgs
parents:
diff changeset
   192
    Slot connected to 'stop' button
hgs
parents:
diff changeset
   193
*/
hgs
parents:
diff changeset
   194
void MiniBrowserWidget::pressStopButton()
hgs
parents:
diff changeset
   195
{
hgs
parents:
diff changeset
   196
    mWeb->stop();
hgs
parents:
diff changeset
   197
    //mStopButton->setEnabled(false);
hgs
parents:
diff changeset
   198
}
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
/*!
hgs
parents:
diff changeset
   201
    Slot connected to webview's loadProgress signal
hgs
parents:
diff changeset
   202
    TODO: check if this is needed.
hgs
parents:
diff changeset
   203
*/
hgs
parents:
diff changeset
   204
void MiniBrowserWidget::loadProgress(int progress)
hgs
parents:
diff changeset
   205
{
hgs
parents:
diff changeset
   206
    Q_UNUSED(progress)
hgs
parents:
diff changeset
   207
    qDebug() << progress;
hgs
parents:
diff changeset
   208
}
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
/*!
hgs
parents:
diff changeset
   211
    Slot connected to webview's loadFinished signal
hgs
parents:
diff changeset
   212
*/
hgs
parents:
diff changeset
   213
void MiniBrowserWidget::loadFinished(bool ok)
hgs
parents:
diff changeset
   214
{
hgs
parents:
diff changeset
   215
    Q_UNUSED(ok)
hgs
parents:
diff changeset
   216
    mStopButton->setEnabled(false);
hgs
parents:
diff changeset
   217
}
hgs
parents:
diff changeset
   218
void MiniBrowserWidget::loadStarted()
hgs
parents:
diff changeset
   219
{
hgs
parents:
diff changeset
   220
}
hgs
parents:
diff changeset
   221