homescreenapp/hsapplication/tsrc/t_hsapplication/t_hsapplicationexe/src/hspage_mock.cpp
author hgs
Wed, 20 Oct 2010 15:25:39 +0300
changeset 101 ba1b7e218624
parent 90 3ac3aaebaee5
permissions -rw-r--r--
201042
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
90
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 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:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <HbInstance>
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include "hsdomainmodeldatastructures.h"
hgs
parents:
diff changeset
    21
#include "hsgui.h"
hgs
parents:
diff changeset
    22
#include "hspage.h"
hgs
parents:
diff changeset
    23
#include "hspagevisual.h"
hgs
parents:
diff changeset
    24
#include "hspagetoucharea.h"
hgs
parents:
diff changeset
    25
#include "hspagenewwidgetlayout.h"
hgs
parents:
diff changeset
    26
#include "hsscene.h"
hgs
parents:
diff changeset
    27
#include "hswidgethost.h"
hgs
parents:
diff changeset
    28
#include "hswidgethostvisual.h"
hgs
parents:
diff changeset
    29
#include "hswallpaper.h"
hgs
parents:
diff changeset
    30
#include "hswidgetpositioningonwidgetadd.h"
hgs
parents:
diff changeset
    31
#include "hswidgetpositioningonorientationchange.h"
hgs
parents:
diff changeset
    32
#include "hsconfiguration.h"
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
/*!
hgs
parents:
diff changeset
    36
    \class HsPage
hgs
parents:
diff changeset
    37
    \ingroup group_hsdomainmodel
hgs
parents:
diff changeset
    38
    \brief Represents a page in the framework.
hgs
parents:
diff changeset
    39
    HsPage contains group of widgets. HsPage can have a wallpaper.
hgs
parents:
diff changeset
    40
*/
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
/*!
hgs
parents:
diff changeset
    43
    Constructor.
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
    \a parent Owner.
hgs
parents:
diff changeset
    46
    \a aFlags Window flags.
hgs
parents:
diff changeset
    47
*/
hgs
parents:
diff changeset
    48
HsPage::HsPage(QObject* parent)
hgs
parents:
diff changeset
    49
    : QObject(parent),
hgs
parents:
diff changeset
    50
      mDatabaseId(-1),
hgs
parents:
diff changeset
    51
      mPageVisual(new HsPageVisual), 
hgs
parents:
diff changeset
    52
      mWallpaper(0),
hgs
parents:
diff changeset
    53
      mRemovable(true),
hgs
parents:
diff changeset
    54
      mPageMargin(0.0)
hgs
parents:
diff changeset
    55
{
hgs
parents:
diff changeset
    56
    //Page margin
hgs
parents:
diff changeset
    57
    mPageMargin = HSCONFIGURATION_GET(pageMargin);
hgs
parents:
diff changeset
    58
    connect(HsConfiguration::instance(), SIGNAL(propertyChanged(QString)), SLOT(onPageMarginChanged(QString)));
hgs
parents:
diff changeset
    59
}
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
/*!
hgs
parents:
diff changeset
    62
    Destructor.
hgs
parents:
diff changeset
    63
*/
hgs
parents:
diff changeset
    64
HsPage::~HsPage()
hgs
parents:
diff changeset
    65
{
hgs
parents:
diff changeset
    66
    delete mWallpaper;
hgs
parents:
diff changeset
    67
}
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
/*!
hgs
parents:
diff changeset
    70
    Returns the database id.
hgs
parents:
diff changeset
    71
*/
hgs
parents:
diff changeset
    72
int HsPage::databaseId() const
hgs
parents:
diff changeset
    73
{
hgs
parents:
diff changeset
    74
    return mDatabaseId;
hgs
parents:
diff changeset
    75
}
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
/*!
hgs
parents:
diff changeset
    78
    Sets the database id to \a id.
hgs
parents:
diff changeset
    79
*/
hgs
parents:
diff changeset
    80
void HsPage::setDatabaseId(int id)
hgs
parents:
diff changeset
    81
{
hgs
parents:
diff changeset
    82
    mDatabaseId = id;
hgs
parents:
diff changeset
    83
}
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
/*!
hgs
parents:
diff changeset
    86
    Loads widgets.
hgs
parents:
diff changeset
    87
*/
hgs
parents:
diff changeset
    88
bool HsPage::load()
hgs
parents:
diff changeset
    89
{
hgs
parents:
diff changeset
    90
    if (HSCONFIGURATION_GET(sceneType) == HsConfiguration::PageWallpapers) {
hgs
parents:
diff changeset
    91
        mWallpaper = new HsPageWallpaper(this);
hgs
parents:
diff changeset
    92
    }
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    HsWidgetHost *widget = new HsWidgetHost(-1);
hgs
parents:
diff changeset
    95
    mWidgets.append(widget);
hgs
parents:
diff changeset
    96
    connectWidget(widget);
hgs
parents:
diff changeset
    97
    widget->setPage(this);
hgs
parents:
diff changeset
    98
    widget->visual()->setParentItem(this->visual());
hgs
parents:
diff changeset
    99
    widget->startWidget();
hgs
parents:
diff changeset
   100
    return true;
hgs
parents:
diff changeset
   101
}
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
/*!
hgs
parents:
diff changeset
   104
    Return wallpaper.
hgs
parents:
diff changeset
   105
*/
hgs
parents:
diff changeset
   106
HsWallpaper *HsPage::wallpaper() const
hgs
parents:
diff changeset
   107
{
hgs
parents:
diff changeset
   108
    return mWallpaper;
hgs
parents:
diff changeset
   109
}
hgs
parents:
diff changeset
   110
/*!
hgs
parents:
diff changeset
   111
    Add given existing \a widgetHost to a page. Returns true if successful
hgs
parents:
diff changeset
   112
*/
hgs
parents:
diff changeset
   113
bool HsPage::addExistingWidget(HsWidgetHost *widgetHost)
hgs
parents:
diff changeset
   114
{
hgs
parents:
diff changeset
   115
    if (!widgetHost) {
hgs
parents:
diff changeset
   116
        return false;
hgs
parents:
diff changeset
   117
    }
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
    if (mWidgets.contains(widgetHost)) {
hgs
parents:
diff changeset
   120
        return true;
hgs
parents:
diff changeset
   121
    }
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    if (!widgetHost->setPage(this)) {
hgs
parents:
diff changeset
   124
        return false;
hgs
parents:
diff changeset
   125
    }
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
    connectWidget(widgetHost);
hgs
parents:
diff changeset
   128
    mWidgets << widgetHost;
hgs
parents:
diff changeset
   129
    widgetHost->visual()->setParentItem(this->visual());
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
    return true;
hgs
parents:
diff changeset
   132
 }
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
/*!
hgs
parents:
diff changeset
   135
    Remove given \a widgetHost from a page. Widget is not deleted.
hgs
parents:
diff changeset
   136
    Returns true if successful
hgs
parents:
diff changeset
   137
*/
hgs
parents:
diff changeset
   138
bool HsPage::removeWidget(HsWidgetHost *widgetHost)
hgs
parents:
diff changeset
   139
{
hgs
parents:
diff changeset
   140
    if (!widgetHost || !widgetHost->setPage(0)) {
hgs
parents:
diff changeset
   141
        return false;
hgs
parents:
diff changeset
   142
    }
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
    disconnectWidget(widgetHost);
hgs
parents:
diff changeset
   145
    mWidgets.removeOne(widgetHost);
hgs
parents:
diff changeset
   146
    widgetHost->visual()->setParentItem(0);
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
    return true;
hgs
parents:
diff changeset
   149
}
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
/*!
hgs
parents:
diff changeset
   152
    Returns list of new widgets belonging to a page. Widgets which are
hgs
parents:
diff changeset
   153
    not yet layouted are considered as new widgets.
hgs
parents:
diff changeset
   154
*/
hgs
parents:
diff changeset
   155
QList<HsWidgetHost *> HsPage::newWidgets()
hgs
parents:
diff changeset
   156
{
hgs
parents:
diff changeset
   157
    return mNewWidgets;
hgs
parents:
diff changeset
   158
}
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
/*!
hgs
parents:
diff changeset
   161
    Adds new widget into a page. Returns true if successfull.
hgs
parents:
diff changeset
   162
*/
hgs
parents:
diff changeset
   163
bool HsPage::addNewWidget(HsWidgetHost* widgetHost, const QPointF &touchPoint)
hgs
parents:
diff changeset
   164
{
hgs
parents:
diff changeset
   165
    Q_UNUSED(touchPoint)
hgs
parents:
diff changeset
   166
    if (!widgetHost || mWidgets.contains(widgetHost)) {
hgs
parents:
diff changeset
   167
        return false;
hgs
parents:
diff changeset
   168
    }
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
    if (mNewWidgets.contains(widgetHost)) {
hgs
parents:
diff changeset
   171
        return true;
hgs
parents:
diff changeset
   172
    }
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
    HsWidgetPresentationData presentation;
hgs
parents:
diff changeset
   175
    presentation.orientation = Qt::Vertical;
hgs
parents:
diff changeset
   176
    if (!widgetHost->getPresentation(presentation)) {
hgs
parents:
diff changeset
   177
        presentation.orientation = Qt::Vertical;
hgs
parents:
diff changeset
   178
        presentation.setPos(QPointF());
hgs
parents:
diff changeset
   179
        presentation.zValue = 0;
hgs
parents:
diff changeset
   180
        widgetHost->savePresentation(presentation);
hgs
parents:
diff changeset
   181
    }
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
    widgetHost->visual()->hide();
hgs
parents:
diff changeset
   184
    widgetHost->visual()->setPos(presentation.x, presentation.y);
hgs
parents:
diff changeset
   185
    widgetHost->visual()->setZValue(presentation.zValue);
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
    connectWidget(widgetHost);
hgs
parents:
diff changeset
   188
    mNewWidgets << widgetHost;
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    return true;
hgs
parents:
diff changeset
   191
}
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
/*!
hgs
parents:
diff changeset
   194
    Layouts all the new widgets
hgs
parents:
diff changeset
   195
*/
hgs
parents:
diff changeset
   196
void HsPage::layoutNewWidgets()
hgs
parents:
diff changeset
   197
{
hgs
parents:
diff changeset
   198
    if (mNewWidgets.isEmpty()) {
hgs
parents:
diff changeset
   199
        return;
hgs
parents:
diff changeset
   200
    }
hgs
parents:
diff changeset
   201
101
hgs
parents: 90
diff changeset
   202
    updateZValues(HsScene::instance()->activeWidget());
90
hgs
parents:
diff changeset
   203
    HsWidgetHost *widget = 0;
hgs
parents:
diff changeset
   204
    for (int i = 0; i < mNewWidgets.count(); ++i) {
hgs
parents:
diff changeset
   205
        widget = mNewWidgets.at(i);
hgs
parents:
diff changeset
   206
//Not used in mock        newWidgetLayout->addItem(widget);
hgs
parents:
diff changeset
   207
        widget->setPage(this);
hgs
parents:
diff changeset
   208
        widget->visual()->setParentItem(visual());
hgs
parents:
diff changeset
   209
        widget->showWidget();
hgs
parents:
diff changeset
   210
        widget->visual()->show();
hgs
parents:
diff changeset
   211
    }
hgs
parents:
diff changeset
   212
    mWidgets << mNewWidgets;
hgs
parents:
diff changeset
   213
    mNewWidgets.clear();
hgs
parents:
diff changeset
   214
}
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
/*!
hgs
parents:
diff changeset
   217
    Clears new widgets list and resets layout.
hgs
parents:
diff changeset
   218
*/
hgs
parents:
diff changeset
   219
void HsPage::resetNewWidgets()
hgs
parents:
diff changeset
   220
{
hgs
parents:
diff changeset
   221
    mNewWidgets.clear();
hgs
parents:
diff changeset
   222
}
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
/*!
hgs
parents:
diff changeset
   225
    Remove page and all it's contained widgets from database
hgs
parents:
diff changeset
   226
*/
hgs
parents:
diff changeset
   227
bool HsPage::deleteFromDatabase()
hgs
parents:
diff changeset
   228
{
hgs
parents:
diff changeset
   229
	//Not used in mock
hgs
parents:
diff changeset
   230
    return true;
hgs
parents:
diff changeset
   231
}
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
/*!
hgs
parents:
diff changeset
   234
    Return list of widgets belonging to a page
hgs
parents:
diff changeset
   235
*/
hgs
parents:
diff changeset
   236
QList<HsWidgetHost *> HsPage::widgets() const
hgs
parents:
diff changeset
   237
{
hgs
parents:
diff changeset
   238
    return mWidgets;
hgs
parents:
diff changeset
   239
}
hgs
parents:
diff changeset
   240
hgs
parents:
diff changeset
   241
/*!
hgs
parents:
diff changeset
   242
    Returns true if the page can be removed. Otherwise,
hgs
parents:
diff changeset
   243
    returns false.
hgs
parents:
diff changeset
   244
*/
hgs
parents:
diff changeset
   245
bool HsPage::isRemovable() const
hgs
parents:
diff changeset
   246
{
hgs
parents:
diff changeset
   247
    return mRemovable;
hgs
parents:
diff changeset
   248
}
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
/*!
hgs
parents:
diff changeset
   251
    Sets removable flag to \a removable.
hgs
parents:
diff changeset
   252
*/
hgs
parents:
diff changeset
   253
void HsPage::setRemovable(bool removable)
hgs
parents:
diff changeset
   254
{
hgs
parents:
diff changeset
   255
    mRemovable = removable;
hgs
parents:
diff changeset
   256
}
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
/*!
hgs
parents:
diff changeset
   259
    Return true if page is default page.
hgs
parents:
diff changeset
   260
*/
hgs
parents:
diff changeset
   261
bool HsPage::isDefaultPage() const
hgs
parents:
diff changeset
   262
{
hgs
parents:
diff changeset
   263
    return mDatabaseId == HSCONFIGURATION_GET(defaultPageId);
hgs
parents:
diff changeset
   264
}
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
/*!
hgs
parents:
diff changeset
   267
    Return true if page is active page.
hgs
parents:
diff changeset
   268
*/
hgs
parents:
diff changeset
   269
bool HsPage::isActivePage() const
hgs
parents:
diff changeset
   270
{
hgs
parents:
diff changeset
   271
    return this == HsScene::instance()->activePage();
hgs
parents:
diff changeset
   272
}
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
/*!
hgs
parents:
diff changeset
   275
    Create page into database and return instance of a new page.
hgs
parents:
diff changeset
   276
*/
hgs
parents:
diff changeset
   277
HsPage *HsPage::createInstance(const HsPageData &pageData)
hgs
parents:
diff changeset
   278
{
hgs
parents:
diff changeset
   279
    Q_UNUSED(pageData);
hgs
parents:
diff changeset
   280
    HsPage *page = new HsPage;
hgs
parents:
diff changeset
   281
    return page;
hgs
parents:
diff changeset
   282
}
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
/*!
hgs
parents:
diff changeset
   285
    The widget is bounded in the rectangle which is smaller by PageMargin on all sides of page.
hgs
parents:
diff changeset
   286
*/
hgs
parents:
diff changeset
   287
QPointF HsPage::adjustedWidgetPosition(const QRectF &origWidgetRect)
hgs
parents:
diff changeset
   288
{
hgs
parents:
diff changeset
   289
    QRectF widgetAreaRect = contentGeometry();
hgs
parents:
diff changeset
   290
    qreal widgetX = qBound(widgetAreaRect.left(), origWidgetRect.x(), widgetAreaRect.right() - origWidgetRect.width());
hgs
parents:
diff changeset
   291
    qreal widgetY = qBound(widgetAreaRect.top(), origWidgetRect.y(), widgetAreaRect.bottom() - origWidgetRect.height());
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
    return QPointF(widgetX, widgetY);
hgs
parents:
diff changeset
   294
}
hgs
parents:
diff changeset
   295
hgs
parents:
diff changeset
   296
/*!
hgs
parents:
diff changeset
   297
    Returns rect of rectangular where widgets are allowed to be placed in the page.
hgs
parents:
diff changeset
   298
*/
hgs
parents:
diff changeset
   299
QRectF HsPage::contentGeometry()
hgs
parents:
diff changeset
   300
{
hgs
parents:
diff changeset
   301
    return contentGeometry(Qt::Vertical);
hgs
parents:
diff changeset
   302
}
hgs
parents:
diff changeset
   303
hgs
parents:
diff changeset
   304
/*!
hgs
parents:
diff changeset
   305
    Returns rect of rectangular where widgets are allowed to be placed in the page.
hgs
parents:
diff changeset
   306
*/
hgs
parents:
diff changeset
   307
QRectF HsPage::contentGeometry(Qt::Orientation orientation)
hgs
parents:
diff changeset
   308
{
hgs
parents:
diff changeset
   309
    QRectF pageRect = QRectF(0, 0, 360.0, 640.0);
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
    //Take care of chrome in both orientation
hgs
parents:
diff changeset
   312
    pageRect.setTop(64);
hgs
parents:
diff changeset
   313
hgs
parents:
diff changeset
   314
    //Shrink by page margins at each side
hgs
parents:
diff changeset
   315
    return pageRect.adjusted(mPageMargin, mPageMargin, -mPageMargin, -mPageMargin);
hgs
parents:
diff changeset
   316
}
hgs
parents:
diff changeset
   317
hgs
parents:
diff changeset
   318
/*!
hgs
parents:
diff changeset
   319
    Returns rect of rectangular where widgets are allowed to be placed in the page.
hgs
parents:
diff changeset
   320
*/
hgs
parents:
diff changeset
   321
QRectF HsPage::contentRect()
hgs
parents:
diff changeset
   322
{
hgs
parents:
diff changeset
   323
    return contentRect(Qt::Vertical);
hgs
parents:
diff changeset
   324
}
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
/*!
hgs
parents:
diff changeset
   327
    Returns rect of rectangular where widgets are allowed to be placed in the page.
hgs
parents:
diff changeset
   328
*/
hgs
parents:
diff changeset
   329
QRectF HsPage::contentRect(Qt::Orientation orientation)
hgs
parents:
diff changeset
   330
{
hgs
parents:
diff changeset
   331
    QRectF rect = contentGeometry(orientation);
hgs
parents:
diff changeset
   332
    rect.moveTopLeft(QPointF(0,0));
hgs
parents:
diff changeset
   333
    return rect;
hgs
parents:
diff changeset
   334
}
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
/*!
hgs
parents:
diff changeset
   337
    Calls onShow() for contained widgets.
hgs
parents:
diff changeset
   338
*/
hgs
parents:
diff changeset
   339
void HsPage::showWidgets()
hgs
parents:
diff changeset
   340
{
hgs
parents:
diff changeset
   341
}
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
/*!
hgs
parents:
diff changeset
   344
    Calls onHide() for contained widgets.
hgs
parents:
diff changeset
   345
*/
hgs
parents:
diff changeset
   346
void HsPage::hideWidgets()
hgs
parents:
diff changeset
   347
{
hgs
parents:
diff changeset
   348
}
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
/*!
hgs
parents:
diff changeset
   351
    Propagate online state to widgets.
hgs
parents:
diff changeset
   352
*/
hgs
parents:
diff changeset
   353
void HsPage::setOnline(bool online)
hgs
parents:
diff changeset
   354
{
hgs
parents:
diff changeset
   355
    foreach (HsWidgetHost *widget, mNewWidgets) {
hgs
parents:
diff changeset
   356
        widget->setOnline(online);
hgs
parents:
diff changeset
   357
    }
hgs
parents:
diff changeset
   358
    foreach (HsWidgetHost *widget, mWidgets) {
hgs
parents:
diff changeset
   359
        widget->setOnline(online);
hgs
parents:
diff changeset
   360
    }
hgs
parents:
diff changeset
   361
}
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
/*!
hgs
parents:
diff changeset
   364
    Update widgets z-values and persist those. Active widget has top most
hgs
parents:
diff changeset
   365
    z-value.
hgs
parents:
diff changeset
   366
*/
101
hgs
parents: 90
diff changeset
   367
void HsPage::updateZValues(HsWidgetHost *activeWidget)
90
hgs
parents:
diff changeset
   368
{
101
hgs
parents: 90
diff changeset
   369
    Q_UNUSED(activeWidget)
90
hgs
parents:
diff changeset
   370
}
hgs
parents:
diff changeset
   371
hgs
parents:
diff changeset
   372
/*!
hgs
parents:
diff changeset
   373
    Return this page's index.
hgs
parents:
diff changeset
   374
*/
hgs
parents:
diff changeset
   375
int HsPage::pageIndex()
hgs
parents:
diff changeset
   376
{
hgs
parents:
diff changeset
   377
    return HsScene::instance()->pages().indexOf(this);
hgs
parents:
diff changeset
   378
}
hgs
parents:
diff changeset
   379
/*!
hgs
parents:
diff changeset
   380
    Utility to connect widget signals to page.
hgs
parents:
diff changeset
   381
*/
hgs
parents:
diff changeset
   382
void HsPage::connectWidget(HsWidgetHost *widget)
hgs
parents:
diff changeset
   383
{
hgs
parents:
diff changeset
   384
    connect(widget, SIGNAL(finished()), SLOT(onWidgetFinished()));
hgs
parents:
diff changeset
   385
    connect(widget, SIGNAL(faulted()), SLOT(onWidgetFaulted()));
hgs
parents:
diff changeset
   386
    connect(widget, SIGNAL(resized()), SLOT(onWidgetResized()));
hgs
parents:
diff changeset
   387
    connect(widget, SIGNAL(available()), SLOT(onWidgetAvailable()));
hgs
parents:
diff changeset
   388
    connect(widget, SIGNAL(unavailable()), SLOT(onWidgetUnavailable()));
hgs
parents:
diff changeset
   389
}
hgs
parents:
diff changeset
   390
/*!
hgs
parents:
diff changeset
   391
    Disconnect widget signals from page
hgs
parents:
diff changeset
   392
*/
hgs
parents:
diff changeset
   393
void HsPage::disconnectWidget(HsWidgetHost *widget)
hgs
parents:
diff changeset
   394
{
hgs
parents:
diff changeset
   395
    widget->disconnect(this);
hgs
parents:
diff changeset
   396
}
hgs
parents:
diff changeset
   397
/*!
hgs
parents:
diff changeset
   398
    Disconnect and remove widget
hgs
parents:
diff changeset
   399
*/
hgs
parents:
diff changeset
   400
void HsPage::onWidgetFinished()
hgs
parents:
diff changeset
   401
{
hgs
parents:
diff changeset
   402
    HsWidgetHost *widget = qobject_cast<HsWidgetHost *>(sender());
hgs
parents:
diff changeset
   403
hgs
parents:
diff changeset
   404
    // It can be in new widget list if we haven't layouted it yet
hgs
parents:
diff changeset
   405
    // or layouted new widget and widget list
hgs
parents:
diff changeset
   406
    if (!mNewWidgets.removeOne(widget)) {
hgs
parents:
diff changeset
   407
        mWidgets.removeOne(widget);
hgs
parents:
diff changeset
   408
    }
hgs
parents:
diff changeset
   409
hgs
parents:
diff changeset
   410
    disconnectWidget(widget);
hgs
parents:
diff changeset
   411
    widget->remove();
hgs
parents:
diff changeset
   412
}
hgs
parents:
diff changeset
   413
/*!
hgs
parents:
diff changeset
   414
    Remove widget if it faulted
hgs
parents:
diff changeset
   415
*/
hgs
parents:
diff changeset
   416
void HsPage::onWidgetFaulted()
hgs
parents:
diff changeset
   417
{
hgs
parents:
diff changeset
   418
    onWidgetFinished();
hgs
parents:
diff changeset
   419
}
hgs
parents:
diff changeset
   420
hgs
parents:
diff changeset
   421
/*!
hgs
parents:
diff changeset
   422
    Calculates new widget position on page when widget size changes. If page has layout then there are new widgets
hgs
parents:
diff changeset
   423
    and we use layout to calculate new widget positions.
hgs
parents:
diff changeset
   424
*/
hgs
parents:
diff changeset
   425
void HsPage::onWidgetResized()
hgs
parents:
diff changeset
   426
{
hgs
parents:
diff changeset
   427
}
hgs
parents:
diff changeset
   428
/*!
hgs
parents:
diff changeset
   429
    Show widget if it came available
hgs
parents:
diff changeset
   430
*/
hgs
parents:
diff changeset
   431
void HsPage::onWidgetAvailable()
hgs
parents:
diff changeset
   432
{
hgs
parents:
diff changeset
   433
}
hgs
parents:
diff changeset
   434
/*!
hgs
parents:
diff changeset
   435
    Update internal bookkeeping and hide widget
hgs
parents:
diff changeset
   436
*/
hgs
parents:
diff changeset
   437
void HsPage::onWidgetUnavailable()
hgs
parents:
diff changeset
   438
{
hgs
parents:
diff changeset
   439
}
hgs
parents:
diff changeset
   440
hgs
parents:
diff changeset
   441
/*!
hgs
parents:
diff changeset
   442
    Run positioning algorithm for widgets which don't have position on
hgs
parents:
diff changeset
   443
    target orientation. Otherwise set orientation positions for widgets.
hgs
parents:
diff changeset
   444
*/
hgs
parents:
diff changeset
   445
void HsPage::onOrientationChanged(Qt::Orientation orientation)
hgs
parents:
diff changeset
   446
{
hgs
parents:
diff changeset
   447
    Q_UNUSED(orientation)
hgs
parents:
diff changeset
   448
}
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
void HsPage::onPageMarginChanged(const QString &value)
hgs
parents:
diff changeset
   451
{
hgs
parents:
diff changeset
   452
    Q_UNUSED(value)
hgs
parents:
diff changeset
   453
}
hgs
parents:
diff changeset
   454
hgs
parents:
diff changeset
   455
HsPageVisual *HsPage::visual() const
hgs
parents:
diff changeset
   456
{
hgs
parents:
diff changeset
   457
    return mPageVisual;
hgs
parents:
diff changeset
   458
}