calendarui/views/inc/calenagendaviewwidget.h
author hgs
Mon, 06 Sep 2010 10:12:45 +0530
changeset 70 a5ed90760192
parent 64 1881ad52dc45
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
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:  CalenAgendaViewWidget class definition.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#ifndef CALENAGENDAVIEWWIDGET_H
hgs
parents:
diff changeset
    19
#define CALENAGENDAVIEWWIDGET_H
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
// System includes
hgs
parents:
diff changeset
    22
#include <QGraphicsLinearLayout>
hgs
parents:
diff changeset
    23
#include <QDateTime>
hgs
parents:
diff changeset
    24
#include <QPointer>
hgs
parents:
diff changeset
    25
#include <hbwidget.h>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// User includes
hgs
parents:
diff changeset
    28
 
hgs
parents:
diff changeset
    29
// Forward declarations
hgs
parents:
diff changeset
    30
class QStandardItemModel;
hgs
parents:
diff changeset
    31
class QGraphicsSceneMouseEvent; // TODO: Remove this after gestures are supported
hgs
parents:
diff changeset
    32
class HbAbstractViewItem;
hgs
parents:
diff changeset
    33
class HbGroupBox;
hgs
parents:
diff changeset
    34
class HbListView;
hgs
parents:
diff changeset
    35
class QPluginLoader;
hgs
parents:
diff changeset
    36
class HbLabel;
hgs
parents:
diff changeset
    37
class HbAction;
hgs
parents:
diff changeset
    38
class HbDateTimePicker;
hgs
parents:
diff changeset
    39
class XQSettingsManager;
hgs
parents:
diff changeset
    40
class MCalenServices;
hgs
parents:
diff changeset
    41
class CalenAgendaView;
hgs
parents:
diff changeset
    42
class AgendaEntry;
hgs
parents:
diff changeset
    43
class CalenDocLoader;
hgs
parents:
diff changeset
    44
class CalenEventListViewItem;
hgs
parents:
diff changeset
    45
class NotesEditor;
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
/**
hgs
parents:
diff changeset
    48
 * @class CalenAgendaViewWidget
hgs
parents:
diff changeset
    49
 * @brief The content widget for the agenda view.
hgs
parents:
diff changeset
    50
 * It is responsible for showing all the events &/ to-do's
hgs
parents:
diff changeset
    51
 * (if any) for a particular day selected by the user
hgs
parents:
diff changeset
    52
 */
hgs
parents:
diff changeset
    53
class CalenAgendaViewWidget : public HbWidget
hgs
parents:
diff changeset
    54
    {
hgs
parents:
diff changeset
    55
    Q_OBJECT
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
public:
hgs
parents:
diff changeset
    58
    
hgs
parents:
diff changeset
    59
    /**
hgs
parents:
diff changeset
    60
     * @brief Constructor
hgs
parents:
diff changeset
    61
     * @param services The reference to the MCalenServices object
hgs
parents:
diff changeset
    62
     * @param docLoader The document loader object
hgs
parents:
diff changeset
    63
     */
hgs
parents:
diff changeset
    64
	IMPORT_C CalenAgendaViewWidget(MCalenServices &services,
hgs
parents:
diff changeset
    65
	                                 CalenDocLoader *docLoader);
hgs
parents:
diff changeset
    66
	
hgs
parents:
diff changeset
    67
	/**
hgs
parents:
diff changeset
    68
	 * @brief Default C++ destructor
hgs
parents:
diff changeset
    69
	 */
hgs
parents:
diff changeset
    70
	IMPORT_C ~CalenAgendaViewWidget();
hgs
parents:
diff changeset
    71
	
hgs
parents:
diff changeset
    72
	/**
hgs
parents:
diff changeset
    73
	 * @brief Initializes the widget to show all the events/to-do's
hgs
parents:
diff changeset
    74
	 * for the selected day
hgs
parents:
diff changeset
    75
	 * @param view Pointer to the view to which this is the content
hgs
parents:
diff changeset
    76
	 */
hgs
parents:
diff changeset
    77
    void setupWidget(CalenAgendaView *view);
hgs
parents:
diff changeset
    78
    
hgs
parents:
diff changeset
    79
    /**
hgs
parents:
diff changeset
    80
     * @brief Prepares the widget to be shown.
hgs
parents:
diff changeset
    81
     * Initializes the widget with the day's events and other details 
hgs
parents:
diff changeset
    82
     */
hgs
parents:
diff changeset
    83
    void showWidget();
hgs
parents:
diff changeset
    84
    
hgs
parents:
diff changeset
    85
    /**
hgs
parents:
diff changeset
    86
     * @brief Called from the view whenever the orientation of the
hgs
parents:
diff changeset
    87
     * device changes
hgs
parents:
diff changeset
    88
     */
hgs
parents:
diff changeset
    89
    void orientationChanged(Qt::Orientation);
hgs
parents:
diff changeset
    90
    
hgs
parents:
diff changeset
    91
    /**
hgs
parents:
diff changeset
    92
     * @brief Callback function to handle system locale change
hgs
parents:
diff changeset
    93
     */
hgs
parents:
diff changeset
    94
    void handleLocaleChange();
hgs
parents:
diff changeset
    95
    
hgs
parents:
diff changeset
    96
    /**
hgs
parents:
diff changeset
    97
     * @brief clears the list model from the view
hgs
parents:
diff changeset
    98
     */
hgs
parents:
diff changeset
    99
    void clearListModel();
hgs
parents:
diff changeset
   100
    
51
hgs
parents: 45
diff changeset
   101
    /**
hgs
parents: 45
diff changeset
   102
     * @brief Opens the editor to create a new entry
hgs
parents: 45
diff changeset
   103
     */
hgs
parents: 45
diff changeset
   104
    void createNewEvent();
hgs
parents: 45
diff changeset
   105
    
45
hgs
parents:
diff changeset
   106
private:
hgs
parents:
diff changeset
   107
    
hgs
parents:
diff changeset
   108
    /**
hgs
parents:
diff changeset
   109
     * @brief Sets the context based on the item selected by the user
hgs
parents:
diff changeset
   110
     * @param entry The entry using which the context is deduced
hgs
parents:
diff changeset
   111
     */
hgs
parents:
diff changeset
   112
    void setContextFromHighlight(AgendaEntry entry);
hgs
parents:
diff changeset
   113
    
hgs
parents:
diff changeset
   114
    /**
hgs
parents:
diff changeset
   115
     * @brief Initializes the child widgets of this widget
hgs
parents:
diff changeset
   116
     */
hgs
parents:
diff changeset
   117
    void initChildWidgets();
hgs
parents:
diff changeset
   118
    
hgs
parents:
diff changeset
   119
    /**
hgs
parents:
diff changeset
   120
     * @brief Populates the list with the events for the current day.
hgs
parents:
diff changeset
   121
     * Does nothing if the day has no events. To be called whenever
hgs
parents:
diff changeset
   122
     * the view has to be refreshed
hgs
parents:
diff changeset
   123
     */
hgs
parents:
diff changeset
   124
    void populateListWidget();
hgs
parents:
diff changeset
   125
    
hgs
parents:
diff changeset
   126
    /**
hgs
parents:
diff changeset
   127
     * @brief Gets the instance list for day
hgs
parents:
diff changeset
   128
     */
hgs
parents:
diff changeset
   129
    void getInstanceList();
hgs
parents:
diff changeset
   130
    
hgs
parents:
diff changeset
   131
    /**
hgs
parents:
diff changeset
   132
     * @brief Sets the heading text to show the date for which this
hgs
parents:
diff changeset
   133
     * widget is being shown
hgs
parents:
diff changeset
   134
     */
hgs
parents:
diff changeset
   135
    void setHeadingText();
hgs
parents:
diff changeset
   136
    
hgs
parents:
diff changeset
   137
    /**
hgs
parents:
diff changeset
   138
     * @brief Creates and adds an item to the list at position index
hgs
parents:
diff changeset
   139
     * @param index The position in the list when the item is added
hgs
parents:
diff changeset
   140
     * @param entry The entry whose details must be shown in the item
hgs
parents:
diff changeset
   141
     */
hgs
parents:
diff changeset
   142
    void createListItem(int index, AgendaEntry entry);
hgs
parents:
diff changeset
   143
    
hgs
parents:
diff changeset
   144
    /**
hgs
parents:
diff changeset
   145
     * @brief Creates and add a list item for the event
hgs
parents:
diff changeset
   146
     * @param index The position in the list when the item is added
hgs
parents:
diff changeset
   147
     * @param entry The entry whose details must be shown in the item
hgs
parents:
diff changeset
   148
     */
hgs
parents:
diff changeset
   149
    void addTimedEventToList(int index, AgendaEntry entry);
hgs
parents:
diff changeset
   150
    
hgs
parents:
diff changeset
   151
    /**
hgs
parents:
diff changeset
   152
     * @brief Creates and add a list item for the event which is non timed
hgs
parents:
diff changeset
   153
     * @param index The position in the list when the item is added
hgs
parents:
diff changeset
   154
     * @param entry The entry whose details must be shown in the item
hgs
parents:
diff changeset
   155
     */
hgs
parents:
diff changeset
   156
    void addNonTimedEventToList(int index, AgendaEntry entry);
hgs
parents:
diff changeset
   157
    
hgs
parents:
diff changeset
   158
    /**
hgs
parents:
diff changeset
   159
     * @brief Sets strecthing to list items showing non-timed events
hgs
parents:
diff changeset
   160
     */
hgs
parents:
diff changeset
   161
    void handleListItemStretching(Qt::Orientation orientation);
hgs
parents:
diff changeset
   162
    
hgs
parents:
diff changeset
   163
    /**
hgs
parents:
diff changeset
   164
     * @brief Returns the index in the list to which scrolling must
hgs
parents:
diff changeset
   165
     * happen. For ex: After creating a new event, the list must scroll
hgs
parents:
diff changeset
   166
     * to the newly created event
hgs
parents:
diff changeset
   167
     */
hgs
parents:
diff changeset
   168
    int getIndexToScrollTo();
hgs
parents:
diff changeset
   169
    
hgs
parents:
diff changeset
   170
    /**
hgs
parents:
diff changeset
   171
     * @brief To Show and hide regional plugin label depends upon settings
hgs
parents:
diff changeset
   172
     */
hgs
parents:
diff changeset
   173
    
hgs
parents:
diff changeset
   174
    void showHideRegionalInformation();
51
hgs
parents: 45
diff changeset
   175
45
hgs
parents:
diff changeset
   176
    
hgs
parents:
diff changeset
   177
private slots:
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
    /**
hgs
parents:
diff changeset
   180
     * @brief Opens the entry at position index in the list for
hgs
parents:
diff changeset
   181
     * editing in the editor. Does nothing if the index is invalid
hgs
parents:
diff changeset
   182
     */
hgs
parents:
diff changeset
   183
    void editEntry();
hgs
parents:
diff changeset
   184
    
hgs
parents:
diff changeset
   185
    /**
hgs
parents:
diff changeset
   186
     * @brief Opens the entry at position index in the list for
hgs
parents:
diff changeset
   187
     * viewing in the viewer. Does nothing if the index is invalid
hgs
parents:
diff changeset
   188
     */
hgs
parents:
diff changeset
   189
    void viewEntry();
hgs
parents:
diff changeset
   190
	
hgs
parents:
diff changeset
   191
    /**
hgs
parents:
diff changeset
   192
     * @brief Deletes the entry at position index in the list.
hgs
parents:
diff changeset
   193
     * Does nothing if the list is empty
hgs
parents:
diff changeset
   194
     */
hgs
parents:
diff changeset
   195
    void deleteEntry();
hgs
parents:
diff changeset
   196
    
hgs
parents:
diff changeset
   197
    /**
hgs
parents:
diff changeset
   198
     * @brief Marks a to-do as done
hgs
parents:
diff changeset
   199
     */
hgs
parents:
diff changeset
   200
    void markAsDone(); 
hgs
parents:
diff changeset
   201
    
hgs
parents:
diff changeset
   202
    /**
hgs
parents:
diff changeset
   203
     * @brief Handles long press on a particular item. Presents a
hgs
parents:
diff changeset
   204
     * context menu with various operations that the user can
hgs
parents:
diff changeset
   205
     * perform
hgs
parents:
diff changeset
   206
     * @param ite, The index item which is being long pressed
hgs
parents:
diff changeset
   207
     * @param coords The (x, y) co-ordinates where the long tap has
hgs
parents:
diff changeset
   208
     * occured
hgs
parents:
diff changeset
   209
     */
hgs
parents:
diff changeset
   210
    void itemLongPressed(HbAbstractViewItem *item, const QPointF &coords);
hgs
parents:
diff changeset
   211
    
hgs
parents:
diff changeset
   212
    /**
hgs
parents:
diff changeset
   213
     * @brief Handles user selection on a particular item of a
hgs
parents:
diff changeset
   214
     * particular event in the list. Default action is to view it
hgs
parents:
diff changeset
   215
     * @param index Index of the item which was selected 
hgs
parents:
diff changeset
   216
     */
hgs
parents:
diff changeset
   217
    void itemActivated(const QModelIndex &index);
hgs
parents:
diff changeset
   218
    
hgs
parents:
diff changeset
   219
    /**
hgs
parents:
diff changeset
   220
     * @brief Called whenever a editing a to-do is completed
hgs
parents:
diff changeset
   221
     * @param status Inidcates if the editing was successful or not
hgs
parents:
diff changeset
   222
     */
hgs
parents:
diff changeset
   223
    void noteEditingCompleted(bool status);
hgs
parents:
diff changeset
   224
    
hgs
parents:
diff changeset
   225
    /**
hgs
parents:
diff changeset
   226
     * @brief Callback function for navigating to today's agenda
hgs
parents:
diff changeset
   227
     * This option must be available only if the view is showing
hgs
parents:
diff changeset
   228
     * events for some day other than the current day
hgs
parents:
diff changeset
   229
     */
hgs
parents:
diff changeset
   230
    void goToToday();
hgs
parents:
diff changeset
   231
    
hgs
parents:
diff changeset
   232
    /**
hgs
parents:
diff changeset
   233
     * @brief This slot connected to aboutToClose()signal of contextmenu
hgs
parents:
diff changeset
   234
     * To reset the flag of mLongTapEventFlag
hgs
parents:
diff changeset
   235
     */
hgs
parents:
diff changeset
   236
    void contextMenuClosed();
hgs
parents:
diff changeset
   237
    
hgs
parents:
diff changeset
   238
    /**
hgs
parents:
diff changeset
   239
     * @brief Called when contextMenu item is triggered
hgs
parents:
diff changeset
   240
     */
hgs
parents:
diff changeset
   241
    void contextManuTriggered(HbAction *action);
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
private:
hgs
parents:
diff changeset
   244
    /**
hgs
parents:
diff changeset
   245
     * @var mDate
hgs
parents:
diff changeset
   246
     * @brief Stores the date for which this widget is being shown
hgs
parents:
diff changeset
   247
     */
hgs
parents:
diff changeset
   248
    QDateTime mDate;
hgs
parents:
diff changeset
   249
    
hgs
parents:
diff changeset
   250
    /**
hgs
parents:
diff changeset
   251
     * @var mInstanceArray
hgs
parents:
diff changeset
   252
     * @brief Holds the list of instances for the day
hgs
parents:
diff changeset
   253
     */
hgs
parents:
diff changeset
   254
    QList<AgendaEntry> mInstanceArray;
hgs
parents:
diff changeset
   255
    
hgs
parents:
diff changeset
   256
    /**
hgs
parents:
diff changeset
   257
     * @var mHeadingLabel
hgs
parents:
diff changeset
   258
     * @brief The heading widget which shows the date
hgs
parents:
diff changeset
   259
     */
hgs
parents:
diff changeset
   260
    HbGroupBox *mHeadingLabel;
hgs
parents:
diff changeset
   261
    
hgs
parents:
diff changeset
   262
    /**
hgs
parents:
diff changeset
   263
     * @var mEventsList
hgs
parents:
diff changeset
   264
     * @brief The list view which shows the list of events
hgs
parents:
diff changeset
   265
     */
hgs
parents:
diff changeset
   266
    HbListView *mEventsList;
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
    /**
hgs
parents:
diff changeset
   269
     * @var mServices
hgs
parents:
diff changeset
   270
     * @brief The reference to the MCalenServices object
hgs
parents:
diff changeset
   271
     */
hgs
parents:
diff changeset
   272
    MCalenServices &mServices;
hgs
parents:
diff changeset
   273
    
hgs
parents:
diff changeset
   274
    /**
hgs
parents:
diff changeset
   275
     * @var mView
hgs
parents:
diff changeset
   276
     * @brief The pointer to the view
hgs
parents:
diff changeset
   277
     */
hgs
parents:
diff changeset
   278
    CalenAgendaView *mView;
hgs
parents:
diff changeset
   279
    
hgs
parents:
diff changeset
   280
    /**
hgs
parents:
diff changeset
   281
     * @var mDocLoader
hgs
parents:
diff changeset
   282
     * @brief The pointer to the document loader which has
hgs
parents:
diff changeset
   283
     * loaded this widget
hgs
parents:
diff changeset
   284
     */
hgs
parents:
diff changeset
   285
    CalenDocLoader *mDocLoader;
hgs
parents:
diff changeset
   286
    
hgs
parents:
diff changeset
   287
    /**
hgs
parents:
diff changeset
   288
     * @var mListViewPrototype
hgs
parents:
diff changeset
   289
     * @brief Acts as the item prototype for list view.
hgs
parents:
diff changeset
   290
     * Allows providing own layout for list items
hgs
parents:
diff changeset
   291
     */
hgs
parents:
diff changeset
   292
    CalenEventListViewItem *mListViewPrototype;
hgs
parents:
diff changeset
   293
	
hgs
parents:
diff changeset
   294
    /**
hgs
parents:
diff changeset
   295
     * @var mEmptyListLabel
hgs
parents:
diff changeset
   296
     * @brief The pointer to the empty view label
hgs
parents:
diff changeset
   297
     */
hgs
parents:
diff changeset
   298
	HbLabel *mEmptyListLabel;
hgs
parents:
diff changeset
   299
	
hgs
parents:
diff changeset
   300
	/**
hgs
parents:
diff changeset
   301
	 * @var mListModel
hgs
parents:
diff changeset
   302
	 * @brief The event list model
hgs
parents:
diff changeset
   303
	 */
hgs
parents:
diff changeset
   304
	QStandardItemModel *mListModel;
hgs
parents:
diff changeset
   305
	
hgs
parents:
diff changeset
   306
	/**
hgs
parents:
diff changeset
   307
	 * @var mSelectedIndex
hgs
parents:
diff changeset
   308
	 * @brief Stores the index of the item being acted upon
hgs
parents:
diff changeset
   309
	 * Since there is no focus, it becomes necessary to store the
hgs
parents:
diff changeset
   310
	 * index of the item on which user is performing some action
hgs
parents:
diff changeset
   311
	 */
hgs
parents:
diff changeset
   312
	int mSelectedIndex;
hgs
parents:
diff changeset
   313
	
hgs
parents:
diff changeset
   314
	/**
hgs
parents:
diff changeset
   315
	 * @var NotesEditorPluginLoader
hgs
parents:
diff changeset
   316
	 * @brief Pointer to the notes editor plugin loader
hgs
parents:
diff changeset
   317
	 */
hgs
parents:
diff changeset
   318
	QPointer<QPluginLoader> mNotesEditorPluginLoader;
hgs
parents:
diff changeset
   319
hgs
parents:
diff changeset
   320
	/**
hgs
parents:
diff changeset
   321
	 * @var mDatePicker
hgs
parents:
diff changeset
   322
	 * @brief The date picker component
hgs
parents:
diff changeset
   323
	 */
hgs
parents:
diff changeset
   324
	HbDateTimePicker *mDatePicker;
hgs
parents:
diff changeset
   325
	
hgs
parents:
diff changeset
   326
	/**
hgs
parents:
diff changeset
   327
	 * @var mRegionalPluginLayout
hgs
parents:
diff changeset
   328
	 * @brief Regional Plugin layout pointer
hgs
parents:
diff changeset
   329
	 */
hgs
parents:
diff changeset
   330
	QGraphicsLinearLayout* mRegionalPluginLayout;
hgs
parents:
diff changeset
   331
	
hgs
parents:
diff changeset
   332
	/**
hgs
parents:
diff changeset
   333
	 * @var mRegionalInfoGroupBox
hgs
parents:
diff changeset
   334
	 * @brief Regional Plugin Info groupbox
hgs
parents:
diff changeset
   335
	 */
hgs
parents:
diff changeset
   336
	HbGroupBox *mRegionalInfoGroupBox;
hgs
parents:
diff changeset
   337
hgs
parents:
diff changeset
   338
	/**
hgs
parents:
diff changeset
   339
	 * @var mSettingsManager
hgs
parents:
diff changeset
   340
	 * @brief Setting Manager pointer
hgs
parents:
diff changeset
   341
	 */
hgs
parents:
diff changeset
   342
	
hgs
parents:
diff changeset
   343
	XQSettingsManager *mSettingsManager;
hgs
parents:
diff changeset
   344
	
hgs
parents:
diff changeset
   345
	/**
hgs
parents:
diff changeset
   346
	 * @var mLongTapeventFlag
hgs
parents:
diff changeset
   347
	 * @brief Set flag true if contextmenu is opened
hgs
parents:
diff changeset
   348
	 */
hgs
parents:
diff changeset
   349
	bool mLongTapEventFlag;
hgs
parents:
diff changeset
   350
hgs
parents:
diff changeset
   351
	/**
hgs
parents:
diff changeset
   352
	 * @var mNotesPluginLoaded
hgs
parents:
diff changeset
   353
	 * @brief Holds notes editor plugin load info.
hgs
parents:
diff changeset
   354
	 */
hgs
parents:
diff changeset
   355
	bool mNotesPluginLoaded;
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
};
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
#endif //CALENAGENDAVIEWWIDGET_H
hgs
parents:
diff changeset
   360
hgs
parents:
diff changeset
   361
// End of file	--Don't remove this.