activityfw/testapplications/activitytestmodelhbintegration/iconsview.cpp
changeset 117 c63ee96dbe5f
equal deleted inserted replaced
115:3ab5c078b490 117:c63ee96dbe5f
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 #include "iconsview.h"
       
    19 
       
    20 #include <QGraphicsLinearLayout>
       
    21 #include <QGraphicsGridLayout>
       
    22 #include <QStandardItem>
       
    23 #include <QStandardItemModel>
       
    24 #include <QSignalMapper>
       
    25 
       
    26 #include <hblistwidget.h>
       
    27 #include <hblabel.h>
       
    28 #include <hbpushbutton.h>
       
    29 #include <hbinstance.h>
       
    30 #include <hbapplication.h>
       
    31 #include <hbactivitymanager.h>
       
    32 #include <hbmainwindow.h>
       
    33 
       
    34 #include <QDebug>
       
    35 
       
    36 #define hbApp qobject_cast<HbApplication*>(qApp)
       
    37 
       
    38 IconsView::IconsView(QGraphicsItem *parent) : HbView(parent)
       
    39 {
       
    40     setTitle("Activities -Hb Model");
       
    41 
       
    42     mModel = new QStandardItemModel(this);
       
    43     for (int i=1; i<=8; ++i) {
       
    44         addItemToModel(i);
       
    45     }
       
    46 
       
    47     mList = new HbListView(this);
       
    48     mList->setModel(mModel);
       
    49 
       
    50     QGraphicsGridLayout *buttonsLayout = new QGraphicsGridLayout();
       
    51     HbPushButton *addItemButton = new HbPushButton("Add item");
       
    52     connect(addItemButton, SIGNAL(clicked()), this, SLOT(addItem()));
       
    53     buttonsLayout->addItem(addItemButton, 0, 0);
       
    54 
       
    55     HbPushButton *removeItemButtom = new HbPushButton("Remove item");
       
    56     connect(removeItemButtom, SIGNAL(clicked()), this, SLOT(removeItem()));
       
    57     buttonsLayout->addItem(removeItemButtom, 0, 1);
       
    58 
       
    59     HbPushButton *saveActivityAButton = new HbPushButton("Save State A");
       
    60     buttonsLayout->addItem(saveActivityAButton, 1, 0);
       
    61     HbPushButton *saveActivityBButton = new HbPushButton("Save State B");
       
    62     buttonsLayout->addItem(saveActivityBButton, 1, 1);
       
    63 
       
    64     buttonsLayout->setRowFixedHeight(0, 50);
       
    65     buttonsLayout->setRowFixedHeight(1, 50);
       
    66 
       
    67     QSignalMapper *saveActivityMapper = new QSignalMapper(this);
       
    68     saveActivityMapper->setMapping(saveActivityAButton, "State A");
       
    69     saveActivityMapper->setMapping(saveActivityBButton, "State B");
       
    70     connect(saveActivityAButton, SIGNAL(clicked()), saveActivityMapper, SLOT(map()));
       
    71     connect(saveActivityBButton, SIGNAL(clicked()), saveActivityMapper, SLOT(map()));
       
    72     connect(saveActivityMapper, SIGNAL(mapped(QString)), this, SLOT(saveActivity(QString)));
       
    73 
       
    74     mItemCountLabel = new HbLabel();
       
    75     mItemCountLabel->setAlignment(Qt::AlignCenter);
       
    76     mItemCountLabel->setMaximumHeight(30);
       
    77     updateCountLabel();
       
    78 
       
    79     QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical, this);
       
    80     mainLayout->addItem(mItemCountLabel);
       
    81     mainLayout->addItem(mList);
       
    82     mainLayout->addItem(buttonsLayout);
       
    83 
       
    84     connect(hbApp->activityManager(), SIGNAL(activityRequested(QString)), this, SLOT(loadActivity(QString)));
       
    85     bool ok = hbApp->activityManager()->waitActivity();
       
    86     if (!ok) {
       
    87         //qFatal("Subscribe failed");
       
    88     }
       
    89 
       
    90     setLayout(mainLayout);
       
    91 }
       
    92 
       
    93 IconsView::~IconsView()
       
    94 {
       
    95 }
       
    96 
       
    97 void IconsView::addItemToModel(int number)
       
    98 {
       
    99     QStandardItem *item = new QStandardItem(QIcon(QString(":data\\img%1").arg(number)), QString("Image %1").arg(number));
       
   100     mModel->appendRow(item);
       
   101 }
       
   102 
       
   103 void IconsView::addItem()
       
   104 {
       
   105     addItemToModel(qrand() % 8 + 1);
       
   106     updateCountLabel();
       
   107 }
       
   108 
       
   109 void IconsView::removeItem()
       
   110 {
       
   111     if (mModel->rowCount() > 0) {
       
   112         mModel->removeRow(mModel->rowCount() - 1, QModelIndex());
       
   113     }
       
   114     updateCountLabel();
       
   115 }
       
   116 
       
   117 void IconsView::updateCountLabel()
       
   118 {
       
   119     mItemCountLabel->setPlainText(QString("List contains %1 items").arg(mModel->rowCount()));
       
   120 }
       
   121 
       
   122 QVariant IconsView::generateActivityData()
       
   123 {
       
   124     QByteArray serializedModel;
       
   125     {
       
   126         QDataStream stream(&serializedModel, QIODevice::WriteOnly | QIODevice::Append);
       
   127         for (int row = 0; row < mModel->rowCount(); ++row) {
       
   128             stream << *mModel->item(row);
       
   129         }
       
   130     }
       
   131     return serializedModel;
       
   132 }
       
   133 
       
   134 void IconsView::saveActivity(const QString &name)
       
   135 {
       
   136     HbMainWindow *mainWindow = hbInstance->allMainWindows().value(0);
       
   137     QVariantHash metadata;
       
   138     metadata.insert("screenshot", QPixmap::grabWidget(mainWindow, mainWindow->rect()));
       
   139     bool ok = hbApp->activityManager()->removeActivity(name);
       
   140     if (!ok) {
       
   141         //qFatal("Remove failed" );
       
   142     }
       
   143     ok = hbApp->activityManager()->addActivity(name, generateActivityData(), metadata);
       
   144     if (!ok) {
       
   145         qFatal("Add failed");
       
   146     }
       
   147 }
       
   148 
       
   149 void IconsView::loadActivity(const QString &name)
       
   150 {
       
   151     bool ok = hbApp->activityManager()->waitActivity();
       
   152     if (!ok) {
       
   153         //qFatal("Resubscribe failed");
       
   154     }
       
   155     QVariant data = hbApp->activityManager()->activityData(name);
       
   156     loadActivity(data);
       
   157 }
       
   158 
       
   159 void IconsView::loadActivity(const QVariant &data)
       
   160 {
       
   161     mModel->clear();
       
   162     QByteArray serializedModel = data.toByteArray();
       
   163     {
       
   164         QDataStream stream(&serializedModel, QIODevice::ReadOnly);
       
   165         while (!stream.atEnd()) {
       
   166             QStandardItem *item = new QStandardItem();
       
   167             stream >> *item;
       
   168             mModel->appendRow(item);
       
   169         }
       
   170     }
       
   171     updateCountLabel();
       
   172 }