messagingapp/msgui/unifiedviewer/src/univiewerattachmentwidget.cpp
author hgs
Fri, 25 Jun 2010 15:47:40 +0530
changeset 37 518b245aa84c
child 62 fdbe8253b596
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37
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: Widget for displaying attachment media objects.
hgs
parents:
diff changeset
    15
 *
hgs
parents:
diff changeset
    16
 */
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "univiewerattachmentwidget.h"
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// SYSTEM INCLUDES
hgs
parents:
diff changeset
    21
#include <HbIconItem>
hgs
parents:
diff changeset
    22
#include <HbTextItem>
hgs
parents:
diff changeset
    23
#include <HbFrameItem>
hgs
parents:
diff changeset
    24
#include <HbMenu>
hgs
parents:
diff changeset
    25
#include <HbEffect>
hgs
parents:
diff changeset
    26
#include <HbTapGesture>
hgs
parents:
diff changeset
    27
#include <HbInstantFeedback>
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#include <QFileInfo>
hgs
parents:
diff changeset
    30
#include <QTimer>
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
// USER INCLUDES
hgs
parents:
diff changeset
    33
#include "univiewerutils.h"
hgs
parents:
diff changeset
    34
#include "unidatamodelplugininterface.h"
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// LOCAL CONSTANTS
hgs
parents:
diff changeset
    37
#define LOC_OPEN hbTrId("txt_common_menu_open")
hgs
parents:
diff changeset
    38
#define LOC_SAVE hbTrId("txt_common_menu_save")
hgs
parents:
diff changeset
    39
#define LOC_SAVE_TO_CONTACTS hbTrId("txt_messaging_menu_save_to_contacts")
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
const QString BG_FRAME_NORMAL("qtg_fr_list_normal");
hgs
parents:
diff changeset
    42
const QString BG_FRAME_PRESSED("qtg_fr_list_pressed");
hgs
parents:
diff changeset
    43
const QString ATTACHMENT_ICON("qtg_small_attachment");
hgs
parents:
diff changeset
    44
const QString CORRUPTED_ATTACH_ICON("qtg_small_corrupted");
hgs
parents:
diff changeset
    45
const QString VCARD_MIMETYPE("text/X-vCard");
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
const int KILOBYTE = 1024;
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
// UniViewerAttachmentWidget::UniViewerAttachmentWidget
hgs
parents:
diff changeset
    51
// @see header file
hgs
parents:
diff changeset
    52
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
    53
UniViewerAttachmentWidget::UniViewerAttachmentWidget(QGraphicsItem *parent) :
hgs
parents:
diff changeset
    54
    HbWidget(parent), mMediaIcon(0), mName(0), mInfo(0), mFrameItem(0), mViewerUtils(0)
hgs
parents:
diff changeset
    55
{
hgs
parents:
diff changeset
    56
    this->grabGesture(Qt::TapGesture);
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
    setProperty("state", "normal");
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
    mMediaIcon = new HbIconItem(this);
hgs
parents:
diff changeset
    61
    HbStyle::setItemName(mMediaIcon, "mediaIcon");
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    mName = new HbTextItem(this);
hgs
parents:
diff changeset
    64
    HbStyle::setItemName(mName, "text-1");
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
    mInfo = new HbTextItem(this);
hgs
parents:
diff changeset
    67
    HbStyle::setItemName(mInfo, "text-2");
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
    mFrameItem = new HbFrameItem(BG_FRAME_NORMAL, HbFrameDrawer::NinePieces, this);
hgs
parents:
diff changeset
    70
    HbStyle::setItemName(mFrameItem, "bgFrame");
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    HbEffect::add("attachmentWidget", "listviewitem_press", "pressed");
hgs
parents:
diff changeset
    73
    HbEffect::add("attachmentWidget", "listviewitem_release", "released");
hgs
parents:
diff changeset
    74
}
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
    77
// UniViewerAttachmentWidget::~UniViewerAttachmentWidget
hgs
parents:
diff changeset
    78
// @see header file
hgs
parents:
diff changeset
    79
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
    80
UniViewerAttachmentWidget::~UniViewerAttachmentWidget()
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
// UniViewerAttachmentWidget::populate
hgs
parents:
diff changeset
    86
// @see header file
hgs
parents:
diff changeset
    87
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
    88
void UniViewerAttachmentWidget::populate(UniMessageInfo *info)
hgs
parents:
diff changeset
    89
{
hgs
parents:
diff changeset
    90
    mMimeType = info->mimetype();
hgs
parents:
diff changeset
    91
    mMediaPath = info->path();
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
    QString attachIcon;
hgs
parents:
diff changeset
    94
    if (info->isProtected()) {
hgs
parents:
diff changeset
    95
        attachIcon = ATTACHMENT_ICON;
hgs
parents:
diff changeset
    96
    }
hgs
parents:
diff changeset
    97
    else if (info->isCorrupted()) {
hgs
parents:
diff changeset
    98
        attachIcon = CORRUPTED_ATTACH_ICON;
hgs
parents:
diff changeset
    99
    }
hgs
parents:
diff changeset
   100
    else {
hgs
parents:
diff changeset
   101
        attachIcon = ATTACHMENT_ICON;
hgs
parents:
diff changeset
   102
    }
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
    mMediaIcon->setIconName(attachIcon);
hgs
parents:
diff changeset
   105
    QFileInfo fileInfo(mMediaPath);
hgs
parents:
diff changeset
   106
    mName->setText(fileInfo.fileName());
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
    QString sizeString('B');
hgs
parents:
diff changeset
   109
    int fileSize = fileInfo.size();
hgs
parents:
diff changeset
   110
    if (fileSize > KILOBYTE) {
hgs
parents:
diff changeset
   111
        // Convert to Kilobytes.
hgs
parents:
diff changeset
   112
        fileSize /= KILOBYTE;
hgs
parents:
diff changeset
   113
        sizeString = "Kb";
hgs
parents:
diff changeset
   114
    }
hgs
parents:
diff changeset
   115
    QString fileDetails = "(" + QString::number(fileSize) + sizeString + ")";
hgs
parents:
diff changeset
   116
    mInfo->setText(fileDetails);
hgs
parents:
diff changeset
   117
}
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   120
// UniViewerAttachmentWidget::resizeEvent
hgs
parents:
diff changeset
   121
// @see header file
hgs
parents:
diff changeset
   122
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   123
void UniViewerAttachmentWidget::gestureEvent(QGestureEvent *event)
hgs
parents:
diff changeset
   124
{
hgs
parents:
diff changeset
   125
    HbTapGesture *tapGesture = qobject_cast<HbTapGesture*> (event->gesture(Qt::TapGesture));
hgs
parents:
diff changeset
   126
    if (tapGesture) {
hgs
parents:
diff changeset
   127
        switch (tapGesture->state()) {
hgs
parents:
diff changeset
   128
        case Qt::GestureStarted:
hgs
parents:
diff changeset
   129
        {
hgs
parents:
diff changeset
   130
            // Trigger haptic feedback.
hgs
parents:
diff changeset
   131
            HbInstantFeedback::play(HbFeedback::Basic);
hgs
parents:
diff changeset
   132
            setPressed(true);
hgs
parents:
diff changeset
   133
            break;
hgs
parents:
diff changeset
   134
        }
hgs
parents:
diff changeset
   135
        case Qt::GestureUpdated:
hgs
parents:
diff changeset
   136
        {
hgs
parents:
diff changeset
   137
            if (HbTapGesture::TapAndHold == tapGesture->tapStyleHint()) {
hgs
parents:
diff changeset
   138
                // Handle longtap.
hgs
parents:
diff changeset
   139
                setPressed(false);
hgs
parents:
diff changeset
   140
                handleLongTap(tapGesture->scenePosition());
hgs
parents:
diff changeset
   141
            }
hgs
parents:
diff changeset
   142
            break;
hgs
parents:
diff changeset
   143
        }
hgs
parents:
diff changeset
   144
        case Qt::GestureFinished:
hgs
parents:
diff changeset
   145
        {
hgs
parents:
diff changeset
   146
            HbInstantFeedback::play(HbFeedback::Basic);
hgs
parents:
diff changeset
   147
            if (HbTapGesture::Tap == tapGesture->tapStyleHint()) {
hgs
parents:
diff changeset
   148
                // Handle short tap.
hgs
parents:
diff changeset
   149
                setPressed(false);
hgs
parents:
diff changeset
   150
                handleShortTap();
hgs
parents:
diff changeset
   151
            }
hgs
parents:
diff changeset
   152
            break;
hgs
parents:
diff changeset
   153
        }
hgs
parents:
diff changeset
   154
        case Qt::GestureCanceled:
hgs
parents:
diff changeset
   155
        {
hgs
parents:
diff changeset
   156
            HbInstantFeedback::play(HbFeedback::Basic);
hgs
parents:
diff changeset
   157
            setPressed(false);
hgs
parents:
diff changeset
   158
            break;
hgs
parents:
diff changeset
   159
        }
hgs
parents:
diff changeset
   160
        }
hgs
parents:
diff changeset
   161
    }
hgs
parents:
diff changeset
   162
    else {
hgs
parents:
diff changeset
   163
        HbWidget::gestureEvent(event);
hgs
parents:
diff changeset
   164
    }
hgs
parents:
diff changeset
   165
}
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   168
// UniViewerAttachmentWidget::handleOpen
hgs
parents:
diff changeset
   169
// @see header file
hgs
parents:
diff changeset
   170
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   171
void UniViewerAttachmentWidget::handleOpen()
hgs
parents:
diff changeset
   172
{
hgs
parents:
diff changeset
   173
    this->ungrabGesture(Qt::TapGesture);
hgs
parents:
diff changeset
   174
    
hgs
parents:
diff changeset
   175
    if (!mViewerUtils) {
hgs
parents:
diff changeset
   176
        mViewerUtils = new UniViewerUtils(this);
hgs
parents:
diff changeset
   177
    }
hgs
parents:
diff changeset
   178
    mViewerUtils->launchContentViewer(mMimeType, mMediaPath);
hgs
parents:
diff changeset
   179
    
hgs
parents:
diff changeset
   180
    //fire timer to regrab gesture after some delay.
hgs
parents:
diff changeset
   181
    QTimer::singleShot(300,this,SLOT(regrabGesture()));
hgs
parents:
diff changeset
   182
}
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   185
// UniViewerAttachmentWidget::handleSave
hgs
parents:
diff changeset
   186
// @see header file
hgs
parents:
diff changeset
   187
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   188
void UniViewerAttachmentWidget::handleSave()
hgs
parents:
diff changeset
   189
{
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
}
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   194
// UniViewerAttachmentWidget::handleShortTap
hgs
parents:
diff changeset
   195
// @see header file
hgs
parents:
diff changeset
   196
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   197
void UniViewerAttachmentWidget::handleShortTap()
hgs
parents:
diff changeset
   198
{
hgs
parents:
diff changeset
   199
    emit shortTap(mMediaPath);
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
    // Open the media.
hgs
parents:
diff changeset
   202
    handleOpen();
hgs
parents:
diff changeset
   203
}
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   206
// UniViewerAttachmentWidget::handleLongTap
hgs
parents:
diff changeset
   207
// @see header file
hgs
parents:
diff changeset
   208
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   209
void UniViewerAttachmentWidget::handleLongTap(const QPointF &position)
hgs
parents:
diff changeset
   210
{
hgs
parents:
diff changeset
   211
    emit longTap(position);
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
    // Display context sensitive menu.
hgs
parents:
diff changeset
   214
    HbMenu* menu = new HbMenu;
hgs
parents:
diff changeset
   215
    menu->setAttribute(Qt::WA_DeleteOnClose);
hgs
parents:
diff changeset
   216
    menu->setPreferredPos(position);
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
    if (mMimeType.contains(VCARD_MIMETYPE, Qt::CaseInsensitive)) {
hgs
parents:
diff changeset
   219
        // For vcard opening & saving is same.
hgs
parents:
diff changeset
   220
        menu->addAction(LOC_SAVE_TO_CONTACTS, this, SLOT(handleOpen()));
hgs
parents:
diff changeset
   221
    }
hgs
parents:
diff changeset
   222
    else {
hgs
parents:
diff changeset
   223
        menu->addAction(LOC_OPEN, this, SLOT(handleOpen()));
hgs
parents:
diff changeset
   224
        menu->addAction(LOC_SAVE, this, SLOT(handleSave()));
hgs
parents:
diff changeset
   225
    }
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
    menu->show();
hgs
parents:
diff changeset
   228
}
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   231
// UniViewerAttachmentWidget::setPressed
hgs
parents:
diff changeset
   232
// @see header file
hgs
parents:
diff changeset
   233
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   234
void UniViewerAttachmentWidget::setPressed(bool pressed)
hgs
parents:
diff changeset
   235
{
hgs
parents:
diff changeset
   236
    if (pressed) {
hgs
parents:
diff changeset
   237
        setProperty("state", "pressed");
hgs
parents:
diff changeset
   238
        mFrameItem->frameDrawer().setFrameGraphicsName(BG_FRAME_PRESSED);
hgs
parents:
diff changeset
   239
        HbEffect::cancel(mFrameItem, "released");
hgs
parents:
diff changeset
   240
        HbEffect::start(mFrameItem, "attachmentWidget", "pressed");
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
    }
hgs
parents:
diff changeset
   243
    else {
hgs
parents:
diff changeset
   244
        setProperty("state", "normal");
hgs
parents:
diff changeset
   245
        mFrameItem->frameDrawer().setFrameGraphicsName(BG_FRAME_NORMAL);
hgs
parents:
diff changeset
   246
        HbEffect::cancel(mFrameItem, "pressed");
hgs
parents:
diff changeset
   247
        HbEffect::start(mFrameItem, "attachmentWidget", "released");
hgs
parents:
diff changeset
   248
    }
hgs
parents:
diff changeset
   249
}
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
//---------------------------------------------------------------
hgs
parents:
diff changeset
   252
// UniViewerAttachmentWidget::regrabGesture
hgs
parents:
diff changeset
   253
// @see header file
hgs
parents:
diff changeset
   254
//---------------------------------------------------------------
hgs
parents:
diff changeset
   255
void UniViewerAttachmentWidget::regrabGesture()
hgs
parents:
diff changeset
   256
{
hgs
parents:
diff changeset
   257
    this->grabGesture(Qt::TapGesture);
hgs
parents:
diff changeset
   258
}
hgs
parents:
diff changeset
   259
// EOF