--- a/contacts_info/contacts_metadata/contacts_metadata.mrp Thu Sep 02 20:16:15 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-component contacts_metadata
-source \sf\app\contacts\contacts_info\contacts_metadata
-source \sf\app\contacts\package_definition.xml
-source \sf\app\contacts\distribution.policy.s60
-notes_source \component_defs\release.src
-ipr T
--- a/contacts_plat/contacts_ui_api/inc/cntuids.h Thu Sep 02 20:16:15 2010 +0300
+++ b/contacts_plat/contacts_ui_api/inc/cntuids.h Fri Sep 17 08:27:32 2010 +0300
@@ -49,7 +49,8 @@
// name list row enumerations
enum CntNameListRowSetting {
CntOneRowNameOnly = 0x0,
- CntTwoRowsNameAndPhoneNumber = 0x1
+ CntTwoRowsNameAndPhoneNumber = 0x1,
+ CntTwoRowsStatusUpdate = 0x2
};
--- a/contacts_plat/contacts_ui_extensions_api/inc/cntviewsupplier.h Thu Sep 02 20:16:15 2010 +0300
+++ b/contacts_plat/contacts_ui_extensions_api/inc/cntviewsupplier.h Fri Sep 17 08:27:32 2010 +0300
@@ -50,6 +50,16 @@
*/
virtual CntAbstractView* viewAt( int aIndex ) = 0;
+ /**
+ * Sets the view id base value for supplier.
+ * The supplier method viewIdAt should return view ids in range
+ * from aViewIdBase to aViewIdBase + viewCount.
+ *
+ * @param int, action index
+ * @return QString, process name
+ */
+ virtual void setViewIdBase( int aViewIdBase ) = 0;
+
protected:
// prevent deleting by client
virtual ~CntViewSupplier() {}
--- a/contactwidgethsplugin/contactwidgeths/inc/commlauncherwidget.h Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/inc/commlauncherwidget.h Fri Sep 17 08:27:32 2010 +0300
@@ -21,6 +21,8 @@
#include <HbPopup>
#include <qtcontacts.h>
#include <xqaiwrequest.h>
+#include <QObjectCleanupHandler>
+#include <QScopedPointer>
#include "contactwidgetplugin_global.h"
@@ -52,8 +54,11 @@
QRectF& sceneRect, QRectF& launcherRect);
void selectAppearEffect(QPointF FriendPos, QPointF LauncherPos);
+ bool isPendingRequest();
+
signals:
void launcherClosed();
+ void requestCompleted();
protected:
void keyPressEvent(QKeyEvent *event);
@@ -68,10 +73,11 @@
void makeCall();
void sendMessage();
- // EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE PLATFORM DOES NOT SUPPORT IT!
- //void sendEmail();
+ void sendEmail();
void openPhonebook();
+ void handleRequestOk(const QVariant& value);
+
int commLauncherWidth();
private:
@@ -80,8 +86,11 @@
QGraphicsLinearLayout *mLayout;
int mButtonCount;
+
+
XQAiwRequest *mRequest;
+ QContactAction* mCommLauncherAction;
HbPushButton *mCallButton;
HbPushButton *mSendMsgButton;
@@ -91,6 +100,10 @@
XQApplicationManager *mApplicationManager;
QString mAppearEffect;
+ QObjectCleanupHandler mCleanupHandler;
+
+ bool mPendingRequest;
+
CONTACTWIDGET_TEST_FRIEND_CLASS(TestContactWidget)
};
--- a/contactwidgethsplugin/contactwidgeths/inc/contactwidgeths.h Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/inc/contactwidgeths.h Fri Sep 17 08:27:32 2010 +0300
@@ -26,7 +26,8 @@
#include <XQServiceUtil.h>
#include <xqappmgr.h>
#include <thumbnailmanager_qt.h>
-
+#include <QObjectCleanupHandler>
+#include <QScopedPointer>
#include "contactwidgetplugin_global.h"
#include "commlauncherwidget.h"
@@ -89,6 +90,7 @@
void onContactsRemoved( const QList<QContactLocalId> &contactIds );
void thumbnailReady(QPixmap, void*, int, int);
void loadNormalLayout();
+ void onRequestComplete();
private:
void createUI();
@@ -117,11 +119,15 @@
CommLauncherWidget *mLauncher;
HbFrameDrawer *mWidgetFrameDrawer;
HbFrameDrawer *mShareFrameDrawer;
+ QScopedPointer<HbIcon> mAvatarIcon;
+
// Contact
QContact mContact;
QContactLocalId mContactLocalId;
QString mContactImageFileName;
- QContactAvatar* mAvatar;
+ // need to use scopepointer as QObjectCleanupHandler is not accepting
+ // it as a parameter
+ QScopedPointer<QContactAvatar> mAvatar;
bool mContactHasAvatarDetail;
// Contact manager
QContactManager *mContactManager;
@@ -129,11 +135,15 @@
XQAiwRequest *mContactSelectRequest;
HbMainWindow *mMainWindow;
- ThumbnailManager *mThumbnailManager;
+ QScopedPointer<ThumbnailManager> mThumbnailManager;
QPixmap mThumbnailPixmap;
// When true, thumbnail generating is in progress
bool mThumbnailInProgress;
- HbTranslator* mTranslator;
+ QScopedPointer<HbTranslator> mTranslator;
+
+ QObjectCleanupHandler mCleanupHandler;
+
+ bool mPendingExit;
CONTACTWIDGET_TEST_FRIEND_CLASS(TestContactWidget)
--- a/contactwidgethsplugin/contactwidgeths/resource/commlauncherbuttons.css Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/resource/commlauncherbuttons.css Fri Sep 17 08:27:32 2010 +0300
@@ -1,23 +1,74 @@
-HbPushButton
+
+HbPushButton#callApp
{
fixed-width: 9.0un;
fixed-height: 9.0un;
}
-HbPushButton::icon
+HbPushButton#callApp::icon
{
fixed-width: 8.0un;
fixed-height: 8.0un;
}
-HbPushButtonSpacer
+HbPushButton#callApp::Spacer
+{
+ fixed-width: 0.0un;
+ fixed-height: 0.0un;
+}
+
+HbPushButton#msgApp
+{
+ fixed-width: 9.0un;
+ fixed-height: 9.0un;
+}
+
+HbPushButton#msgApp::icon
+{
+ fixed-width: 8.0un;
+ fixed-height: 8.0un;
+}
+
+HbPushButton#msgApp::Spacer
{
fixed-width: 0.0un;
fixed-height: 0.0un;
}
+HbPushButton#emailApp
+{
+ fixed-width: 9.0un;
+ fixed-height: 9.0un;
+}
+HbPushButton#emailApp::icon
+{
+ fixed-width: 8.0un;
+ fixed-height: 8.0un;
+}
+
+HbPushButton#emailApp::Spacer
+{
+ fixed-width: 0.0un;
+ fixed-height: 0.0un;
+}
+HbPushButton#phoneApp
+{
+ fixed-width: 9.0un;
+ fixed-height: 9.0un;
+}
+HbPushButton#phoneApp::icon
+{
+ fixed-width: 8.0un;
+ fixed-height: 8.0un;
+}
+
+HbPushButton#phoneApp::Spacer
+{
+ fixed-width: 0.0un;
+ fixed-height: 0.0un;
+}
--- a/contactwidgethsplugin/contactwidgeths/src/commlauncherwidget.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/src/commlauncherwidget.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -23,7 +23,7 @@
#include <qtcontacts.h>
#include <hbdocumentloader.h>
#include <xqappmgr.h>
-
+#include <xqaiwdecl.h>
#include "commlauncherwidget.h"
// ContactManager backend
@@ -39,13 +39,20 @@
const QString messageButtonName = "ButtonMessage";
const QString mycardButtonName = "ButtonMycard";
-const QString appearTL = "appear_tl";
-const QString appearTR = "appear_tr";
-const QString appearBL = "appear_bl";
-const QString appearBR = "appear_br";
+const QString appearEffectName = "appear";
const int commLauncherMargin = 120; // heights of titlebar & comm.launcher
+// TODO: THESE STRINGS ARE IN W32 SDK. THESE DEFINITIONS CAN BE REMOVED
+// WHEN EVERYBODY ARE USING IT OR LATER VERSION
+#ifndef XQOP_CONTACTS_VIEW_CONTACT_CARD
+#define XQOP_CONTACTS_VIEW_CONTACT_CARD QLatin1String("openContactCard(int)")
+#endif
+#ifndef XQI_CONTACTS_VIEW
+#define XQI_CONTACTS_VIEW QLatin1String("com.nokia.symbian.IContactsView")
+#endif
+
+
/*!
\class CommLauncherWidget
*/
@@ -62,7 +69,9 @@
mSendMsgButton(0),
mEmailButton(0),
mPhonebookButton(0),
- mApplicationManager(0)
+ mApplicationManager(0),
+ mCommLauncherAction(0),
+ mPendingRequest(false)
{
HbStyleLoader::registerFilePath(":/commlauncherbuttons.css");
@@ -81,30 +90,37 @@
horizontalMargin, 2*verticalMargin);
// create document loader
- HbDocumentLoader *documentLoader = new HbDocumentLoader();
+ QScopedPointer<HbDocumentLoader> documentLoader ( new HbDocumentLoader() );
bool result = false;
documentLoader->load(commLauncherDocml, &result);
ASSERT(result);
// create buttons
const QString callIconName = "qtg_large_active_call";
- mCallButton = createButton(callIconName, callButtonName, documentLoader);
+ mCallButton = createButton(callIconName, callButtonName, documentLoader.data());
+ HbStyle::setItemName(mCallButton, "callApp");
+ mCallButton->setObjectName("callApp");
connect(mCallButton, SIGNAL(clicked()), this, SLOT(makeCall()));
const QString messagingIconName = "qtg_large_message";
- mSendMsgButton = createButton(messagingIconName, messageButtonName, documentLoader);
+ mSendMsgButton = createButton(messagingIconName, messageButtonName, documentLoader.data());
+ HbStyle::setItemName(mSendMsgButton, "msgApp");
+ mSendMsgButton->setObjectName("msgApp");
connect(mSendMsgButton, SIGNAL(clicked()), this, SLOT(sendMessage()));
const QString emailIconName = "qtg_large_email";
- mEmailButton = createButton(emailIconName, emailButtonName, documentLoader);
- // EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE PLATFORM DOES NOT SUPPORT IT!
- //connect(mEmailButton, SIGNAL(clicked()), this, SLOT(sendEmail()));
+ mEmailButton = createButton(emailIconName, emailButtonName, documentLoader.data());
+ HbStyle::setItemName(mEmailButton, "emailApp");
+ mEmailButton->setObjectName("emailApp");
+ connect(mEmailButton, SIGNAL(clicked()), this, SLOT(sendEmail()));
const QString phonebookIconName = "qtg_large_mycard";
- mPhonebookButton = createButton(phonebookIconName, mycardButtonName, documentLoader);
+ mPhonebookButton = createButton(phonebookIconName, mycardButtonName, documentLoader.data());
+ HbStyle::setItemName(mPhonebookButton, "phoneApp");
+ mPhonebookButton->setObjectName("phoneApp");
connect(mPhonebookButton, SIGNAL(clicked()), this, SLOT(openPhonebook()));
- delete documentLoader;
+
}
/*!
@@ -113,11 +129,6 @@
CommLauncherWidget::~CommLauncherWidget()
{
// Deleting request cancels all pending requests
- if (mRequest) {
- delete mRequest;
- mRequest = NULL;
- }
-
}
/*!
@@ -182,8 +193,7 @@
}
// Create email button, if email count exists
- // EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE PLATFORM DOES NOT SUPPORT IT!
- /*QList<QContactActionDescriptor> emailActionDescriptors =
+ QList<QContactActionDescriptor> emailActionDescriptors =
QContactAction::actionDescriptors("email", cmBackend);
if (emailActionDescriptors.count() > 0) {
QList<QContactEmailAddress> emailList = mContact->details<QContactEmailAddress>();
@@ -200,16 +210,12 @@
} else {
qDebug() << "Email button not created";
}
- */
+
mLayout->addItem(mPhonebookButton);
mButtonCount++;
- // add Effects
- HbEffect::add(this, QString(":/friend_expand_tl.fxml"), appearTL);
- HbEffect::add(this, QString(":/friend_expand_tr.fxml"), appearTR);
- HbEffect::add(this, QString(":/friend_expand_bl.fxml"), appearBL);
- HbEffect::add(this, QString(":/friend_expand_br.fxml"), appearBR);
+ // Set the disappear effect.
HbEffect::add(this, QString(":/friend_minimize.fxml"), "disappear");
setLayout(mLayout);
@@ -220,7 +226,7 @@
*/
void CommLauncherWidget::popupAboutToShow()
{
- HbEffect::start(this, mAppearEffect);
+ // no implementation
}
/*
@@ -241,18 +247,26 @@
left = false;
}
+ // Remove the previous appear effect.
+ if (!mAppearEffect.isEmpty()) {
+ HbEffect::remove(this, mAppearEffect, appearEffectName);
+ }
+
+ // Define the new appear effect and set it as active appear effect.
if (top && left) {
- mAppearEffect = appearTL;
+ mAppearEffect = ":/friend_expand_tl.fxml";
}
else if (top && !left) {
- mAppearEffect = appearTR;
+ mAppearEffect = ":/friend_expand_tr.fxml";
}
else if (!top && left) {
- mAppearEffect = appearBL;
+ mAppearEffect = ":/friend_expand_bl.fxml";
}
else {
- mAppearEffect = appearBR;
+ mAppearEffect = ":/friend_expand_br.fxml";
}
+ HbEffect::add(this, mAppearEffect, appearEffectName);
+
qDebug() << "---------------top " << top << "--- left " << left << " " << mAppearEffect;
}
@@ -261,7 +275,6 @@
*/
void CommLauncherWidget::popupAboutToClose()
{
- HbEffect::start(this, "disappear");
emit launcherClosed();
}
@@ -274,8 +287,10 @@
HbPushButton *button = 0;
button = qobject_cast<HbPushButton *>
(documentLoader->findWidget(buttonName));
+
if (button) {
- button->setIcon(HbIcon(iconName));
+ mCleanupHandler.add(button);
+ button->setIcon(HbIcon(iconName));
}
return button;
@@ -351,10 +366,14 @@
//if preferred is not set select the first number
phoneNumber = mContact->detail<QContactPhoneNumber>();
}
- // invoke action
- QContactAction *callAction = QContactAction::action(callActionDescriptors.at(0));
+ // invoke action yasir memory leak
+
+ if(mCommLauncherAction)
+ delete mCommLauncherAction;
+ mCommLauncherAction = QContactAction::action(callActionDescriptors.at(0));
+ mCleanupHandler.add(mCommLauncherAction);
if (!phoneNumber.isEmpty()) {
- callAction->invokeAction(*mContact, phoneNumber);
+ mCommLauncherAction->invokeAction(*mContact, phoneNumber);
qDebug() << "call to number " << phoneNumber.number();
}
@@ -385,9 +404,13 @@
messageNumber = mContact->detail<QContactPhoneNumber>();
}
// invoke action
- QContactAction *messageAction = QContactAction::action(messageActionDescriptors.at(0));
+ if(mCommLauncherAction)
+ delete mCommLauncherAction;
+ mCommLauncherAction = QContactAction::action(messageActionDescriptors.at(0));
+ mCleanupHandler.add(mCommLauncherAction);
+
if (!messageNumber.isEmpty()) {
- messageAction->invokeAction(*mContact, messageNumber);
+ mCommLauncherAction->invokeAction(*mContact, messageNumber);
qDebug() << "send to number " << messageNumber.number();
}
@@ -401,20 +424,21 @@
/*!
Sends an email to contact.
*/
-// EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE WK20 PLATFORM DOES NOT SUPPORT IT!
-/*
void CommLauncherWidget::sendEmail()
{
QList<QContactActionDescriptor> emailActionDescriptors =
QContactAction::actionDescriptors("email", cmBackend);
- if (emailActionDescriptors.count() > 0) {
- QContactAction *emailAction = QContactAction::action(emailActionDescriptors.at(0));
+ if (emailActionDescriptors.count() > 0) {
+ if(mCommLauncherAction)
+ delete mCommLauncherAction;
+ mCommLauncherAction = QContactAction::action(emailActionDescriptors.at(0));
+ mCleanupHandler.add(mCommLauncherAction);
//TODO: implement
QList<QContactEmailAddress> emailList = mContact->details<QContactEmailAddress>();
if (emailList.count() > 0) {
- emailAction->invokeAction(*mContact, emailList.at(0));
+ mCommLauncherAction->invokeAction(*mContact, emailList.at(0));
QString emailAddress = emailList.at(0).emailAddress();
qDebug() << "send to email " << emailAddress;
@@ -443,6 +467,7 @@
mRequest = mApplicationManager->create("com.nokia.symbian.IMessage",
"Send", "send(QVariant)", false);
+ mCleanupHandler.add(mRequest);
if (mRequest) {
mRequest->setSynchronous(false);
QList<QVariant> arguments;
@@ -458,7 +483,23 @@
close();
}
+
+/*!
+ SLOT for handle end of assync request.
*/
+void CommLauncherWidget::handleRequestOk(const QVariant& /*value*/)
+{
+ mPendingRequest = false;
+ emit requestCompleted();
+}
+
+/*!
+ Return true if any pending request is in progress (at the moment phone book my cart is open).
+*/
+bool CommLauncherWidget::isPendingRequest()
+{
+ return mPendingRequest;
+}
/*!
Opens contact card from phonebook to contact.
@@ -470,15 +511,21 @@
delete mRequest;
mRequest = NULL;
}
- mRequest = mApplicationManager->create("com.nokia.services.phonebookservices",
- "Fetch", "open(int)", false);
+ mRequest = mApplicationManager->create(XQI_CONTACTS_VIEW,
+ XQOP_CONTACTS_VIEW_CONTACT_CARD,
+ false);
+ mCleanupHandler.add(mRequest);
if (mRequest) {
- mRequest->setSynchronous(false);
+ mPendingRequest = true;
+ connect(mRequest, SIGNAL(requestOk(const QVariant&)),
+ this, SLOT(handleRequestOk(const QVariant&)));
+ mRequest->setSynchronous(false);
QList<QVariant> arguments;
arguments.append(QVariant(mContact->localId()));
mRequest->setArguments(arguments);
bool result = mRequest->send();
if (!result) {
+ mPendingRequest = false;
qDebug() << "Sending request failed: " << mRequest->lastErrorMessage();
}
} else {
@@ -498,22 +545,17 @@
delete mRequest;
mRequest = NULL;
}
- mRequest = mApplicationManager->create("com.nokia.services.phonebookservices",
- "Fetch", "editCreateNew(QString,QString)", false);
+
+ // Launching the phonebook to main view
+ mRequest = mApplicationManager->create("com.nokia.services.phonebookappservices",
+ "Launch", "launch()", false);
+ mCleanupHandler.add(mRequest);
if (mRequest) {
- QList<QVariant> arguments;
- QString type = QContactPhoneNumber::DefinitionName;
- arguments.append(QVariant( type ));
- arguments.append(QVariant( "" ));
- mRequest->setArguments(arguments);
-
- bool result = mRequest->send();
- if (!result) {
- qDebug() << "Sending request failed: " << mRequest->lastErrorMessage();
+ QVariant retValue(-1);
+ bool result = mRequest->send(retValue);
+ if (!result) {
+ qDebug() << "Sending request failed: " << mRequest->lastErrorMessage();
}
-
- } else {
- qDebug() << "Creating service request failed";
}
}
--- a/contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -31,7 +31,7 @@
#include <QPixmap>
#include <QGraphicsSceneMouseEvent>
#include <HbEvent>
-
+#include <xqaiwdecl.h>
#include <cntservicescontact.h>
#include <hbaction.h>
@@ -55,6 +55,18 @@
// Docml file
const QString contactWidgetDocml = ":/commlauncherwidget.docml";
+
+// TODO: THESE STRINGS ARE IN W32 SDK. THESE DEFINITIONS CAN BE REMOVED
+// WHEN EVERYBODY ARE USING IT OR LATER VERSION
+#ifndef XQI_CONTACTS_FETCH
+#define XQI_CONTACTS_FETCH QLatin1String("com.nokia.symbian.IContactsFetch")
+#endif
+#ifndef XQOP_CONTACTS_FETCH_SINGLE
+#define XQOP_CONTACTS_FETCH_SINGLE QLatin1String("singleFetch(QString,QString)")
+#endif
+
+
+
/*!
\class ContactWidgetHs
*/
@@ -76,13 +88,14 @@
mAppManager(0),
mContactSelectRequest(0),
mMainWindow(0),
- mThumbnailManager(0),
+ mThumbnailManager(new ThumbnailManager(this)),
mThumbnailPixmap(QPixmap()),
mThumbnailInProgress(false),
- mTranslator(0)
+ mTranslator(new HbTranslator(translationsPath, translationsFile)),
+ mAvatarIcon(0),
+ mPendingExit(false)
{
- // Localization file loading
- mTranslator = new HbTranslator(translationsPath, translationsFile);
+ // Localization file loading
mTranslator->loadCommon();
// UI creation done in onInitialize()
@@ -95,39 +108,36 @@
// avatar icon item has to be created without parent else the drawing goes wrong
mAvatarIconItem = new HbIconItem();
-
- //Create Communication launcher
+ mCleanupHandler.add(mAvatarIconItem);
+ //Create Communication launchernew
//Has to be created without parent, otherwise timout, dismissPolicy and modality have no effect
mLauncher = new CommLauncherWidget();
+ mCleanupHandler.add(mLauncher);
mLauncher->setTimeout(0);
mLauncher->setDismissPolicy(HbPopup::TapAnywhere);
mLauncher->setBackgroundFaded(false);
mLauncher->setModal(false);
mLauncher->hide();
// USE CONNECT WHEN THE LATCHED GRAPHICS IS IN THE PLATFORM
- //connect(mLauncher, SIGNAL(launcherClosed()),
- // this, SLOT(loadNormalLayout()));
-
- mAppManager = new XQApplicationManager();
+ connect(mLauncher, SIGNAL(launcherClosed()),
+ this, SLOT(loadNormalLayout()));
+ connect(mLauncher, SIGNAL(requestCompleted()),
+ this, SLOT(onRequestComplete()));
+ mAppManager = new XQApplicationManager();
ASSERT(mAppManager);
+ mCleanupHandler.add(mAppManager);
mLauncher->setApplicationManager(*mAppManager);
- // Thumbnail manager so we can handle large size images as contact avatars
- mThumbnailManager = new ThumbnailManager(this);
+ // Thumbnail manager so we can handle large size images as contact avatars
mThumbnailManager->setMode(ThumbnailManager::Default);
mThumbnailManager->setQualityPreference(ThumbnailManager::OptimizeForQuality);
mThumbnailManager->setThumbnailSize(ThumbnailManager::ThumbnailMedium );
- connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
+ connect(mThumbnailManager.data(), SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
this, SLOT(thumbnailReady(QPixmap, void*, int, int)));
- mWidgetFrameDrawer = new HbFrameDrawer(normalFrameName,
- HbFrameDrawer::NinePieces);
- ASSERT(mWidgetFrameDrawer);
-
- mShareFrameDrawer = new HbFrameDrawer(normalFrameName,
- HbFrameDrawer::NinePieces);
- ASSERT(mShareFrameDrawer);
+
+
}
/*!
@@ -135,37 +145,17 @@
*/
ContactWidgetHs::~ContactWidgetHs()
{
- if (mLauncher)
- {
- delete mLauncher;
- }
- if (mContactManager)
- {
- delete mContactManager;
- }
- if (mAppManager)
- {
- delete mAppManager;
- }
- if (mAvatar)
- {
- delete mAvatar;
- }
-
- // Deleting request cancels all pending requests
- if (mContactSelectRequest)
- {
- delete mContactSelectRequest;
- }
-
- if (mThumbnailManager)
- {
- delete mThumbnailManager;
- }
- if (mTranslator)
- {
- delete mTranslator;
- }
+
+}
+
+/*!
+ Slot for handle request complete
+ if pending exit was set , do it.
+*/
+void ContactWidgetHs::onRequestComplete()
+{
+ if (mPendingExit)
+ emit finished();
}
/*!
@@ -238,13 +228,13 @@
bool ContactWidgetHs::setContactImage(QPixmap& inputPixmap)
{
bool ret = false;
-
- HbFrameDrawer *avatarDrawer = new HbFrameDrawer("qtg_fr_hsshortcut_normal", HbFrameDrawer::NinePieces);
- ASSERT(avatarDrawer);
- // Try to load the image first, because setFrameGraphicsName() returns void.
- //,,mContactImageFileName = imageFile;
-
+ QScopedPointer<HbFrameDrawer> avatarDrawer( new HbFrameDrawer(defaultAvatar,
+ HbFrameDrawer::NinePieces));
+ //TODO: do check other way
+ // This assert must be commented because QScopedPointer not support it this way
+ //ASSERT(avatarDrawer.isNull());
+
ret=true;
qDebug() << "setContactImage av 0, inputsize " << inputPixmap.width() << "x" << inputPixmap.height();
@@ -256,8 +246,7 @@
avatarPixmap.fill(QColor(0, 0, 0, 0)); //transparent background
qDebug() << "setContactImage av 1"; //,,
- QPainter painter(&avatarPixmap);
- QStyleOptionGraphicsItem *item = new QStyleOptionGraphicsItem;
+ QPainter painter(&avatarPixmap);
avatarDrawer->paint(&painter, QRectF(0, 0, contactIconSize, contactIconSize));
painter.end();
qDebug() << "setContactImage av 2"; //,,
@@ -289,16 +278,17 @@
}
}
- HbIcon *avatarIcon = new HbIcon(QIcon(avatarPixmap));
-
- mAvatarIconItem->setIcon(*avatarIcon);
+
+ mAvatarIcon.reset(new HbIcon(QIcon(avatarPixmap)));
+
+ mAvatarIconItem->setIcon(*mAvatarIcon.data());
mAvatarIconItem->setSize(QSize(contactIconSize, contactIconSize));
mAvatarIconItem->setAspectRatioMode(Qt::KeepAspectRatio);
// Then display the new image
update();
qDebug() << "setContactImage av 3"; //,,
-
+
return ret;
}
@@ -308,10 +298,12 @@
bool ContactWidgetHs::setContactImage(const QString &imageFile)
{
bool ret = false;
-
- HbFrameDrawer *avatarDrawer = new HbFrameDrawer("qtg_fr_hsshortcut_normal", HbFrameDrawer::NinePieces);
- ASSERT(avatarDrawer);
-
+ QScopedPointer<HbFrameDrawer> avatarDrawer( new HbFrameDrawer(defaultAvatar,
+ HbFrameDrawer::NinePieces));
+ //TODO: do check other way
+ //This assert must be commented because QScopedPointer not support it this way
+ //ASSERT(avatarDrawer.isNull());
+
// Try to load the image first, because setFrameGraphicsName() returns void.
mContactImageFileName = imageFile;
qDebug() << "setContactImage ok " << imageFile;
@@ -331,24 +323,28 @@
avatarPixmap.fill(QColor(0, 0, 0, 0)); //transparent background
QPainter painter(&avatarPixmap);
- QStyleOptionGraphicsItem *item = new QStyleOptionGraphicsItem;
+
avatarDrawer->paint(&painter, QRectF(0, 0, contactIconSize, contactIconSize));
painter.end();
- HbIcon *avatarIcon = new HbIcon(QIcon(avatarPixmap));
+
+
+ mAvatarIcon.reset(new HbIcon(QIcon(avatarPixmap)));
// Add badge if needed
if (imageFile == addContactAvatar) {
HbIcon addIcon(addContactAvatar);
- QSizeF avatarSize = avatarIcon->size();
+ QSizeF avatarSize = mAvatarIcon->size();
addIcon.setSize(QSize(avatarSize.width()/2, avatarSize.height()/2));
- avatarIcon->addBadge(Qt::AlignTop | Qt::AlignRight, addIcon, 1);
+ mAvatarIcon->addBadge(Qt::AlignTop | Qt::AlignRight, addIcon, 1);
}
- mAvatarIconItem->setIcon(*avatarIcon);
+ mAvatarIconItem->setIcon(*mAvatarIcon.data());
// Then display the new image
update();
+
+
return ret;
}
@@ -376,8 +372,20 @@
const int textRow = 2;
const int rows = 4; // 4 using 2 margins
+ setContentsMargins(0, 0, 0, 0);
+
QGraphicsGridLayout *layout = new QGraphicsGridLayout(this);
+ mWidgetFrameDrawer = new HbFrameDrawer(normalFrameName,
+ HbFrameDrawer::NinePieces);
+ ASSERT(mWidgetFrameDrawer);
+
+ mShareFrameDrawer = new HbFrameDrawer(normalFrameName,
+ HbFrameDrawer::NinePieces);
+ ASSERT(mShareFrameDrawer);
+
+
+
// Widget frame
qreal corner = 1.5 * unit; // from shortcut widget layout spec: 1.5un
mWidgetFrameDrawer->setBorderWidths(corner, corner);
@@ -426,14 +434,20 @@
layout->setRowFixedHeight(textRow, fontSpec.textHeight());
layout->setRowFixedHeight(textRow+1, widgetMargin);
+ layout->setHorizontalSpacing(0.5);
+ layout->setVerticalSpacing(1.5);
+ layout->setContentsMargins(0, 0, 0, 0);
setLayout(layout);
// Widget size
- qreal sizeX = widgetMargin * 2 * unit; //margins from layout spec
- qreal sizeY = widgetMargin * 3 * unit; //margins from layout spec
+ qreal sizeX = widgetMargin * 2; // margins from layout spec
+ sizeX += contactIconSize;
+ sizeX += 1; // 2*0.5 horizontal spacing
+ qreal sizeY = widgetMargin * 2; // margins from layout spec
+ sizeY += contactIconSize;
sizeY += fontSpec.textHeight();
- sizeY += contactIconSize;
- sizeX += contactIconSize;
+ sizeY += 5; // 3*0.5 vertical spacing, 5 because 4.5 broke snaping
+
qDebug() << "widget sizex, sizey, unit, rows " << sizeX << sizeY << unit << rows;
@@ -444,10 +458,11 @@
QString ContactWidgetHs::getContactDisplayName(QContact& contact)
{
- QString name = mContactManager->synthesizedDisplayLabel(contact);
- if (name.isEmpty()) {
- name = hbTrId("txt_friend_widget_contact_unnamed");
- }
+ QString name = mContactManager->synthesizedContactDisplayLabel(contact);
+ if (name.isEmpty())
+ {
+ name = hbTrId("txt_friend_widget_contact_unnamed");
+ }
return name;
}
@@ -457,7 +472,7 @@
*/
void ContactWidgetHs::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
- Q_UNUSED(event);
+ Q_UNUSED(event);
}
/*!
@@ -492,11 +507,12 @@
}
}
} else if (!mLauncher->isVisible()) {
+ // Change the frame layout
+ loadLayout(latchedFrameName, latchedTextColor);
+
// create and show CommunicationsLauncher
createLauncherWithPosition();
mLauncher->show();
- // USE LOADLAYOUT-FUNCTION WHEN THE LATCHED GRAPHICS IS IN THE PLATFORM
- //loadLayout(latchedFrameName, latchedTextColor);
mLauncherRect = mLauncher->boundingRect();
qDebug() << "after exec rect() " << mLauncherRect;
@@ -528,9 +544,10 @@
for (int i=0; i<details.count(); i++)
{
if (details.at(i).imageUrl().isValid())
- {
- delete mAvatar;
- mAvatar = new QContactAvatar(details.at(i));
+ {
+
+ mAvatar.reset( new QContactAvatar(details.at(i)));
+ //mCleanupHandler.add(mAvatar);
avatarFile = mAvatar->imageUrl().toString(); //,,remove this once tn is working
mThumbnailInProgress = true;
@@ -576,6 +593,7 @@
}
qDebug() << "createContactManager() backend " << sBackend;
mContactManager = new QContactManager(sBackend);
+ mCleanupHandler.add(mContactManager);
if (mContactManager->error()) {
qDebug() << "cm can't connect to backend " << sBackend;
} else { // connect contact change observation
@@ -690,19 +708,15 @@
qDebug() << "- launchSingleContactSelecting() starts"; //,,
mContactLocalId = unUsedContactId;
- /* TODO! THIS SERVICE WILL BE RENAMED TO com.nokia.services.phonebook.Services */
- mContactSelectRequest = mAppManager->create(
- "com.nokia.services.phonebookservices",
- "Fetch",
- "Dofetch(QString,QString,QString,QString)",
- false);
+ mContactSelectRequest = mAppManager->create(XQI_CONTACTS_FETCH,
+ XQOP_CONTACTS_FETCH_SINGLE,
+ false);
+ mCleanupHandler.add(mContactSelectRequest);
connect(mContactSelectRequest, SIGNAL(requestOk(QVariant)),
this, SLOT(onContactSelectCompleted(QVariant)));
QList<QVariant> args;
args << hbTrId("txt_friend_widget_title_select_contact");
args << KCntActionAll;
- args << KCntFilterDisplayAll;
- args << KCntSingleSelectionMode;
mContactSelectRequest->setArguments(args);
qDebug() << "---- setArgs done ---------------------"; //,,28.5.
@@ -800,15 +814,18 @@
mAvatarIconItem->deleteLater();
mContactNameLabel->deleteLater();
- mAppManager->deleteLater();
- mLauncher->deleteLater();
+
mContactLocalId = unUsedContactId;
- delete mAvatar;
+
mContactHasAvatarDetail = false;
- mContactManager->deleteLater();
- mThumbnailManager->deleteLater();
+
- emit finished();
+ if (!mLauncher->isPendingRequest()){
+ emit finished();
+ }
+ else {
+ mPendingExit = true;
+ }
break;
}
}
@@ -862,10 +879,10 @@
void ContactWidgetHs::loadLayout(const QString frameName, const QString textColor)
{
mWidgetFrameDrawer->setFrameGraphicsName(frameName);
- mWidgetFrameDrawer->themeChanged();
+// mWidgetFrameDrawer->themeChanged();
mShareFrameDrawer->setFrameGraphicsName(frameName);
- mShareFrameDrawer->themeChanged();
+// mShareFrameDrawer->themeChanged();
QColor color = HbColorScheme::color(textColor);
mContactNameLabel->setTextColor(color);
--- a/contactwidgethsplugin/contactwidgethsplugin.pro Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgethsplugin.pro Fri Sep 17 08:27:32 2010 +0300
@@ -57,9 +57,22 @@
# xml files for emulator, sisx and hw rom
BLD_INF_RULES.prj_exports += "./resource/contactwidgethsplugin.xml z:$$PLUGIN_SUBDIR/contactwidgethsplugin.xml"
+ BLD_INF_RULES.prj_exports += "./resource/qtg_large_friend.svg z:$$PLUGIN_SUBDIR/qtg_large_friend.svg"
+
# copy iby file
BLD_INF_RULES.prj_exports += "./rom/contactwidgeths.iby CORE_APP_LAYER_IBY_EXPORT_PATH(contactwidgeths.iby)"
BLD_INF_RULES.prj_exports += "./rom/contactwidgeths_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(contactwidgeths_resources.iby)"
+
+
+ contactwidgethsplugin_buildstubsis_extension = \
+ "$${LITERAL_HASH}ifdef MARM" \
+ " START EXTENSION app-services/buildstubsis" \
+ " OPTION SRCDIR ." \
+ " OPTION SISNAME contactwidgethsplugin_stub" \
+ " END" \
+ "$${LITERAL_HASH}endif"
+
+ BLD_INF_RULES.prj_extensions += contactwidgethsplugin_buildstubsis_extension
}
symbian {
@@ -67,6 +80,21 @@
ICON = qtg_large_friend.svg
# themable icon for application library
SKINICON = qtg_large_friend
-}
+
+ DESTDIR = /private/20022F35/import/widgetregistry/2002C353
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+ # plugins.path = $${DESTDIR}
+ # plugins.sources = $${TARGET}.dll
+
+ widgetResources.path = $${DESTDIR}
+ widgetResources.sources += resource/$${TARGET}.xml
+ widgetResources.sources += resource/$${TARGET}.manifest
+ widgetResources.sources += resource/qtg_large_friend.svg
+ widgetResources.sources += resource/qtg_graf_hswidget_preview_contact.svg
+ # widgetResources.sources += resource/$${TARGET}.svg
+
+ DEPLOYMENT += plugins \
+ widgetResources
+}
include(contactwidgethsplugin.pri)
--- a/contactwidgethsplugin/resource/contactwidgethsplugin.manifest Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/resource/contactwidgethsplugin.manifest Fri Sep 17 08:27:32 2010 +0300
@@ -3,7 +3,8 @@
<uri>contactwidgethsplugin</uri>
<title>txt_long_caption_friend</title>
<description>txt_friend_widget_dblist_friend_widget_val_quickly</description>
- <icon>qtg_large_friend</icon>
+ <icon>qtg_large_friend.svg</icon>
+ <previewimage>qtg_graf_hswidget_preview_contact.svg</previewimage>
<hidden>false</hidden>
<servicexml>contactwidgethsplugin.xml</servicexml>
<translationfile>contactwidgethsplugin</translationfile>
--- a/contactwidgethsplugin/rom/contactwidgeths.iby Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/rom/contactwidgeths.iby Fri Sep 17 08:27:32 2010 +0300
@@ -26,7 +26,7 @@
data=ZPRIVATE\20022f35\import\widgetregistry\2002C353\contactwidgethsplugin.xml private\20022f35\import\widgetregistry\2002C353\contactwidgethsplugin.xml
data=ZPRIVATE\20022f35\import\widgetregistry\2002C353\qtg_large_friend.svg private\20022f35\import\widgetregistry\2002C353\qtg_large_friend.svg
+data=ZPRIVATE\20022f35\import\widgetregistry\2002C353\qtg_graf_hswidget_preview_contact.svg private\20022f35\import\widgetregistry\2002C353\qtg_graf_hswidget_preview_contact.svg
-data=DATAZ_\APP_RESOURCE_DIR\contactwidgethsplugin.rsc APP_RESOURCE_DIR\contactwidgethsplugin.rsc
-
+data=ZSYSTEM\Install\contactwidgethsplugin_stub.sis \system\install\contactwidgethsplugin_stub.sis
#endif //__CONTACTWIDGETHSPLUGIN_IBY__
--- a/inc/cntdebug.h Thu Sep 02 20:16:15 2010 +0300
+++ b/inc/cntdebug.h Fri Sep 17 08:27:32 2010 +0300
@@ -23,7 +23,7 @@
#include <QtGlobal> // qDebug()
// #define TRACK_MEMORY_LEAKS
-#define TRACES
+// #define TRACES
// #define TRACE2FILE
/*!
--- a/package_definition.xml Thu Sep 02 20:16:15 2010 +0300
+++ b/package_definition.xml Fri Sep 17 08:27:32 2010 +0300
@@ -1,26 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
- <package id="contacts" name="Contacts Apps" levels="engine support services ui">
- <collection id="phonebookengines" name="Phonebook Engines" level="engine">
- <component id="contactsmodel" name="Contacts Model" introduced="ER5" purpose="optional">
+<SystemDefinition schema="3.0.0" xmlns:qt="http://www.nokia.com/qt">
+ <package id="contacts" name="Contacts Apps" levels="engine support services plugin ui">
+ <collection id="contacts_plat" name="Contacts Apps Platform Interfaces" level="ui">
+ <!-- none of these APIs are built here. Are they on the way in, way out or just built elsewhere?-->
+ <component id="contacts_services_api" name="Contacts Services API" class="api" filter="s60" introduced="^4">
+ <unit base="contacts_plat/contacts_services_api"/>
+ </component>
+ <component id="contacts_ui_api" name="Contacts UI API" class="api" filter="s60" introduced="^4">
+ <unit base="contacts_plat/contacts_ui_api"/>
+ </component>
+ <component id="contacts_ui_extensions_api" name="Contacts UI Extensions API" class="api" filter="s60" introduced="^4">
+ <unit base="contacts_plat/contacts_ui_extensions_api"/>
+ </component>
+ <component id="presence_cache_api" name="Presence Cache API" class="api" filter="s60">
+ <meta rel="Api" href="contacts_plat/presence_cache_api/presence_cache_api.metaxml"/>
+ <unit base="contacts_plat/presence_cache_api"/>
+ </component>
+ </collection>
+ <collection id="phonebookui" name="Phonebook UI" level="ui">
+ <component id="cnthistorymodel" filter="s60" name="Contacts History Model" introduced="^4">
+ <!--<unit bldFile="phonebookui/cnthistorymodel" qt:proFile="cnthistorymodel.pro"/> -->
+ </component>
+ <component id="pbkcommonui" filter="s60" name="Phonebook Common UI" introduced="^4">
+ <!--<unit bldFile="phonebookui/pbkcommonui" qt:proFile="pbkcommonui.pro"/> -->
+ </component>
+ <component id="phonebookapp" filter="s60" name="Phonebook Application" introduced="^4">
+ <!--<unit bldFile="phonebookui/phonebookapp" qt:proFile="phonebookapp.pro"/> -->
+ </component>
+ <component id="phonebookservices" filter="s60" name="Phonebook Services" introduced="^4">
+ <!--<unit bldFile="phonebookui/phonebookservices" qt:proFile="phonebookservices.pro"/> -->
+ </component>
+ <component id="phonebookui_build" filter="s60" name="Phonebook UI Build" introduced="^4">
+ <!-- break up into components -->
+ <unit bldFile="phonebookui" qt:proFile="phonebookui.pro"/>
+ </component>
+ </collection>
+ <collection id="phonebookengines_old" name="Old Phonebook Engines" level="engine">
+ <component id="contactsmodel" name="Contacts Model" introduced="ER5" purpose="optional">
<unit version="2" bldFile="phonebookengines_old/contactsmodel/groupsql" mrp="phonebookengines_old/contactsmodel/groupsql/app-engines_cntmodel.mrp"/>
- </component>
- </collection>
- <collection id="pimprotocols" name="PIM Protocols" level="services">
- <component id="phonebooksync" name="Phonebook Sync" purpose="optional" class="plugin">
- <unit bldFile="pimprotocols/phonebooksync/group" mrp="pimprotocols/phonebooksync/group/telephony_phbksync.mrp"/>
- </component>
- <component id="mtpcontactdp" filter="s60" name="Media Transport Protocol contact Data Provider" introduced="9.2" purpose="optional">
- <unit bldFile="pimprotocols/mtpcontactdp/group" mrp="pimprotocols/mtpcontactdp/group/mtp_contactdp.mrp"/>
- </component>
- <component id="pbap" filter="s60" name="Bluetooth PBAP" introduced="9.2" purpose="optional">
- <unit bldFile="pimprotocols/pbap/group" mrp="pimprotocols/pbap/group/bluetooth_accesshost.mrp"/>
- </component>
- </collection>
- <collection id="contacts_info" name="Contacts Apps Info" level="ui">
- <component id="contacts_metadata" name="Contacts Apps Metadata" class="config" introduced="^2" purpose="development" target="desktop">
- <unit mrp="contacts_info/contacts_metadata/contacts_metadata.mrp"/>
- </component>
- </collection>
- </package>
+ </component>
+ </collection>
+ <collection id="phonebookengines" name="Phonebook Engines" level="engine">
+ <component id="cntfindplugin" filter="s60" name="Contacts Find Plugin" class="plugin" introduced="^2">
+ <unit bldFile="phonebookengines/cntfindplugin" qt:proFile="cntfindplugin.pro"/>
+ </component>
+ <component id="cntsortplugin" filter="s60" name="Contacts Sort Plugin" class="plugin" introduced="^2">
+ <unit bldFile="phonebookengines/cntsortplugin" qt:proFile="cntsortplugin.pro"/>
+ </component>
+ <component id="qtcontactsmobility" filter="s60" name="Qt Contacts Mobility" class="plugin" introduced="^4">
+ <!-- need to move to this actual dir rather than including something from another collection -->
+ <!-- <unit bldFile="qtcontactsmobility" qt:proFile="qtcontactsmobility.pro"/> -->
+ </component>
+ <component id="cntlistmodel" filter="s60" name="Contact List Model" introduced="^4">
+ <unit bldFile="phonebookengines/cntlistmodel" qt:proFile="cntlistmodel.pro"/>
+ </component>
+ <component id="cntactions" filter="s60" name="Contacts Actions" introduced="^4">
+ <unit bldFile="phonebookengines/cntactions" qt:proFile="cntactions.pro"/>
+ </component>
+ <component id="cntmaptileservice" filter="s60" name="Contacts Map Tile Service" introduced="^4">
+ <unit bldFile="phonebookengines/cntmaptileservice" qt:proFile="cntmaptileservice.pro"/>
+ </component>
+ <component id="cntsimutility" filter="s60" name="Contacts SIM Utility" introduced="^4">
+ <unit bldFile="phonebookengines/cntsimutility" qt:proFile="cntsimutility.pro"/>
+ </component>
+ <component id="cntimageutility" name="Contacts Image Utility" filter="s60" introduced="^4">
+ <unit bldFile="phonebookengines/cntimageutility" qt:proFile="cntimageutility.pro"/>
+ </component>
+ </collection>
+ <collection id="pimprotocols" name="PIM Protocols" level="services">
+ <component id="phonebooksync" name="Phonebook Sync" purpose="optional" class="plugin">
+ <unit bldFile="pimprotocols/phonebooksync/group" mrp="pimprotocols/phonebooksync/group/telephony_phbksync.mrp"/>
+ </component>
+ <component id="pbap" filter="s60" name="Bluetooth PBAP" introduced="9.2" purpose="optional">
+ <unit bldFile="pimprotocols/pbap/group" mrp="pimprotocols/pbap/group/bluetooth_accesshost.mrp"/>
+ </component>
+ </collection>
+ <collection id="presencecache" name="Presence Cache" level="support">
+ <component id="presencecachesymbian" filter="s60" name="Presence Cache Symbian" introduced="^4">
+ <unit bldFile="presencecache/presencecachesymbian" qt:proFile="presencecachesymbian.pro"/>
+ </component>
+ <component id="presencecacheqt" filter="s60" name="Presence Cache Qt" introduced="^4">
+ <unit bldFile="presencecache/presencecacheqt" qt:proFile="presencecacheqt.pro"/>
+ </component>
+ </collection>
+ <collection id="contactwidgethsplugin" name="Contact Widget Homescreen Plugin" level="plugin">
+ <!-- collection is really a component, move down a directory -->
+ <component id="contactwidgethsplugin_build" name="Contact Widget Homescreen Plugin Build" introduced="^4" filter="s60">
+ <unit bldFile="contactwidgethsplugin" qt:proFile="contactwidgethsplugin.pro"/>
+ </component>
+ </collection>
+ </package>
</SystemDefinition>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/package_map.xml Fri Sep 17 08:27:32 2010 +0300
@@ -0,0 +1,1 @@
+<PackageMap root="sf" layer="app"/>
--- a/phonebookengines/cntactions/src/cntaction.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntactions/src/cntaction.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -160,28 +160,35 @@
//common code to perform a call, videocall action
void CntAction::performNumberAction(const QString &interface, const QString &operation)
{
+ QVariantList args;
QVariant retValue;
- // XQApplicationManager is not supported by PhoneUI to initiate calls,
- // only old approarch using XQServiceRequest can be used.
- XQServiceRequest snd(interface, operation); //sync request
+ delete m_request;
+ m_request = NULL;
+ m_request = m_AppManager.create(interface, operation, false); // not embedded
+ if (!m_request) {
+ emitResult(GeneralError, retValue);
+ return;
+ }
//QContactType == TypeGroup
if (QContactType::TypeGroup == m_contact.type()) {
QContactPhoneNumber conferenceCall = m_contact.detail<QContactPhoneNumber>();
-
- snd << conferenceCall.number() << m_contact.localId() << m_contact.displayLabel();
- snd.send(retValue);
- emitResult(snd.latestError(), retValue);
+ args << conferenceCall.number() << m_contact.localId() << m_contact.displayLabel();
+ m_request->setArguments(args);
+ m_request->setSynchronous(true);
+ m_request->send(retValue);
+ emitResult(m_request->lastError(), retValue);
}
//QContactType == TypeContact
//detail exist use it
else if (m_detail.definitionName() == QContactPhoneNumber::DefinitionName) {
const QContactPhoneNumber &phoneNumber = static_cast<const QContactPhoneNumber &>(m_detail);
-
- snd << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel();
- snd.send(retValue);
- emitResult(snd.latestError(), retValue);
+ args << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel();
+ m_request->setArguments(args);
+ m_request->setSynchronous(true);
+ m_request->send(retValue);
+ emitResult(m_request->lastError(), retValue);
}
//QContactType == TypeContact
//if no detail, pick preferred
@@ -200,9 +207,11 @@
phoneNumber = static_cast<QContactPhoneNumber>(detail);
}
- snd << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel();
- snd.send(retValue);
- emitResult(snd.latestError(), retValue);
+ args << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel();
+ m_request->setArguments(args);
+ m_request->setSynchronous(true);
+ m_request->send(retValue);
+ emitResult(m_request->lastError(), retValue);
}
//else return an error
else {
--- a/phonebookengines/cntactions/src/cntmessageaction.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntactions/src/cntmessageaction.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -76,7 +76,7 @@
if (QContactType::TypeGroup == m_contact.type()) {
QString interface("com.nokia.symbian.IMessageSend");
QString operation("send(QVariantMap,QString)");
- m_request = m_AppManager.create(interface, operation, false); // not embedded
+ m_request = m_AppManager.create(interface, operation, true); // embedded
if (m_request==NULL) {
emitResult(GeneralError, retValue);
return;
@@ -104,7 +104,7 @@
else if (m_detail.definitionName() == QContactPhoneNumber::DefinitionName) {
QString interface("com.nokia.symbian.IMessageSend");
QString operation("send(QString,qint32,QString)");
- m_request = m_AppManager.create(interface, operation, false); // not embedded
+ m_request = m_AppManager.create(interface, operation, true); // embedded
if (m_request==NULL) {
emitResult(GeneralError, retValue);
return;
--- a/phonebookengines/cntlistmodel/inc/cntcache_p.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/inc/cntcache_p.h Fri Sep 17 08:27:32 2010 +0300
@@ -127,7 +127,7 @@
ThumbnailManager* mThumbnailManager; // for fetching icons
// maps info providers to their responsibilities
- QMap<CntInfoProvider*, ContactInfoFields> mDataProviders;
+ QMap<CntInfoProvider*, ContactInfoFields> mInfoProviders;
QMutex mJobMutex; // guards access to the job lists
bool mStarted; // true when thread has been started
--- a/phonebookengines/cntlistmodel/src/cntcache.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/src/cntcache.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -92,8 +92,6 @@
qDeleteAll(mIconCache);
mIconCache.clear();
- mInstance = NULL;
-
CNT_EXIT
}
@@ -651,6 +649,7 @@
{
CNT_ENTRY
+ mInstance = NULL;
deleteLater();
CNT_EXIT
--- a/phonebookengines/cntlistmodel/src/cntcache_p.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/src/cntcache_p.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -64,8 +64,8 @@
CNT_ENTRY
// create static provider plugins
- mDataProviders.insert(new CntDefaultInfoProvider(), ContactInfoAllFields);
- mDataProviders.insert(new CntPresenceInfoProvider(), ContactInfoIcon2Field);
+ mInfoProviders.insert(new CntDefaultInfoProvider(), ContactInfoAllFields);
+ mInfoProviders.insert(new CntPresenceInfoProvider(), ContactInfoIcon2Field);
// load dynamic provider plugins
QDir pluginsDir(CNT_INFO_PROVIDER_EXTENSION_PLUGIN_DIRECTORY);
@@ -80,13 +80,13 @@
if (factory)
{
CntInfoProvider *provider = factory->infoProvider();
- mDataProviders.insert(provider, provider->supportedFields());
+ mInfoProviders.insert(provider, provider->supportedFields());
}
}
}
// connect the providers
- QMapIterator<CntInfoProvider*, ContactInfoFields> i(mDataProviders);
+ QMapIterator<CntInfoProvider*, ContactInfoFields> i(mInfoProviders);
while (i.hasNext()) {
i.next();
connect(static_cast<CntInfoProvider*>(i.key()),
@@ -130,8 +130,8 @@
delete mThumbnailManager;
mThumbnailManager = NULL;
- qDeleteAll(mDataProviders.keys());
- mDataProviders.clear();
+ qDeleteAll(mInfoProviders.keys());
+ mInfoProviders.clear();
mJobMutex.unlock();
@@ -339,7 +339,7 @@
QContact contact = mContactManager->contact(contactId, restrictions);
// request contact info from providers
- QMapIterator<CntInfoProvider*, ContactInfoFields> i(mDataProviders);
+ QMapIterator<CntInfoProvider*, ContactInfoFields> i(mInfoProviders);
while (i.hasNext()) {
i.next();
if (i.value() != 0) {
@@ -388,9 +388,9 @@
// 1) the sender is in the list of providers
// 2) exactly one field bit is set in parameter 'field'
// 3) the field bit has been assigned to this provider
- if (mDataProviders.contains(sender)
+ if (mInfoProviders.contains(sender)
&& ((field & (field - 1)) == 0)
- && ((field & mDataProviders.value(sender)) != 0)) {
+ && ((field & mInfoProviders.value(sender)) != 0)) {
emit infoFieldUpdated(contactId, field, text);
}
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/inc/ut_cntlistmodel.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/inc/ut_cntlistmodel.h Fri Sep 17 08:27:32 2010 +0300
@@ -34,6 +34,9 @@
private:
void contactReady(int start, int end);
+ QContact createContact(const QString& firstName, const QString& lastName);
+ void addGroupMember(const QContact& group, const QContact& contact);
+ void removeGroupMember(const QContact& group, const QContact& contact);
private slots:
void initTestCase();
@@ -43,7 +46,9 @@
void rowCount();
void contact();
+ void contactId();
void indexOfContact();
+ void indexOfContactId();
void contactManager();
void setFilter();
void myCard();
@@ -55,6 +60,7 @@
void handleChanged();
void handleRemoved();
void handleMyCardChanged();
+ void handleRelationships();
void cleanupTestCase();
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/main.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/main.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -65,6 +65,7 @@
printf("Press any key...\n");
getchar();
}
+
return 0;
}
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntcache.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntcache.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -21,6 +21,7 @@
void TestCntCache::initTestCase()
{
+ // get contact manager
mContactManager = new QContactManager("symbian");
// start with a clean database
@@ -65,15 +66,11 @@
QVERIFY(cache->mContactManager != NULL);
QVERIFY(worker->mContactManager != NULL);
QVERIFY(worker->mThumbnailManager != NULL);
- QVERIFY(!worker->mStarted);
- QVERIFY(!worker->mProcessingJobs);
- QVERIFY(!worker->mPostponeJobs);
- QVERIFY(worker->mDataProviders.count() >= 1);
+ QVERIFY(worker->mInfoProviders.count() >= 1);
// test deletion
cache->onShutdown();
- QVERIFY(cache == NULL);
- QVERIFY(worker == NULL);
+ QVERIFY(CntCache::mInstance == NULL);
}
/*
@@ -158,7 +155,7 @@
}
QVERIFY(cacheItemCount == 2*2); // two images, both used by two contacts
- delete cache;
+ cache->onShutdown();
}
/*
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdefaultinfoprovider.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdefaultinfoprovider.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -52,7 +52,8 @@
fields = ContactInfoIcon1Field | ContactInfoTextField;
mCntDefaultInfoProvider->requestInfo(c, fields);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.count(), 2);
+ spy.clear();
QContactPhoneNumber number;
number.setNumber("1234567");
@@ -61,20 +62,26 @@
c.saveDetail(&number);
mCntDefaultInfoProvider->requestInfo(c, fields);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.count(), 2);
spy.clear();
c.setPreferredDetail("call", number);
+
+ QContactPhoneNumber number2;
+ number2.setNumber("7654321");
+ number2.setContexts(QContactDetail::ContextWork);
+ number2.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+ c.saveDetail(&number2);
mCntDefaultInfoProvider->requestInfo(c, fields);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.count(), 2);
spy.clear();
QContactAvatar avatar;
c.saveDetail(&avatar);
mCntDefaultInfoProvider->requestInfo(c, fields);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.count(), 2);
spy.clear();
avatar.setImageUrl(QUrl("dummyavatar"));
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdisplaytextformatter.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdisplaytextformatter.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -21,7 +21,7 @@
void TestCntDisplayTextFormatter::testFormatter()
{
- QColor color = HbColorScheme::color("qtc_lineedit_selected ");
+ QColor color = HbColorScheme::color("qtc_lineedit_selected");
QColor bg = HbColorScheme::color("qtc_lineedit_marker_normal");
QString foo = QString("<span style=\"background-color:%1;color:%2\">f</span>oo").arg(bg.name().toUpper()).arg(color.name().toUpper());
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntlistmodel.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntlistmodel.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -234,6 +234,14 @@
QVERIFY(!c.isEmpty());
}
+void TestCntListModel::contactId()
+{
+ QModelIndex modelIndex = mCntModel->index(1, 0);
+ QContact c = mCntModel->contact(modelIndex);
+
+ QVERIFY(mCntModel->contactId(modelIndex) == c.localId());
+}
+
void TestCntListModel::indexOfContact()
{
QModelIndex modelIndex = mCntModel->index(1, 0);
@@ -242,6 +250,14 @@
QVERIFY(mCntModel->indexOfContact(c) == modelIndex);
}
+void TestCntListModel::indexOfContactId()
+{
+ QModelIndex modelIndex = mCntModel->index(1, 0);
+ QContact c = mCntModel->contact(modelIndex);
+
+ QVERIFY(mCntModel->indexOfContactId(c.localId()) == modelIndex);
+}
+
void TestCntListModel::contactManager()
{
QVERIFY(mManager == &(mCntModel->contactManager()));
@@ -278,7 +294,7 @@
QModelIndex modelIndex = mCntModel->indexOfContact(c);
QVERIFY(modelIndex.row() < 0);
QVERIFY(mCntModel->d->m_filter == unionFilter);
- QVERIFY(mCntModel->d->m_sortOrders.count() == 3);
+ QVERIFY(mCntModel->d->m_sortOrders.count() == 2);
}
void TestCntListModel::myCard()
@@ -455,6 +471,106 @@
QVERIFY(mCntModel->d->m_myCardId == c.localId());
}
+void TestCntListModel::handleRelationships()
+{
+ // remove all contacts
+ QList<QContactLocalId> ids = mManager->contactIds();
+ QMap<int, QContactManager::Error> errorMap;
+ mManager->removeContacts(ids,&errorMap);
+ QTest::qWait(1000);
+
+ // create group "myGroup"
+ QContact group;
+ group.setType(QContactType::TypeGroup);
+ QContactName groupName;
+ groupName.setCustomLabel("myGroup");
+ group.saveDetail(&groupName);
+ mManager->saveContact(&group);
+
+ // create a relationship filter
+ QContactRelationshipFilter groupFilter;
+ groupFilter.setRelationshipType(QContactRelationship::HasMember);
+ groupFilter.setRelatedContactRole(QContactRelationship::First);
+ groupFilter.setRelatedContactId(group.id());
+
+ // create new listmodel
+ CntListModel* groupListModel = new CntListModel(mManager, groupFilter, false);
+ QVERIFY(groupListModel != NULL);
+
+ QCOMPARE(groupListModel->rowCount(), 0);
+
+ // create contacts
+ QList<QContact> contacts;
+ contacts << createContact("Alfa", "One");
+ contacts << createContact("Beta", "Two");
+ contacts << createContact("Gamma", "Three");
+ QTest::qWait(1000);
+ QCOMPARE(groupListModel->rowCount(), 0);
+
+ // add contacts to group
+ foreach (QContact contact, contacts) {
+ addGroupMember(group, contact);
+ }
+ QTest::qWait(1000);
+ QCOMPARE(groupListModel->rowCount(), 3);
+
+ // remove contact from group
+ removeGroupMember(group, contacts.at(1));
+ QTest::qWait(1000);
+ QCOMPARE(groupListModel->rowCount(), 2);
+
+ // add and remove empty list
+ QList<QContactLocalId> emptyList;
+ emptyList << group.localId();
+ mCntModel->handleAddedRelationship(emptyList);
+ QCOMPARE(groupListModel->rowCount(), 2);
+ mCntModel->handleRemovedRelationship(emptyList);
+ QCOMPARE(groupListModel->rowCount(), 2);
+
+ // verify that contact on second row is "Gamma Three" (comes after "Alfa One"
+ // regardless of sorting type and Beta Two was removed)
+ QVERIFY(groupListModel->indexOfContact(contacts.at(0)).row() == 0);
+ QVERIFY(groupListModel->indexOfContact(contacts.at(1)).row() == -1);
+ QVERIFY(groupListModel->indexOfContact(contacts.at(2)).row() == 1);
+
+ // create a contact and make sure list model count does not change
+ createContact("Delta", "Four");
+ QTest::qWait(1000);
+ QCOMPARE(groupListModel->rowCount(), 2);
+
+ delete groupListModel;
+}
+
+QContact TestCntListModel::createContact(const QString& firstName, const QString& lastName)
+{
+ QContact contact;
+ QContactName name;
+ name.setFirstName(firstName);
+ name.setLastName(lastName);
+ contact.saveDetail(&name);
+ mManager->saveContact(&contact);
+
+ return contact;
+}
+
+void TestCntListModel::addGroupMember(const QContact& group, const QContact& contact)
+{
+ QContactRelationship relationship;
+ relationship.setRelationshipType(QContactRelationship::HasMember);
+ relationship.setFirst(group.id());
+ relationship.setSecond(contact.id());
+ mManager->saveRelationship(&relationship);
+}
+
+void TestCntListModel::removeGroupMember(const QContact& group, const QContact& contact)
+{
+ QContactRelationship relationship;
+ relationship.setRelationshipType(QContactRelationship::HasMember);
+ relationship.setFirst(group.id());
+ relationship.setSecond(contact.id());
+ mManager->removeRelationship(relationship);
+}
+
void TestCntListModel::cleanupTestCase()
{
mCntModel->d->m_cache->onShutdown();
--- a/phonebookengines/cntsimutility/inc/cntsimutility.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntsimutility/inc/cntsimutility.h Fri Sep 17 08:27:32 2010 +0300
@@ -89,12 +89,14 @@
bool AdnStorePresent;
bool SdnStorePresent;
bool FdnStorePresent;
+ bool OnStorePresent;
AvailableStores() {
SimPresent = false;
AdnStorePresent = false;
SdnStorePresent = false;
FdnStorePresent = false;
+ OnStorePresent = false;
};
};
--- a/phonebookengines/cntsimutility/src/cntsimutility.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntsimutility/src/cntsimutility.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -450,6 +450,13 @@
else {
availableStores->FdnStorePresent = false;
}
+
+ if (m_serviceTable.iServices17To24 & RMobilePhone::KUstMSISDN) {
+ availableStores->OnStorePresent = true;
+ }
+ else {
+ availableStores->OnStorePresent = false;
+ }
}
else if (m_serviceTableType == RMobilePhone::ESIMServiceTable) {
//ADN store is always present if SIM card is inserted
@@ -468,6 +475,13 @@
else {
availableStores->FdnStorePresent = false;
}
+
+ if (m_serviceTable.iServices9To16 & RMobilePhone::KSstMSISDN) {
+ availableStores->OnStorePresent = true;
+ }
+ else {
+ availableStores->OnStorePresent = false;
+ }
}
}
--- a/phonebookui/bwins/cnthistorymodelu.def Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/bwins/cnthistorymodelu.def Fri Sep 17 08:27:32 2010 +0300
@@ -6,12 +6,12 @@
?doBeginInsertRows@CntHistoryModel@@AAEXABVQModelIndex@@HH@Z @ 5 NONAME ; void CntHistoryModel::doBeginInsertRows(class QModelIndex const &, int, int)
??1CntHistoryModel@@UAE@XZ @ 6 NONAME ; CntHistoryModel::~CntHistoryModel(void)
?doEndRemoveRows@CntHistoryModel@@AAEXXZ @ 7 NONAME ; void CntHistoryModel::doEndRemoveRows(void)
- ?qt_metacast@CntHistoryModel@@UAEPAXPBD@Z @ 8 NONAME ; void * CntHistoryModel::qt_metacast(char const *)
- ?metaObject@CntHistoryModel@@UBEPBUQMetaObject@@XZ @ 9 NONAME ; struct QMetaObject const * CntHistoryModel::metaObject(void) const
- ?doBeginRemoveRows@CntHistoryModel@@AAEXABVQModelIndex@@HH@Z @ 10 NONAME ; void CntHistoryModel::doBeginRemoveRows(class QModelIndex const &, int, int)
- ?qt_metacall@CntHistoryModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 11 NONAME ; int CntHistoryModel::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?staticMetaObject@CntHistoryModel@@2UQMetaObject@@B @ 12 NONAME ; struct QMetaObject const CntHistoryModel::staticMetaObject
- ?sort@CntHistoryModel@@UAEXHW4SortOrder@Qt@@@Z @ 13 NONAME ; void CntHistoryModel::sort(int, enum Qt::SortOrder)
+ ?doBeginResetModel@CntHistoryModel@@AAEXXZ @ 8 NONAME ; void CntHistoryModel::doBeginResetModel(void)
+ ?qt_metacast@CntHistoryModel@@UAEPAXPBD@Z @ 9 NONAME ; void * CntHistoryModel::qt_metacast(char const *)
+ ?metaObject@CntHistoryModel@@UBEPBUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const * CntHistoryModel::metaObject(void) const
+ ?doBeginRemoveRows@CntHistoryModel@@AAEXABVQModelIndex@@HH@Z @ 11 NONAME ; void CntHistoryModel::doBeginRemoveRows(class QModelIndex const &, int, int)
+ ?qt_metacall@CntHistoryModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 12 NONAME ; int CntHistoryModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?staticMetaObject@CntHistoryModel@@2UQMetaObject@@B @ 13 NONAME ; struct QMetaObject const CntHistoryModel::staticMetaObject
?trUtf8@CntHistoryModel@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString CntHistoryModel::trUtf8(char const *, char const *)
?d_func@CntHistoryModel@@ABEPBVCntHistoryModelPrivate@@XZ @ 15 NONAME ; class CntHistoryModelPrivate const * CntHistoryModel::d_func(void) const
?tr@CntHistoryModel@@SA?AVQString@@PBD0H@Z @ 16 NONAME ; class QString CntHistoryModel::tr(char const *, char const *, int)
@@ -23,5 +23,6 @@
?markAllAsSeen@CntHistoryModel@@QAEXXZ @ 22 NONAME ; void CntHistoryModel::markAllAsSeen(void)
??0CntHistoryModel@@QAE@IPAVQContactManager@QtMobility@@PAVQObject@@@Z @ 23 NONAME ; CntHistoryModel::CntHistoryModel(unsigned int, class QtMobility::QContactManager *, class QObject *)
?data@CntHistoryModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 24 NONAME ; class QVariant CntHistoryModel::data(class QModelIndex const &, int) const
- ??_ECntHistoryModel@@UAE@I@Z @ 25 NONAME ; CntHistoryModel::~CntHistoryModel(unsigned int)
+ ?doEndResetModel@CntHistoryModel@@AAEXXZ @ 25 NONAME ; void CntHistoryModel::doEndResetModel(void)
+ ??_ECntHistoryModel@@UAE@I@Z @ 26 NONAME ; CntHistoryModel::~CntHistoryModel(unsigned int)
--- a/phonebookui/cnthistorymodel/inc/cnthistorymodel.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/cnthistorymodel/inc/cnthistorymodel.h Fri Sep 17 08:27:32 2010 +0300
@@ -56,7 +56,6 @@
public: // from QAbstractTableModel/QAbstractItemModel
QVariant data(const QModelIndex& index, int role) const;
int rowCount(const QModelIndex& parent = QModelIndex()) const;
- void sort(int column = 0, Qt::SortOrder order = Qt::AscendingOrder);
public:
void clearHistory();
@@ -68,6 +67,8 @@
void doEndInsertRows();
void doBeginRemoveRows(const QModelIndex &parent, int first, int last);
void doEndRemoveRows();
+ void doBeginResetModel();
+ void doEndResetModel();
void doDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
private:
--- a/phonebookui/cnthistorymodel/src/cnthistorymodel.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/cnthistorymodel/src/cnthistorymodel.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -17,6 +17,7 @@
#include "cnthistorymodel_p.h"
#include "cnthistorymodel.h"
+#include "cntdebug.h"
/*!
* Construct a new CntHistoryModel object to communicate
@@ -32,14 +33,22 @@
: QAbstractListModel(parent),
d_ptr(new CntHistoryModelPrivate(contactId, manager))
{
+ CNT_ENTRY
+
Q_D(CntHistoryModel);
d->q_ptr = this;
+
+ CNT_EXIT
}
CntHistoryModel::~CntHistoryModel()
{
+ CNT_ENTRY
+
Q_D(CntHistoryModel);
delete d;
+
+ CNT_EXIT
}
/*!
@@ -69,26 +78,18 @@
}
/*!
- * Sort list items on the model.
- *
- * \param column Column to be sorted. It is not used.
- * \param order Order to sort the list items.
- */
-void CntHistoryModel::sort(int column, Qt::SortOrder order)
-{
- Q_D(CntHistoryModel);
- d->sort(column, order);
-}
-
-/*!
* Clear history from the database. If the history cached
* is specific to one contact, only that history is cleared.
*
*/
void CntHistoryModel::clearHistory()
-{
- Q_D(CntHistoryModel);
+{
+ CNT_ENTRY
+
+ Q_D(CntHistoryModel);
d->clearHistory();
+
+ CNT_EXIT
}
/*!
@@ -97,43 +98,91 @@
*/
void CntHistoryModel::markAllAsSeen()
{
+ CNT_ENTRY
+
Q_D(CntHistoryModel);
d->markAllAsSeen();
+
+ CNT_EXIT
}
/*!
* Sort items in the model and refresh the view
- *
+ *
+ * \param order Order to sort the list items.
*/
void CntHistoryModel::sortAndRefresh(Qt::SortOrder order)
{
+ CNT_ENTRY_ARGS(order)
+
Q_D(CntHistoryModel);
+
+ doBeginResetModel();
d->sort(order);
- beginInsertRows(QModelIndex(), 0, rowCount());
- endInsertRows();
+ doEndResetModel();
+
+ CNT_EXIT
}
void CntHistoryModel::doBeginInsertRows(const QModelIndex &parent, int first, int last)
{
+ CNT_ENTRY_ARGS(parent << first << last)
+
beginInsertRows(parent, first, last);
+
+ CNT_EXIT
}
-void CntHistoryModel::doEndRemoveRows()
+void CntHistoryModel::doEndInsertRows()
{
- endRemoveRows();
+ CNT_ENTRY
+
+ endInsertRows();
+
+ CNT_EXIT
}
void CntHistoryModel::doBeginRemoveRows(const QModelIndex &parent, int first, int last)
{
+ CNT_ENTRY_ARGS(parent << first << last)
+
beginRemoveRows(parent, first, last);
+
+ CNT_EXIT
+}
+
+void CntHistoryModel::doEndRemoveRows()
+{
+ CNT_ENTRY
+
+ endRemoveRows();
+
+ CNT_EXIT
}
-void CntHistoryModel::doEndInsertRows()
+void CntHistoryModel::doBeginResetModel()
{
- endInsertRows();
+ CNT_ENTRY
+
+ beginResetModel();
+
+ CNT_EXIT
+}
+
+void CntHistoryModel::doEndResetModel()
+{
+ CNT_ENTRY
+
+ endResetModel();
+
+ CNT_EXIT
}
void CntHistoryModel::doDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
+ CNT_ENTRY_ARGS(topLeft << bottomRight)
+
emit dataChanged(topLeft, bottomRight);
+
+ CNT_EXIT
}
--- a/phonebookui/cnthistorymodel/src/cnthistorymodel_p.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/cnthistorymodel/src/cnthistorymodel_p.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -89,12 +89,18 @@
m_initLogs(false),
m_extendedLocale(HbExtendedLocale::system())
{
+ CNT_ENTRY
+
// Create the model structure and cache history data from the databases
initializeModel();
+
+ CNT_EXIT
}
CntHistoryModelPrivate::~CntHistoryModelPrivate()
{
+ CNT_ENTRY
+
if (m_logsModel) {
delete m_logsModel;
m_logsModel = NULL;
@@ -107,6 +113,8 @@
delete m_msgHistory;
m_msgHistory = NULL;
}
+
+ CNT_EXIT
}
/*!
@@ -119,6 +127,7 @@
*/
QVariant CntHistoryModelPrivate::data(const QModelIndex& index, int role) const
{
+ CNT_ENTRY_ARGS(index << role)
// Invalid index
int row = index.row();
@@ -128,7 +137,7 @@
HItemPointer p = m_List.at(row);
if ( p.isNull() )
return QVariant();
-
+
switch( role )
{
case Qt::DisplayRole:
@@ -160,6 +169,8 @@
*/
QVariant CntHistoryModelPrivate::displayRoleData(const HistoryItem& item) const
{
+ CNT_ENTRY
+
QStringList list;
HbExtendedLocale locale = m_extendedLocale;
@@ -172,6 +183,8 @@
list << item.title << item.message << locale.format(item.timeStamp.date(), r_qtn_date_usual);
}
+ CNT_EXIT_ARGS(list)
+
return QVariant(list);
}
@@ -183,6 +196,8 @@
*/
QVariant CntHistoryModelPrivate::decorationRoleData(const HistoryItem& item) const
{
+ CNT_ENTRY
+
// Messages
if (item.flags & CntMessage)
return QVariant(HbIcon(MESSAGE_ICON));
@@ -227,7 +242,7 @@
int id(-1);
if ( p.data()->flags & CntMessage )
id = m_msgMap.key(p, -1);
-
+
if (id != -1)
return QVariant(id);
else
@@ -253,10 +268,14 @@
*/
void CntHistoryModelPrivate::sort(int /*column*/, Qt::SortOrder order)
{
+ CNT_ENTRY_ARGS(order)
+
if ( order == Qt::AscendingOrder )
qStableSort(m_List.begin(), m_List.end(), lessThan);
else
qStableSort(m_List.begin(), m_List.end(), greaterThan);
+
+ CNT_EXIT
}
/*!
@@ -266,11 +285,18 @@
*/
void CntHistoryModelPrivate::clearHistory()
{
+ CNT_ENTRY
+
Q_Q(CntHistoryModel);
if ( m_List.isEmpty() )
return;
+ // Clear all data from the history model.
+ int count = rowCount();
+
+ q->doBeginRemoveRows( QModelIndex(), 0, count );
+
// Call logs
if ( !m_isMyCard && m_logsFilter )
m_logsFilter->clearEvents();
@@ -281,15 +307,14 @@
if (m_msgHistory)
m_msgHistory->clearMessages( (int)m_contactId );
- // Clear all data from the history model.
- int count = rowCount();
-
m_List.clear();
m_msgMap.clear();
m_logsMap.clear();
- q->doBeginRemoveRows( QModelIndex(), 0, count );
+
q->doEndRemoveRows();
+
+ CNT_EXIT
}
/*!
@@ -298,12 +323,16 @@
*/
void CntHistoryModelPrivate::markAllAsSeen()
{
+ CNT_ENTRY
+
if ( m_isMarkedAsSeen )
return;
// Messages
if (m_msgHistory->markRead( m_contactId ))
m_isMarkedAsSeen = true;
+
+ CNT_EXIT
}
/*!
@@ -313,12 +342,18 @@
*/
void CntHistoryModelPrivate::initializeModel()
{
+ CNT_ENTRY
+
initializeLogsModel();
initializeMsgModel();
+
+ CNT_EXIT
}
void CntHistoryModelPrivate::initializeMsgModel()
{
+ CNT_ENTRY
+
if( m_isMyCard )
return;
@@ -339,10 +374,14 @@
// Initial fetch of all messages
m->getMessages(m_contactId);
+
+ CNT_EXIT
}
void CntHistoryModelPrivate::initializeLogsModel()
{
+ CNT_ENTRY
+
//populate model with call events
m_logsModel = new LogsModel(LogsModel::LogsFullModel);
if (!m_isMyCard) {
@@ -377,6 +416,7 @@
this, SLOT(logsDataChanged(const QModelIndex &, const QModelIndex &)));
connect(m_AbstractLogsModel, SIGNAL(modelReset()), this, SLOT(handleLogsReset()));
+ CNT_EXIT
}
/*!
@@ -386,7 +426,7 @@
* \param item Conversation history item
*/
void CntHistoryModelPrivate::readLogEvent(LogsEvent* event, HistoryItem& item)
-{
+{
QString bodyText;
QString title;
@@ -435,9 +475,18 @@
*/
void CntHistoryModelPrivate::logsRowsInserted(const QModelIndex& /*parent*/, int first, int last)
{
+ CNT_ENTRY_ARGS(first << last)
+
Q_Q(CntHistoryModel);
- int oldRowCount = rowCount();
+ // Check if this is the first time to receive events
+ if ( !m_initLogs ) {
+ q->doBeginResetModel();
+ }
+ else {
+ q->doBeginInsertRows( QModelIndex(), rowCount(), rowCount() + (last - first) );
+ }
+
QList<HItemPointer> l;
for ( int i = first; i < m_AbstractLogsModel->rowCount() && i <= last; ++i ) {
@@ -456,12 +505,14 @@
// and sort the entire list.
if ( !m_initLogs ) {
sort();
- oldRowCount = 0;
m_initLogs = true;
+ q->doEndResetModel();
+ }
+ else {
+ q->doEndInsertRows();
}
- q->doBeginInsertRows(QModelIndex(), oldRowCount, rowCount());
- q->doEndInsertRows();
+ CNT_EXIT
}
/*!
@@ -473,6 +524,8 @@
*/
void CntHistoryModelPrivate::logsRowsRemoved(const QModelIndex& /*parent*/, int first, int last)
{
+ CNT_ENTRY_ARGS(first << last)
+
Q_Q(CntHistoryModel);
QList< int > indices;
@@ -498,6 +551,8 @@
q->doEndRemoveRows();
}
}
+
+ CNT_EXIT
}
/*!
@@ -509,6 +564,8 @@
*/
void CntHistoryModelPrivate::logsDataChanged(const QModelIndex& first, const QModelIndex& last)
{
+ CNT_ENTRY_ARGS(first << last)
+
Q_Q(CntHistoryModel);
int f = first.row();
@@ -537,16 +594,22 @@
foreach( QList<int> l, batches )
q->doDataChanged( q->index(l.first(), 0), q->index(l.last(), 0) );
}
+
+ CNT_EXIT
}
/*
- * Clear all call logs after receiving a reset model
- * signal from logs model
+ * Clear all call logs and refetches new call events after
+ * receiving a reset model signal from logs model
*/
void CntHistoryModelPrivate::handleLogsReset()
{
+ CNT_ENTRY
+
Q_Q(CntHistoryModel);
+ q->doBeginResetModel();
+
// Remove all call logs
QList<HItemPointer> values = m_logsMap.values();
foreach(HItemPointer p, values) {
@@ -569,8 +632,10 @@
}
sort();
- q->doBeginInsertRows(QModelIndex(), 0, rowCount());
- q->doEndInsertRows();
+
+ q->doEndResetModel();
+
+ CNT_EXIT
}
/*!
@@ -592,6 +657,8 @@
*/
QList< QList<int> > CntHistoryModelPrivate::findIndices( const QList< int >& indices )
{
+ CNT_ENTRY_ARGS(indices)
+
QList< QList<int> > sequences;
QList<int> currSequence;
int prevIndex = indices.at(0) - 1;
@@ -616,6 +683,8 @@
sequences.append( currSequence );
}
+ CNT_EXIT_ARGS(sequences)
+
return sequences;
}
@@ -627,6 +696,8 @@
*/
void CntHistoryModelPrivate::readMsgEvent(MsgItem& event, HistoryItem& item)
{
+ CNT_ENTRY
+
// Msg direction
if ( event.direction() == MsgItem::MsgDirectionIncoming ) {
item.flags |= CntIncoming;
@@ -657,6 +728,8 @@
item.timeStamp = event.timeStamp().toLocalTime();
LOG_ITEM(item);
+
+ CNT_EXIT
}
/*!
@@ -668,8 +741,12 @@
*/
void CntHistoryModelPrivate::messagesReady(QList<MsgItem>& msgs)
{
+ CNT_ENTRY
+
Q_Q(CntHistoryModel);
+ q->doBeginResetModel();
+
foreach( MsgItem m, msgs ) {
// Create a new hst item
HItemPointer item(new HistoryItem());
@@ -686,8 +763,9 @@
sort();
- q->doBeginInsertRows(QModelIndex(), 0, rowCount());
- q->doEndInsertRows();
+ q->doEndResetModel();
+
+ CNT_EXIT
}
/*!
@@ -698,9 +776,11 @@
*/
void CntHistoryModelPrivate::messageAdded(MsgItem& msg)
{
+ CNT_ENTRY
+
Q_Q(CntHistoryModel);
- int oldRowCount = rowCount();
+ q->doBeginInsertRows( QModelIndex(), rowCount(), rowCount() );
// Create a new hst item
HItemPointer item(new HistoryItem());
@@ -714,8 +794,9 @@
// Append the hst item to our list
m_List.append( item );
- q->doBeginInsertRows( QModelIndex(), oldRowCount, rowCount() );
q->doEndInsertRows();
+
+ CNT_EXIT
}
/*!
@@ -726,6 +807,8 @@
*/
void CntHistoryModelPrivate::messageChanged(MsgItem& msg)
{
+ CNT_ENTRY
+
Q_Q(CntHistoryModel);
// Fetch the hst item that maps to this MsgItem
@@ -742,6 +825,8 @@
int pIndex = m_List.indexOf( p );
q->doDataChanged(q->index(pIndex, 0), q->index(pIndex, 0));
+
+ CNT_EXIT
}
/*!
@@ -752,6 +837,8 @@
*/
void CntHistoryModelPrivate::messageDeleted(MsgItem& msg)
{
+ CNT_ENTRY
+
Q_Q(CntHistoryModel);
// Fetch the hst item that maps to this MsgItem
@@ -765,8 +852,10 @@
m_msgMap.remove( msg.id() );
int index = m_List.indexOf( p );
if ( index > -1 ) {
+ q->doBeginRemoveRows(QModelIndex(), index, index);
m_List.removeAt( index );
- q->doBeginRemoveRows(QModelIndex(), index, index);
q->doEndRemoveRows();
}
+
+ CNT_EXIT
}
--- a/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -39,7 +39,7 @@
void TestCntHistoryModel::testLogsInsertions()
{
- QSignalSpy spy( model, SIGNAL(rowsInserted(const QModelIndex &, int, int)));
+ QSignalSpy spy( model, SIGNAL(modelReset()));
model->d_ptr->logsRowsInserted(QModelIndex(), 0, 0);
QVERIFY(model->rowCount() == 1);
@@ -86,7 +86,7 @@
msgs.append(msg2);
msgs.append(msg3);
- QSignalSpy spy( model, SIGNAL(rowsInserted(const QModelIndex &, int, int)));
+ QSignalSpy spy( model, SIGNAL(modelReset()));
model->d_ptr->messagesReady(msgs);
QVERIFY(model->rowCount() == 3);
@@ -223,6 +223,10 @@
var = modelIndex.data(Qt::BackgroundRole);
QVERIFY(var.type() > (QVariant::UserType - 1));
+ // ConversationRole
+ var = modelIndex.data(CntConverstaionIdRole);
+ QVERIFY(var.type() == QVariant::Int);
+
// Invalid role
var = modelIndex.data(-10);
QVERIFY(var.type() == QVariant::Invalid);
@@ -271,7 +275,7 @@
}
// Sort ascending
- QSignalSpy spy( model, SIGNAL( rowsInserted(const QModelIndex &, int, int)));
+ QSignalSpy spy( model, SIGNAL(modelReset()));
model->sortAndRefresh(Qt::AscendingOrder);
QVERIFY(spy.count() == 1);
@@ -282,7 +286,7 @@
}
// Sort descending
- QSignalSpy spy1( model, SIGNAL( rowsInserted(const QModelIndex &, int, int)));
+ QSignalSpy spy1( model, SIGNAL( modelReset()));
model->sortAndRefresh(Qt::DescendingOrder);
QVERIFY(spy1.count() == 1);
@@ -307,6 +311,11 @@
QSignalSpy spy1( model, SIGNAL( rowsRemoved(const QModelIndex &, int, int)));
model->clearHistory();
QVERIFY(spy1.count() == 0);
+
+ // test reset
+ QSignalSpy spy2( model, SIGNAL(modelReset()));
+ model->d_ptr->handleLogsReset();
+ QVERIFY(spy2.count() == 1);
}
void TestCntHistoryModel::testMarkSeen()
--- a/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.pro Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.pro Fri Sep 17 08:27:32 2010 +0300
@@ -20,11 +20,14 @@
QT += testlib xml core
CONFIG += qtestlib hb
-DEFINES += PBK_UNIT_TEST \
- CNTHISTORYMODEL_NO_EXPORT
+DEFINES += QT_NO_DEBUG_OUTPUT
+DEFINES += QT_NO_WARNING_OUTPUT
+DEFINES += PBK_UNIT_TEST
+DEFINES += CNTHISTORYMODEL_NO_EXPORT
DEPENDPATH += .
INCLUDEPATH += .
+INCLUDEPATH += ../../../../inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
--- a/phonebookui/eabi/cnthistorymodelu.def Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/eabi/cnthistorymodelu.def Fri Sep 17 08:27:32 2010 +0300
@@ -7,19 +7,20 @@
_ZN15CntHistoryModel14sortAndRefreshEN2Qt9SortOrderE @ 6 NONAME
_ZN15CntHistoryModel15doEndInsertRowsEv @ 7 NONAME
_ZN15CntHistoryModel15doEndRemoveRowsEv @ 8 NONAME
- _ZN15CntHistoryModel16staticMetaObjectE @ 9 NONAME DATA 16
- _ZN15CntHistoryModel17doBeginInsertRowsERK11QModelIndexii @ 10 NONAME
- _ZN15CntHistoryModel17doBeginRemoveRowsERK11QModelIndexii @ 11 NONAME
- _ZN15CntHistoryModel19getStaticMetaObjectEv @ 12 NONAME
- _ZN15CntHistoryModel4sortEiN2Qt9SortOrderE @ 13 NONAME
- _ZN15CntHistoryModelC1EjPN10QtMobility15QContactManagerEP7QObject @ 14 NONAME
- _ZN15CntHistoryModelC2EjPN10QtMobility15QContactManagerEP7QObject @ 15 NONAME
- _ZN15CntHistoryModelD0Ev @ 16 NONAME
- _ZN15CntHistoryModelD1Ev @ 17 NONAME
- _ZN15CntHistoryModelD2Ev @ 18 NONAME
- _ZNK15CntHistoryModel10metaObjectEv @ 19 NONAME
- _ZNK15CntHistoryModel4dataERK11QModelIndexi @ 20 NONAME
- _ZNK15CntHistoryModel8rowCountERK11QModelIndex @ 21 NONAME
- _ZTI15CntHistoryModel @ 22 NONAME
- _ZTV15CntHistoryModel @ 23 NONAME
+ _ZN15CntHistoryModel15doEndResetModelEv @ 9 NONAME
+ _ZN15CntHistoryModel16staticMetaObjectE @ 10 NONAME DATA 16
+ _ZN15CntHistoryModel17doBeginInsertRowsERK11QModelIndexii @ 11 NONAME
+ _ZN15CntHistoryModel17doBeginRemoveRowsERK11QModelIndexii @ 12 NONAME
+ _ZN15CntHistoryModel17doBeginResetModelEv @ 13 NONAME
+ _ZN15CntHistoryModel19getStaticMetaObjectEv @ 14 NONAME
+ _ZN15CntHistoryModelC1EjPN10QtMobility15QContactManagerEP7QObject @ 15 NONAME
+ _ZN15CntHistoryModelC2EjPN10QtMobility15QContactManagerEP7QObject @ 16 NONAME
+ _ZN15CntHistoryModelD0Ev @ 17 NONAME
+ _ZN15CntHistoryModelD1Ev @ 18 NONAME
+ _ZN15CntHistoryModelD2Ev @ 19 NONAME
+ _ZNK15CntHistoryModel10metaObjectEv @ 20 NONAME
+ _ZNK15CntHistoryModel4dataERK11QModelIndexi @ 21 NONAME
+ _ZNK15CntHistoryModel8rowCountERK11QModelIndex @ 22 NONAME
+ _ZTI15CntHistoryModel @ 23 NONAME
+ _ZTV15CntHistoryModel @ 24 NONAME
--- a/phonebookui/pbkcommonui/inc/cntcollectionlistmodel.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcollectionlistmodel.h Fri Sep 17 08:27:32 2010 +0300
@@ -52,7 +52,7 @@
public:
// removing and adding groups
- void removeGroup(int localId);
+ bool removeGroup(int localId);
void addGroup(int localId);
// extension (plugin) group handling
@@ -74,10 +74,19 @@
bool validateRowIndex(const int index) const;
private slots:
- void informationUpdated(int id, const QString& secondRowText, int memberCount);
+ void informationUpdated(int id, const QString& secondRowText, const QList<int>& members);
void onIconReady(const QPixmap& pixmap, void *data, int id, int error);
void extensionGroupsReady();
+ void handleAdded(const QList<QContactLocalId>& contactIds);
+ void handleRemoved(const QList<QContactLocalId>& contactIds);
+ void handleChanged(const QList<QContactLocalId>& contactIds);
+ void handleAddedRelationship(const QList<QContactLocalId>& contactIds);
+ void handleRemovedRelationship(const QList<QContactLocalId>& contactIds);
+
+signals:
+ void groupCountChanged();
+
private:
QSharedDataPointer<CntCollectionListModelData> d;
CntCollectionListModelWorker *mThread;
--- a/phonebookui/pbkcommonui/inc/cntcollectionlistmodel_p.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcollectionlistmodel_p.h Fri Sep 17 08:27:32 2010 +0300
@@ -52,6 +52,7 @@
icon = other.icon;
secondaryIcon = other.secondaryIcon;
memberCount = other.memberCount;
+ members = other.members;
isPlugin = other.isPlugin;
id = other.id;
return *this;
@@ -68,6 +69,7 @@
HbIcon icon;
HbIcon secondaryIcon;
int memberCount;
+ QList<int> members;
bool isPlugin;
bool fetched;
int id;
--- a/phonebookui/pbkcommonui/inc/cntcollectionlistmodelworker.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcollectionlistmodelworker.h Fri Sep 17 08:27:32 2010 +0300
@@ -22,7 +22,7 @@
#include <QMutex>
#include <QPair>
-#include <qmobilityglobal.h>
+#include <qtcontacts.h>
QTM_BEGIN_NAMESPACE
class QContactManager;
@@ -49,7 +49,7 @@
void fetchInformation(int id);
signals:
- void fetchDone(int id, const QString& secondRowText, int memberCount);
+ void fetchDone(int id, const QString& secondRowText, const QList<int>& members);
private:
bool mStarted;
--- a/phonebookui/pbkcommonui/inc/cntcollectionview.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcollectionview.h Fri Sep 17 08:27:32 2010 +0300
@@ -77,6 +77,8 @@
void deleteGroups();
void handleDeleteGroups(HbAction* action);
+ void groupCountChanged();
+
private:
QContactManager* getContactManager();
void saveNewGroup(QContact* aContact);
--- a/phonebookui/pbkcommonui/inc/cntcontactcarddatacontainer.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcontactcarddatacontainer.h Fri Sep 17 08:27:32 2010 +0300
@@ -66,6 +66,8 @@
private:
#endif
QContact* mContact;
+ QContactAction* mCallAction;
+ QContactAction* mMessageAction;
QList<CntContactCardDataItem*> mDataItemList;
int mSeparatorIndex;
CntStringMapper mStringMapper;
--- a/phonebookui/pbkcommonui/inc/cntcontactcardheadingitem.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcontactcardheadingitem.h Fri Sep 17 08:27:32 2010 +0300
@@ -44,7 +44,6 @@
Q_PROPERTY( QString first_line_text READ getFirstLineText )
Q_PROPERTY( QString primary_text READ getPrimaryText )
- Q_PROPERTY( QString second_line_text READ getSecondLineText )
Q_PROPERTY( QString secondary_text READ getSecondaryText )
Q_PROPERTY( QString marquee_item READ getTinyMarqueeText )
Q_PROPERTY( HbIcon icon READ getIcon )
@@ -90,7 +89,6 @@
QString getFirstLineText() const { return firstLineText; }
QString getPrimaryText() const { return primaryText; }
- QString getSecondLineText() const { return secondLineText; }
QString getSecondaryText() const { return secondaryText; }
QString getTinyMarqueeText() const { return tinyMarqueeText; }
@@ -103,7 +101,6 @@
HbIconItem *mSecondaryIcon;
HbTextItem *mFirstLineText;
HbTextItem *mPrimaryText;
- HbTextItem *mSecondLineText;
HbTextItem *mSecondaryText;
HbMarqueeItem *mMarqueeItem;
HbFrameItem *mFrameItem;
@@ -111,7 +108,6 @@
QString firstLineText;
QString primaryText;
- QString secondLineText;
QString secondaryText;
QString tinyMarqueeText;
HbIcon icon;
--- a/phonebookui/pbkcommonui/inc/cntcontactcardview_p.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcontactcardview_p.h Fri Sep 17 08:27:32 2010 +0300
@@ -135,6 +135,7 @@
void setMaptileLabel( HbLabel*& mapLabel, const HbIcon& icon );
void updateMaptileImage();
HbLabel* loadMaptileLabel( int addressType );
+ void populateListItems();
// Presence related function
void updateItemPresence(const QString& accountUri, bool online);
@@ -162,13 +163,13 @@
void executeDynamicAction(QContact& aContact, QContactDetail aDetail, QContactActionDescriptor aActionDescriptor);
bool sendKeyPressed();
void populateHeadingItem();
- void populateListItems();
public:
CntAbstractViewManager* mViewManager; // not own
HbView* mView;
HbScrollArea *mScrollArea;
QGraphicsLinearLayout *mContainerLayout;
+ QGraphicsWidget* mContainerWidget;
QContact *mContact;
CntContactCardDataContainer *mDataContainer;
CntContactCardHeadingItem *mHeadingItem;
@@ -197,6 +198,8 @@
CntAbstractEngine* mEngine;
QTimer* mProgressTimer; // own
QList<CntContactCardDetailItem*> mDetailPtrs;
+ int mListPopulationProgress;
+ bool mStopListPopulation;
};
#endif // CNTCOMMLAUNCHERVIEW_H
--- a/phonebookui/pbkcommonui/inc/cntdetaileditor.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntdetaileditor.h Fri Sep 17 08:27:32 2010 +0300
@@ -32,6 +32,7 @@
class HbAction;
class CntEditorFactory;
class CntSaveManager;
+class HbShrinkingVkbHost;
class CntDetailEditor : public QObject,
public CntAbstractView
@@ -51,6 +52,8 @@
void saveContact();
void contactDeletedFromOtherSource(const QList<QContactLocalId>& contactIds);
void showRootView();
+ void handleKeypadOpen();
+ void handleKeypadClosed();
public:
void setViewId( int aId );
@@ -87,6 +90,7 @@
CntViewParameters mArgs;
CntSaveManager *mSaveManager; // own
CntAbstractEngine* mEngine; // not own
+ HbShrinkingVkbHost* mVirtualKeyboard;
friend class TestCntDetailEditor;
};
#endif /* CNTDETAILEDITOR_H_ */
--- a/phonebookui/pbkcommonui/inc/cnteditview.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cnteditview.h Fri Sep 17 08:27:32 2010 +0300
@@ -51,7 +51,9 @@
private:
CntEditViewPrivate* const d_ptr;
Q_DECLARE_PRIVATE_D(d_ptr, CntEditView)
- Q_DISABLE_COPY(CntEditView)
+ Q_DISABLE_COPY(CntEditView)
+
+ friend class TestCntEditView;
};
#endif //CNTEDITVIEW__H
// EOF
--- a/phonebookui/pbkcommonui/inc/cntfavourite.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntfavourite.h Fri Sep 17 08:27:32 2010 +0300
@@ -38,5 +38,9 @@
static bool isMemberOfFavouriteGroup( QContactManager* aManager, QContact* aContact );
static void addContactToFavouriteGroup( QContactManager* aManager, QContactId& aId );
static void removeContactFromFavouriteGroup( QContactManager* aManager, QContactId& aId );
+
+private:
+ static int mCachedSymbianFavouriteId;
};
+
#endif /* CNTFAVOURITE_H_ */
--- a/phonebookui/pbkcommonui/inc/cnthistoryviewitem.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cnthistoryviewitem.h Fri Sep 17 08:27:32 2010 +0300
@@ -50,7 +50,6 @@
* Overriden method to draw the custom item in the list view
*/
void updateChildItems();
- bool event(QEvent* e);
bool getIncoming() const { return mIncoming; }
bool isNewMessage() const { return mNewMessage; }
--- a/phonebookui/pbkcommonui/inc/cntkeygrabber.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntkeygrabber.h Fri Sep 17 08:27:32 2010 +0300
@@ -24,6 +24,7 @@
class HbMainWindow;
class XQAiwRequest;
+class XqKeyCapture;
class QTPBK_EXPORT CntKeyGrabber : public QObject
{
@@ -40,6 +41,7 @@
private:
HbMainWindow *mMainWindow;
XQAiwRequest *mRequest;
+ XqKeyCapture *mKeyCapture;
};
--- a/phonebookui/pbkcommonui/inc/cntmainwindow.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntmainwindow.h Fri Sep 17 08:27:32 2010 +0300
@@ -24,6 +24,7 @@
#include <cntviewparams.h>
class CntDefaultViewManager;
+class XqKeyCapture;
class QTPBK_EXPORT CntMainWindow : public HbMainWindow
{
--- a/phonebookui/pbkcommonui/inc/cntnamesview_p.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntnamesview_p.h Fri Sep 17 08:27:32 2010 +0300
@@ -80,6 +80,7 @@
private slots:
void switchOrientation();
+ void handleImportContacts( HbAction *aAction );
public:
bool isFinderVisible();
@@ -114,12 +115,11 @@
HbAction* mNewContact;
QContactLocalId mHandledContactId;
HbAction* mMultipleDeleter;
- bool mIsDefault;
- int mId;
QActionGroup* mActionGroup;
HbMenu* mMenu;
bool mFilterChanged;
CntAbstractEngine* mEngine;
+ static bool mIsFirstTimeUse; // FTU flag
};
#endif /* CNTABSTRACTLISTVIEW_H_ */
--- a/phonebookui/pbkcommonui/pbkcommonui.pro Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/pbkcommonui.pro Fri Sep 17 08:27:32 2010 +0300
@@ -257,7 +257,8 @@
-lcntsimutility \
-lshareui \
-lpresencecacheqt \
- -lxqsettingsmanager
+ -lxqsettingsmanager \
+ -lxqkeycapture
# capability
TARGET.CAPABILITY = CAP_GENERAL_DLL
--- a/phonebookui/pbkcommonui/resources/pbkcommonui.qrc Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/resources/pbkcommonui.qrc Fri Sep 17 08:27:32 2010 +0300
@@ -41,5 +41,6 @@
<file alias="cntfetchmarkall.css">style/cntfetchmarkall.css</file>
<file alias="cntfetchmarkall_color.css">style/cntfetchmarkall_color.css</file>
<file alias="fetchdialog.css">temp/fetchdialog.css</file>
+ <file alias="cntselectiondialogmarkwidget_color.css">style/cntselectiondialogmarkwidget_color.css</file>
</qresource>
</RCC>
--- a/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.css Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.css Fri Sep 17 08:27:32 2010 +0300
@@ -1,30 +1,38 @@
-CntContactCardHeadingItem[icon][primary_text][!secondary_text][!marquee_item][!first_line_text][!second_line_text]{
+CntContactCardHeadingItem[primary_text]{
layout:layout_one_row;
}
-CntContactCardHeadingItem[icon][first_line_text][secondary_text][marquee_item][!primary_text][!second_line_text]{
+CntContactCardHeadingItem[secondary_text][!marquee_item]{
+ layout:layout_two_rows_secondary;
+}
+
+CntContactCardHeadingItem[!secondary_text][marquee_item]{
+ layout:layout_two_rows_marquee;
+}
+
+CntContactCardHeadingItem[first_line_text][secondary_text][marquee_item]{
layout:layout_three_rows;
}
-CntContactCardHeadingItem[primary_text][!secondary_text][!marquee_item][!first_line_text][!second_line_text]:landscape{
+CntContactCardHeadingItem[primary_text]:landscape{
layout:layout_one_row-landscape;
}
-CntContactCardHeadingItem[first_line_text][secondary_text][marquee_item][!primary_text][!second_line_text]:landscape{
- layout:layout_three_rows-landscape;
+CntContactCardHeadingItem[secondary_text][!marquee_item]:landscape{
+ layout:layout_two_rows_secondary-landscape;
}
-CntContactCardHeadingItem:landscape{
- layout:layout_two_rows-landscape;
+CntContactCardHeadingItem[!secondary_text][marquee_item]:landscape{
+ layout:layout_two_rows_marquee-landscape;
}
-CntContactCardHeadingItem{
- layout:layout_two_rows;
+CntContactCardHeadingItem[first_line_text][secondary_text][marquee_item]:landscape{
+ layout:layout_three_rows-landscape;
}
CntContactCardHeadingItem::icon{
fixed-width:var(hb-param-graphic-size-primary-large);
- fixed-height:var(hb-param-graphic-size-primary-large);
+ fixed-height:var(hb-param-graphic-size-primary-large);
}
CntContactCardHeadingItem::first_line_text{
@@ -39,12 +47,6 @@
text-align:left;
}
-CntContactCardHeadingItem::second_line_text{
- text-height:var(hb-param-text-height-primary);
- font-variant:primary;
- text-align:left;
-}
-
CntContactCardHeadingItem::secondary_text{
text-height:var(hb-param-text-height-secondary);
font-variant:secondary;
@@ -58,8 +60,8 @@
}
CntContactCardHeadingItem::secondary_icon{
- fixed-height: var(hb-param-graphic-size-primary-small);
- fixed-width: var(hb-param-graphic-size-primary-small);
+ fixed-height: var(hb-param-graphic-size-secondary);
+ fixed-width: var(hb-param-graphic-size-secondary);
}
CntContactCardHeadingItem::background{
--- a/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.widgetml Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.widgetml Fri Sep 17 08:27:32 2010 +0300
@@ -5,10 +5,10 @@
<meshitem src="icon" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
<meshitem src="icon" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
- <meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
- <meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
- <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
-
+ <meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
+ <meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
+ <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
+
<meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
<meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
<meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
@@ -19,50 +19,49 @@
<meshitem src="pictureArea" srcEdge="LEFT" dst="" dstEdge="LEFT" />
<meshitem src="pictureArea" srcEdge="RIGHT" dst="icon" dstEdge="RIGHT" />
- <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
- <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
+ <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="TOP" spacing="-expr(var(hb-param-text-height-primary)/2)" />
</layout>
-
- <layout name="layout_one_row-landscape" type="mesh">
- <meshitem src="primary_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
- <meshitem src="primary_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-var(hb-param-margin-gene-top)" />
- <meshitem src="primary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="var(hb-param-margin-gene-bottom)" />
- <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-right)" />
+
+ <layout name="layout_two_rows_secondary" type="mesh">
+ <meshitem src="icon" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
+ <meshitem src="icon" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
+
+ <meshitem src="first_line_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
+ <meshitem src="first_line_text" srcEdge="TOP" dst="icon" dstEdge="TOP" />
+ <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
+
+ <meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
+ <meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
+ <meshitem src="secondary_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="secondary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
<meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
<meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
<meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
<meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
- <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
+ <meshitem src="pictureArea" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="pictureArea" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+ <meshitem src="pictureArea" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="pictureArea" srcEdge="RIGHT" dst="icon" dstEdge="RIGHT" />
+
+ <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
</layout>
-
- <layout name="layout_two_rows" type="mesh">
+
+ <layout name="layout_two_rows_marquee" type="mesh">
<meshitem src="icon" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
<meshitem src="icon" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
<meshitem src="first_line_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
- <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
- <meshitem src="first_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
- <meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
- <meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
- <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
-
- <meshitem src="second_line_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
- <meshitem src="second_line_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
- <meshitem src="second_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
- <meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
- <meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
- <meshitem src="secondary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
- <meshitem src="secondary_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="first_line_text" srcEdge="TOP" dst="icon" dstEdge="TOP" />
+ <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
- <meshitem src="marquee_item" srcEdge="TOP" dst="secondary_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
- <meshitem src="marquee_item" srcEdge="LEFT" dst="secondary_text" dstEdge="LEFT" />
+ <meshitem src="marquee_item" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
+ <meshitem src="marquee_item" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
+ <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
<meshitem src="marquee_item" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
- <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
<meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
<meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
@@ -74,67 +73,27 @@
<meshitem src="pictureArea" srcEdge="LEFT" dst="" dstEdge="LEFT" />
<meshitem src="pictureArea" srcEdge="RIGHT" dst="icon" dstEdge="RIGHT" />
- <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
- <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
+ <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
</layout>
-
- <layout name="layout_two_rows-landscape" type="mesh">
- <meshitem src="first_line_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
- <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
- <meshitem src="first_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
- <meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
- <meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
- <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
-
- <meshitem src="second_line_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
- <meshitem src="second_line_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
- <meshitem src="second_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
- <meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
- <meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
- <meshitem src="secondary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
- <meshitem src="secondary_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
- <meshitem src="marquee_item" srcEdge="TOP" dst="secondary_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
- <meshitem src="marquee_item" srcEdge="LEFT" dst="secondary_text" dstEdge="LEFT" />
- <meshitem src="marquee_item" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
- <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
- <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
- <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
-
- <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
- <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
- </layout>
-
<layout name="layout_three_rows" type="mesh">
<meshitem src="icon" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
<meshitem src="icon" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
<meshitem src="first_line_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
- <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
- <meshitem src="first_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
- <meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
- <meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
- <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
-
- <meshitem src="second_line_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
- <meshitem src="second_line_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
- <meshitem src="second_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="first_line_text" srcEdge="TOP" dst="icon" dstEdge="TOP" />
+ <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
<meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
<meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
<meshitem src="secondary_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
<meshitem src="marquee_item" srcEdge="TOP" dst="secondary_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
- <meshitem src="marquee_item" srcEdge="LEFT" dst="secondary_text" dstEdge="LEFT" />
+ <meshitem src="marquee_item" srcEdge="LEFT" dst="secondary_text" dstEdge="LEFT" />
+ <meshitem src="marquee_item" srcEdge="RIGHT" dst="secondary_text" dstEdge="RIGHT" />
<meshitem src="marquee_item" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
- <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
+
<meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
<meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
<meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
@@ -146,21 +105,66 @@
<meshitem src="pictureArea" srcEdge="RIGHT" dst="icon" dstEdge="RIGHT" />
<meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
- <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
+ <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
+ </layout>
+
+ <layout name="layout_one_row-landscape" type="mesh">
+ <meshitem src="primary_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
+ <meshitem src="primary_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-var(hb-param-margin-gene-top)" />
+ <meshitem src="primary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="var(hb-param-margin-gene-bottom)" />
+ <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
+
+ <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+ <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="TOP" spacing="-expr(var(hb-param-text-height-primary)/2)" />
+ </layout>
+
+ <layout name="layout_two_rows_secondary-landscape" type="mesh">
+ <meshitem src="first_line_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
+ <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
+ <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
+
+ <meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
+ <meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
+ <meshitem src="secondary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
+ <meshitem src="secondary_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+ <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
+ </layout>
+
+ <layout name="layout_two_rows_marquee-landscape" type="mesh">
+ <meshitem src="first_line_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
+ <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
+ <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
+
+ <meshitem src="marquee_item" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
+ <meshitem src="marquee_item" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
+ <meshitem src="marquee_item" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
+ <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+ <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
</layout>
<layout name="layout_three_rows-landscape" type="mesh">
- <meshitem src="first_line_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
+ <meshitem src="first_line_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
<meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
- <meshitem src="first_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
- <meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
- <meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
- <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
-
- <meshitem src="second_line_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
- <meshitem src="second_line_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
- <meshitem src="second_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
<meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
<meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
@@ -169,14 +173,14 @@
<meshitem src="marquee_item" srcEdge="TOP" dst="secondary_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
<meshitem src="marquee_item" srcEdge="LEFT" dst="secondary_text" dstEdge="LEFT" />
<meshitem src="marquee_item" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
- <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
+ <meshitem src="marquee_item" srcEdge="RIGHT" dst="secondary_text" dstEdge="RIGHT" />
+
<meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
<meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
<meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
<meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
- <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
+ <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+ <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
</layout>
</hbwidget>
--- a/phonebookui/pbkcommonui/resources/style/cntfetchmarkall_color.css Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/resources/style/cntfetchmarkall_color.css Fri Sep 17 08:27:32 2010 +0300
@@ -3,4 +3,7 @@
color: var(qtc_viewtitle_normal);
}
-
+CntFetchMarkAll > HbCheckBox::text
+{
+ color: var(qtc_viewtitle_normal);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/pbkcommonui/resources/style/cntselectiondialogmarkwidget_color.css Fri Sep 17 08:27:32 2010 +0300
@@ -0,0 +1,5 @@
+HbSelectionDialogMarkWidget > HbCheckBox::text
+{
+ color: var(qtc_viewtitle_normal);
+}
+
--- a/phonebookui/pbkcommonui/src/cntaddressmodel.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntaddressmodel.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -35,21 +35,25 @@
foreach ( QContactAddress a, mContact->details<QContactAddress>() )
{
QStringList context = a.contexts();
- if ( context.isEmpty() && !mAddress ) // no context
- {
- mAddress = new QContactAddress( a );
- createAddressItems( address, mAddress );
- }
- else if (context.first() == QContactAddress::ContextHome && !mAddressHome )
+ QString type = context.isEmpty() ? "" : context.first();
+ // Context HOME
+ if (type == QContactAddress::ContextHome && !mAddressHome )
{
mAddressHome = new QContactAddress( a );
createAddressItems( addressHome, mAddressHome );
}
- else if (context.first() == QContactAddress::ContextWork && !mAddressWork )
+ // Context WORK
+ else if (type == QContactAddress::ContextWork && !mAddressWork )
{
mAddressWork = new QContactAddress( a );
createAddressItems( addressWork, mAddressWork );
}
+ // Context WHATEVER
+ else if ( !mAddress ) // no context
+ {
+ mAddress = new QContactAddress( a );
+ createAddressItems( address, mAddress );
+ }
}
// Check that all items (address, addressHome, addressWork) are created
@@ -107,8 +111,7 @@
HbDataFormModelItem* postal = new HbDataFormModelItem( HbDataFormModelItem::TextItem, hbTrId("txt_phob_formlabel_postal_codezip_code"));
postal->setContentWidgetData( "text", aAddress->postcode() );
postal->setContentWidgetData( "maxLength", CNT_POSTCODE_MAXLENGTH );
- postal->setContentWidgetData( "preferDigits", true);
-
+
HbDataFormModelItem* city = new HbDataFormModelItem( HbDataFormModelItem::TextItem, hbTrId("txt_phob_formlabel_city"));
city->setContentWidgetData( "text", aAddress->locality() );
city->setContentWidgetData( "maxLength", CNT_LOCALITY_MAXLENGTH );
--- a/phonebookui/pbkcommonui/src/cntcollectionlistmodel.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcollectionlistmodel.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -33,6 +33,16 @@
#include <hbglobal.h>
#include <hbicon.h>
+#include <QtAlgorithms>
+
+namespace
+{
+ bool caseInsensitiveLessThan(const QContact &c1, const QContact &c2)
+ {
+ return c1.displayLabel().toLower() < c2.displayLabel().toLower();
+ }
+}
+
/*!
Constructor
*/
@@ -54,7 +64,8 @@
QString noMembers = hbTrId("txt_phob_dblist_val_no_members_selected");
mThread = new CntCollectionListModelWorker(unnamed, noFavs, noMembers, order);
- connect(mThread, SIGNAL(fetchDone(int, const QString&, int)), this, SLOT(informationUpdated(int, const QString&, int)));
+ connect(mThread, SIGNAL(fetchDone(int, const QString&, const QList<int>&)), this,
+ SLOT(informationUpdated(int, const QString&, const QList<int>&)));
connect(d->mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void *, int, int)),
this, SLOT(onIconReady(QPixmap, void *, int, int)));
@@ -94,6 +105,8 @@
*/
QVariant CntCollectionListModel::data(const QModelIndex& index, int role) const
{
+ CNT_ENTRY_ARGS(index << role)
+
int row = index.row();
if ( !validateRowIndex(row) )
@@ -190,20 +203,25 @@
\param localId QContactLocalId of the group that should be removed
*/
-void CntCollectionListModel::removeGroup(int localId)
+bool CntCollectionListModel::removeGroup(int localId)
{
- CNT_ENTRY
+ CNT_ENTRY_ARGS(localId)
+
+ bool groupRemoved = false;
for (int i = 0;i < rowCount();i++)
{
if (!d->mList.at(i)->isPlugin && d->mList.at(i)->id == localId)
{
removeRow(i);
+ groupRemoved = true;
break;
}
}
- CNT_EXIT
+ CNT_EXIT_ARGS(groupRemoved)
+
+ return groupRemoved;
}
/*!
@@ -214,7 +232,7 @@
*/
void CntCollectionListModel::addGroup(int localId)
{
- CNT_ENTRY
+ CNT_ENTRY_ARGS(localId)
QContactDetailFilter groupFilter;
groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
@@ -312,6 +330,8 @@
*/
CntViewParameters CntCollectionListModel::extensionGroupActivated(int row)
{
+ CNT_ENTRY_ARGS(row)
+
CntViewParameters params;
for(int i = 0;i < d->mExtensions.value(row)->groupCount();i++)
{
@@ -322,6 +342,9 @@
break;
}
}
+
+ CNT_EXIT_ARGS(params)
+
return params;
}
@@ -335,7 +358,7 @@
*/
void CntCollectionListModel::extensionGroupLongPressed(int row, const QPointF& coords, CntExtensionGroupCallback* interface)
{
- CNT_ENTRY
+ CNT_ENTRY_ARGS(row << coords << interface)
for(int i = 0;i < d->mExtensions.value(row)->groupCount();i++)
{
@@ -358,15 +381,22 @@
*/
QModelIndex CntCollectionListModel::indexOfGroup(int localId)
{
+ CNT_ENTRY_ARGS(localId)
+
+ QModelIndex groupIndex;
+
for (int i = 0;i < d->mList.count();i++)
{
if (d->mList.at(i)->id == localId && !d->mList.at(i)->isPlugin)
{
- return index(i);
+ groupIndex = index(i);
+ break;
}
}
- return QModelIndex();
+ CNT_EXIT_ARGS(groupIndex)
+
+ return groupIndex;
}
/*!
@@ -380,6 +410,13 @@
initializeExtensions();
initializeUserGroups();
+ connect(d->mContactManager, SIGNAL(contactsAdded(const QList<QContactLocalId>&)), this, SLOT(handleAdded(const QList<QContactLocalId>&)));
+ connect(d->mContactManager, SIGNAL(contactsChanged(const QList<QContactLocalId>&)), this, SLOT(handleChanged(const QList<QContactLocalId>&)));
+ connect(d->mContactManager, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)), this, SLOT(handleRemoved(const QList<QContactLocalId>&)));
+ connect(d->mContactManager, SIGNAL(relationshipsAdded(const QList<QContactLocalId>&)), this, SLOT(handleAddedRelationship(const QList<QContactLocalId>&)));
+ connect(d->mContactManager, SIGNAL(relationshipsRemoved(const QList<QContactLocalId>&)), this, SLOT(handleRemovedRelationship(const QList<QContactLocalId>&)));
+
+
CNT_EXIT
}
@@ -526,6 +563,8 @@
*/
QVariant CntCollectionListModel::displayRoleData(const CntCollectionItem& item) const
{
+ CNT_ENTRY
+
QStringList list;
list << item.groupName << item.secondLineText;
@@ -539,6 +578,8 @@
list << " ";
}
+ CNT_EXIT
+
return QVariant(list);
}
@@ -550,6 +591,8 @@
*/
QVariant CntCollectionListModel::decorationRoleData(const CntCollectionItem& item) const
{
+ CNT_ENTRY
+
QList<QVariant> icons;
icons << item.icon;
@@ -558,6 +601,8 @@
icons << item.secondaryIcon;
}
+ CNT_EXIT
+
return QVariant(icons);
}
@@ -580,9 +625,9 @@
\param secondRowText text to be shown in the second row
\param memberCount the amount of members the group has (shown in text-3 in HbListViewItem)
*/
-void CntCollectionListModel::informationUpdated(int id, const QString& secondRowText, int memberCount)
+void CntCollectionListModel::informationUpdated(int id, const QString& secondRowText, const QList<int>& members)
{
- CNT_ENTRY
+ CNT_ENTRY_ARGS(id << secondRowText << members)
for (int i = 0;i < d->mList.count();i++)
{
@@ -591,7 +636,8 @@
CollectionItemPointer item = d->mList.at(i);
item->secondLineText = secondRowText;
- item->memberCount = memberCount;
+ item->memberCount = members.count();
+ item->members = members;
int idx = d->mList.indexOf(item);
emit dataChanged(index(idx, 0), index(idx, 0));
@@ -614,7 +660,7 @@
*/
void CntCollectionListModel::onIconReady(const QPixmap& pixmap, void *data, int id, int error)
{
- CNT_ENTRY
+ CNT_ENTRY_ARGS(pixmap << data << id << error)
Q_UNUSED(data);
@@ -649,6 +695,8 @@
*/
void CntCollectionListModel::extensionGroupsReady()
{
+ CNT_ENTRY
+
CntUiGroupSupplier* groupSupplier = static_cast<CntUiGroupSupplier*>(sender());
int addedCount = groupSupplier->groupCount();
@@ -693,4 +741,198 @@
endInsertRows();
}
+
+ CNT_EXIT
}
+
+void CntCollectionListModel::handleAdded(const QList<QContactLocalId>& contactIds)
+{
+ CNT_ENTRY_ARGS(contactIds)
+
+ if (contactIds.count() == 1)
+ {
+ QContactFetchHint noRelationshipsFetchHint;
+ noRelationshipsFetchHint.setOptimizationHints(QContactFetchHint::NoRelationships);
+
+ QContact contact = d->mContactManager->contact(contactIds.first(), noRelationshipsFetchHint);
+
+ if (contact.type() == QContactType::TypeGroup)
+ {
+ addGroup(contactIds.first());
+ emit groupCountChanged();
+ }
+ }
+ else
+ {
+ QList<QContact> addedGroups;
+
+ foreach (QContactLocalId id, contactIds)
+ {
+ QContactFetchHint noRelationshipsFetchHint;
+ noRelationshipsFetchHint.setOptimizationHints(QContactFetchHint::NoRelationships);
+
+ QContact contact = d->mContactManager->contact(id, noRelationshipsFetchHint);
+
+ if (contact.type() == QContactType::TypeGroup)
+ {
+ addedGroups << contact;
+ }
+ }
+
+ if (addedGroups.count() == 1)
+ {
+ addGroup(addedGroups.first().localId());
+ emit groupCountChanged();
+ }
+ else if (addedGroups.count() > 1)
+ {
+ qSort(addedGroups.begin(), addedGroups.end(), caseInsensitiveLessThan);
+
+ foreach (QContact c, addedGroups)
+ {
+ addGroup(c.localId());
+ }
+ emit groupCountChanged();
+ }
+ }
+
+ CNT_EXIT
+}
+
+void CntCollectionListModel::handleRemoved(const QList<QContactLocalId>& contactIds)
+{
+ CNT_ENTRY_ARGS(contactIds)
+
+ foreach (QContactLocalId id, contactIds)
+ {
+ if (removeGroup(id))
+ {
+ emit groupCountChanged();
+ }
+ else
+ {
+ for (int i = 0;i < d->mList.count();i++)
+ {
+ if (d->mList.at(i)->members.contains(id))
+ {
+ CollectionItemPointer item = d->mList.at(i);
+
+ item->fetched = false;
+
+ int idx = d->mList.indexOf(item);
+ emit dataChanged(index(idx, 0), index(idx, 0));
+ }
+ }
+ }
+ }
+
+ CNT_EXIT
+}
+
+void CntCollectionListModel::handleChanged(const QList<QContactLocalId>& contactIds)
+{
+ CNT_ENTRY_ARGS(contactIds)
+
+ foreach (QContactLocalId id, contactIds)
+ {
+ QContact contact = d->mContactManager->contact(id);
+
+ if (contact.type() == QContactType::TypeGroup)
+ {
+ for (int i = 0;i < d->mList.count();i++)
+ {
+ if (d->mList.at(i)->id == id && !d->mList.at(i)->isPlugin)
+ {
+ CollectionItemPointer item = d->mList.at(i);
+
+ QContactName contactName = contact.detail<QContactName>();
+ QString groupName = contactName.customLabel();
+
+ if (groupName != item->groupName)
+ {
+ if (groupName.isNull())
+ {
+ item->groupName = hbTrId("txt_phob_dblist_unnamed");
+ }
+ else
+ {
+ item->groupName = groupName;
+ }
+
+ int idx = d->mList.indexOf(item);
+ emit dataChanged(index(idx, 0), index(idx, 0));
+ }
+
+ break;
+ }
+ }
+ }
+ else if (contact.type() == QContactType::TypeContact)
+ {
+ for (int i = 0;i < d->mList.count();i++)
+ {
+ if (d->mList.at(i)->members.contains(id))
+ {
+ CollectionItemPointer item = d->mList.at(i);
+
+ item->fetched = false;
+
+ int idx = d->mList.indexOf(item);
+ emit dataChanged(index(idx, 0), index(idx, 0));
+ }
+ }
+ }
+ }
+
+ CNT_EXIT
+}
+
+void CntCollectionListModel::handleAddedRelationship(const QList<QContactLocalId>& contactIds)
+{
+ CNT_ENTRY_ARGS(contactIds)
+
+ foreach (QContactLocalId id, contactIds)
+ {
+ for (int i = 0;i < d->mList.count();i++)
+ {
+ if (d->mList.at(i)->id == id && !d->mList.at(i)->isPlugin)
+ {
+ CollectionItemPointer item = d->mList.at(i);
+
+ item->fetched = false;
+
+ int idx = d->mList.indexOf(item);
+ emit dataChanged(index(idx, 0), index(idx, 0));
+
+ break;
+ }
+ }
+ }
+
+ CNT_EXIT
+}
+
+void CntCollectionListModel::handleRemovedRelationship(const QList<QContactLocalId>& contactIds)
+{
+ CNT_ENTRY_ARGS(contactIds)
+
+ foreach (QContactLocalId id, contactIds)
+ {
+ for (int i = 0;i < d->mList.count();i++)
+ {
+ if (d->mList.at(i)->id == id && !d->mList.at(i)->isPlugin)
+ {
+ CollectionItemPointer item = d->mList.at(i);
+
+ item->fetched = false;
+
+ int idx = d->mList.indexOf(item);
+ emit dataChanged(index(idx, 0), index(idx, 0));
+
+ break;
+ }
+ }
+ }
+
+ CNT_EXIT
+}
--- a/phonebookui/pbkcommonui/src/cntcollectionlistmodelworker.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcollectionlistmodelworker.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -195,7 +195,6 @@
int favoriteGroupId = CntFavourite::favouriteGroupId( mManager );
QString secondLineText;
- int memberCount = 0;
QContactRelationshipFilter rFilter;
rFilter.setRelationshipType(QContactRelationship::HasMember);
@@ -228,8 +227,15 @@
// group members and their count
QList<QContactLocalId> groupMemberIds = mManager->contactIds(rFilter, sortOrders);
+ QList<int> groupMemberIdsToInt;
if (!groupMemberIds.isEmpty())
{
+ // first copy all the ids to QList<int>
+ // (convert unsigned int -> int due to signalling problems with unsigned ints)
+ for(int i = 0;i < groupMemberIds.count();i++)
+ {
+ groupMemberIdsToInt << groupMemberIds.at(i);
+ }
QStringList nameList;
for(int i = 0;i < groupMemberIds.count();i++)
{
@@ -257,7 +263,6 @@
QString names = nameList.join(", ").trimmed();
secondLineText = names;
- memberCount = groupMemberIds.count();
}
else
{
@@ -271,7 +276,7 @@
}
}
- emit fetchDone(id, secondLineText, memberCount);
+ emit fetchDone(id, secondLineText, groupMemberIdsToInt);
CNT_EXIT
}
--- a/phonebookui/pbkcommonui/src/cntcollectionview.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcollectionview.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -39,6 +39,8 @@
#include <hbgroupbox.h>
#include <hbmessagebox.h>
#include <hbparameterlengthlimiter.h>
+#include <hbeffect.h>
+#include <hbtoolbar.h>
#include <QActionGroup>
#include <QApplication>
@@ -75,6 +77,9 @@
qFatal("Unable to read :/xml/contacts_collections.docml");
}
+ // disable toolbar effects
+ HbEffect::disable(mView->toolBar());
+
//back button
mSoftkey = new HbAction(Hb::BackNaviAction, mView);
connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
@@ -156,6 +161,7 @@
mListView->listItemPrototype()->setGraphicsSize(HbListViewItem::LargeIcon);
mListView->listItemPrototype()->setStretchingStyle(HbListViewItem::StretchLandscape);
mModel = new CntCollectionListModel( mEngine, this);
+ connect(mModel, SIGNAL(groupCountChanged()), this, SLOT(groupCountChanged()));
mListView->setModel(mModel);
CNT_EXIT
@@ -343,7 +349,6 @@
mHandledContact->saveDetail(&groupName);
getContactManager()->saveContact(mHandledContact);
- // Select some contact(s) to add to the group
QString groupNameCreated = mHandledContact->displayLabel();
if (groupNameCreated.isEmpty())
{
@@ -358,9 +363,6 @@
QList<QContactLocalId> contactIds = getContactManager()->contactIds(gFilter);
if (contactIds.isEmpty())
{
- mModel->addGroup(mHandledContact->localId());
- mDeleteGroupsAction->setEnabled(true);
-
notifyNewGroup();
}
else
@@ -395,19 +397,13 @@
viewParameters.insert(ESelectedGroupContact, var);
mViewManager->changeView(viewParameters);
}
- else
- {
- mModel->addGroup(mHandledContact->localId());
- mDeleteGroupsAction->setEnabled(true);
- }
+
notifyNewGroup();
}
void CntCollectionView::handleCancelGroupMembers()
{
mSelectedContactsSet.clear();
- mModel->addGroup(mHandledContact->localId());
- mDeleteGroupsAction->setEnabled(true);
notifyNewGroup();
}
@@ -437,6 +433,7 @@
mModel = NULL;
mModel = new CntCollectionListModel(mEngine, this);
+ connect(mModel, SIGNAL(groupCountChanged()), this, SLOT(groupCountChanged()));
mListView->setModel(mModel);
}
@@ -462,17 +459,6 @@
if (action == HbMessageBox::Delete)
{
getContactManager()->removeContact(mHandledContact->localId());
- mModel->removeGroup(mHandledContact->localId());
-
- // disable delete group(s) button if only favorites group is present
- QContactDetailFilter groupFilter;
- groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
- groupFilter.setValue(QLatin1String(QContactType::TypeGroup));
- QList<QContactLocalId> groupContactIds = getContactManager()->contactIds(groupFilter);
- if (groupContactIds.count() < 2)
- {
- mDeleteGroupsAction->setEnabled(false);
- }
}
delete mHandledContact;
@@ -495,21 +481,23 @@
if (groupDeletePopup && action == groupDeletePopup->actions().first())
{
- QList<QContactLocalId> deletedList = groupDeletePopup->deleteGroup();
- foreach (QContactLocalId id, deletedList)
- {
- mModel->removeGroup(id);
- }
-
- // disable delete group(s) button if only favorites group is present
- QContactDetailFilter groupFilter;
- groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
- groupFilter.setValue(QLatin1String(QContactType::TypeGroup));
- QList<QContactLocalId> groupContactIds = getContactManager()->contactIds(groupFilter);
- if (groupContactIds.count() < 2)
- {
- mDeleteGroupsAction->setEnabled(false);
- }
+ groupDeletePopup->deleteGroup();
+ }
+}
+
+void CntCollectionView::groupCountChanged()
+{
+ QContactDetailFilter groupFilter;
+ groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
+ groupFilter.setValue(QLatin1String(QContactType::TypeGroup));
+ QList<QContactLocalId> groupContactIds = getContactManager()->contactIds(groupFilter);
+ if (groupContactIds.count() < 2)
+ {
+ mDeleteGroupsAction->setEnabled(false);
+ }
+ else
+ {
+ mDeleteGroupsAction->setEnabled(true);
}
}
--- a/phonebookui/pbkcommonui/src/cntcontactcarddatacontainer.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcontactcarddatacontainer.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -55,6 +55,8 @@
Qt::Orientations orientation,
QObject *parent) :
mContact(NULL),
+ mCallAction(NULL),
+ mMessageAction(NULL),
mSeparatorIndex(-1),
mLocationFeatureEnabled(false),
mMaptileInterface(maptile),
@@ -62,6 +64,16 @@
mExtensionManager( &aExtensionManager )
{
Q_UNUSED(parent);
+ QList<QContactActionDescriptor> callActionDescriptors = QContactAction::actionDescriptors("call", "symbian");
+ if (!callActionDescriptors.isEmpty())
+ {
+ mCallAction = QContactAction::action(callActionDescriptors.first());
+ }
+ QList<QContactActionDescriptor> messageActionDescriptors = QContactAction::actionDescriptors("message", "symbian");
+ if (!messageActionDescriptors.isEmpty())
+ {
+ mMessageAction = QContactAction::action(messageActionDescriptors.first());
+ }
}
void CntContactCardDataContainer::setContactData(QContact* contact, bool aMyCard)
@@ -88,6 +100,10 @@
CntContactCardDataContainer::~CntContactCardDataContainer()
{
clearContactData();
+ delete mCallAction;
+ mCallAction = NULL;
+ delete mMessageAction;
+ mMessageAction = NULL;
}
void CntContactCardDataContainer::clearContactData()
@@ -286,7 +302,7 @@
}
}
}
-
+
// This is special action case. Here we query implementations that are generic
// to contact, so it's not linked to any detail(usually generic my card actions).
for(int j = 0; j < extendedActions.count(); j++)
@@ -475,6 +491,11 @@
title = hbTrId("txt_phob_formlabel_address_work");
position = CntContactCardDataItem::EAddressWork;
}
+ else
+ {
+ title = hbTrId("txt_phob_formlabel_address");
+ position = CntContactCardDataItem::EAddress;
+ }
}
CntContactCardDataItem* dataItem = new CntContactCardDataItem(title, position, false);
@@ -657,19 +678,16 @@
Returns true if contactDetails contains spesific action.
*/
bool CntContactCardDataContainer::supportsDetail(const QString &actionName, const QContactDetail &contactDetail)
-{
- QList<QContactActionDescriptor> actionDescriptors = QContactAction::actionDescriptors(actionName, "symbian");
- if (actionDescriptors.isEmpty())
- {
- return false;
+{
+ QContactAction* action = NULL;
+
+ if (actionName == "call") {
+ action = mCallAction;
+ } else if (actionName == "message") {
+ action = mMessageAction;
}
- QContactAction* contactAction = QContactAction::action(actionDescriptors.first());
- bool isSupportDetail = contactAction->isDetailSupported(contactDetail);
-
- delete contactAction;
-
- return isSupportDetail;
+ return (action != NULL && action->isDetailSupported(contactDetail));
}
/*!
--- a/phonebookui/pbkcommonui/src/cntcontactcardheadingitem.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcontactcardheadingitem.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -43,7 +43,6 @@
mSecondaryIcon(NULL),
mFirstLineText(NULL),
mPrimaryText(NULL),
- mSecondLineText(NULL),
mSecondaryText(NULL),
mMarqueeItem(NULL),
mFrameItem(NULL),
@@ -139,26 +138,6 @@
mPrimaryText = 0;
}
-
- if (!secondLineText.isNull())
- {
- if (!mSecondLineText)
- {
- mSecondLineText = new HbTextItem(this);
- mSecondLineText->setText(secondLineText);
- mSecondLineText->setMaximumLines(1);
- style()->setItemName(mSecondLineText, "second_line_text");
- }
- }
- else
- {
- if (mSecondLineText)
- {
- delete mSecondLineText;
- }
- mSecondLineText = 0;
- }
-
if (!secondaryText.isNull())
{
if (!mSecondaryText)
@@ -267,9 +246,6 @@
delete mPrimaryText;
mPrimaryText = 0;
- delete mSecondLineText;
- mSecondLineText = 0;
-
delete mSecondaryText;
mSecondaryText = 0;
@@ -505,19 +481,19 @@
if (mIsOnline)
{
secondaryIcon = HbIcon("qtg_small_online");
- createPrimitives();
+ recreatePrimitives();
mSecondaryIcon->setIcon(secondaryIcon);
}
else if (!mIsOnline && mIsFavorite)
{
secondaryIcon = HbIcon("qtg_small_favorite");
- createPrimitives();
+ recreatePrimitives();
mSecondaryIcon->setIcon(secondaryIcon);
}
else
{
secondaryIcon.clear();
- createPrimitives();
+ recreatePrimitives();
}
repolish();
--- a/phonebookui/pbkcommonui/src/cntcontactcardview_p.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcontactcardview_p.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -21,12 +21,12 @@
#include <QGraphicsSceneResizeEvent>
#include <QStringList>
#include <QStandardItemModel>
-#include <QDebug>
#include <QKeyEvent>
#include <QDir>
#include <cntservicescontact.h>
#include <qtcontacts.h>
+#include <hbapplication.h>
#include <hbscrollarea.h>
#include <hblabel.h>
#include <hbmenu.h>
@@ -70,8 +70,15 @@
#include <cntabstractengine.h>
#include <cntuicontactcardextension.h>
-#define CNT_MAPTILE_PROGRESS_TIMER 100 //100 msec
-#define CNT_UNKNOWN_MAPTILE_STATUS -1
+#define CNT_MAPTILE_PROGRESS_TIMER 100 // 100 msec
+#define CNT_UNKNOWN_MAPTILE_STATUS -1
+
+// A few list items (CntInitialPopulation) will be populated before the first view;
+// if there are more list items, they will be fetched and added one by one after the
+// first view has been shown to the user
+static const int CntListPopulationNotInProgress = -1;
+static const QEvent::Type ProcessPopulateListEvent = QEvent::User;
+static const int CntInitialPopulation = 8;
const char *CNT_CONTACTCARDVIEW_XML = ":/xml/contacts_contactcard.docml";
const char *CNT_MAPTILE_INPROGRESS_ICON = "qtg_anim_small_loading_1";
@@ -83,6 +90,7 @@
CntContactCardViewPrivate::CntContactCardViewPrivate(bool isTemporary) :
QObject(),
mContainerLayout(NULL),
+ mContainerWidget(NULL),
mContact(NULL),
mDataContainer(NULL),
mAvatar(NULL),
@@ -94,7 +102,9 @@
mIsTemporary(isTemporary),
mIsExecutingAction(false),
mMyCardId(0),
- mSaveManager(NULL)
+ mSaveManager(NULL),
+ mListPopulationProgress(CntListPopulationNotInProgress),
+ mStopListPopulation(false)
{
bool ok;
document()->load(CNT_CONTACTCARDVIEW_XML, &ok);
@@ -207,7 +217,11 @@
*/
void CntContactCardViewPrivate::showPreviousView()
{
+ // stop list population, if it is still in progress
+ mStopListPopulation = true;
+
int returnValue = KCntServicesReturnValueContactNotModified;
+
//save the contact if avatar has been changed.
QContact contact = contactManager()->contact(mContact->localId());
if ( contact != *mContact && contactManager()->error() == QContactManager::NoError)
@@ -232,6 +246,9 @@
*/
void CntContactCardViewPrivate::showRootView()
{
+ // stop list population, if it is still in progress
+ mStopListPopulation = true;
+
mViewManager->back( mArgs, true );
}
@@ -242,13 +259,12 @@
{
CNT_ENTRY
mArgs = aArgs;
-
+
mViewManager = &mEngine->viewManager();
mThumbnailManager = &mEngine->thumbnailManager();
connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
this, SLOT(thumbnailReady(QPixmap, void*, int, int)));
-
HbMainWindow* window = mView->mainWindow();
if (window)
{
@@ -257,7 +273,7 @@
setOrientation(window->orientation());
}
-
+
qApp->installEventFilter(this);
QContact contact = aArgs.value(ESelectedContact).value<QContact>();
@@ -267,6 +283,7 @@
mMyCardId = contactManager()->selfContactId();
populateHeadingItem();
+
populateListItems();
bool myCard = mContact->localId() == mMyCardId;
@@ -314,6 +331,8 @@
void CntContactCardViewPrivate::populateHeadingItem()
{
+ CNT_ENTRY
+
Q_ASSERT(mHeadingItem != NULL && mContact != NULL);
mHeadingItem->setDetails(mContact);
@@ -333,16 +352,13 @@
mImageLabel->ungrabGesture(Qt::TapGesture);
}
-
bool online;
mInitiialPrecenceData = mPresenceListener->initialPresences(*mContact, online);
mHeadingItem->setOnlineStatus(online);
-
- if (!myCard)
- {
- bool setAsFavorite( false );
- setAsFavorite = CntFavourite::isMemberOfFavouriteGroup( contactManager(), mContact );
- mHeadingItem->setFavoriteStatus( setAsFavorite ); // if contact is part of favourites group
+
+ if (!myCard) {
+ bool setAsFavorite = CntFavourite::isMemberOfFavouriteGroup(contactManager(), mContact);
+ mHeadingItem->setFavoriteStatus(setAsFavorite); // if contact is part of favourites group
static_cast<HbAction *>(document()->findObject("cnt:setasfavorite"))->setVisible( !setAsFavorite );
static_cast<HbAction *>(document()->findObject("cnt:removefromfavorite"))->setVisible( setAsFavorite );
}
@@ -367,65 +383,77 @@
break;
}
}
-
+
+ CNT_EXIT
}
void CntContactCardViewPrivate::populateListItems()
{
+ CNT_ENTRY
+
Q_ASSERT(mContact != NULL && mScrollArea != NULL);
- // data container
- if (!mDataContainer) {
- mDataContainer = new CntContactCardDataContainer(
- mMaptile,
- mEngine->extensionManager(),
- mView->mainWindow()->orientation() );
- }
-
- // fill the data container with contact details
- mDataContainer->setContactData(mContact);
-
- // scroll area + container widget
- QGraphicsWidget* containerWidget = mScrollArea->contentWidget();
- if (!containerWidget)
- {
- // initialize
- mScrollArea->setScrollDirections(Qt::Vertical);
+ if (mListPopulationProgress == CntListPopulationNotInProgress) {
+ mListPopulationProgress = 0;
+
+ if (!mDataContainer) {
+ mDataContainer = new CntContactCardDataContainer(
+ mMaptile,
+ mEngine->extensionManager(),
+ mView->mainWindow()->orientation());
+ }
+
+ // fill the data container with contact details
+ mDataContainer->setContactData(mContact);
- containerWidget = new QGraphicsWidget();
- mScrollArea->setContentWidget(containerWidget); // takes ownership.
+ // scroll area + container widget
+ mContainerWidget = mScrollArea->contentWidget();
+ if (!mContainerWidget) {
+ // initialize
+ mScrollArea->setScrollDirections(Qt::Vertical);
+
+ mContainerWidget = new QGraphicsWidget();
+ mScrollArea->setContentWidget(mContainerWidget); // takes ownership. Old widget is deleted
+
+ mContainerLayout = new QGraphicsLinearLayout(Qt::Vertical);
+ mContainerLayout->setContentsMargins(0, 0, 0, 0);
+ mContainerLayout->setSpacing(0);
+ mContainerLayout->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
- mContainerLayout = new QGraphicsLinearLayout(Qt::Vertical);
- mContainerLayout->setContentsMargins(0, 0, 0, 0);
- mContainerLayout->setSpacing(0);
- mContainerLayout->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
-
- containerWidget->setLayout(mContainerLayout); // takes ownership.
- } else {
- // Already initialized
- Q_ASSERT(mContainerLayout != NULL);
-
- // Clear the container
- int count = mContainerLayout->count();
- for (int i=0; i<count; i++)
- {
- // do not delete items. They will be deleted automatically
- mContainerLayout->removeAt(i);
+ mContainerWidget->setLayout(mContainerLayout); // takes ownership. Old layout is deleted
+ } else {
+ // Already initialized
+ Q_ASSERT(mContainerLayout != NULL);
+
+ // Clear the container
+ int count = mContainerLayout->count();
+ for (int i = 0; i < count; i++) {
+ // do not delete items. They will be deleted automatically
+ mContainerLayout->removeAt(i);
+ }
}
+
+ // Delete all the detail pointers if any
+ qDeleteAll(mDetailPtrs);
+ mDetailPtrs.clear();
}
-
- // Delete all the detail pointers if any
- qDeleteAll(mDetailPtrs);
- mDetailPtrs.clear();
- for(int index = 0; index < mDataContainer->itemCount(); index++)
- {
- CntContactCardDataItem* dataItem = mDataContainer->dataItem(index);
+
+
+ do {
+ if (mListPopulationProgress == mDataContainer->itemCount() || mStopListPopulation) {
+ // population of the list has completed
+ mListPopulationProgress = CntListPopulationNotInProgress;
+ mStopListPopulation = false;
+ return;
+ }
+
+ CntContactCardDataItem* dataItem = mDataContainer->dataItem(mListPopulationProgress);
int pos = dataItem->position();
-
+
// communication methods
if (pos < CntContactCardDataItem::ESeparator && dataItem->isFocusable())
{
- CntContactCardDetailItem* item = new CntContactCardDetailItem(index, containerWidget);
+ CntContactCardDetailItem* item = new CntContactCardDetailItem(mListPopulationProgress, mContainerWidget);
mDetailPtrs.append(item);
connect(item, SIGNAL(clicked()), this, SLOT(onItemActivated()));
@@ -499,7 +527,7 @@
//other details
else
{
- CntContactCardDetailItem* item = new CntContactCardDetailItem(index, containerWidget, false);
+ CntContactCardDetailItem* item = new CntContactCardDetailItem(mListPopulationProgress, mContainerWidget, false);
mDetailPtrs.append(item);
//To check whether maptile status icon is set with the address
@@ -540,7 +568,17 @@
mContainerLayout->addItem(item);
}
}
+
+ ++mListPopulationProgress;
+ } while (mListPopulationProgress < CntInitialPopulation);
+
+ if (mListPopulationProgress <= CntInitialPopulation) {
+ QObject::connect(mView->mainWindow(), SIGNAL(viewReady()), this, SLOT(populateListItems()));
+ } else {
+ HbApplication::instance()->postEvent(this, new QEvent(ProcessPopulateListEvent));
}
+
+ CNT_EXIT
}
/*
@@ -864,6 +902,13 @@
QContactId id = mContact->id();
CntFavourite::addContactToFavouriteGroup( contactManager(), id );
+ QContact c = contactManager()->contact(mContact->localId());
+
+ delete mContact;
+ mContact = NULL;
+
+ mContact = new QContact(c);
+
qobject_cast<HbAction *>(document()->findObject("cnt:removefromfavorite"))->setVisible(true);
qobject_cast<HbAction *>(document()->findObject("cnt:setasfavorite"))->setVisible(false);
mHeadingItem->setFavoriteStatus(true);
@@ -873,6 +918,13 @@
{
QContactId id = mContact->id();
CntFavourite::removeContactFromFavouriteGroup( contactManager(), id );
+
+ QContact c = contactManager()->contact(mContact->localId());
+
+ delete mContact;
+ mContact = NULL;
+
+ mContact = new QContact(c);
qobject_cast<HbAction *>(document()->findObject("cnt:removefromfavorite"))->setVisible(false);
qobject_cast<HbAction *>(document()->findObject("cnt:setasfavorite"))->setVisible(true);
@@ -1295,6 +1347,31 @@
{
tmpContact.removeDetail( &a );
}
+
+ //temproral solution for a contact without name - add an empty name,
+ //so vcard construction doesn't fail
+ //TODO: use custom handler again when new QVersitContactExporterDetailHandlerV2
+ //(part of QtVersit) is available in the platform
+ QList<QContactName> names = tmpContact.details<QContactName>();
+ if (names.count() > 0)
+ {
+ QContactName name = names.at(0);
+ if (name.firstName().isEmpty() && name.lastName().isEmpty())
+ {
+ //empty first and last names - update with empty string
+ name.setFirstName(QString(""));
+ tmpContact.saveDetail(&name);
+ }
+ }
+ else
+ {
+ //no name detail - create one
+ QContactName name;
+ name.setFirstName(QString(""));
+ tmpContact.saveDetail(&name);
+ } //temproral solution for a contact without name - add an empty name,
+ //so vcard construction doesn't fail - end
+
list.append( tmpContact );
QString tempDir = QDir::tempPath().append("/tempcntvcard");
@@ -1333,8 +1410,10 @@
vCardPath = QDir::toNativeSeparators(vCardPath);
QVersitContactExporter exporter;
- CntVCardDetailHandler hanlder;
- exporter.setDetailHandler(&hanlder);
+ //TODO: use custom handler again when new QVersitContactExporterDetailHandlerV2
+ //(part of QtVersit) is available in the platform
+ //CntVCardDetailHandler hanlder;
+ //exporter.setDetailHandler(&hanlder);
// The vCard version needs to be 2.1 due to backward compatiblity when sending
if (exporter.exportContacts(list, QVersitDocument::VCard21Type))
{
@@ -1357,7 +1436,7 @@
}
QStringList l;
l << vCardPath;
- mShareUi->send(l,false);
+ mShareUi->send(l, true);
}
}
@@ -1453,6 +1532,11 @@
bool CntContactCardViewPrivate::eventFilter(QObject *obj, QEvent *event)
{
+ if (event->type() == ProcessPopulateListEvent && obj == this) {
+ populateListItems();
+ return true;
+ }
+
if (event->type() == QEvent::KeyPress && obj == mView->mainWindow())
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
--- a/phonebookui/pbkcommonui/src/cntdefaultviewfactory.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntdefaultviewfactory.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -46,6 +46,7 @@
CntDefaultViewFactory::~CntDefaultViewFactory()
{
+
}
CntAbstractView* CntDefaultViewFactory::createView( int aId )
--- a/phonebookui/pbkcommonui/src/cntdefaultviewmanager.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntdefaultviewmanager.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -40,8 +40,6 @@
CNT_ENTRY
mEngine = new CntDefaultEngine( *this );
- setViewFactory( new CntDefaultViewFactory( mEngine->extensionManager()) );
- setViewNavigator( new CntViewNavigator(this) );
int error = -1;
mSimUtility = new CntSimUtility(CntSimUtility::AdnStore, error);
--- a/phonebookui/pbkcommonui/src/cntdetaileditor.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntdetaileditor.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -35,6 +35,7 @@
#include <hbscrollbar.h>
#include <hbdevicenotificationdialog.h>
#include <hbparameterlengthlimiter.h>
+#include <hbshrinkingvkbhost.h>
#include <QApplication>
#include <QTimer>
@@ -51,7 +52,8 @@
mViewManager(NULL),
mEditorFactory(NULL),
mCancel(NULL),
- mSaveManager(NULL)
+ mSaveManager(NULL),
+ mVirtualKeyboard(NULL)
{
bool ok;
document()->load(CNT_DETAILEDITOR_XML, &ok);
@@ -88,6 +90,8 @@
mEditorFactory = NULL;
delete mSaveManager;
mSaveManager = NULL;
+ delete mVirtualKeyboard;
+ mVirtualKeyboard = NULL;
}
void CntDetailEditor::setViewId( int aId )
@@ -163,6 +167,11 @@
mDataForm->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded);
mDataForm->setScrollingStyle(HbScrollArea::PanWithFollowOn);
mDataForm->verticalScrollBar()->setInteractive(true);
+
+ mVirtualKeyboard = new HbShrinkingVkbHost(mView);
+
+ connect(mVirtualKeyboard, SIGNAL(keypadOpened()), this, SLOT(handleKeypadOpen()));
+ connect(mVirtualKeyboard, SIGNAL(keypadClosed()), this, SLOT(handleKeypadClosed()));
}
void CntDetailEditor::deactivate()
@@ -230,7 +239,7 @@
if (modelItem->contentWidgetData( "preferDigits" ).toBool())
{
- edit->setInputMethodHints( Qt::ImhPreferNumbers );
+ edit->setInputMethodHints( Qt::ImhPreferNumbers | Qt::ImhNoPredictiveText );
}
objName = mDataFormModel->detail().definitionName() + " line edit %1";
@@ -370,4 +379,21 @@
CNT_EXIT
}
+void CntDetailEditor::handleKeypadOpen()
+{
+ CNT_ENTRY
+
+ // enable full screen
+ mView->setContentFullScreen(true);
+ CNT_EXIT
+}
+
+void CntDetailEditor::handleKeypadClosed()
+{
+ CNT_ENTRY
+ // disable full screen
+ mView->setContentFullScreen(false);
+ CNT_EXIT
+}
+
// End of File
--- a/phonebookui/pbkcommonui/src/cnteditview_p.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cnteditview_p.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -767,6 +767,7 @@
QContactManager& cm = mEngine->contactManager( SYMBIAN_BACKEND );
connect(&cm, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)),
this, SLOT(contactDeletedFromOtherSource(const QList<QContactLocalId>&)), Qt::UniqueConnection);
+
CNT_EXIT
}
--- a/phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -93,7 +93,7 @@
if ( subtype == QContactOnlineAccount::SubTypeSip )
{
- detailItem->addText( hbTrId("txt_phob_formlabel_val_sip") );
+ detailItem->addText( hbTrId("txt_phob_formlabel_sip") );
detailItem->addText( number.accountUri() );
list.append( detailItem );
}
--- a/phonebookui/pbkcommonui/src/cnteditviewlistmodel.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cnteditviewlistmodel.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -25,8 +25,9 @@
#include <QDir>
CntEditViewListModel::CntEditViewListModel( QContact& aContact, CntExtensionManager& aMgr ) :
-mContact( aContact ),
-mManager( aMgr )
+mManager( aMgr ),
+mContact( aContact )
+
{
mLookupTable.insert( EPhonenumber, -1 );
mLookupTable.insert( EEmailAddress, -1 );
--- a/phonebookui/pbkcommonui/src/cntfavourite.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntfavourite.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -15,69 +15,78 @@
*
*/
#include "cntfavourite.h"
+#include <cntglobal.h>
+#include <QDebug>
-QContactLocalId CntFavourite::createFavouriteGroup( QContactManager* aManager )
+int CntFavourite::mCachedSymbianFavouriteId = 0;
+
+QContactLocalId CntFavourite::createFavouriteGroup(QContactManager* aManager)
{
QContactLocalId favouriteId = CntFavourite::favouriteGroupId(aManager);
- if ( favouriteId == 0 )
- {
+ if (favouriteId == 0) {
QContact favouriteGroup;
favouriteGroup.setType( QContactType::TypeGroup );
QContactName favouriteGroupName;
favouriteGroupName.setCustomLabel( QLatin1String(FavouriteGroupName) );
- favouriteGroup.saveDetail( &favouriteGroupName );
- if ( aManager->saveContact( &favouriteGroup ) )
- {
+ favouriteGroup.saveDetail(&favouriteGroupName);
+ if (aManager->saveContact(&favouriteGroup)) {
favouriteId = favouriteGroup.localId();
+ if (aManager->managerUri() == SYMBIAN_BACKEND) {
+ mCachedSymbianFavouriteId = favouriteId;
+ }
}
}
+
return favouriteId;
}
-QContactLocalId CntFavourite::favouriteGroupId( QContactManager* aManager )
+QContactLocalId CntFavourite::favouriteGroupId(QContactManager* aManager)
{
- QContactLocalId favouriteId( 0 );
+ QContactLocalId favouriteId(0);
+
+ if (mCachedSymbianFavouriteId != 0 && aManager->managerUri() == SYMBIAN_BACKEND) {
+ favouriteId = mCachedSymbianFavouriteId;
+ } else {
+ QContactDetailFilter groupFilter;
+ groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
+ groupFilter.setValue(QString(QLatin1String(QContactType::TypeGroup)));
- QContactDetailFilter groupFilter;
- groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
- groupFilter.setValue(QString(QLatin1String(QContactType::TypeGroup)));
-
- QList<QContactLocalId> groupContactIds = aManager->contactIds( groupFilter );
-
- for(int i = 0;i < groupContactIds.count();i++)
- {
- QContact contact = aManager->contact(groupContactIds.at(i));
- QContactName contactName = contact.detail<QContactName>();
- QString groupName = contactName.customLabel();
- if ( groupName.compare(QLatin1String(FavouriteGroupName)) == 0 )
- {
- favouriteId = groupContactIds.at(i);
- break;
+ QList<QContactLocalId> groupContactIds = aManager->contactIds( groupFilter );
+
+ for (int i = 0; i < groupContactIds.count(); i++) {
+ QContactFetchHint noRelationshipsFetchHint;
+ noRelationshipsFetchHint.setOptimizationHints(QContactFetchHint::NoRelationships);
+ QContact contact = aManager->contact(groupContactIds.at(i), noRelationshipsFetchHint);
+ QContactName contactName = contact.detail<QContactName>();
+ QString groupName = contactName.customLabel();
+ if (groupName.compare(QLatin1String(FavouriteGroupName)) == 0) {
+ favouriteId = groupContactIds.at(i);
+ if (aManager->managerUri() == SYMBIAN_BACKEND) {
+ mCachedSymbianFavouriteId = favouriteId;
+ }
+ break;
+ }
}
}
-
+
return favouriteId;
}
-bool CntFavourite::isMemberOfFavouriteGroup( QContactManager* aManager, QContact* aContact )
+bool CntFavourite::isMemberOfFavouriteGroup(QContactManager* contactManager, QContact* contact)
{
- bool favouriteGroupContact( false );
- QContactLocalId favouriteId = CntFavourite::favouriteGroupId( aManager );
- if ( favouriteId != 0 )
- {
- QContact favoriteGroup = aManager->contact( favouriteId );
- QContactRelationshipFilter rFilter;
- rFilter.setRelationshipType( QContactRelationship::HasMember );
- rFilter.setRelatedContactRole( QContactRelationship::First );
- rFilter.setRelatedContactId( favoriteGroup.id() );
-
- QList<QContactLocalId> contactsLocalIdList = aManager->contactIds( rFilter );
- favouriteGroupContact = contactsLocalIdList.contains( aContact->localId() );
- }
- return favouriteGroupContact;
+ QContactId favouriteId;
+ favouriteId.setManagerUri(contactManager->managerUri());
+ favouriteId.setLocalId(CntFavourite::favouriteGroupId(contactManager));
+
+ QContactRelationship favouriteMembership;
+ favouriteMembership.setFirst(favouriteId);
+ favouriteMembership.setSecond(contact->id());
+ favouriteMembership.setRelationshipType(QContactRelationship::HasMember);
+
+ return contact->relationships().contains(favouriteMembership);
}
void CntFavourite::addContactToFavouriteGroup( QContactManager* aManager, QContactId& aId)
@@ -100,17 +109,17 @@
aManager->saveRelationship( &relationship );
}
-void CntFavourite::removeContactFromFavouriteGroup( QContactManager* aManager, QContactId& aId )
+void CntFavourite::removeContactFromFavouriteGroup(QContactManager* aManager, QContactId& aId)
{
- QContactLocalId favouriteId = CntFavourite::favouriteGroupId( aManager );
- if ( favouriteId != 0 )
- {
- QContact favoriteGroup = aManager->contact( favouriteId );
+ QContactLocalId favouriteId = CntFavourite::favouriteGroupId(aManager);
+ if (favouriteId != 0) {
+ QContact favoriteGroup = aManager->contact(favouriteId);
QContactRelationship relationship;
- relationship.setRelationshipType( QContactRelationship::HasMember );
- relationship.setFirst( favoriteGroup.id() );
- relationship.setSecond( aId );
+ relationship.setRelationshipType(QContactRelationship::HasMember);
+ relationship.setFirst(favoriteGroup.id());
+ relationship.setSecond(aId);
aManager->removeRelationship(relationship);
}
}
+
// End of File
--- a/phonebookui/pbkcommonui/src/cntfetchcontactpopup.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntfetchcontactpopup.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -33,6 +33,7 @@
#include <hbaction.h>
#include <hbstaticvkbhost.h>
#include <hbstyleloader.h>
+#include <hbstyle.h>
#include <QGraphicsLinearLayout>
#include <QCoreApplication>
@@ -99,7 +100,6 @@
{
CntFetchContactPopup* popup = new CntFetchContactPopup( aManager );
popup->constructPopupDialog( aTitle, aAction, HbAbstractItemView::MultiSelection );
-
return popup;
}
@@ -157,12 +157,21 @@
void CntFetchContactPopup::handleKeypadOpen()
{
CNT_ENTRY
+
HbListViewItem* prototype = mListView->listItemPrototype();
prototype->setTextFormat( Qt::RichText );
+ qreal margin;
+ HbStyle style;
+ style.parameter("hb-param-margin-gene-popup", margin);
+
+ if (mPopup->mainWindow()->orientation() == Qt::Horizontal)
+ margin /= 2;
+
qreal height = mPopup->size().height() -
mVirtualKeyboard->keyboardArea().height() -
- mSearch->size().height();
+ mSearch->size().height() +
+ margin;
// in single selection we don't have the "mark all" option
if ( mMarkAll->isVisible() )
@@ -178,6 +187,7 @@
void CntFetchContactPopup::handleKeypadClosed()
{
CNT_ENTRY
+
if (mSearch->criteria().isEmpty())
{
HbListViewItem* prototype = mListView->listItemPrototype();
@@ -330,7 +340,7 @@
mIdList.clear();
mTitle = aTitle;
- mPopup->setAttribute( Qt::WA_DeleteOnClose, true );
+ mPopup->setAttribute( Qt::WA_DeleteOnClose, true );
QContactDetailFilter contactsFilter;
contactsFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
@@ -374,8 +384,9 @@
}
else
{
+ mMarkAll->setMaxContactCount( mModel->rowCount() );
mMarkAll->setSelectedContactCount( 0 );
- mMarkAll->setMaxContactCount( mModel->rowCount() );
+
connect(mSelectionModel, SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)),
this, SLOT(contactsSelected(const QItemSelection&, const QItemSelection&)) );
--- a/phonebookui/pbkcommonui/src/cntfetchmarkall.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntfetchmarkall.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -39,9 +39,9 @@
mCounterLabel = new HbTextItem( this );
mFrame = new HbFrameItem(this);
- mFrame->frameDrawer().setFrameGraphicsName("qtg_fr_groupbox_normal");
+ mFrame->frameDrawer().setFrameGraphicsName("qtg_fr_groupbox");
mFrame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
- mFrame->setZValue(-2);
+ mFrame->setZValue(-5);
style()->setItemName(mFrame, "background");
@@ -66,6 +66,12 @@
mCheckBox->setCheckState( Qt::Unchecked );
blockSignals( false );
}
+ else if (mSelectionCount == mContactCount)
+ {
+ blockSignals( true );
+ mCheckBox->setCheckState( Qt::Checked );
+ blockSignals( false );
+ }
}
CntFetchMarkAll::~CntFetchMarkAll()
--- a/phonebookui/pbkcommonui/src/cntgroupactionsview.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntgroupactionsview.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -277,32 +277,37 @@
{
Q_UNUSED(contact);
- if (action.compare("message", Qt::CaseInsensitive) == 0) {
+ if (action.compare("message", Qt::CaseInsensitive) == 0)
+ {
QContactPhoneNumber phoneNumber = static_cast<QContactPhoneNumber>(detail);
mMessageActionParams.insert(phoneNumber.number(),QVariant(contact.displayLabel()));
}
- else if (action.compare("email", Qt::CaseInsensitive) == 0) {
+ else if (action.compare("email", Qt::CaseInsensitive) == 0)
+ {
QContactEmailAddress email = static_cast<QContactEmailAddress>(detail);
mEmailActionParams.append(email.emailAddress());
}
//actionpopup executed, decrement counter
mPopupCount--;
- if (mPopupCount==0) {
+ if (mPopupCount==0)
+ {
QVariantMap map;
QVariant params;
- if (action.compare("message", Qt::CaseInsensitive) == 0) {
+ if (action.compare("message", Qt::CaseInsensitive) == 0)
+ {
params.setValue(mMessageActionParams);
}
- else if (action.compare("email", Qt::CaseInsensitive) == 0) {
+ else if (action.compare("email", Qt::CaseInsensitive) == 0)
+ {
params.setValue(mEmailActionParams);
}
map.insert(action,params);
-
+
CntActionLauncher* other = new CntActionLauncher( mEngine->contactManager(SYMBIAN_BACKEND), action);
connect(other, SIGNAL(actionExecuted(CntActionLauncher*)), this, SLOT(actionExecuted(CntActionLauncher*)));
other->execute(*mGroupContact, QContactDetail(), map);
- }
+ }
}
bool CntGroupActionsView::eventFilter(QObject *obj, QEvent *event)
@@ -354,6 +359,32 @@
{
//actionpopup cancelled, decrement counter
mPopupCount--;
+
+ if (mPopupCount==0)
+ {
+ QVariantMap map;
+ QVariant params;
+ QString action;
+ if (mMessageActionParams.count())
+ {
+ params.setValue(mMessageActionParams);
+ action = "message";
+ }
+ else if (mEmailActionParams.count())
+ {
+ params.setValue(mEmailActionParams);
+ action = "email";
+ }
+ else
+ {
+ return;
+ }
+ map.insert(action,params);
+
+ CntActionLauncher* other = new CntActionLauncher( mEngine->contactManager(SYMBIAN_BACKEND), action);
+ connect(other, SIGNAL(actionExecuted(CntActionLauncher*)), this, SLOT(actionExecuted(CntActionLauncher*)));
+ other->execute(*mGroupContact, QContactDetail(), map);
+ }
}
--- a/phonebookui/pbkcommonui/src/cntgroupdeletepopup.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntgroupdeletepopup.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -18,7 +18,7 @@
#include "cntgroupdeletepopup.h"
#include <cntabstractengine.h>
#include "cntglobal.h"
-#include <hbgroupbox.h>
+#include <hblabel.h>
#include <hbaction.h>
#include <hblistview.h>
#include <hblistviewitem.h>
@@ -41,8 +41,8 @@
void CntGroupDeletePopup::populateListOfGroup()
{
- HbGroupBox *headingLabel = new HbGroupBox(this);
- headingLabel->setHeading(hbTrId("txt_phob_opt_delete_groups"));
+ HbLabel *headingLabel = new HbLabel(this);
+ headingLabel->setPlainText(hbTrId("txt_phob_opt_delete_groups"));
setHeadingWidget(headingLabel);
--- a/phonebookui/pbkcommonui/src/cntgroupeditormodel.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntgroupeditormodel.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -48,6 +48,7 @@
iNameItem->setContentWidgetData("text", iGroupName.customLabel());
iNameItem->setContentWidgetData("maxLength", CNT_GROUPNAME_MAXLENGTH);
iNumberItem->setContentWidgetData("text", iGroupConfCallNumber.number() );
+ iNumberItem->setContentWidgetData("maxLength", CNT_PHONENUMBER_EDITOR_MAXLENGTH);
HbDataFormModelItem* root = invisibleRootItem();
appendDataFormItem( iNameItem, root);
--- a/phonebookui/pbkcommonui/src/cnthistoryview.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cnthistoryview.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -152,6 +152,10 @@
this, SLOT(showClearHistoryMenu()));
connect(mHistoryModel, SIGNAL(layoutChanged()),
this, SLOT(updateScrollingPosition()));
+ connect(mHistoryModel, SIGNAL(modelReset()),
+ this, SLOT(updateScrollingPosition()));
+ connect(mHistoryModel, SIGNAL(modelReset()),
+ this, SLOT(showClearHistoryMenu()));
// Connect the menu options to respective slots
mClearHistory = static_cast<HbAction*>(docLoader()->findObject("cnt:clearhistory"));
@@ -159,10 +163,6 @@
connect(mClearHistory, SIGNAL(triggered()), this, SLOT(clearHistory()));
showClearHistoryMenu();
- HbMainWindow* mainWindow = mView->mainWindow();
- connect(mainWindow, SIGNAL(orientationChanged(Qt::Orientation)),
- this, SLOT(updateScrollingPosition()));
-
connect(cm, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)),
this, SLOT(contactDeletedFromOtherSource(const QList<QContactLocalId>&)));
}
@@ -258,7 +258,7 @@
delete mRequest;
mRequest = NULL;
- mRequest = appMng.create(interface, operation, false); // not embedded
+ mRequest = appMng.create(interface, operation, true); // embedded
if ( mRequest ) {
mRequest->setArguments(args);
--- a/phonebookui/pbkcommonui/src/cnthistoryviewitem.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cnthistoryviewitem.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -16,6 +16,7 @@
*/
#include "cnthistoryviewitem.h"
+#include "cntdebug.h"
#include <cnthistorymodel.h>
#include <hbframedrawer.h>
@@ -37,6 +38,9 @@
mNewItem(NULL),
mFocusItem(NULL)
{
+ CNT_ENTRY
+
+ CNT_EXIT
}
//---------------------------------------------------------------
@@ -54,9 +58,13 @@
//---------------------------------------------------------------
void CntHistoryViewItem::updateChildItems()
{
+ CNT_ENTRY
+
int flags = modelIndex().data(CntFlagsRole).toInt();
mIncoming = flags & CntIncoming ? true : false;
mNewMessage = flags & CntUnseen ? true : false;
+
+ CNT_LOG_ARGS(mIncoming << mNewMessage)
if (mNewMessage)
{
@@ -76,6 +84,10 @@
}
HbListViewItem::updateChildItems();
+
+ repolish();
+
+ CNT_EXIT
}
//---------------------------------------------------------------
@@ -84,6 +96,8 @@
//---------------------------------------------------------------
void CntHistoryViewItem::pressStateChanged(bool pressed, bool animate)
{
+ CNT_ENTRY
+
Q_UNUSED(animate);
if (pressed)
{
@@ -117,27 +131,8 @@
mFocusItem = NULL;
}
}
-}
-
-bool CntHistoryViewItem::event(QEvent* e)
-{
- bool result;
- if (e->type() == QEvent::GraphicsSceneResize)
- {
- // HbAbstractItemView has a performance improvement when drawing backrounds but seems
- // to screw the layout of history view items. This workaround fixes the issue. There should
- // be minimal performance drawbacks since GraphicsSceneResize events are quite few.
- // TODO: Remove this once Orbit changes their implementation. Not known when
- QGraphicsWidget *frame = static_cast<QGraphicsWidget*>(primitive("frame"));
- QRectF frameGeometry = frame->geometry();
- result = HbListViewItem::event(e);
- frame->setGeometry(frameGeometry);
- }
- else
- {
- result = HbListViewItem::event(e);
- }
- return result;
+
+ CNT_EXIT
}
// EOF
--- a/phonebookui/pbkcommonui/src/cntimportsview.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntimportsview.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -287,17 +287,7 @@
importSimItem->setData(HbIcon("qtg_large_sim"), Qt::DecorationRole);
mModel->insertRow(0,importSimItem);
-
- QStandardItem *importDeviceItem = new QStandardItem();
- QStringList deviceList;
- QString deviceImport(hbTrId("txt_phob_dblist_import_from_device"));
- deviceList << deviceImport;
- importDeviceItem->setData(deviceList, Qt::DisplayRole);
- importDeviceItem->setData(HbIcon("qtg_large_data_import"), Qt::DecorationRole);
- importDeviceItem->setEnabled(false);
-
- mModel->insertRow(1,importDeviceItem);
-
+
mListView->setModel(mModel);
mListView->setSelectionMode(HbAbstractItemView::NoSelection);
connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(endKeyPressed()));
--- a/phonebookui/pbkcommonui/src/cntkeygrabber.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntkeygrabber.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -17,14 +17,14 @@
#include "cntkeygrabber.h"
-#include <logsservices.h>
#include <hbmainwindow.h>
#include <xqaiwrequest.h>
#include <xqaiwdecl.h>
#include <xqappmgr.h>
#include <QCoreApplication>
#include <QKeyEvent>
-
+#include <xqserviceutil.h>
+#include <xqkeycapture.h>
/*!
Key press event handler for default actions when pressing either send or end key.
End key closes the application and send key opens dialer. Default functionality
@@ -36,9 +36,11 @@
CntKeyGrabber::CntKeyGrabber(HbMainWindow *window, QObject *parent) :
QObject(parent),
mMainWindow(window),
- mRequest(NULL)
+ mRequest(NULL),
+ mKeyCapture(NULL)
{
mMainWindow->installEventFilter(this);
+ mKeyCapture = new XqKeyCapture();
}
/*!
@@ -47,6 +49,12 @@
CntKeyGrabber::~CntKeyGrabber()
{
delete mRequest;
+ if ( mKeyCapture )
+ {
+ mKeyCapture->cancelCaptureKey(Qt::Key_Yes);
+ }
+ delete mKeyCapture;
+ mKeyCapture = NULL;
}
/*!
@@ -59,7 +67,15 @@
*/
bool CntKeyGrabber::eventFilter(QObject *obj, QEvent *event)
{
- if (event->type() == QEvent::KeyPress && obj == mMainWindow)
+ if ( event->type() == QEvent::ApplicationActivate )
+ {
+ mKeyCapture->captureKey( Qt::Key_Yes );
+ }
+ else if ( event->type() == QEvent::ApplicationDeactivate )
+ {
+ mKeyCapture->cancelCaptureKey( Qt::Key_Yes );
+ }
+ else if (event->type() == QEvent::KeyPress && obj == mMainWindow)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
@@ -85,7 +101,7 @@
{
QList<QVariant> args;
QVariantMap map;
- map.insert(XQLOGS_VIEW_INDEX, QVariant(int(LogsServices::ViewAll)));
+ map.insert(XQLOGS_VIEW_INDEX, QVariant(int(XQService::LogsViewAll)));
map.insert(XQLOGS_SHOW_DIALPAD, QVariant(true));
map.insert(XQLOGS_DIALPAD_TEXT, QVariant(QString()));
args.append(QVariant(map));
--- a/phonebookui/pbkcommonui/src/cntmainwindow.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntmainwindow.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -18,16 +18,18 @@
#include "cntmainwindow.h"
#include "cntdefaultviewmanager.h"
#include "cntviewnavigator.h"
+#include "cntabstractviewfactory.h"
#include "cntkeygrabber.h"
#include <cntdebug.h>
+#include <cntabstractengine.h>
+
CntMainWindow::CntMainWindow(QWidget *parent, int defaultView)
: HbMainWindow(parent),
- mViewManager(NULL),
- mDefaultView(defaultView)
+ mViewManager( NULL ),
+ mDefaultView( defaultView )
{
CNT_ENTRY
-
CntKeyGrabber *keyGrabber = new CntKeyGrabber(this, this);
if (defaultView != noView)
@@ -45,6 +47,7 @@
mViewManager = new CntDefaultViewManager( this );
mViewManager->setViewNavigator( navigator );
+ mViewManager->setViewFactory( new CntDefaultViewFactory( mViewManager->engine().extensionManager()) );
//activate the view
CntViewParameters viewParameters;
@@ -61,7 +64,7 @@
delete mViewManager;
mViewManager = NULL;
-
+
CNT_EXIT
}
--- a/phonebookui/pbkcommonui/src/cntnamesview.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntnamesview.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -55,12 +55,12 @@
bool CntNamesView::isDefault() const
{
Q_D(const CntNamesView);
- return d->mIsDefault;
+ return true;
}
int CntNamesView::viewId() const
{
Q_D(const CntNamesView);
- return d->mId;
+ return namesView;
}
void CntNamesView::setEngine( CntAbstractEngine& aEngine )
--- a/phonebookui/pbkcommonui/src/cntnamesview_p.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntnamesview_p.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -22,6 +22,7 @@
#include "cntglobal.h"
#include "cntdebug.h"
#include "cntapplication.h"
+#include "cntfavourite.h"
#include <cntabstractengine.h>
#include <cntuiextensionfactory.h>
@@ -51,6 +52,7 @@
const char *CNT_CONTACTLIST_XML = ":/xml/contacts_namelist.docml";
static const int CNT_MIN_ROW_COUNT = 2;
+bool CntNamesViewPrivate::mIsFirstTimeUse = true;
CntNamesViewPrivate::CntNamesViewPrivate() :
QObject(),
@@ -64,8 +66,6 @@
mNamesAction(NULL),
mMenuBuilder(NULL),
mHandledContactId(0),
- mIsDefault(true),
- mId( namesView ),
mActionGroup(NULL),
mMenu(NULL),
mFilterChanged(false)
@@ -145,6 +145,22 @@
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();
@@ -234,6 +250,46 @@
showFinder();
}
+ if (mIsFirstTimeUse)
+ {
+ // Disable FTU flag
+ mIsFirstTimeUse = false;
+
+ // Show import contacts popup only if there no local contacts
+ // Check row count from list model and exclude dummy mycard
+ if (mListModel->rowCount()==1 && mListModel->myCardId()<= 0)
+ {
+ // Default filter to fetch all contacts and groups
+ QContactFilter filter;
+ QList<QContactLocalId> contactIds = contactManager->contactIds(filter);
+
+ // Check if favourite group contact exists
+ // Favourite group contact is created by default in phonebook
+ int favouriteId = CntFavourite::favouriteGroupId(contactManager);
+ if ( (contactIds.isEmpty() )
+ || (contactIds.count() == 1 && contactIds.at(0) == favouriteId) )
+ {
+ HbMessageBox *note = new HbMessageBox();
+ note->setDismissPolicy(HbDialog::NoDismiss);
+ note->setTimeout(HbPopup::NoTimeout);
+ note->setBackgroundFaded(true);
+ note->setAttribute(Qt::WA_DeleteOnClose, true);
+ 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->setIcon(HbIcon("qtg_large_sim"));
+ note->setText(hbTrId("txt_phob_info_your_phonebook_is_empty_do_you_wish"));
+
+ note->open(this, SLOT(handleImportContacts(HbAction*)));
+ }
+ }
+ }
+
CNT_EXIT
}
@@ -687,4 +743,5 @@
return mLoader;
}
+
// End of File
--- a/phonebookui/pbkcommonui/src/cntphonenumberviewitem.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntphonenumberviewitem.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -324,7 +324,7 @@
model->appendRow(internetwork);
QStandardItem *sip = new QStandardItem;
- sip->setText(hbTrId("txt_phob_formlabel_val_sip"));
+ sip->setText(hbTrId("txt_phob_formlabel_sip"));
sip->setData(subTypeSIP, DetailSubType);
sip->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, DetailMaxLength);
model->appendRow(sip);
--- a/phonebookui/pbkcommonui/src/cntsettingsmodel.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntsettingsmodel.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -77,13 +77,13 @@
mNameListRowSettingkey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository,
KCRCntSettings.iUid,
KCntNameListRowSetting);
- int settingValue = mSettings.readItemValue(*mNameListRowSettingkey, XQSettingsManager::TypeInt).toInt();
+ int settingValue = mSettings.readItemValue(*mNameListRowSettingkey, XQSettingsManager::TypeInt).toInt();
if (settingValue == CntOneRowNameOnly) {
- rowSetting->setContentWidgetData("currentIndex", 0 );
- } else if (settingValue == CntTwoRowsNameAndPhoneNumber) {
- rowSetting->setContentWidgetData("currentIndex", 1 );
- }
+ rowSetting->setContentWidgetData("currentIndex", 0 );
+ } else if (settingValue == CntTwoRowsNameAndPhoneNumber) {
+ rowSetting->setContentWidgetData("currentIndex", 1 );
+ }
}
CntSettingsModel::~CntSettingsModel()
@@ -112,7 +112,7 @@
}
else if (topLeft.row() == 1) {
int selected = itemFromIndex(topLeft)->contentWidgetData( "currentIndex" ).toInt();
- if (selected == 0) {
+ if (selected == 0) {
written = mSettings.writeItemValue(*mNameListRowSettingkey, QVariant(CntOneRowNameOnly));
} else if (selected == 1) {
written = mSettings.writeItemValue(*mNameListRowSettingkey, QVariant(CntTwoRowsNameAndPhoneNumber));
--- a/phonebookui/pbkcommonui/src/cntsettingsview.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntsettingsview.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -44,7 +44,7 @@
mForm = static_cast<HbDataForm*> (document()->findWidget(QString("dataForm")));
mForm->setItemRecycling(true);
- mModel = new CntSettingsModel();
+ mModel = new CntSettingsModel();
mForm->setModel( mModel );
mBack = new HbAction(Hb::BackNaviAction, mView);
--- a/phonebookui/pbkcommonui/src/cntviewnavigator.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntviewnavigator.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -22,10 +22,12 @@
QObject( aParent ),
iTop( noView )
{
+
}
CntViewNavigator::~CntViewNavigator()
-{
+{
+
}
void CntViewNavigator::next( const int& aId, QFlags<Hb::ViewSwitchFlag> &flags )
--- a/phonebookui/phonebookapp/phonebookapp.pro Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookapp/phonebookapp.pro Fri Sep 17 08:27:32 2010 +0300
@@ -52,7 +52,7 @@
SOURCES += src/cntappservicehandler.cpp
# capability
-TARGET.CAPABILITY = CAP_APPLICATION
+TARGET.CAPABILITY = CAP_APPLICATION NetworkControl
TRANSLATIONS = contacts.ts
--- a/phonebookui/phonebookapp/src/main.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookapp/src/main.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -24,7 +24,9 @@
int main(int argc, char **argv)
{
+#if defined (TRACES) || defined (TRACE2FILE)
qInstallMsgHandler(MSG_HANDLER);
+#endif
CntApplication a( argc, argv );
--- a/phonebookui/phonebookservices/inc/cntservices.h Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/inc/cntservices.h Fri Sep 17 08:27:32 2010 +0300
@@ -174,7 +174,15 @@
void removeNotSupportedDetails(QContact& contact);
void fillOnlineAccount( QContactOnlineAccount& account, const QString& value, const QString& subType, bool defaultForOnlineAccountIsImpp);
QContactManager* contactManager();
-
+
+ /**
+ * Checks if we already have the given contact global uid in database. If so,
+ * updates the local id and managerUri accordingly.
+ *
+ * If given contact has already a local id, method does nothing.
+ */
+ void updateLocalId( QContact& aContact );
+
private: // from CntAbstractServiceProvider
void CompleteServiceAndCloseApp(const QVariant& retValue);
void overrideReturnValue(const QVariant& retValue);
--- a/phonebookui/phonebookservices/phonebookservices.pro Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/phonebookservices.pro Fri Sep 17 08:27:32 2010 +0300
@@ -68,7 +68,7 @@
src/cntservicesubeditview.cpp
# capability
-TARGET.CAPABILITY = CAP_APPLICATION
+TARGET.CAPABILITY = CAP_APPLICATION NetworkControl
TRANSLATIONS = contacts.ts
--- a/phonebookui/phonebookservices/src/cntservicecontactfetchview.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/src/cntservicecontactfetchview.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -234,12 +234,6 @@
// Set action filter
mAction = aArgs.value(ESelectedAction).toString();
- // ESelectedAction is defined in cntviewparams.h
-
- // Has never been implemented.
- //QString filterStr = aArgs.value(KCntServiceViewParamFilter).toString();
- // KCntServiceViewParamFilter is defined in cntserviceviewparams.h
-
if (mAction == KCntActionSms)
{
QContactActionFilter actionFilter;
@@ -254,9 +248,15 @@
}
else if (mAction == KCntActionEmail)
{
- QContactActionFilter actionFilter;
- actionFilter.setActionName("email");
- mListModel->setFilter(actionFilter);
+ QContactDetailFilter emailFilter;
+ emailFilter.setMatchFlags( QContactDetailFilter::MatchContains );
+ emailFilter.setDetailDefinitionName(
+ QContactEmailAddress::DefinitionName,
+ QContactEmailAddress::FieldEmailAddress );
+ // we need to give something to filter for the email filter
+ emailFilter.setValue( "@" );
+ mListModel->setFilter( emailFilter );
+
}
else
{
--- a/phonebookui/phonebookservices/src/cntservices.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/src/cntservices.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -83,15 +83,6 @@
CntServiceViewManager* srvMng = static_cast<CntServiceViewManager*>(mViewManager);
connect(srvMng, SIGNAL(applicationClosed()), this, SLOT(terminateService()));
}
-/*
-void CntServices::setViewManager( CntAbstractViewManager& aViewManager )
-{
- CNT_LOG
- mViewManager = &aViewManager;
- CntServiceViewManager* srvMng = static_cast<CntServiceViewManager*>(mViewManager);
- connect(srvMng, SIGNAL(applicationClosed()), this, SLOT(terminateService()));
-}
-*/
void CntServices::singleFetch(
const QString &title, const QString &action,
@@ -227,6 +218,9 @@
}
vCardFile.close();
+ // check if the contact is in db already.
+ updateLocalId( contact );
+
// Save thumbnail images
QList<QContactThumbnail> details = contact.details<QContactThumbnail>();
for (int i = 0;i < details.count();i++)
@@ -550,6 +544,33 @@
}
}
+void CntServices::updateLocalId( QContact& aContact )
+{
+ CNT_ENTRY
+ if ( aContact.localId() == 0 )
+ {
+ QContactGuid guid = aContact.detail<QContactGuid>();
+ QString guidString = guid.guid();
+
+ QContactDetailFilter filter;
+ filter.setDetailDefinitionName( QContactGuid::DefinitionName, QContactGuid::FieldGuid );
+ filter.setValue( guid.guid() );
+
+ QContactManager& cm = mEngine->contactManager( SYMBIAN_BACKEND );
+ QList<QContactLocalId> idList = cm.contactIds( filter, QList<QContactSortOrder>() );
+ int count = idList.count();
+
+ if ( !idList.isEmpty() )
+ {
+ QContactId id;
+ id.setLocalId( idList.first() );
+ id.setManagerUri( cm.managerUri() );
+
+ aContact.setId( id );
+ }
+ }
+ CNT_EXIT
+}
// This method is inherited from CntAbstractServiceProvider
void CntServices::CompleteServiceAndCloseApp(const QVariant& retValue)
{
--- a/phonebookui/phonebookservices/src/cntserviceviewfactory.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/src/cntserviceviewfactory.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -33,10 +33,12 @@
CntDefaultViewFactory( aMgr ),
mProvider( aServiceProvider )
{
+
}
CntServiceViewFactory::~CntServiceViewFactory()
{
+
}
CntAbstractView* CntServiceViewFactory::createView( int aViewId )
--- a/phonebookui/phonebookservices/src/cntserviceviewmanager.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/src/cntserviceviewmanager.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -24,10 +24,10 @@
CntServiceViewManager::CntServiceViewManager( HbMainWindow *mainWindow,
CntAbstractServiceProvider& aProvider ):
CntDefaultViewManager(mainWindow)
- {
+{
// ownership of the factory is given to the base class.
setViewFactory( new CntServiceViewFactory( aProvider, engine().extensionManager() ) );
- }
+}
/*!
Destructor
--- a/phonebookui/phonebookservices/src/main.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/src/main.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -19,6 +19,7 @@
#include <hbmainwindow.h>
#include <QTranslator>
#include <QLocale>
+#include <QScopedPointer>
#include "cntserviceproviderold.h"
#include "cntserviceproviderold2.h"
#include "cntserviceproviderfetch.h"
@@ -34,7 +35,9 @@
int main(int argc, char **argv)
{
+#if defined (TRACES) || defined (TRACE2FILE)
qInstallMsgHandler(MSG_HANDLER);
+#endif
HbApplication a( argc, argv );
@@ -58,12 +61,11 @@
CntServices* services = new CntServices();
services->setParent( &mainWindow ); // for ownership
- CntServiceViewManager* viewManager = new CntServiceViewManager(
+ QScopedPointer<CntServiceViewManager> viewManager(new CntServiceViewManager(
&mainWindow,
- *services ); // as CntAbstractServiceProvider
+ *services )); // as CntAbstractServiceProvider
viewManager->setViewNavigator( navigator );
- //services->setViewManager( *viewManager );
services->setEngine( viewManager->engine() );
// These objects talk with QT Highway (send/receive)
--- a/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testpbkservices.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testpbkservices.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -683,7 +683,7 @@
if ( aNewInterface )
{
- QString interface("com.nokia.symbian.IContactsFetch");
+ QString interface("com.nokia.symbian.IContactsEdit");
// service name is not needed
mRequest = appMng.create( interface, operation, true); // embedded
}
--- a/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testvcard.vcf Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testvcard.vcf Fri Sep 17 08:27:32 2010 +0300
@@ -1,320 +1,45 @@
BEGIN:VCARD
-VERSION:3.0
-FN:Alice Jones
-N:Jones;Alice;;;
-TEL;TYPE=HOME,CELL:555-4444
-TEL;TYPE=WORK,FAX:555-1212
-ADR;TYPE=WORK:;;Leeds West Yorkshire;;New York;10087;United States
-EMAIL:mailto:alice.jones@nokia.com
-TITLE:Assistant Manager
-ORG:;Services
-NOTE:This is the note for the vCard.
-BDAY:20100101
-X-SIP:Alice@yahoo.com
-PHOTO;TYPE=PNG;ENCODING=B:/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAASw
- AA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAwICAgICAwICAwUDAwMFBQQDAwQFBgUFBQUFBggGBwcHB
- wYICAkKCgoJCAwMDAwMDA4ODg4OEBAQEBAQEBAQEAEDBAQGBgYMCAgMEg4MDhIUEBAQEBQREBAQ
- EBARERAQEBAQEBEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/8AAEQgBLAEsAwERAAIRAQM
- RAf/EANcAAQAABwEBAAAAAAAAAAAAAAABAgUGBwgJAwQBAQABBQEBAAAAAAAAAAAAAAABAgQFBg
- cDCBAAAQMDAgQEAwMFBwwNDQAAAQACAxEEBQYHITESCEFREwlhIhRxgTKRQiMVGaFSM9M0Fhjws
- YLSUySEJXWVFzjB0eFicpKyQ3S01DVlg6OzRFRklKTERYUmJxEAAgEDAgMCCAgMBQQDAAAAAAEC
- EQMEIQUxEgZBUWFxgZGxIjITocHR4VIUFQfw8UJiorLiIzMkNBZyglM1F8LSQyZEJTb/2gAMAwE
- AAhEDEQA/AOqaAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAggIoAgIIAgIoAgCAIAgCAggCAICKAIC
- CAVQEUAQBAQQEUBAmiAVQEUAQBAEAQBAEAQBAEBA1pwSoJC4gqFqySNSVS6kEOojmqm0KEanmUY
- qiPEngVFAeczngijgKcx5qltrVqoqlxIteSRwp9qiM3JcKFOpP8AmqutCohWqlSTAr5IB1E8Cqg
- KnzSqAqQmgoQB81TIiqIOLvA0+1Q02tCGn2BvX18TX4ImqFVVwJuo14BQqgVKrDRKXOHAn71S2U
- 6vgRcSQADxUvgVUFXDhVCKqoL6eKjVFVGC5xHAqFIgfMeSqTqidCbiqWnUggSQqwQqaoU0Yc6g8
- vtVLdCqqROOSqBFAEAQBAEAQBAEBJKaAfaqJxbRKMDbq96OyWzGtLnQmuLy8iyttHHNLHb2hlYG
- ytD2/N1DwK2jb+m8/Msq5ZhzIxV3Pt2rjjJlo/tJO2Q/+v5EfH6E/wBuskujN3f/AIX8B4/a2P3
- n24P3Ee2nO5Wzw8OWvLaW9kZBFNdWnpQte9waC9/WaCp5q3u9H7tFVdl6eIrjuuO+02Tjuop4Y7
- i3cJY5Gh8cjTUOa4VBB8iFpzfK2no1pQy0eWSqj1B6vmCh6ktUZYW8u9WhditNRat1/LNDj5Zm2
- zX28XrP9Rw4VFQsttu25ObcduzHmdKlrkXrduKc3QwuPcj7ZC6gyGRqCBxsSOJ5fnrZX0Xuy1dv
- Txli91sU0Zshg9Q2Oo8HjdR45xdY5S3ivLZ7qNJimYJGkjw4FaVctStzlCfFOhlITUrfMYU3G76
- e3PbK/ucTlM+7K39k4su7LDxfWSRPBp0u4sbWvkVs2L0tuV6PNC06d704mNnuViPFli/tQ+2v/w
- Bl1CP/AMU3+PWR/sjdn/46eU8vtfG+kQ/ah9tnP6XUFP8AJTf49F0Puy/IT8o+18b6RH9qH22eF
- rqD/Nbf45T/AGRu3+n8I+2MfvPW29zvtqubhluY85AHf8/LjA2MfaRMT+4p/sfdv9P4SPtjH7zO
- +12+W1+82Ofktus/b5f0QDc2sbum4gr4SROo4Favuez5uBJLItuNeFeD8RksfItXfZZSN7O5TbH
- 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
- jmLTzb1hodT4VXrl7pm348ty7KUfotunmIhjWoOsYpPwIvYNIpwWLjrqz3Y6XE8UcE3VkogWFxF
- eFP3VVUpcaslEby414D4KOZ11R6N1QETmupUkFVI8lBrtIiMt4c1S+NSpskc2UyEdIoBwPinLR8
- 1Sp+zVcS3MjtnoXNassteZbA2lzqHHMMdllZIWOuImE1o15FeavLeXfjbcIzai+yp4O1GTq1qXJ
- 0OBqG+NanirJ6HtJtExY+oNOXJQ4VdahaIiY68+KqcmuBFCX0yOJJNfNRFt8URy+E9I2lvNVIlK
- hOpJCAIAgCAIAgIKKAEKQEBFAEBCnGqAEVUAIApAQEUAUAgpBFAQQBAEAQEUAQBAQUAIBQqQQ6U
- 7QR6QoYFFIIoAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAID//Z
-UID:00000000de2f6d21-00e16017db094b12-56
-REV:2010-03-22T14:48:55
+VERSION:2.1
+N:Gump;Forrest
+FN:Forrest Gump
+ORG:Bubba Gump Shrimp Co.
+TITLE:Shrimp Man
+TEL;FOOBAR;VOICE:+1 (11) 555 1212
+TEL;HOME;VOICE:(404) 555-1212
+TEL;CELL;VOICE:+358 50 4871 460
+ADR;FOOBAR:;;100 Waters Edge;Baytown;LA;30314;United States of America
+LABEL;WORK;ENCODING=QUOTED-PRINTABLE:100 Waters Edge=0D=0A=
+Baytown, LA 30314=0D=0A=
+United States of America
+ADR;HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America
+LABEL;HOME;ENCODING=QUOTED-PRINTABLE:42 Plantation St.=0D=0A=
+Baytown, LA 30314=0D=0A=
+United States of America
+X-MS-OL-DEFAULT-POSTAL-ADDRESS:0
+EMAIL;PREF;INTERNET:forrestgump@example.com
+X-MS-CARDPICTURE;TYPE=JPEG;ENCODING=BASE64:
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
+ GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
+ KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
+ CACUACcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6UdwpAPU0oIwSTxVeQ7nOPoKRj2B4FAEk
+ k4/g59zREMgk9fWoFGSKsr8qc+maAIJPnmx6cUUkIy5aigBw4yfSkpT93680lABEMtUs52xk
+ evFJAOabcHkLQA1DsiJ70US8Kq0UAK3Xim0vagdfpQBYhHy5qufmm/GrJ+SP6Cq0PLE0AJMc
+ vj0opjNlyfeigCTtTohyKb2qaEfyxQAlw2EA9ajT5YyfWluDlwPQUFSVCryeM0AV6KmEaLy5
+ 59KKAFHJxU0ZwoxyTzSBoz0Xn6UOSqEjigBDGN2X5J7CmSSEYCjbSRZLEnkgUyQgufSgBEG5
+ vmNFNAycCigCzEPmH50s56D8adEvyk/hTJGXeeMkcc9BQAkQIXPvUeFX7xyfQVK5Pl4OBwBx
+ UFAAXPRcKPaimUUAaJ4TJ7VUA3MPerMxxGfeoI+pPoKACY8Adjk1FT5fv49OKZQAyiiigC3c
+ HkD0psXC89zSSHLNTjwn0H86AISckmkoPWigBlFFFAFoPuIBHWnOVI5xzTI+pPoKSTqB6CgA
+ 2Ken6GmGP3/MU09aAxHQkUABRscc/Q0Ubz3AP4UUATp9xvwpj/fb60UUARnrRRRQAyiiigD/
+ 2Q==
+
+X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="fit" area="16" use="cardpicture"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telcell" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Mobile</label></fld><fld xmlns="" prop="telhome" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Home</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrhome" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
+REV:20100407T092228Z
END:VCARD
--- a/phonebookui/rom/phonebook.iby Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/rom/phonebook.iby Fri Sep 17 08:27:32 2010 +0300
@@ -34,7 +34,6 @@
file=ABI_DIR\BUILD_DIR\pbkcommonui.dll SHARED_LIB_DIR\pbkcommonui.dll UNPAGED
file=ABI_DIR\BUILD_DIR\phonebook.exe SHARED_LIB_DIR\phonebook.exe
-S60_APP_AIF_RSC(phonebook)
UPGRADABLE_APP_REG_RSC(phonebook)
data=DATAZ_\RESOURCE_FILES_DIR\qt\plugins\contacts\cntactionsplugin.qtplugin RESOURCE_FILES_DIR\qt\plugins\contacts\cntactionsplugin.qtplugin
--- a/phonebookui/rom/phonebookservices.iby Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/rom/phonebookservices.iby Fri Sep 17 08:27:32 2010 +0300
@@ -22,7 +22,6 @@
file=ABI_DIR\UREL\phonebookservices.exe SHARED_LIB_DIR\phonebookservices.exe
-S60_APP_AIF_RSC(phonebookservices)
S60_APP_RESOURCE(phonebookservices)
UPGRADABLE_APP_REG_RSC(phonebookservices)
--- a/presencecache/inc/presencecacheids.hrh Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/inc/presencecacheids.hrh Fri Sep 17 08:27:32 2010 +0300
@@ -26,19 +26,14 @@
-// Interface UID for Presencefeatures interface
-// #define XIMP_ECOM_IF_UID_PRESENCE_INTERFACE 0x2000B185
// Interface UID for PresenceCacheReader interface
-// #define XIMP_ECOM_IF_UID_PRESENCE_CACHE_READER 0x2000B4EC
#define PRESENCECACHE_ECOM_IF_UID_READER 0xEF007001 // todo: official number
// Interface UID for PresenceCacheWriter interface
-// #define XIMP_ECOM_IF_UID_PRESENCE_CACHE_WRITER 0x2000B4ED
#define PRESENCECACHE_ECOM_IF_UID_WRITER 0xEF007002 // todo: official number
// Default implementation resulution data
-// for XIMP presencefeature interterface Base ECom interface
#define PRESENCECACHE_ECOM_DEFAULT_DATA_PRESENCE_INTERFACE "default"
Binary file presencecache/presencecacheqt/tsrc/presencefeeddemo_qt/presencefeeddemo.sisx has changed
--- a/presencecache/presencecachesymbian/group/presencecacheuids.hrh Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/presencecachesymbian/group/presencecacheuids.hrh Fri Sep 17 08:27:32 2010 +0300
@@ -34,4 +34,4 @@
#define PRESENCECACHE_DLL_UID_UTILS 0x2001B31C
-#endif // XIMPDLLUIDS_HRH
+#endif // PRESENCECACHEUIDS_HRH
--- a/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheserver.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheserver.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -26,7 +26,7 @@
#include "presencecacheserver.h"
#include "presencecachesession.h"
#include "presencecachedefs2.h"
-#include "presencetrace.h"
+#include "prestrace.h"
#include "presencecachesecuritypolicy.h"
//Include Cache server namespace
--- a/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheservicestore.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheservicestore.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -21,7 +21,7 @@
#include "presencecacheservicestore.h"
#include "presencecachebuddystore.h"
-#include "presencetrace.h"
+#include "prestrace.h"
#include "presenceobjecthelpers.h"
// ---------------------------------------------------------------------------
--- a/presencecache/presencecachesymbian/presencecacheserver2/src/presencecachesession.cpp Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/presencecachesymbian/presencecacheserver2/src/presencecachesession.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -23,7 +23,7 @@
#include "presenceobjecthelpers.h"
#include "presencecachesession.h"
#include "presencecacheserver.h"
-#include "presencetrace.h"
+#include "prestrace.h"
#include "cacheobjecthelpers.h"
#include "presencecacheservicestore.h"
#include "presencecachebuddystore.h"
--- a/presencecache/presencecachesymbian/presencecacheutils/group/presencecacheutils.mmp Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/presencecachesymbian/presencecacheutils/group/presencecacheutils.mmp Fri Sep 17 08:27:32 2010 +0300
@@ -28,7 +28,7 @@
VENDORID VID_DEFAULT
SOURCEPATH ../src
-SOURCE presencetrace.cpp
+SOURCE prestrace.cpp
SOURCE presencecachebuddyinfo.cpp
SOURCE presenceobjecthelpers.cpp
--- a/presencecache/presencecachesymbian/presencecacheutils/inc/presencetrace.h Thu Sep 02 20:16:15 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Presence Cache trace utilities
-*
-*/
-
-#ifndef PRESENCETRACE_H__
-#define PRESENCETRACE_H__
-
-#include <e32std.h>
-
-
-// CONSTANTS
-_LIT( KPresenceTraceLogDir, "presence" );
-_LIT( KPresenceTraceLogFile, "presence.log" );
-
-
- //TRACE INDIRECTION
-#ifdef _DEBUG
-
- /**
- * Trace handlers. Different statements with
- * different names for handling different parameter amounts.
- *
- * Link against ximpdatamodel.dll to use trace
- * services.
- *
- * Statements produce traces only in debug builds.
- * In hardware debug builds traces go to file defined
- * KPresenceTraceLogDir and KPresenceTraceLogFile.
- */
- #define TRACE( aStatement ) PresenceTrace::Trace( aStatement )
- #define TRACE_1( aStatement, aP1 ) PresenceTrace::Trace( aStatement, aP1 )
- #define TRACE_2( aStatement, aP1, aP2 ) PresenceTrace::Trace( aStatement, aP1, aP2 )
- #define TRACE_3( aStatement, aP1, aP2, aP3 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3 )
- #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4 )
- #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5 )
- #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 )
-
-
- /**
- * Block (and thus also function) trace handlers. These
- * mark block enter, exit and also non local exit to traces.
- *
- * Example:
- * void CSomeClass::SomeMethod()
- * {
- * TRACE_BLOCK_ENTER( "CSomeClass::SomeMethod" );
- *
- * Do your stuff here. If there happens a leave
- * or return before "TRACE_BLOCK_EXIT()" statement,
- * it is marked to traces with "CSomeClass::SomeMethod - nonlocal exit"
- *
- * TRACE_BLOCK_EXIT();
- * }
- */
- #define TRACE_BLOCK_ENTER( aBlockName ) TPresenceBlockTraceHandler __blockTraceHandler( _S( aBlockName ) );
- #define TRACE_BLOCK_EXIT() __blockTraceHandler.NormalExit();
-
-
-
-#else //NOT _DEBUG
-
- #define TRACE( aStatement )
- #define TRACE_1( aStatement, aP1 )
- #define TRACE_2( aStatement, aP1, aP2 )
- #define TRACE_3( aStatement, aP1, aP2, aP3 )
- #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 )
- #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 )
- #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 )
- #define TRACE_BLOCK_ENTER( aBlockName )
- #define TRACE_BLOCK_EXIT()
-
-#endif
-
-
-
-/**
- * XIMP Framework trace sink.
- *
- * @lib ximpdatamodel.dll
- * @since S60 v3.2
- */
-class PresenceTrace
- {
-public:
-
- /**
- * Trace sink.
- *
- * @param aFmt A format list to print to trace.
- */
- IMPORT_C static void Trace( TRefByValue<const TDesC> aFmt,... );
-
-
-
-private: //Prohibited construtor / destructor
- PresenceTrace();
- ~PresenceTrace();
- };
-
-
-
-/**
- * Block trace handler.
- */
-NONSHARABLE_CLASS( TPresenceBlockTraceHandler )
- {
-public:
-
- /**
- * Block trace handler constructor.
- *
- * @param aBlockName Block name.
- */
- TPresenceBlockTraceHandler( const TText* aBlockName );
-
-
- /**
- * Block trace handler destructor.
- */
- ~TPresenceBlockTraceHandler();
-
-
- /**
- * Marks that block has reached its normal exit.
- */
- void NormalExit();
-
-
-private:
- //Block name
- const TPtrC iBlockName;
-
- //Normal exit marker
- TBool iBlockNormalExit;
-};
-
-
-#endif // PresenceTrace_H__
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/presencecache/presencecachesymbian/presencecacheutils/inc/prestrace.h Fri Sep 17 08:27:32 2010 +0300
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Presence Cache trace utilities
+*
+*/
+
+#ifndef PRESTRACE_H__
+#define PRESTRACE_H__
+
+#include <e32std.h>
+
+
+// CONSTANTS
+_LIT( KPresenceTraceLogDir, "presence" );
+_LIT( KPresenceTraceLogFile, "presence.log" );
+
+
+ //TRACE INDIRECTION
+#ifdef _DEBUG
+
+ /**
+ * Trace handlers. Different statements with
+ * different names for handling different parameter amounts.
+ *
+ * Statements produce traces only in debug builds.
+ * In hardware debug builds traces go to file defined
+ * KPresenceTraceLogDir and KPresenceTraceLogFile.
+ */
+ #define TRACE( aStatement ) PresenceTrace::Trace( aStatement )
+ #define TRACE_1( aStatement, aP1 ) PresenceTrace::Trace( aStatement, aP1 )
+ #define TRACE_2( aStatement, aP1, aP2 ) PresenceTrace::Trace( aStatement, aP1, aP2 )
+ #define TRACE_3( aStatement, aP1, aP2, aP3 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3 )
+ #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4 )
+ #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5 )
+ #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 )
+
+
+ /**
+ * Block (and thus also function) trace handlers. These
+ * mark block enter, exit and also non local exit to traces.
+ *
+ * Example:
+ * void CSomeClass::SomeMethod()
+ * {
+ * TRACE_BLOCK_ENTER( "CSomeClass::SomeMethod" );
+ *
+ * Do your stuff here. If there happens a leave
+ * or return before "TRACE_BLOCK_EXIT()" statement,
+ * it is marked to traces with "CSomeClass::SomeMethod - nonlocal exit"
+ *
+ * TRACE_BLOCK_EXIT();
+ * }
+ */
+ #define TRACE_BLOCK_ENTER( aBlockName ) TPresenceBlockTraceHandler __blockTraceHandler( _S( aBlockName ) );
+ #define TRACE_BLOCK_EXIT() __blockTraceHandler.NormalExit();
+
+
+
+#else //NOT _DEBUG
+
+ #define TRACE( aStatement )
+ #define TRACE_1( aStatement, aP1 )
+ #define TRACE_2( aStatement, aP1, aP2 )
+ #define TRACE_3( aStatement, aP1, aP2, aP3 )
+ #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 )
+ #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 )
+ #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 )
+ #define TRACE_BLOCK_ENTER( aBlockName )
+ #define TRACE_BLOCK_EXIT()
+
+#endif
+
+
+
+/**
+ * trace sink.
+ */
+class PresenceTrace
+ {
+public:
+
+ /**
+ * Trace sink.
+ *
+ * @param aFmt A format list to print to trace.
+ */
+ IMPORT_C static void Trace( TRefByValue<const TDesC> aFmt,... );
+
+
+
+private: //Prohibited construtor / destructor
+ PresenceTrace();
+ ~PresenceTrace();
+ };
+
+
+
+/**
+ * Block trace handler.
+ */
+NONSHARABLE_CLASS( TPresenceBlockTraceHandler )
+ {
+public:
+
+ /**
+ * Block trace handler constructor.
+ *
+ * @param aBlockName Block name.
+ */
+ TPresenceBlockTraceHandler( const TText* aBlockName );
+
+
+ /**
+ * Block trace handler destructor.
+ */
+ ~TPresenceBlockTraceHandler();
+
+
+ /**
+ * Marks that block has reached its normal exit.
+ */
+ void NormalExit();
+
+
+private:
+ //Block name
+ const TPtrC iBlockName;
+
+ //Normal exit marker
+ TBool iBlockNormalExit;
+};
+
+
+#endif // PRESTRACE_H__
+
--- a/presencecache/presencecachesymbian/presencecacheutils/src/presencetrace.cpp Thu Sep 02 20:16:15 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: TPresence Cache trace implementation
-*
-*/
-
-// INCLUDE FILES
-#include "presencetrace.h"
-
-#include <e32svr.h>
-#include <e32std.h>
-#include <flogger.h>
-
-
-/**
- * Handler used by trace implementation to truncate
- * the string rather than panic in case of buffer overflow.
- *
- * @since 3.0
- */
-NONSHARABLE_CLASS( TPresenceOverflowTruncate ) : public TDes16Overflow
- {
- public:
- void Overflow( TDes16& /*aDes*/ ) {}
- };
-
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// PresenceTrace::Trace()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void PresenceTrace::Trace( TRefByValue<const TDesC> aFmt,... )
- {
- TBuf< 250 > buffer;
- buffer.Append( _L("[") );
- buffer.Append( RThread().Name() );
- buffer.Append( _L("] ") );
-
- TPresenceOverflowTruncate overflowHandler;
-
- VA_LIST list;
- VA_START( list, aFmt );
- buffer.AppendFormatList( aFmt, list, &overflowHandler );
-
-
-// #ifdef __WINS__
- RDebug::Print( _L("%S"), &buffer );
-// #endif // __WINS__ Pia
-// Pia #else
-
- RFileLogger logger;
- if( logger.Connect() == KErrNone )
- {
- logger.SetDateAndTime( EFalse, ETrue );
- logger.CreateLog( KPresenceTraceLogDir,
- KPresenceTraceLogFile,
- EFileLoggingModeAppend );
-
- logger.Write( buffer );
- logger.CloseLog();
- logger.Close();
- }
-
-// Pia #endif // __WINS__
- }
-
-
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// TPresenceBlockTraceHandler::TPresenceBlockTraceHandler()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TPresenceBlockTraceHandler::TPresenceBlockTraceHandler( const TText* aBlockName )
- : iBlockName( aBlockName ),
- iBlockNormalExit( EFalse )
- {
- TRACE_1( _L("%S - enter"), &iBlockName );
- }
-
-
-// -----------------------------------------------------------------------------
-// TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler() // CSI: 82 #
- {
- if( !iBlockNormalExit )
- {
- //Normal exit not recorded so far
- //Thus report here nonlocal exit
- TRACE_1( _L("%S - nonlocal exit"), &iBlockName );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// TPresenceBlockTraceHandler::NormalExit()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void TPresenceBlockTraceHandler::NormalExit()
- {
- TRACE_1( _L("%S - exit"), &iBlockName );
- iBlockNormalExit = ETrue;
- }
-
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/presencecache/presencecachesymbian/presencecacheutils/src/prestrace.cpp Fri Sep 17 08:27:32 2010 +0300
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: TPresence Cache trace implementation
+*
+*/
+
+// INCLUDE FILES
+#include "prestrace.h"
+
+#include <e32svr.h>
+#include <e32std.h>
+#include <flogger.h>
+
+
+/**
+ * Handler used by trace implementation to truncate
+ * the string rather than panic in case of buffer overflow.
+ *
+ * @since 3.0
+ */
+NONSHARABLE_CLASS( TPresenceOverflowTruncate ) : public TDes16Overflow
+ {
+ public:
+ void Overflow( TDes16& /*aDes*/ ) {}
+ };
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// PresenceTrace::Trace()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void PresenceTrace::Trace( TRefByValue<const TDesC> aFmt,... )
+ {
+ TBuf< 250 > buffer;
+ buffer.Append( _L("[") );
+ buffer.Append( RThread().Name() );
+ buffer.Append( _L("] ") );
+
+ TPresenceOverflowTruncate overflowHandler;
+
+ VA_LIST list;
+ VA_START( list, aFmt );
+ buffer.AppendFormatList( aFmt, list, &overflowHandler );
+
+
+// #ifdef __WINS__
+ RDebug::Print( _L("%S"), &buffer );
+// #endif // __WINS__ Pia
+// Pia #else
+
+ RFileLogger logger;
+ if( logger.Connect() == KErrNone )
+ {
+ logger.SetDateAndTime( EFalse, ETrue );
+ logger.CreateLog( KPresenceTraceLogDir,
+ KPresenceTraceLogFile,
+ EFileLoggingModeAppend );
+
+ logger.Write( buffer );
+ logger.CloseLog();
+ logger.Close();
+ }
+
+// Pia #endif // __WINS__
+ }
+
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// TPresenceBlockTraceHandler::TPresenceBlockTraceHandler()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPresenceBlockTraceHandler::TPresenceBlockTraceHandler( const TText* aBlockName )
+ : iBlockName( aBlockName ),
+ iBlockNormalExit( EFalse )
+ {
+ TRACE_1( _L("%S - enter"), &iBlockName );
+ }
+
+
+// -----------------------------------------------------------------------------
+// TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler() // CSI: 82 #
+ {
+ if( !iBlockNormalExit )
+ {
+ //Normal exit not recorded so far
+ //Thus report here nonlocal exit
+ TRACE_1( _L("%S - nonlocal exit"), &iBlockName );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// TPresenceBlockTraceHandler::NormalExit()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TPresenceBlockTraceHandler::NormalExit()
+ {
+ TRACE_1( _L("%S - exit"), &iBlockName );
+ iBlockNormalExit = ETrue;
+ }
+
+