--- a/phonebookui/cntcommonui/views/cntnamesview_p.cpp Fri Oct 08 11:42:51 2010 +0300
+++ b/phonebookui/cntcommonui/views/cntnamesview_p.cpp Fri Oct 15 12:24:46 2010 +0300
@@ -23,8 +23,10 @@
#include "cntdebug.h"
#include "cntapplication.h"
#include "cntfavourite.h"
+#include "cntpinchgrabber.h"
+#include "cntnamesviewitem.h"
+
#include <cntabstractengine.h>
-
#include <cntuiextensionfactory.h>
#include <cntuisocialextension.h>
@@ -34,7 +36,6 @@
#include <hbtoolbar.h>
#include <hbmainwindow.h>
#include <hbview.h>
-#include <hblabel.h>
#include <hbdocumentloader.h>
#include <hblistview.h>
#include <hblistviewitem.h>
@@ -51,6 +52,7 @@
#include <QInputContext>
const char *CNT_CONTACTLIST_XML = ":/xml/contacts_namelist.docml";
+const QString CNT_ACTIVITY_MAINVIEW = "ContactsMainView";
static const int CNT_MIN_ROW_COUNT = 2;
bool CntNamesViewPrivate::mIsFirstTimeUse = true;
@@ -58,23 +60,28 @@
QObject(),
mViewManager(NULL),
mListModel(NULL),
+ mView(NULL),
mListView(NULL),
- mEmptyList(NULL),
mSearchPanel(NULL),
mLoader(NULL),
mVirtualKeyboard(NULL),
+ mSoftkey(NULL),
mNamesAction(NULL),
+ mMultipleDeleter(NULL),
mMenuBuilder(NULL),
+ mActionGroup(NULL),
+ mMenu(NULL),
+ mViewMenu(NULL),
+ mEngine(NULL),
mHandledContactId(0),
- mActionGroup(NULL),
- mMenu(NULL),
- mFilterChanged(false)
+ mFilterChanged(false)
{
CNT_ENTRY
bool ok;
document()->load( CNT_CONTACTLIST_XML, &ok);
- if (!ok) {
+ if (!ok)
+ {
qFatal("Unable to read %S", CNT_CONTACTLIST_XML);
}
@@ -87,9 +94,9 @@
mSoftkey = new HbAction(Hb::BackNaviAction, mView);
connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
- mNewContact = static_cast<HbAction*> (document()->findObject("cnt:newcontact"));
- mNewContact->setParent(mView);
- connect(mNewContact, SIGNAL(triggered()), this, SLOT(createNewContact()));
+ HbAction *newContact = static_cast<HbAction*> (document()->findObject("cnt:newcontact"));
+ newContact->setParent(mView);
+ connect(newContact, SIGNAL(triggered()), this, SLOT(createNewContact()));
mMultipleDeleter = static_cast<HbAction*> (document()->findObject("cnt:delete"));
mMultipleDeleter->setParent(mView);
@@ -106,9 +113,9 @@
mNamesAction = static_cast<HbAction*> (document()->findObject("cnt:names"));
mNamesAction->setParent(mView);
- mImportSim = static_cast<HbAction*> (document()->findObject("cnt:importsim"));
- mImportSim->setParent(mView);
- connect(mImportSim, SIGNAL(triggered()), this, SLOT(importSim()));
+ HbAction *importSim = static_cast<HbAction*> (document()->findObject("cnt:importsim"));
+ importSim->setParent(mView);
+ connect(importSim, SIGNAL(triggered()), this, SLOT(showImportsView()));
mActionGroup = new QActionGroup(this);
groups->setActionGroup(mActionGroup);
@@ -120,17 +127,18 @@
HbAction* settings = static_cast<HbAction*>(document()->findObject("cnt:settings") );
settings->setParent(mView);
- connect( settings, SIGNAL(triggered()), this, SLOT(showSettings()) );
+ connect( settings, SIGNAL(triggered()), this, SLOT(showSettingsView()) );
- HbMenu* viewMenu = static_cast<HbMenu*>(document()->findObject("viewMenu") );
- viewMenu->setParent(mView);
+ mViewMenu = static_cast<HbMenu*>(document()->findObject("viewMenu") );
+ mViewMenu->setParent(mView);
connect(list(), SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), this,
SLOT(showContextMenu(HbAbstractViewItem*,QPointF)));
- connect(list(), SIGNAL(activated (const QModelIndex&)), this,
+ connect(list(), SIGNAL(activated(const QModelIndex&)), this,
SLOT(showContactView(const QModelIndex&)));
+ connect(list(), SIGNAL(pressed(const QModelIndex&)), this,
+ SLOT(setShowContextMenu(const QModelIndex&)));
- mEmptyList = static_cast<HbLabel*> (document()->findWidget("emptyLabel"));
mSearchPanel = static_cast<HbSearchPanel*> (document()->findWidget("searchPanel"));
connect(mSearchPanel, SIGNAL(exitClicked()), this, SLOT(hideFinder()));
connect(mSearchPanel, SIGNAL(criteriaChanged(QString)), this, SLOT(setFilter(QString)));
@@ -139,36 +147,9 @@
CntApplication* cntApp = static_cast<CntApplication*>(qApp);
connect(win, SIGNAL(viewReady()), cntApp, SIGNAL(applicationReady()));
-#ifdef __WINS__
- mView->menu()->addAction("Change Orientation", this, SLOT(switchOrientation()) );
-#endif
CNT_EXIT
}
-void CntNamesViewPrivate::handleImportContacts( HbAction *aAction )
-{
- CNT_ENTRY
-
- HbDialog *popup = static_cast<HbDialog*>(sender());
-
- if (popup && aAction == popup->actions().first())
- {
- CntViewParameters args;
- args.insert(EViewId, importsView);
- mViewManager->changeView(args);
- }
-
- CNT_EXIT
-}
-
-void CntNamesViewPrivate::switchOrientation()
-{
- HbMainWindow* win = mView->mainWindow();
- Qt::Orientation orientation = win->orientation();
-
- win->setOrientation( orientation == Qt::Horizontal ? Qt::Vertical : Qt::Horizontal );
-}
-
CntNamesViewPrivate::~CntNamesViewPrivate()
{
CNT_ENTRY
@@ -201,7 +182,7 @@
CNT_ENTRY
mViewManager = &mEngine->viewManager();
- if (mView->mainWindow() != NULL && !(mView->visibleItems() & Hb::AllItems))
+ if (mView->mainWindow() != NULL && !(mView->visibleItems() & Hb::ToolBarItem))
{
hideFinder();
}
@@ -247,7 +228,10 @@
if ( aArgs.value( EExtraAction ).toString() == CNT_FIND_ACTION )
{
- showFinder();
+ connect(mView->mainWindow(), SIGNAL(viewReady()), this, SLOT(showFinder()));
+ mIsFirstTimeUse = false;
+ //there is a problem with post event of QEvent::RequestSoftwareInputPanel
+ //showFinder();
}
if (mIsFirstTimeUse)
@@ -277,10 +261,8 @@
note->setStandardButtons(HbMessageBox::NoButton);
note->addAction(new HbAction(hbTrId("txt_phob_button_import"), note));
note->addAction(new HbAction(hbTrId("txt_common_button_cancel"), note));
-
- HbLabel *headingLabel = new HbLabel( note );
- headingLabel->setPlainText(hbTrId("txt_phob_title_import_contacts"));
- note->setHeadingWidget(headingLabel);
+
+ note->setHeadingText(hbTrId("txt_phob_title_import_contacts"));
note->setIcon(HbIcon("qtg_large_sim"));
note->setText(hbTrId("txt_phob_info_your_phonebook_is_empty_do_you_wish"));
@@ -315,6 +297,26 @@
CNT_EXIT
}
+QString CntNamesViewPrivate::externalize(QDataStream &stream)
+{
+ CntViewParameters viewParameters;
+ viewParameters.insert(EViewId, namesView);
+ if (isFinderVisible())
+ {
+ viewParameters.insert(EExtraAction, CNT_FIND_ACTION);
+ }
+
+ stream << viewParameters;
+
+ return CNT_ACTIVITY_MAINVIEW;
+}
+
+bool CntNamesViewPrivate::internalize(QDataStream &stream, CntViewParameters &viewParameters)
+{
+ stream >> viewParameters;
+ return true;
+}
+
void CntNamesViewPrivate::deactivate()
{
CNT_ENTRY
@@ -330,84 +332,23 @@
CNT_EXIT
}
-void CntNamesViewPrivate::changeDeleteActionStatus()
-{
- CNT_ENTRY
-
- bool multipleContactsFound = mListModel->rowCount() >= CNT_MIN_ROW_COUNT;
- mMultipleDeleter->setEnabled(multipleContactsFound);
-
- CNT_EXIT
-}
-
-void CntNamesViewPrivate::focusLineEdit()
-{
- CNT_ENTRY
-
- HbLineEdit *editor = static_cast<HbLineEdit*>(mSearchPanel->primitive("lineedit"));
- if (editor)
- {
- editor->setObjectName("focusLineEdit");
- editor->setInputMethodHints(Qt::ImhNoPredictiveText);
- editor->setText("");
- editor->setFocus();
-
- // This opens the VKB
- QInputContext *ic = qApp->inputContext();
- if (ic)
- {
- QEvent *event = new QEvent(QEvent::RequestSoftwareInputPanel);
- ic->filterEvent(event);
- delete event;
- }
- }
-
- CNT_EXIT
-}
-
-void CntNamesViewPrivate::setFilter(const QString &filterString)
-{
- CNT_ENTRY
-
- QContactDetailFilter filter;
-
- if (filterString.isEmpty()) {
- filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
- QString typeContact = QContactType::TypeContact;
- filter.setValue(typeContact);
- } else {
- QStringList searchList = filterString.split(QRegExp("\\s+"), QString::SkipEmptyParts);
- filter.setDetailDefinitionName(QContactDisplayLabel::DefinitionName,
- QContactDisplayLabel::FieldLabel);
- filter.setMatchFlags(QContactFilter::MatchStartsWith);
- filter.setValue(searchList);
- }
-
- mListModel->setFilter(filter);
- mFilterChanged = true;
-
- if (mListModel->rowCount() == 0) {
- document()->load( CNT_CONTACTLIST_XML, "find_empty" );
- } else {
- document()->load( CNT_CONTACTLIST_XML, "find_list" );
- }
-
- CNT_EXIT
-}
-
void CntNamesViewPrivate::showFinder()
{
CNT_ENTRY
+ disconnect(mView->mainWindow(), SIGNAL(viewReady()), this, SLOT(showFinder()));
+
mListModel->showMyCard(false);
- HbListViewItem* proto = mListView->listItemPrototype();
+ HbListViewItem* proto = list()->listItemPrototype();
proto->setTextFormat( Qt::RichText );
- mView->hideItems(Hb::AllItems);
+ mView->hideItems(Hb::ToolBarItem);
focusLineEdit();
+ mViewMenu = mView->takeMenu();
+
CNT_EXIT
}
@@ -416,9 +357,9 @@
CNT_ENTRY
document()->load( CNT_CONTACTLIST_XML, "no_find" );
- mView->showItems(Hb::AllItems);
+ mView->showItems(Hb::ToolBarItem);
- HbListViewItem* proto = mListView->listItemPrototype();
+ HbListViewItem* proto = list()->listItemPrototype();
proto->setTextFormat( Qt::PlainText );
mListModel->showMyCard(true);
@@ -435,34 +376,42 @@
changeDeleteActionStatus();
+ mView->setMenu(mViewMenu);
+
CNT_EXIT
}
-bool CntNamesViewPrivate::isFinderVisible()
+void CntNamesViewPrivate::setFilter(const QString &filterString)
{
CNT_ENTRY
-
- bool isVisible = false;
- if ( mSearchPanel )
+
+ QContactDetailFilter filter;
+
+ if (filterString.isEmpty())
{
- isVisible = mSearchPanel->isVisible();
- }
-
- CNT_EXIT
- return isVisible;
-}
-
-void CntNamesViewPrivate::showPreviousView()
-{
- CNT_ENTRY
-
- if ( !isFinderVisible() )
- {
- mViewManager->back( CntViewParameters() );
+ filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
+ QString typeContact = QContactType::TypeContact;
+ filter.setValue(typeContact);
}
else
{
- hideFinder();
+ QStringList searchList = filterString.split(QRegExp("\\s+"), QString::SkipEmptyParts);
+ filter.setDetailDefinitionName(QContactDisplayLabel::DefinitionName,
+ QContactDisplayLabel::FieldLabel);
+ filter.setMatchFlags(QContactFilter::MatchStartsWith);
+ filter.setValue(searchList);
+ }
+
+ mListModel->setFilter(filter);
+ mFilterChanged = true;
+
+ if (mListModel->rowCount() == 0)
+ {
+ document()->load( CNT_CONTACTLIST_XML, "find_empty" );
+ }
+ else
+ {
+ document()->load( CNT_CONTACTLIST_XML, "find_list" );
}
CNT_EXIT
@@ -515,12 +464,26 @@
mHandledContactId = aContact.localId();
- HbMessageBox::question(HbParameterLengthLimiter(hbTrId("txt_phob_info_delete_1")).arg(name), this, SLOT(handleDeleteContact(int)),
+ HbMessageBox::question(HbParameterLengthLimiter("txt_phob_info_delete_1").arg(name), this, SLOT(handleDeleteContact(int)),
HbMessageBox::Delete | HbMessageBox::Cancel);
CNT_EXIT
}
+void CntNamesViewPrivate::handleDeleteContact( int aAction )
+{
+ CNT_ENTRY
+
+ if (aAction == HbMessageBox::Delete)
+ {
+ mEngine->contactManager( SYMBIAN_BACKEND ).removeContact(mHandledContactId);
+ }
+
+ mHandledContactId = 0;
+
+ CNT_EXIT
+}
+
void CntNamesViewPrivate::deleteMultipleContacts()
{
CNT_ENTRY
@@ -545,6 +508,26 @@
CNT_EXIT
}
+void CntNamesViewPrivate::showPreviousView()
+{
+ CNT_ENTRY
+
+ mViewManager->back( CntViewParameters() );
+
+ CNT_EXIT
+}
+
+void CntNamesViewPrivate::showCollectionView()
+{
+ CNT_ENTRY
+
+ CntViewParameters args;
+ args.insert(EViewId, collectionView);
+ mViewManager->changeView(args);
+
+ CNT_EXIT
+}
+
void CntNamesViewPrivate::showContactView( const QModelIndex& aIndex )
{
CNT_ENTRY
@@ -574,29 +557,93 @@
CNT_EXIT
}
+void CntNamesViewPrivate::showContactEditorView(QContact& aContact)
+{
+ CNT_ENTRY
+
+ CntViewParameters args;
+ args.insert(EViewId, editView);
+
+ QVariant contact;
+ contact.setValue(aContact);
+ args.insert(ESelectedContact, contact);
+
+ mViewManager->changeView(args);
+
+ CNT_EXIT
+}
+
+void CntNamesViewPrivate::showSettingsView()
+{
+ CNT_ENTRY
+
+ CntViewParameters args;
+ args.insert( EViewId, settingsView );
+ mViewManager->changeView( args );
+
+ CNT_EXIT
+}
+
+void CntNamesViewPrivate::showImportsView()
+{
+ CNT_ENTRY
+
+ CntViewParameters args;
+ args.insert(EViewId, importsView);
+ mViewManager->changeView(args);
+
+ CNT_EXIT
+}
+
+void CntNamesViewPrivate::handleImportContacts( HbAction *aAction )
+{
+ CNT_ENTRY
+
+ HbDialog *popup = static_cast<HbDialog*>(sender());
+
+ if (popup && aAction == popup->actions().first())
+ {
+ showImportsView();
+ }
+
+ CNT_EXIT
+}
+
+void CntNamesViewPrivate::setShowContextMenu( const QModelIndex& aIndex )
+{
+ CNT_ENTRY_ARGS(aIndex)
+
+ QContactLocalId id = mListModel->contactId(aIndex);
+
+ // if id is smaller than 1 (basically 0), it's the empty myCard
+ if (id < 1)
+ {
+ mListView->setLongPressEnabled(false);
+ }
+ else
+ {
+ mListView->setLongPressEnabled(true);
+ }
+
+ CNT_EXIT
+}
+
void CntNamesViewPrivate::showContextMenu(HbAbstractViewItem* aItem, QPointF aPoint)
{
CNT_ENTRY
QContact contact = mListModel->contact(aItem->modelIndex());
- // In case of an empty MyCard, do not show any ContextMenu
- if (!(contact.localId() == mListModel->myCardId() && contact.details().count() <= 4))
+ if (mMenu)
{
- if (mMenu)
- {
- delete mMenu;
- mMenu = NULL;
- }
- mMenu = mMenuBuilder->actionMenu( contact, mListModel->myCardId() );
- mMenu->setPreferredPos( aPoint );
- mMenu->open();
- }
- else
- {
- showContactView(contact);
+ delete mMenu;
+ mMenu = NULL;
}
+ mMenu = mMenuBuilder->actionMenu( contact, mListModel->myCardId() );
+ mMenu->setPreferredPos( aPoint );
+ mMenu->open();
+
CNT_EXIT
}
@@ -620,69 +667,6 @@
CNT_EXIT
}
-void CntNamesViewPrivate::handleDeleteContact( int aAction )
-{
- CNT_ENTRY
-
- if (aAction == HbMessageBox::Delete)
- {
- mEngine->contactManager( SYMBIAN_BACKEND ).removeContact(mHandledContactId);
- }
-
- mHandledContactId = 0;
-
- CNT_EXIT
-}
-
-void CntNamesViewPrivate::showContactEditorView(QContact& aContact)
-{
- CNT_ENTRY
-
- CntViewParameters args;
- args.insert(EViewId, editView);
-
- QVariant contact;
- contact.setValue(aContact);
- args.insert(ESelectedContact, contact);
-
- mViewManager->changeView(args);
-
- CNT_EXIT
-}
-
-void CntNamesViewPrivate::showCollectionView()
-{
- CNT_ENTRY
-
- CntViewParameters args;
- args.insert(EViewId, collectionView);
- mViewManager->changeView(args);
-
- CNT_EXIT
-}
-
-void CntNamesViewPrivate::importSim()
-{
- CNT_ENTRY
-
- CntViewParameters args;
- args.insert(EViewId, importsView);
- mViewManager->changeView(args);
-
- CNT_EXIT
-}
-
-void CntNamesViewPrivate::showSettings()
-{
- CNT_ENTRY
-
- CntViewParameters args;
- args.insert( EViewId, settingsView );
- mViewManager->changeView( args );
-
- CNT_EXIT
-}
-
void CntNamesViewPrivate::handleContactAddition(const QList<QContactLocalId>& aAddedList)
{
CNT_ENTRY
@@ -721,6 +705,55 @@
CNT_EXIT
}
+bool CntNamesViewPrivate::isFinderVisible()
+{
+ CNT_ENTRY
+
+ bool isVisible = false;
+ if ( mSearchPanel )
+ {
+ isVisible = mSearchPanel->isVisible();
+ }
+
+ CNT_EXIT
+ return isVisible;
+}
+
+void CntNamesViewPrivate::changeDeleteActionStatus()
+{
+ CNT_ENTRY
+
+ bool multipleContactsFound = mListModel->rowCount() >= CNT_MIN_ROW_COUNT;
+ mMultipleDeleter->setEnabled(multipleContactsFound);
+
+ CNT_EXIT
+}
+
+void CntNamesViewPrivate::focusLineEdit()
+{
+ CNT_ENTRY
+
+ HbLineEdit *editor = static_cast<HbLineEdit*>(mSearchPanel->primitive("lineedit"));
+ if (editor)
+ {
+ editor->setObjectName("focusLineEdit");
+ editor->setInputMethodHints(Qt::ImhNoPredictiveText);
+ editor->setText("");
+ editor->setFocus();
+
+ // This opens the VKB
+ QInputContext *ic = qApp->inputContext();
+ if (ic)
+ {
+ QEvent *event = new QEvent(QEvent::RequestSoftwareInputPanel);
+ ic->filterEvent(event);
+ delete event;
+ }
+ }
+
+ CNT_EXIT
+}
+
void CntNamesViewPrivate::setScrollPosition(int focusedContact)
{
CNT_ENTRY
@@ -734,26 +767,28 @@
CNT_EXIT
}
-//// lazy accessors
HbListView* CntNamesViewPrivate::list()
{
CNT_ENTRY
if (!mListView) {
mListView = static_cast<HbListView*> (mLoader->findWidget("listView"));
+
+ mListView->grabGesture(Qt::PinchGesture);
+
+ CntNamesViewItem *item = new CntNamesViewItem();
+ mListView->setItemPrototype(item);
mListView->setFrictionEnabled(true);
mListView->setScrollingStyle(HbScrollArea::PanWithFollowOn);
- mListView->listItemPrototype()->setGraphicsSize(HbListViewItem::Thumbnail);
- mListView->listItemPrototype()->setStretchingStyle(HbListViewItem::StretchLandscape);
+ item->setGraphicsSize(HbListViewItem::Thumbnail);
+ item->setStretchingStyle(HbListViewItem::StretchLandscape);
mListView->verticalScrollBar()->setInteractive(true);
HbFrameBackground frame;
frame.setFrameGraphicsName("qtg_fr_list_normal");
frame.setFrameType(HbFrameDrawer::NinePieces);
-
- HbListViewItem* prototype = mListView->listItemPrototype();
- prototype->setDefaultFrame( frame );
+ item->setDefaultFrame( frame );
mListView->setUniformItemSizes(true);
mListView->setItemRecycling(true);
@@ -761,6 +796,9 @@
HbIndexFeedback *indexFeedback = new HbIndexFeedback(mView);
indexFeedback->setIndexFeedbackPolicy(HbIndexFeedback::IndexFeedbackSingleCharacter);
indexFeedback->setItemView(mListView);
+
+ CntPinchGrabber *grabber = new CntPinchGrabber(mListView);
+ mListView->installEventFilter(grabber);
}
CNT_EXIT
@@ -779,5 +817,4 @@
return mLoader;
}
-
// End of File