--- a/phonebookui/pbkcommonui/src/cntgroupmemberview.cpp Tue Jul 06 14:05:47 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntgroupmemberview.cpp Wed Aug 18 09:39:00 2010 +0300
@@ -16,30 +16,8 @@
*/
#include "cntgroupmemberview.h"
-#include "cntfetchcontactsview.h"
-#include "cntcontactcardheadingitem.h"
-#include "cntglobal.h"
-#include "cntimagelabel.h"
-#include "cntimageutility.h"
-#include <hbnotificationdialog.h>
-#include <hbmessagebox.h>
-#include <hbmenu.h>
-#include <hblistview.h>
-#include <hblistviewitem.h>
-#include <hbframebackground.h>
-#include <hbindexfeedback.h>
-#include <hbscrollbar.h>
-#include <hbview.h>
-#include <hbaction.h>
-#include <hblabel.h>
-#include <hbparameterlengthlimiter.h>
-#include <thumbnailmanager_qt.h>
-#include <cntlistmodel.h>
-#include <hbmainwindow.h>
-
-#include "cntdocumentloader.h"
-
-const char *CNT_GROUPMEMBERVIEW_XML = ":/xml/contacts_groupmembers.docml";
+#include "cntgroupmemberview_p.h"
+#include "cntabstractviewmanager.h"
/*!
\class CntGroupMemberView
@@ -56,454 +34,44 @@
\a viewManager is the parent that creates this view. \a parent is a pointer to parent QGraphicsItem (by default this is 0)
*/
-CntGroupMemberView::CntGroupMemberView() :
- mGroupContact(NULL),
- mViewManager(NULL),
- mHeadingItem(NULL),
- mModel(NULL),
- mImageLabel(NULL),
- mListView(NULL),
- mFetchView(NULL),
- mAvatar(NULL)
+CntGroupMemberView::CntGroupMemberView() : d_ptr(new CntGroupMemberViewPrivate())
{
- mDocument = new CntDocumentLoader;
-
- bool ok;
- mDocument->load( CNT_GROUPMEMBERVIEW_XML, &ok );
- if ( !ok ){
- qFatal( "Unable to load %S", CNT_GROUPMEMBERVIEW_XML );
- }
-
- mView = static_cast<HbView*>( mDocument->findWidget("view") );
-
- //back button
- mSoftkey = new HbAction(Hb::BackNaviAction, mView);
- connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
-
- mImageLabel = static_cast<CntImageLabel*>(mDocument->findWidget("editViewImage"));
- connect( mImageLabel, SIGNAL(iconClicked()), this, SLOT(openImageEditor()) );
- connect( mImageLabel, SIGNAL(iconLongPressed(const QPointF&)), this, SLOT(drawImageMenu(const QPointF&)) );
-
- mListView = static_cast<HbListView*>( mDocument->findWidget("listView") );
- connect(mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), this,
- SLOT(showContextMenu(HbAbstractViewItem*,QPointF)));
- connect(mListView, SIGNAL(activated (const QModelIndex&)), this,
- SLOT(showContactView(const QModelIndex&)));
-
- mHeadingItem = static_cast<CntContactCardHeadingItem*>( mDocument->findWidget("editViewHeading") );
- connect(mHeadingItem, SIGNAL(passShortPressed(const QPointF&)), this, SLOT(openImageEditor()) );
- connect(mHeadingItem, SIGNAL(passLongPressed(const QPointF&)), this, SLOT(drawImageMenu(const QPointF&)));
-
- // menu actions
- mEditGroupAction = static_cast<HbAction*>( mDocument->findObject("cnt:editgroupdetails"));
- connect(mEditGroupAction, SIGNAL(triggered()), this, SLOT(editGroup()));
-
- // toolbar actions
- mManageAction = static_cast<HbAction*>( mDocument->findObject("cnt:managemembers"));
- connect(mManageAction, SIGNAL(triggered()), this, SLOT(manageMembers()));
- mDeleteAction = static_cast<HbAction*>( mDocument->findObject("cnt:deletegroup"));
- connect(mDeleteAction, SIGNAL(triggered()), this, SLOT(deleteGroup()));
- mShowActionsAction = static_cast<HbAction*>( mDocument->findObject("cnt:groupactions"));
- connect(mShowActionsAction, SIGNAL(triggered()), this, SLOT(openGroupActions()));
-
- // thumbnail manager
- mThumbnailManager = new ThumbnailManager(this);
- mThumbnailManager->setMode(ThumbnailManager::Default);
- mThumbnailManager->setQualityPreference(ThumbnailManager::OptimizeForQuality);
- mThumbnailManager->setThumbnailSize(ThumbnailManager::ThumbnailLarge);
-
- connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
- this, SLOT(thumbnailReady(QPixmap, void*, int, int)));
+ Q_D( CntGroupMemberView );
+ d->q_ptr = this;
}
-/*!
-Destructor
-*/
CntGroupMemberView::~CntGroupMemberView()
{
- mView->deleteLater();
-
- delete mGroupContact;
- mGroupContact = 0;
-
- delete mModel;
- mModel = 0;
-
- delete mFetchView;
- mFetchView = 0;
-
- delete mAvatar;
- mAvatar = NULL;
+ Q_D(CntGroupMemberView);
+ delete d;
}
-
-void CntGroupMemberView::setOrientation(Qt::Orientation orientation)
-{
- if (orientation == Qt::Vertical)
- {
- // reading "portrait" section
- mDocument->load( CNT_GROUPMEMBERVIEW_XML, "portrait" );
- }
- else
- {
- // reading "landscape" section
- mDocument->load( CNT_GROUPMEMBERVIEW_XML, "landscape" );
- }
-}
-
+
void CntGroupMemberView::activate( CntAbstractViewManager* aMgr, const CntViewParameters aArgs )
{
- mViewManager = aMgr;
- mArgs = aArgs;
-
- if (mView->navigationAction() != mSoftkey)
- {
- mView->setNavigationAction(mSoftkey);
- }
-
- QVariant contact = mArgs.value( ESelectedGroupContact );
- mGroupContact = new QContact( contact.value<QContact>() );
-
- HbMainWindow* window = mView->mainWindow();
- if ( window )
- {
- connect(window, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setOrientation(Qt::Orientation)));
- setOrientation(window->orientation());
- }
-
- mHeadingItem->setGroupDetails(mGroupContact);
-
- // avatar
- QList<QContactAvatar> details = mGroupContact->details<QContactAvatar>();
- for (int i = 0;i < details.count();i++)
- {
- if (details.at(i).imageUrl().isValid())
- {
- mAvatar = new QContactAvatar(details.at(i));
- mThumbnailManager->getThumbnail(mAvatar->imageUrl().toString());
- break;
- }
- }
-
- // create list & model
- mListView->setFrictionEnabled(true);
- mListView->setScrollingStyle(HbScrollArea::PanWithFollowOn);
- mListView->verticalScrollBar()->setInteractive(true);
- mListView->setUniformItemSizes(true);
- mListView->listItemPrototype()->setGraphicsSize(HbListViewItem::Thumbnail);
- HbIndexFeedback *indexFeedback = new HbIndexFeedback(mView);
- indexFeedback->setIndexFeedbackPolicy(HbIndexFeedback::IndexFeedbackSingleCharacter);
- indexFeedback->setItemView(mListView);
-
- HbFrameBackground frame;
- frame.setFrameGraphicsName("qtg_fr_list_normal");
- frame.setFrameType(HbFrameDrawer::NinePieces);
- mListView->itemPrototypes().first()->setDefaultFrame(frame);
-
- createModel();
-
- if (mArgs.value(ESelectedAction).toString() == CNT_SAVE_ACTION)
- {
- QString name = getContactManager()->synthesizedDisplayLabel(*mGroupContact);
- HbNotificationDialog::launchDialog(HbParameterLengthLimiter(hbTrId("txt_phob_dpophead_new_group_1_created").arg(name)));
- }
-
- mFetchView = new CntFetchContacts(*mViewManager->contactManager( SYMBIAN_BACKEND ));
- connect(mFetchView, SIGNAL(clicked()), this, SLOT(handleManageMembers()));
+ Q_D(CntGroupMemberView);
+ d->activate(aMgr,aArgs);
}
void CntGroupMemberView::deactivate()
{
-
-}
-
-void CntGroupMemberView::showPreviousView()
-{
- //save the contact if avatar has been changed.
- QContact contact = mViewManager->contactManager( SYMBIAN_BACKEND )->contact(mGroupContact->localId());
- if ( contact != *mGroupContact )
- {
- getContactManager()->saveContact(mGroupContact);
- }
- mViewManager->back(mArgs);
-}
-
-void CntGroupMemberView::openGroupActions()
-{
- QVariant var;
- var.setValue(*mGroupContact);
-
- mArgs.insert(EViewId, groupActionsView);
- mArgs.insert(ESelectedGroupContact, var);
- mViewManager->changeView(mArgs);
-}
-
-void CntGroupMemberView::manageMembers()
-{
- QContactRelationshipFilter membersFilter;
- membersFilter.setRelationshipType(QContactRelationship::HasMember);
- membersFilter.setRelatedContactRole(QContactRelationship::First);
- membersFilter.setRelatedContactId(mGroupContact->id());
- mOriginalGroupMembers = getContactManager()->contactIds(membersFilter);
-
- QSet<QContactLocalId> contactsSet = mOriginalGroupMembers.toSet();
- QContactName groupContactName = mGroupContact->detail( QContactName::DefinitionName );
- QString groupName(groupContactName.value( QContactName::FieldCustomLabel ));
-
- if (!mFetchView) {
- mFetchView = new CntFetchContacts(*mViewManager->contactManager( SYMBIAN_BACKEND ));
- connect(mFetchView, SIGNAL(clicked()), this, SLOT(handleManageMembers()));
- }
- mFetchView->setDetails(HbParameterLengthLimiter(hbTrId("txt_phob_title_members_of_1_group")).arg(groupName),
- hbTrId("txt_common_button_save"));
- mFetchView->displayContacts(HbAbstractItemView::MultiSelection, contactsSet);
+ Q_D(CntGroupMemberView);
+ d->deactivate();
}
-void CntGroupMemberView::handleManageMembers()
-{
-
- QSet<QContactLocalId> selectedContacts = mFetchView->getSelectedContacts();
-
- if (mFetchView->wasCanceled()) {
- delete mFetchView;
- mFetchView = 0;
- return;
- }
-
- QList<QContactRelationship> removedMemberships;
- QList<QContactRelationship> addedMemberships;
-
- QSet<QContactLocalId> removedMembers = mOriginalGroupMembers.toSet() - selectedContacts;
- setRelationship(removedMembers, removedMemberships);
-
- QSet<QContactLocalId> addedMembers = selectedContacts - mOriginalGroupMembers.toSet();
- setRelationship(addedMembers, addedMemberships);
-
- QMap<int, QContactManager::Error> errors;
- if (!addedMemberships.isEmpty()) {
- getContactManager()->saveRelationships(&addedMemberships, &errors);
- }
-
- if (!removedMemberships.isEmpty()) {
- getContactManager()->removeRelationships(removedMemberships, &errors);
- }
-}
-
-void CntGroupMemberView::createModel()
-{
- QContactRelationshipFilter rFilter;
- rFilter.setRelationshipType(QContactRelationship::HasMember);
- rFilter.setRelatedContactRole(QContactRelationship::First);
- rFilter.setRelatedContactId(mGroupContact->id());
-
- mModel = new CntListModel(getContactManager(), rFilter, false);
- mListView->setModel(mModel);
-}
-
-void CntGroupMemberView::editGroup()
+bool CntGroupMemberView::isDefault() const
{
- mArgs.insert(EViewId, groupEditorView);
- QVariant var;
- var.setValue(*mGroupContact);
- mArgs.insert(ESelectedGroupContact, var);
- mViewManager->changeView(mArgs);
-}
-
-void CntGroupMemberView::deleteGroup()
-{
- QString groupName = mGroupContact->displayLabel();
- HbLabel *headingLabel = new HbLabel();
- headingLabel->setPlainText(HbParameterLengthLimiter(hbTrId("txt_phob_dialog_delete_1_group")).arg(groupName));
-
- HbMessageBox::question(hbTrId("txt_phob_dialog_only_group_will_be_removed_contac"), this, SLOT(handleDeleteGroup(HbAction*)),
- hbTrId("txt_common_button_delete"), hbTrId("txt_common_button_cancel"), headingLabel);
-}
-
-void CntGroupMemberView::handleDeleteGroup(HbAction *action)
-{
- HbDialog *popup = static_cast<HbDialog*>(sender());
-
- if (popup && action == popup->actions().first())
- {
- getContactManager()->removeContact(mGroupContact->localId());
- showPreviousView();
- }
-}
-
-/*!
-Called when a list item is longpressed
-*/
-void CntGroupMemberView::showContextMenu(HbAbstractViewItem *aItem, const QPointF &aCoords)
-{
- QVariant data( aItem->modelIndex().row() );
-
- QModelIndex index = aItem->modelIndex();
-
- HbMenu *menu = new HbMenu();
- menu->setAttribute(Qt::WA_DeleteOnClose);
- menu->setPreferredPos( aCoords );
-
- HbAction *removeFromGroupAction = 0;
- HbAction *openContactAction = 0;
- HbAction *editContactAction = 0;
-
- openContactAction = menu->addAction(hbTrId("txt_common_menu_open"));
- editContactAction = menu->addAction(hbTrId("txt_common_menu_edit"));
- removeFromGroupAction = menu->addAction(hbTrId("txt_phob_menu_remove_from_group"));
-
- openContactAction->setData( data );
- editContactAction->setData( data );
- removeFromGroupAction->setData( data );
-
- menu->open(this, SLOT(handleMenu(HbAction*)));
+ return false;
}
-void CntGroupMemberView::handleMenu(HbAction* action)
-{
- int row = action->data().toInt();
- HbMenu *menuItem = static_cast<HbMenu*>(sender());
- QModelIndex index = mModel->index(row);
-
- if ( action == menuItem->actions().first() )
- {
- showContactView(index);
- }
- else if (action == menuItem->actions().at(1))
- {
- editContact(index);
- }
- else if (action == menuItem->actions().at(2))
- {
- removeFromGroup(index);
- }
-}
-
-
-/*!
-Called after user clicked on the listview.
-*/
-void CntGroupMemberView::showContactView(const QModelIndex &index)
+HbView* CntGroupMemberView::view() const
{
- mArgs.insert(EViewId, commLauncherView);
- QVariant var;
- var.setValue(mModel->contact(index));
- mArgs.insert(ESelectedContact, var);
- QVariant varGroup;
- varGroup.setValue(*mGroupContact);
- mArgs.insert(ESelectedGroupContact, varGroup);
- mViewManager->changeView(mArgs);
-
-}
-
-void CntGroupMemberView::removeFromGroup(const QModelIndex &index)
-{
- // get contact id using index
- QContact selectedContact = mModel->contact(index);
- QContactRelationship relationship;
- relationship.setRelationshipType(QContactRelationship::HasMember);
- relationship.setFirst(mGroupContact->id());
- relationship.setSecond(selectedContact.id());
- getContactManager()->removeRelationship(relationship);
-}
-
-void CntGroupMemberView::editContact(const QModelIndex &index)
-{
-
- mArgs.insert(EViewId, editView);
- QVariant var;
- var.setValue(mModel->contact(index));
- mArgs.insert(ESelectedContact, var);
- mViewManager->changeView(mArgs);
-}
-
-void CntGroupMemberView::thumbnailReady(const QPixmap& pixmap, void *data, int id, int error)
-{
- Q_UNUSED(data);
- Q_UNUSED(id);
- Q_UNUSED(error);
- if (!error)
- {
- QIcon qicon(pixmap);
- HbIcon icon(qicon);
- mHeadingItem->setIcon(icon);
-
- mImageLabel->clear();
- mImageLabel->setIcon(icon);
- }
+ Q_D( const CntGroupMemberView );
+ return d->mView;
}
-void CntGroupMemberView::openImageEditor()
+int CntGroupMemberView::viewId() const
{
- QVariant var;
- var.setValue(*mGroupContact);
-
- // SelectedGroupContact is needed so we know which group to show
- // when we come back to this view, and selected contact is needed
- // for image editor to be able to assign the image to correct contact.
- mArgs.insert(ESelectedGroupContact, var);
- mArgs.insert(ESelectedContact, var);
-
- mArgs.insert(EViewId, imageEditorView );
-
- mViewManager->changeView( mArgs );
-}
-
-QContactManager* CntGroupMemberView::getContactManager()
-{
- return mViewManager->contactManager(SYMBIAN_BACKEND);
-}
-
-void CntGroupMemberView::setRelationship(QSet<QContactLocalId> &aLocalId,
- QList<QContactRelationship> &aRelationshipList)
-{
- foreach (QContactLocalId id, aLocalId) {
- QContact contact = getContactManager()->contact(id);
-
- QContactRelationship membership;
- membership.setRelationshipType(QContactRelationship::HasMember);
- membership.setFirst(mGroupContact->id());
- membership.setSecond(contact.id());
- aRelationshipList.append(membership);
- }
-}
+ return groupMemberView;
+}
+// EOF
-/*!
-Draw the image specific content menu
-*/
-void CntGroupMemberView::drawImageMenu(const QPointF &aCoords)
-{
- HbMenu *menu = new HbMenu();
- HbAction *changeImageAction = menu->addAction(hbTrId("txt_phob_menu_change_picture"), this, SLOT(openImageEditor()));
- if (mAvatar)
- {
- HbAction *removeAction = menu->addAction(hbTrId("txt_phob_menu_remove_image"), this, SLOT(removeImage()));
- }
- menu->setPreferredPos(aCoords);
- menu->open();
-}
-
-
-void CntGroupMemberView::removeImage()
-{
- if (mAvatar)
- {
- if (!mAvatar->imageUrl().isEmpty())
- {
- bool success = mGroupContact->removeDetail(mAvatar);
- // Check if image removable.
- CntImageUtility imageUtility;
- if(imageUtility.isImageRemovable(mAvatar->imageUrl().toString()))
- {
- imageUtility.removeImage(mAvatar->imageUrl().toString());
- }
- mAvatar->setImageUrl(QUrl());
- mImageLabel->clear();
- mImageLabel->setIcon(HbIcon("qtg_large_add_group_picture"));
- mHeadingItem->setIcon(HbIcon("qtg_large_add_group_picture"));
- mViewManager->contactManager( SYMBIAN_BACKEND )->saveContact(mGroupContact);
- }
- }
-}
-
-
-
-// end of file