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