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