--- a/notes/notesui/notesviews/src/notesmainview.cpp Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/src/notesmainview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -30,6 +30,8 @@
#include <HbAbstractItemView>
#include <HbGroupBox>
#include <HbListViewItem>
+#include <hbapplication> // hbapplication
+#include <hbactivitymanager> // hbactivitymanager
// User includes
#include "agendaeventviewer.h"
@@ -40,6 +42,7 @@
#include "notesmodel.h"
#include "notessortfilterproxymodel.h"
#include "noteseditor.h"
+#include "notescommon.h" // NotesNamespace
/*!
\class NotesMainView
@@ -57,7 +60,9 @@
NotesMainView::NotesMainView(QGraphicsWidget *parent)
:HbView(parent),
mSelectedItem(0),
- mDeleteAction(0)
+ mDeleteAction(0),
+ mIsLongTop(false),
+ mIsScreenShotCapruted(false)
{
// Nothing yet.
}
@@ -121,10 +126,41 @@
mNotesModel, SIGNAL(rowAdded(QModelIndex)),
this, SLOT(scrollTo(QModelIndex)));
+ // Get the empty list label.
+ mEmptyListLabel = static_cast<HbLabel *> (
+ mDocLoader->findWidget("emptyListLabel"));
+ mEmptyListLabel->hide();
+
// Get the view heading label
- mViewHeading = static_cast<HbLabel *> (
+ mSubTitle = static_cast<HbGroupBox *>(
mDocLoader->findWidget("viewHeading"));
+ // Handles the orientation change for list items
+ HbMainWindow *window = hbInstance->allMainWindows().first();
+ handleOrientationChanged(window->orientation());
+ connect(
+ window, SIGNAL(orientationChanged(Qt::Orientation)),
+ this, SLOT(handleOrientationChanged(Qt::Orientation)));
+
+ // Set the graphics size for the icons.
+ HbListViewItem *prototype = mListView->listItemPrototype();
+ prototype->setGraphicsSize(HbListViewItem::SmallIcon);
+
+ // Get a pointer to activity Manager
+ HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+
+ // clean up any previous versions of this activity from the activity manager.
+ // ignore return value as the first boot would always return a false
+ // bool declared on for debugging purpose
+ bool ok = activityManager->removeActivity(notes);
+
+ // connect main view for the first time to recieve aboutToQuit signal
+ connect(qobject_cast<HbApplication*>(qApp), SIGNAL(aboutToQuit()), this, SLOT(saveActivity()));
+
+ }
+
+void NotesMainView::setupAfterViewReady()
+{
// Get the toolbar/menu actions.
mAddNoteAction = static_cast<HbAction *> (
mDocLoader->findObject("newNoteAction"));
@@ -159,19 +195,6 @@
mViewCollectionAction, SIGNAL(triggered()),
this, SLOT(displayCollectionView()));
- mSubTitle = static_cast<HbGroupBox *>(
- mDocLoader->findWidget("viewHeading"));
-
- // Handles the orientation change for list items
- HbMainWindow *window = hbInstance->allMainWindows().first();
- handleOrientationChanged(window->orientation());
- connect(
- window, SIGNAL(orientationChanged(Qt::Orientation)),
- this, SLOT(handleOrientationChanged(Qt::Orientation)));
-
- // Update sub heading text for main view.
- updateSubTitle();
-
connect(
mAgendaUtil, SIGNAL(entryAdded(ulong)),
this,SLOT(updateSubTitle(ulong)));
@@ -181,10 +204,14 @@
connect(
mAgendaUtil, SIGNAL(entryUpdated(ulong)),
this, SLOT(updateSubTitle(ulong)));
+}
- // Set the graphics size for the icons.
- HbListViewItem *prototype = mListView->listItemPrototype();
- prototype->setGraphicsSize(HbListViewItem::SmallIcon);
+/*
+ Updates the title text for the first launch
+ */
+void NotesMainView::updateTitle()
+{
+ updateSubTitle();
}
/*!
@@ -200,6 +227,9 @@
mNotesEditor, SIGNAL(editingCompleted(bool)),
this, SLOT(handleEditingCompleted(bool)));
mNotesEditor->create(NotesEditor::CreateNote);
+ // capture screenshot for future use, if application
+ // is exited/Quit from notesEditor
+ captureScreenShot(true);
}
/*!
@@ -212,46 +242,51 @@
*/
void NotesMainView::handleItemReleased(const QModelIndex &index)
{
- // Sanity check.
- if (!index.isValid()) {
- return;
- }
+ if(!mIsLongTop) {
+ // Sanity check.
+ if (!index.isValid()) {
+ return;
+ }
+
+ // First get the id of the note and get the corresponding information from
+ // agendautil.
+ ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong>();
- // First get the id of the note and get the corresponding information from
- // agendautil.
- ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong>();
+ if (0 >= noteId) {
+ // Something wrong.
+ return;
+ }
- if (0 >= noteId) {
- // Something wrong.
- return;
- }
+ // Get the entry details.
+ AgendaEntry entry = mAgendaUtil->fetchById(noteId);
+ if (entry.isNull()) {
+ // Entry invalid.
+ return;
+ }
- // Get the entry details.
- AgendaEntry entry = mAgendaUtil->fetchById(noteId);
- if (entry.isNull()) {
- // Entry invalid.
- return;
- }
-
- if(AgendaEntry::TypeTodo == entry.type()) {
- // Construct agenda event viewer.
- mAgendaEventViewer = new AgendaEventViewer(mAgendaUtil, this);
+ if(AgendaEntry::TypeTodo == entry.type()) {
+ // Construct agenda event viewer.
+ mAgendaEventViewer = new AgendaEventViewer(mAgendaUtil, this);
- connect(
- mAgendaEventViewer, SIGNAL(viewingCompleted(const QDate)),
- this, SLOT(handleViewingCompleted()));
- // Launch agenda event viewer
- mAgendaEventViewer->view(
- entry, AgendaEventViewer::ActionEditDelete);
- }else if(AgendaEntry::TypeNote == entry.type()) {
- // Construct notes editor.
- mNotesEditor = new NotesEditor(mAgendaUtil, this);
- connect(
- mNotesEditor, SIGNAL(editingCompleted(bool)),
- this, SLOT(handleEditingCompleted(bool)));
+ connect(
+ mAgendaEventViewer, SIGNAL(viewingCompleted(const QDate)),
+ this, SLOT(handleViewingCompleted()));
+ // Launch agenda event viewer
+ mAgendaEventViewer->view(
+ entry, AgendaEventViewer::ActionEditDelete);
+ }else if(AgendaEntry::TypeNote == entry.type()) {
+ // Construct notes editor.
+ mNotesEditor = new NotesEditor(mAgendaUtil, this);
+ connect(
+ mNotesEditor, SIGNAL(editingCompleted(bool)),
+ this, SLOT(handleEditingCompleted(bool)));
- // Launch the notes editor with the obtained info.
- mNotesEditor->edit(entry);
+ // Launch the notes editor with the obtained info.
+ mNotesEditor->edit(entry);
+ }
+ // capture screenshot for future use, if application
+ // is exited/Quit from eventViewer/notesEditor
+ captureScreenShot(true);
}
}
@@ -266,6 +301,7 @@
void NotesMainView::handleItemLongPressed(
HbAbstractViewItem *item, const QPointF &coords)
{
+ mIsLongTop = true;
mSelectedItem = item;
ulong noteId = item->modelIndex().data(
@@ -274,74 +310,48 @@
// Display a context specific menu.
HbMenu *contextMenu = new HbMenu();
+ connect(
+ contextMenu,SIGNAL(aboutToClose()),
+ this, SLOT(handleMenuClosed()));
+
mOpenAction =
contextMenu->addAction(hbTrId("txt_common_menu_open"));
- connect(
- mOpenAction, SIGNAL(triggered()),
- this, SLOT(openNote()));
// Add actions to the context menu.
if (AgendaEntry::TypeTodo == entry.type()) {
mEditTodoAction =
contextMenu->addAction(hbTrId("txt_common_menu_edit"));
- connect(
- mEditTodoAction, SIGNAL(triggered()),
- this, SLOT(editTodo()));
}
mDeleteAction =
contextMenu->addAction(hbTrId("txt_common_menu_delete"));
- connect(
- mDeleteAction, SIGNAL(triggered()),
- this, SLOT(deleteNote()));
if (AgendaEntry::TypeNote == entry.type()) {
if (entry.favourite()) {
mMakeFavouriteAction = contextMenu->addAction(
hbTrId("txt_notes_menu_remove_from_favorites"));
-
- connect(
- mMakeFavouriteAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsFavourite()));
-
} else {
mMakeFavouriteAction = contextMenu->addAction(
hbTrId("txt_notes_menu_mark_as_favorite"));
-
- connect(
- mMakeFavouriteAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsFavourite()));
}
mMarkTodoAction =
contextMenu->addAction(
hbTrId("txt_notes_menu_make_it_as_todo_note"));
- connect(
- mMarkTodoAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsTodo()));
} else if (AgendaEntry::TypeTodo == entry.type()) {
if (AgendaEntry::TodoNeedsAction == entry.status()) {
mTodoStatusAction = contextMenu->addAction(
hbTrId("txt_notes_menu_mark_as_done"));
-
- connect(
- mTodoStatusAction , SIGNAL(triggered()),
- this, SLOT(markTodoStatus()));
-
} else if (AgendaEntry::TodoCompleted == entry.status()) {
mTodoStatusAction = contextMenu->addAction(
hbTrId("txt_notes_menu_mark_as_not_done"));
-
- connect(
- mTodoStatusAction , SIGNAL(triggered()),
- this, SLOT(markTodoStatus()));
}
}
// Show the menu.
- contextMenu->exec(coords);
-
+ contextMenu->open(this, SLOT(selectedMenuAction(HbAction*)));
+ contextMenu->setPreferredPos(coords);
}
/*!
@@ -422,7 +432,9 @@
// Cleanup.
mNotesEditor->deleteLater();
-
+ // set captured screenshot as invalid as the control is returned back
+ // to the main view
+ captureScreenShot(false);
}
/*!
@@ -430,7 +442,8 @@
*/
void NotesMainView::displayCollectionView()
{
-
+ // no need to capture the screen shot for future use as
+ // NotesViewManager::switchToView takes care of it
// Switch to collections view.
mAppControllerIf->switchToView(NotesNamespace::NotesCollectionViewId);
@@ -453,10 +466,10 @@
*/
void NotesMainView::handleViewingCompleted()
{
-
-
mAgendaEventViewer->deleteLater();
-
+ // set captured screenshot as invalid as the control is returned back
+ // to the main view
+ captureScreenShot(false);
}
/*!
@@ -473,7 +486,6 @@
void NotesMainView::editTodo()
{
-
// Get the selected list item index
QModelIndex index = mSelectedItem->modelIndex();
if (!index.isValid()) {
@@ -494,6 +506,9 @@
// Launch the to-do editor with the obtained info.
mNotesEditor->edit(todoId);
+ // capture screenshot for future use, if application
+ // is exited/Quit from notesEditor
+ captureScreenShot(true);
}
@@ -527,7 +542,15 @@
(AgendaUtil::IncludeNotes
| AgendaUtil::IncludeCompletedTodos
| AgendaUtil::IncludeIncompletedTodos));
- int c= entries.count();
+
+ if (0 >= entries.count()) {
+ mEmptyListLabel->show();
+ mListView->hide();
+ } else {
+ mEmptyListLabel->hide();
+ mListView->show();
+ }
+
mSubTitle->setHeading(
hbTrId("txt_notes_subhead_ln_notes",entries.count()));
}
@@ -618,5 +641,77 @@
mAgendaEventViewer->view(
entry, AgendaEventViewer::ActionEditDelete);
}
+ // capture screenshot for future use, if application
+ // is exited/Quit from notesEditor/eventViewer
+ captureScreenShot(true);
}
+
+/*!
+ Slot to handle the selected context menu actions
+ */
+void NotesMainView::selectedMenuAction(HbAction *action)
+{
+ if (action == mOpenAction) {
+ openNote();
+ } else if (action == mEditTodoAction) {
+ editTodo();
+ } else if (action == mDeleteAction) {
+ deleteNote();
+ } else if (action == mMakeFavouriteAction) {
+ markNoteAsFavourite();
+ } else if (action == mMarkTodoAction) {
+ markNoteAsTodo();
+ } else if (action == mTodoStatusAction) {
+ markTodoStatus();
+ }
+}
+
+/*!
+ Slot to handle the context menu closed.
+ */
+void NotesMainView::handleMenuClosed()
+{
+ mIsLongTop = false;
+}
+
+/*!
+ CaptureScreenShot captures screen shot
+ \param captureScreenShot bool to indicate if screenshot needs to be captured
+*/
+void NotesMainView::captureScreenShot(bool captureScreenShot)
+ {
+ if (captureScreenShot) // check if screen shot needs to be captured
+ {
+ mScreenShot.clear();
+ mScreenShot.insert("screenshot", QPixmap::grabWidget(mainWindow(), mainWindow()->rect()));
+ }
+ mIsScreenShotCapruted = captureScreenShot; // set mIsScreenShotCapruted set validity of screenshot
+ }
+
+/*!
+ saveActivity saves main view as an activity
+*/
+void NotesMainView::saveActivity()
+ {
+ // Get a pointer to activity Manager
+ HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+
+ if (!mIsScreenShotCapruted) // check if a valid screenshot is already captured
+ {
+ mScreenShot.clear();
+ mScreenShot.insert("screenshot", QPixmap::grabWidget(mainWindow(), mainWindow()->rect()));
+ }
+
+ // save any data necessary to save the state
+ QByteArray serializedActivity;
+ QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+ stream << NotesNamespace::NotesMainViewId;
+
+ // add the activity to the activity manager
+ bool ok = activityManager->addActivity(notes, serializedActivity, mScreenShot);
+ if ( !ok )
+ {
+ qFatal("Add failed" );
+ }
+ }
// End of file --Don't remove this.