calendarui/views/dayview/src/calendayitemview.cpp
author hgs
Fri, 15 Oct 2010 12:10:36 +0530
changeset 83 5aadd1120515
parent 81 ce92091cbd61
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
hgs
parents:
diff changeset
     1
/*
70
hgs
parents: 63
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents: 63
diff changeset
     3
 * All rights reserved.
hgs
parents: 63
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents: 63
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents: 63
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents: 63
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents: 63
diff changeset
     8
 *
hgs
parents: 63
diff changeset
     9
 * Initial Contributors:
hgs
parents: 63
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents: 63
diff changeset
    11
 *
hgs
parents: 63
diff changeset
    12
 * Contributors:
hgs
parents: 63
diff changeset
    13
 *
81
hgs
parents: 75
diff changeset
    14
 * Description: CalenDayItemView implementation
70
hgs
parents: 63
diff changeset
    15
 *
hgs
parents: 63
diff changeset
    16
 */
45
hgs
parents:
diff changeset
    17
81
hgs
parents: 75
diff changeset
    18
// System includes
45
hgs
parents:
diff changeset
    19
#include <QGesture>
hgs
parents:
diff changeset
    20
#include <QGraphicsLinearLayout>
63
hgs
parents: 57
diff changeset
    21
#include <HbAbstractViewItem>
hgs
parents: 57
diff changeset
    22
#include <HbInstance>
hgs
parents: 57
diff changeset
    23
#include <HbAction>
83
hgs
parents: 81
diff changeset
    24
#include <HbTapGesture>
45
hgs
parents:
diff changeset
    25
81
hgs
parents: 75
diff changeset
    26
// User includes
45
hgs
parents:
diff changeset
    27
#include "calendayitemview.h"
hgs
parents:
diff changeset
    28
#include "calendayutils.h"
hgs
parents:
diff changeset
    29
#include "calendaycontainer.h"
75
hgs
parents: 70
diff changeset
    30
#include "calendayitemview.h"
45
hgs
parents:
diff changeset
    31
#include "calendayinfo.h"
hgs
parents:
diff changeset
    32
#include "calendaymodel.h"
hgs
parents:
diff changeset
    33
#include "calenservices.h"
hgs
parents:
diff changeset
    34
#include "calencontext.h"
57
hgs
parents: 55
diff changeset
    35
#include "calenagendautils.h"
45
hgs
parents:
diff changeset
    36
#include "CalenUid.h"
hgs
parents:
diff changeset
    37
70
hgs
parents: 63
diff changeset
    38
/*!
hgs
parents: 63
diff changeset
    39
 \brief Constructor
hgs
parents: 63
diff changeset
    40
 */
hgs
parents: 63
diff changeset
    41
CalenDayItemView::CalenDayItemView(
hgs
parents: 63
diff changeset
    42
    MCalenServices &services,
hgs
parents: 63
diff changeset
    43
    HbModelIterator *iterator,
hgs
parents: 63
diff changeset
    44
    QGraphicsItem *parent) :
hgs
parents: 63
diff changeset
    45
    HbAbstractItemView(mContainer = new CalenDayContainer(), iterator, parent),
hgs
parents: 63
diff changeset
    46
        mServices(services)
hgs
parents: 63
diff changeset
    47
{
hgs
parents: 63
diff changeset
    48
    mInfo = new CalenDayInfo(CalenDayInfo::EFour);
hgs
parents: 63
diff changeset
    49
    mContainer->setDayInfo(mInfo);
45
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
    //setup Selection Model
hgs
parents:
diff changeset
    52
    QItemSelectionModel* selModel = new QItemSelectionModel(this->model());
70
hgs
parents: 63
diff changeset
    53
    if (selModel) {
hgs
parents: 63
diff changeset
    54
        setSelectionMode(HbAbstractItemView::SingleSelection);
hgs
parents: 63
diff changeset
    55
        setSelectionModel(selModel);
45
hgs
parents:
diff changeset
    56
    }
70
hgs
parents: 63
diff changeset
    57
45
hgs
parents:
diff changeset
    58
    setScrollDirections(Qt::Vertical);
hgs
parents:
diff changeset
    59
    setScrollingStyle(HbScrollArea::PanWithFollowOn);
hgs
parents:
diff changeset
    60
    setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
70
hgs
parents: 63
diff changeset
    61
45
hgs
parents:
diff changeset
    62
    //TODO: KG: Animate item pressed?! HbAbstractItemView::TouchDown
70
hgs
parents: 63
diff changeset
    63
    setEnabledAnimations(HbAbstractItemView::None);
hgs
parents: 63
diff changeset
    64
45
hgs
parents:
diff changeset
    65
    // Get the width of content and fix its size
hgs
parents:
diff changeset
    66
    qreal contentWidth = CalenDayUtils::instance()->contentWidth();
hgs
parents:
diff changeset
    67
    setMinimumWidth(contentWidth);
hgs
parents:
diff changeset
    68
    setMaximumWidth(contentWidth);
70
hgs
parents: 63
diff changeset
    69
45
hgs
parents:
diff changeset
    70
    setupSlots();
hgs
parents:
diff changeset
    71
    setupContextMenu();
hgs
parents:
diff changeset
    72
}
hgs
parents:
diff changeset
    73
57
hgs
parents: 55
diff changeset
    74
/*!
70
hgs
parents: 63
diff changeset
    75
 \brief Destructor
hgs
parents: 63
diff changeset
    76
 */
45
hgs
parents:
diff changeset
    77
CalenDayItemView::~CalenDayItemView()
hgs
parents:
diff changeset
    78
{
hgs
parents:
diff changeset
    79
    delete mInfo;
hgs
parents:
diff changeset
    80
}
hgs
parents:
diff changeset
    81
57
hgs
parents: 55
diff changeset
    82
/*!
70
hgs
parents: 63
diff changeset
    83
 \brief Scrolls to given index
hgs
parents: 63
diff changeset
    84
 */
hgs
parents: 63
diff changeset
    85
void CalenDayItemView::scrollTo(
hgs
parents: 63
diff changeset
    86
    const QModelIndex &index,
hgs
parents: 63
diff changeset
    87
    HbAbstractItemView::ScrollHint hint)
45
hgs
parents:
diff changeset
    88
{
hgs
parents:
diff changeset
    89
    HbAbstractItemView::scrollTo(index, hint);
hgs
parents:
diff changeset
    90
}
hgs
parents:
diff changeset
    91
57
hgs
parents: 55
diff changeset
    92
/*!
75
hgs
parents: 70
diff changeset
    93
 \brief Gets context menu of ItemView
hgs
parents: 70
diff changeset
    94
 
hgs
parents: 70
diff changeset
    95
 \return Context menu
hgs
parents: 70
diff changeset
    96
 */
hgs
parents: 70
diff changeset
    97
HbMenu *CalenDayItemView::contextMenu() const
hgs
parents: 70
diff changeset
    98
{
hgs
parents: 70
diff changeset
    99
    return mContextMenu;
hgs
parents: 70
diff changeset
   100
}
hgs
parents: 70
diff changeset
   101
hgs
parents: 70
diff changeset
   102
/*!
hgs
parents: 70
diff changeset
   103
 \brief Sets context menu of ItemView
hgs
parents: 70
diff changeset
   104
 
hgs
parents: 70
diff changeset
   105
 \param contextMenu Context menu
hgs
parents: 70
diff changeset
   106
 */
hgs
parents: 70
diff changeset
   107
void CalenDayItemView::setContextMenu(HbMenu *contextMenu)
hgs
parents: 70
diff changeset
   108
{
hgs
parents: 70
diff changeset
   109
    mContextMenu = contextMenu;
hgs
parents: 70
diff changeset
   110
}
hgs
parents: 70
diff changeset
   111
hgs
parents: 70
diff changeset
   112
/*!
70
hgs
parents: 63
diff changeset
   113
 \brief Currently empty implementation.
hgs
parents: 63
diff changeset
   114
 */
45
hgs
parents:
diff changeset
   115
void CalenDayItemView::reset()
hgs
parents:
diff changeset
   116
{
57
hgs
parents: 55
diff changeset
   117
45
hgs
parents:
diff changeset
   118
}
hgs
parents:
diff changeset
   119
57
hgs
parents: 55
diff changeset
   120
/*!
70
hgs
parents: 63
diff changeset
   121
 \brief Handles signal that is emitted when reset() is called, before the model's
hgs
parents: 63
diff changeset
   122
 internal state (e.g. persistent model indexes) has been invalidated.
hgs
parents: 63
diff changeset
   123
 */
45
hgs
parents:
diff changeset
   124
void CalenDayItemView::modelAboutToBeReset()
hgs
parents:
diff changeset
   125
{
70
hgs
parents: 63
diff changeset
   126
45
hgs
parents:
diff changeset
   127
}
hgs
parents:
diff changeset
   128
57
hgs
parents: 55
diff changeset
   129
/*!
70
hgs
parents: 63
diff changeset
   130
 \brief Handles signal that is emitted when reset() is called, before the model's
hgs
parents: 63
diff changeset
   131
 internal state (e.g. persistent model indexes) has been invalidated.
hgs
parents: 63
diff changeset
   132
 */
45
hgs
parents:
diff changeset
   133
void CalenDayItemView::modelReset()
hgs
parents:
diff changeset
   134
{
70
hgs
parents: 63
diff changeset
   135
    if (!mInfo) {
45
hgs
parents:
diff changeset
   136
        return;
hgs
parents:
diff changeset
   137
    }
hgs
parents:
diff changeset
   138
    //reset day info
hgs
parents:
diff changeset
   139
    mInfo->Reset();
55
hgs
parents: 45
diff changeset
   140
45
hgs
parents:
diff changeset
   141
    CalenDayModel* model(0);
70
hgs
parents: 63
diff changeset
   142
    model = static_cast<CalenDayModel*> (this->model());
hgs
parents: 63
diff changeset
   143
    if (!model) {
45
hgs
parents:
diff changeset
   144
        return;
hgs
parents:
diff changeset
   145
    }
70
hgs
parents: 63
diff changeset
   146
55
hgs
parents: 45
diff changeset
   147
    mContainer->setDate(model->modelDate().date());
70
hgs
parents: 63
diff changeset
   148
    int rowCount = model->rowCount();
hgs
parents: 63
diff changeset
   149
    SCalenApptInfo apptInfo;
hgs
parents: 63
diff changeset
   150
    for (int row = 0; row < rowCount; row++) {
hgs
parents: 63
diff changeset
   151
        QModelIndex idx = model->index(row, 0);
hgs
parents: 63
diff changeset
   152
        QVariant variant = idx.data(CalenDayEntry);
hgs
parents: 63
diff changeset
   153
        AgendaEntry entry = variant.value<AgendaEntry> ();
45
hgs
parents:
diff changeset
   154
        apptInfo.iIndex = idx;
70
hgs
parents: 63
diff changeset
   155
45
hgs
parents:
diff changeset
   156
        QDateTime start;
hgs
parents:
diff changeset
   157
        QDateTime end;
70
hgs
parents: 63
diff changeset
   158
        QDateTime currDate(model->modelDate());
hgs
parents: 63
diff changeset
   159
        CalenDayUtils::instance()->getEventValidStartEndTime(start, end, entry,
hgs
parents: 63
diff changeset
   160
            currDate);
45
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
        apptInfo.iStartTime = start;
hgs
parents:
diff changeset
   163
        apptInfo.iEndTime = end;
70
hgs
parents: 63
diff changeset
   164
45
hgs
parents:
diff changeset
   165
        TCalenInstanceId id = TCalenInstanceId::nullInstanceId();//index.row() - temporary ID
hgs
parents:
diff changeset
   166
        id.mEntryLocalUid = row;
70
hgs
parents: 63
diff changeset
   167
        id.mInstanceTime = apptInfo.iStartTime;
45
hgs
parents:
diff changeset
   168
        apptInfo.iId = id;
hgs
parents:
diff changeset
   169
        apptInfo.iColor = 0xffff;
70
hgs
parents: 63
diff changeset
   170
hgs
parents: 63
diff changeset
   171
        if (entry.isTimedEntry() && !CalenAgendaUtils::isAlldayEvent(entry)) {
45
hgs
parents:
diff changeset
   172
            apptInfo.iAllDay = false;
70
hgs
parents: 63
diff changeset
   173
            mInfo->InsertTimedEvent(apptInfo);
hgs
parents: 63
diff changeset
   174
        }
hgs
parents: 63
diff changeset
   175
        else
81
hgs
parents: 75
diff changeset
   176
            if (CalenAgendaUtils::isAlldayEvent(entry)) { //all-day event
70
hgs
parents: 63
diff changeset
   177
                apptInfo.iAllDay = true;
hgs
parents: 63
diff changeset
   178
                mInfo->InsertAlldayEvent(apptInfo);
hgs
parents: 63
diff changeset
   179
            }
45
hgs
parents:
diff changeset
   180
    }
70
hgs
parents: 63
diff changeset
   181
45
hgs
parents:
diff changeset
   182
    HbAbstractItemView::reset();
hgs
parents:
diff changeset
   183
}
hgs
parents:
diff changeset
   184
57
hgs
parents: 55
diff changeset
   185
/*!
70
hgs
parents: 63
diff changeset
   186
 \brief Scrolls view vertically to the given position.
hgs
parents: 63
diff changeset
   187
 
hgs
parents: 63
diff changeset
   188
 \param newPosition position to scroll to.
hgs
parents: 63
diff changeset
   189
 */
hgs
parents: 63
diff changeset
   190
void CalenDayItemView::scrollVertically(const QPointF &newPosition)
45
hgs
parents:
diff changeset
   191
{
hgs
parents:
diff changeset
   192
    QPointF currentPos = contentWidget()->pos();
hgs
parents:
diff changeset
   193
    if (abs(newPosition.y()) != abs(currentPos.y())) {
hgs
parents:
diff changeset
   194
        currentPos.setY(newPosition.y());
hgs
parents:
diff changeset
   195
        scrollContentsTo(currentPos, 0);
hgs
parents:
diff changeset
   196
    }
hgs
parents:
diff changeset
   197
}
hgs
parents:
diff changeset
   198
57
hgs
parents: 55
diff changeset
   199
/*!
83
hgs
parents: 81
diff changeset
   200
 \brief Handles gesture events in CalenDayItemView.
hgs
parents: 81
diff changeset
   201
 
hgs
parents: 81
diff changeset
   202
 Handles Tap gesture and launches the editor with given start position.
hgs
parents: 81
diff changeset
   203
 
hgs
parents: 81
diff changeset
   204
 \param event Gesture event
hgs
parents: 81
diff changeset
   205
 */
hgs
parents: 81
diff changeset
   206
void CalenDayItemView::gestureEvent(QGestureEvent *event)
hgs
parents: 81
diff changeset
   207
{
hgs
parents: 81
diff changeset
   208
    HbTapGesture *tapGesture = qobject_cast<HbTapGesture*> (event->gesture(
hgs
parents: 81
diff changeset
   209
        Qt::TapGesture));
hgs
parents: 81
diff changeset
   210
hgs
parents: 81
diff changeset
   211
    if (tapGesture) {
hgs
parents: 81
diff changeset
   212
        if (tapGesture->state() == Qt::GestureFinished) {
hgs
parents: 81
diff changeset
   213
            QPointF pos = tapGesture->scenePosition();
hgs
parents: 81
diff changeset
   214
            QDateTime dateTime = mContainer->dateTimeAtPos(pos);
hgs
parents: 81
diff changeset
   215
            if (dateTime.isValid()) {
hgs
parents: 81
diff changeset
   216
                mServices.Context().setStartDateAndTimeForNewInstance(dateTime);
hgs
parents: 81
diff changeset
   217
                TRAP_IGNORE( mServices.IssueCommandL(ECalenNewMeeting); );
hgs
parents: 81
diff changeset
   218
            }
hgs
parents: 81
diff changeset
   219
        }
hgs
parents: 81
diff changeset
   220
    }
hgs
parents: 81
diff changeset
   221
    else {
hgs
parents: 81
diff changeset
   222
        HbAbstractItemView::gestureEvent(event);
hgs
parents: 81
diff changeset
   223
    }
hgs
parents: 81
diff changeset
   224
}
hgs
parents: 81
diff changeset
   225
hgs
parents: 81
diff changeset
   226
/*!
70
hgs
parents: 63
diff changeset
   227
 \brief This function is called when a touch press event is received 
hgs
parents: 63
diff changeset
   228
 within Abstract view item that is representing index.
hgs
parents: 63
diff changeset
   229
 Currently it does nothing.
81
hgs
parents: 75
diff changeset
   230
 
hgs
parents: 75
diff changeset
   231
 \param index Index of pressed item
70
hgs
parents: 63
diff changeset
   232
 */
hgs
parents: 63
diff changeset
   233
void CalenDayItemView::itemPressed(const QModelIndex &index)
45
hgs
parents:
diff changeset
   234
{
70
hgs
parents: 63
diff changeset
   235
    Q_UNUSED( index )
45
hgs
parents:
diff changeset
   236
}
hgs
parents:
diff changeset
   237
57
hgs
parents: 55
diff changeset
   238
/*!
70
hgs
parents: 63
diff changeset
   239
 \brief This function is called when a touch release event is received 
hgs
parents: 63
diff changeset
   240
 within Abstract view item that is representing index.
hgs
parents: 63
diff changeset
   241
 Currently it does nothing.
81
hgs
parents: 75
diff changeset
   242
 
hgs
parents: 75
diff changeset
   243
 \param index Index of released item
70
hgs
parents: 63
diff changeset
   244
 */
hgs
parents: 63
diff changeset
   245
void CalenDayItemView::itemReleased(const QModelIndex &index)
45
hgs
parents:
diff changeset
   246
{
70
hgs
parents: 63
diff changeset
   247
    Q_UNUSED( index )
45
hgs
parents:
diff changeset
   248
}
hgs
parents:
diff changeset
   249
57
hgs
parents: 55
diff changeset
   250
/*!
70
hgs
parents: 63
diff changeset
   251
 \brief This function is called when the item specified by index is activated by the user.
hgs
parents: 63
diff changeset
   252
 
81
hgs
parents: 75
diff changeset
   253
 \param index Index of activated item
70
hgs
parents: 63
diff changeset
   254
 */
hgs
parents: 63
diff changeset
   255
void CalenDayItemView::itemActivated(const QModelIndex &index)
45
hgs
parents:
diff changeset
   256
{
70
hgs
parents: 63
diff changeset
   257
    QItemSelectionModel* selModel(selectionModel());
hgs
parents: 63
diff changeset
   258
    if (index.isValid() && selModel) {
hgs
parents: 63
diff changeset
   259
        selModel->select(index, QItemSelectionModel::Current
hgs
parents: 63
diff changeset
   260
            | QItemSelectionModel::Select);
45
hgs
parents:
diff changeset
   261
        openSelectedItem();
hgs
parents:
diff changeset
   262
    }
hgs
parents:
diff changeset
   263
}
hgs
parents:
diff changeset
   264
57
hgs
parents: 55
diff changeset
   265
/*!
70
hgs
parents: 63
diff changeset
   266
 \brief This function is called when long press event is received within Abstract view item viewItem.
57
hgs
parents: 55
diff changeset
   267
70
hgs
parents: 63
diff changeset
   268
 \param item Pointer to pressed item.
hgs
parents: 63
diff changeset
   269
 \param coord Position where item was pressed.
hgs
parents: 63
diff changeset
   270
 */
45
hgs
parents:
diff changeset
   271
void CalenDayItemView::itemLongPressed(HbAbstractViewItem* item, QPointF coords)
hgs
parents:
diff changeset
   272
{
hgs
parents:
diff changeset
   273
    QModelIndex index = item->modelIndex();
70
hgs
parents: 63
diff changeset
   274
    QItemSelectionModel* selModel(selectionModel());
hgs
parents: 63
diff changeset
   275
    if (index.isValid() && selModel && mContextMenu) {
hgs
parents: 63
diff changeset
   276
        selModel->select(index, QItemSelectionModel::Current
hgs
parents: 63
diff changeset
   277
            | QItemSelectionModel::Select);
hgs
parents: 63
diff changeset
   278
        mContextMenu->setPreferredPos(coords, HbPopup::BottomRightCorner);
45
hgs
parents:
diff changeset
   279
        mContextMenu->open();
hgs
parents:
diff changeset
   280
    }
hgs
parents:
diff changeset
   281
}
hgs
parents:
diff changeset
   282
57
hgs
parents: 55
diff changeset
   283
/*!
70
hgs
parents: 63
diff changeset
   284
 \brief Slot which is called whenever the orientation of the device changes.
57
hgs
parents: 55
diff changeset
   285
70
hgs
parents: 63
diff changeset
   286
 \param orientation New orientation.
hgs
parents: 63
diff changeset
   287
 */
hgs
parents: 63
diff changeset
   288
void CalenDayItemView::orientationChanged(Qt::Orientation orientation)
45
hgs
parents:
diff changeset
   289
{
hgs
parents:
diff changeset
   290
    // Update the width of screen
hgs
parents:
diff changeset
   291
    qreal contentWidth = CalenDayUtils::instance()->contentWidth();
hgs
parents:
diff changeset
   292
    setMinimumWidth(contentWidth);
hgs
parents:
diff changeset
   293
    setMaximumWidth(contentWidth);
70
hgs
parents: 63
diff changeset
   294
    if (mContainer) {
hgs
parents: 63
diff changeset
   295
        mContainer->orientationChanged(orientation);
45
hgs
parents:
diff changeset
   296
    }
hgs
parents:
diff changeset
   297
}
hgs
parents:
diff changeset
   298
57
hgs
parents: 55
diff changeset
   299
/*!
70
hgs
parents: 63
diff changeset
   300
 \brief Opens currently selected model item.
hgs
parents: 63
diff changeset
   301
 */
45
hgs
parents:
diff changeset
   302
void CalenDayItemView::openSelectedItem()
hgs
parents:
diff changeset
   303
{
70
hgs
parents: 63
diff changeset
   304
    issueCommandOnSelectedItem(ECalenEventView);
45
hgs
parents:
diff changeset
   305
}
hgs
parents:
diff changeset
   306
57
hgs
parents: 55
diff changeset
   307
/*!
70
hgs
parents: 63
diff changeset
   308
 \brief Edits currently selected model item.
hgs
parents: 63
diff changeset
   309
 */
45
hgs
parents:
diff changeset
   310
void CalenDayItemView::editSelectedItem()
hgs
parents:
diff changeset
   311
{
70
hgs
parents: 63
diff changeset
   312
    issueCommandOnSelectedItem(ECalenEditCurrentEntry);
45
hgs
parents:
diff changeset
   313
}
hgs
parents:
diff changeset
   314
57
hgs
parents: 55
diff changeset
   315
/*!
70
hgs
parents: 63
diff changeset
   316
 \brief Deletes currently selected model item.
hgs
parents: 63
diff changeset
   317
 */
45
hgs
parents:
diff changeset
   318
void CalenDayItemView::deleteSelectedItem()
hgs
parents:
diff changeset
   319
{
70
hgs
parents: 63
diff changeset
   320
    issueCommandOnSelectedItem(ECalenDeleteCurrentEntry);
45
hgs
parents:
diff changeset
   321
}
hgs
parents:
diff changeset
   322
57
hgs
parents: 55
diff changeset
   323
/*!
70
hgs
parents: 63
diff changeset
   324
 \brief Connects item view's slots.
hgs
parents: 63
diff changeset
   325
 */
45
hgs
parents:
diff changeset
   326
void CalenDayItemView::setupSlots()
hgs
parents:
diff changeset
   327
{
hgs
parents:
diff changeset
   328
    // Connect to main window's orientationChanged signal to handle orientation
hgs
parents:
diff changeset
   329
    // switching
70
hgs
parents: 63
diff changeset
   330
    QObject::connect(CalenDayUtils::instance()->mainWindow(),
45
hgs
parents:
diff changeset
   331
        SIGNAL(orientationChanged(Qt::Orientation)), this,
hgs
parents:
diff changeset
   332
        SLOT(orientationChanged(Qt::Orientation)));
hgs
parents:
diff changeset
   333
hgs
parents:
diff changeset
   334
    // Connect with model signals
hgs
parents:
diff changeset
   335
    if (this->model()) {
hgs
parents:
diff changeset
   336
        QObject::connect(this->model(), SIGNAL(modelAboutToBeReset()), this,
hgs
parents:
diff changeset
   337
            SLOT(modelAboutToBeReset()));
hgs
parents:
diff changeset
   338
        QObject::connect(this->model(), SIGNAL(modelReset()), this,
hgs
parents:
diff changeset
   339
            SLOT(modelReset()));
hgs
parents:
diff changeset
   340
    }
70
hgs
parents: 63
diff changeset
   341
    QObject::connect(this, SIGNAL(pressed(const QModelIndex&)), this,
hgs
parents: 63
diff changeset
   342
        SLOT(itemPressed(const QModelIndex&)));
hgs
parents: 63
diff changeset
   343
    QObject::connect(this, SIGNAL(released(const QModelIndex&)), this,
hgs
parents: 63
diff changeset
   344
        SLOT(itemReleased(const QModelIndex&)));
hgs
parents: 63
diff changeset
   345
    QObject::connect(this, SIGNAL(activated(const QModelIndex&)), this,
hgs
parents: 63
diff changeset
   346
        SLOT(itemActivated(const QModelIndex&)));
45
hgs
parents:
diff changeset
   347
    QObject::connect(this, SIGNAL(longPressed(HbAbstractViewItem*, QPointF)),
hgs
parents:
diff changeset
   348
        this, SLOT(itemLongPressed(HbAbstractViewItem*, QPointF)));
hgs
parents:
diff changeset
   349
}
hgs
parents:
diff changeset
   350
57
hgs
parents: 55
diff changeset
   351
/*!
70
hgs
parents: 63
diff changeset
   352
 \brief Creates context menu.
hgs
parents: 63
diff changeset
   353
 */
45
hgs
parents:
diff changeset
   354
void CalenDayItemView::setupContextMenu()
hgs
parents:
diff changeset
   355
{
hgs
parents:
diff changeset
   356
    mContextMenu = new HbMenu();
70
hgs
parents: 63
diff changeset
   357
    HbAction *openAction = mContextMenu->addAction(hbTrId(
hgs
parents: 63
diff changeset
   358
        "txt_common_menu_open"));
45
hgs
parents:
diff changeset
   359
    if (openAction) {
hgs
parents:
diff changeset
   360
        connect(openAction, SIGNAL(triggered()), this, SLOT(openSelectedItem()));
hgs
parents:
diff changeset
   361
    }
70
hgs
parents: 63
diff changeset
   362
    HbAction *editAction = mContextMenu->addAction(hbTrId(
hgs
parents: 63
diff changeset
   363
        "txt_common_menu_edit"));
45
hgs
parents:
diff changeset
   364
    if (editAction) {
hgs
parents:
diff changeset
   365
        connect(editAction, SIGNAL(triggered()), this, SLOT(editSelectedItem()));
hgs
parents:
diff changeset
   366
    }
70
hgs
parents: 63
diff changeset
   367
    HbAction *deleteAction = mContextMenu->addAction(hbTrId(
hgs
parents: 63
diff changeset
   368
        "txt_common_menu_delete"));
45
hgs
parents:
diff changeset
   369
    if (deleteAction) {
hgs
parents:
diff changeset
   370
        connect(deleteAction, SIGNAL(triggered()), this,
hgs
parents:
diff changeset
   371
            SLOT(deleteSelectedItem()));
hgs
parents:
diff changeset
   372
    }
hgs
parents:
diff changeset
   373
}
hgs
parents:
diff changeset
   374
57
hgs
parents: 55
diff changeset
   375
/*!
70
hgs
parents: 63
diff changeset
   376
 \brief Sets context to currently selected model item and issues calendar command.
hgs
parents: 63
diff changeset
   377
 
hgs
parents: 63
diff changeset
   378
 \param command A command to be issued.
hgs
parents: 63
diff changeset
   379
 */
hgs
parents: 63
diff changeset
   380
bool CalenDayItemView::issueCommandOnSelectedItem(int command)
45
hgs
parents:
diff changeset
   381
{
hgs
parents:
diff changeset
   382
    bool retVal(false);
hgs
parents:
diff changeset
   383
    QItemSelectionModel* selModel(selectionModel());
70
hgs
parents: 63
diff changeset
   384
    if (!selModel) {
45
hgs
parents:
diff changeset
   385
        return retVal;
hgs
parents:
diff changeset
   386
    }
70
hgs
parents: 63
diff changeset
   387
    QModelIndex index(selModel->currentIndex());
hgs
parents: 63
diff changeset
   388
    if (index.isValid()) {
45
hgs
parents:
diff changeset
   389
        retVal = true;
70
hgs
parents: 63
diff changeset
   390
        QVariant variant = index.data(CalenDayEntry);
hgs
parents: 63
diff changeset
   391
        AgendaEntry entry = variant.value<AgendaEntry> ();
45
hgs
parents:
diff changeset
   392
        QDateTime start;
hgs
parents:
diff changeset
   393
        QDateTime end;
hgs
parents:
diff changeset
   394
        CalenDayModel* model(0);
70
hgs
parents: 63
diff changeset
   395
        model = static_cast<CalenDayModel*> (this->model());
hgs
parents: 63
diff changeset
   396
        QDateTime currDate(model->modelDate());
hgs
parents: 63
diff changeset
   397
        CalenDayUtils::instance()->getEventValidStartEndTime(start, end, entry,
hgs
parents: 63
diff changeset
   398
            currDate);
45
hgs
parents:
diff changeset
   399
        TRAPD(error,
70
hgs
parents: 63
diff changeset
   400
            mServices.Context().setFocusDateAndTimeAndInstance(start,
hgs
parents: 63
diff changeset
   401
                TCalenInstanceId::create(entry));
hgs
parents: 63
diff changeset
   402
            mServices.IssueCommandL( command );
hgs
parents: 63
diff changeset
   403
        );
hgs
parents: 63
diff changeset
   404
        if (error) {
45
hgs
parents:
diff changeset
   405
            retVal = false;
hgs
parents:
diff changeset
   406
        }
hgs
parents:
diff changeset
   407
        clearSelectionInModel();
hgs
parents:
diff changeset
   408
    }
hgs
parents:
diff changeset
   409
    return retVal;
hgs
parents:
diff changeset
   410
}
hgs
parents:
diff changeset
   411
57
hgs
parents: 55
diff changeset
   412
/*!
70
hgs
parents: 63
diff changeset
   413
 \brief Clears current selection in Selection Model.
hgs
parents: 63
diff changeset
   414
 */
45
hgs
parents:
diff changeset
   415
void CalenDayItemView::clearSelectionInModel()
hgs
parents:
diff changeset
   416
{
hgs
parents:
diff changeset
   417
    QItemSelectionModel* selModel(selectionModel());
hgs
parents:
diff changeset
   418
    if (selModel) {
hgs
parents:
diff changeset
   419
        selModel->clear();
hgs
parents:
diff changeset
   420
    }
hgs
parents:
diff changeset
   421
}
hgs
parents:
diff changeset
   422
hgs
parents:
diff changeset
   423
// End of File