contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp
changeset 81 640d30f4fb64
parent 72 6abfb1094884
--- a/contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp	Fri Oct 08 11:42:51 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp	Fri Oct 15 12:24:46 2010 +0300
@@ -55,18 +55,6 @@
 // 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
 */
@@ -92,7 +80,8 @@
   mThumbnailPixmap(QPixmap()),
   mThumbnailInProgress(false),
   mTranslator(new HbTranslator(translationsPath, translationsFile)),
-  mPendingExit(false)
+  mPendingExit(false),
+  mNoneContactMessage(0)
 {
     // Localization file loading   		
 	mTranslator->loadCommon();    
@@ -134,9 +123,6 @@
     
     connect(mThumbnailManager.data(), SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
         this, SLOT(thumbnailReady(QPixmap, void*, int, int)));
-    
-
-      
 }
 
 /*!
@@ -353,6 +339,15 @@
 {
     if (mContactNameLabel) {
         mContactNameLabel->setPlainText(sName);
+        HbFontSpec aFontSpec(HbFontSpec::Secondary);
+		QFontMetrics aMetrics(aFontSpec.font());
+		int aTextWidth = aMetrics.width(sName);
+	    qreal aWidgetWidth = 11 * HbDeviceProfile::current().unitValue();
+		if (aTextWidth > aWidgetWidth) {
+		    mContactNameLabel->setAlignment(Qt::AlignLeft);
+		} else {
+		    mContactNameLabel->setAlignment(Qt::AlignHCenter);
+		}
     }    
 
     update();
@@ -406,15 +401,15 @@
         fontSpec.setTextHeight(textHeight);
     }
 
+    mContactNameLabel = new HbLabel(this);
+    mContactNameLabel->setTextWrapping(Hb::TextNoWrap);
+    mContactNameLabel->setFontSpec(fontSpec);
     if (mContactLocalId == unUsedContactId) {
-        mContactNameLabel = new HbLabel("");
+        setName("");
     } else {
-		QString name = getContactDisplayName(mContact);
-        mContactNameLabel = new HbLabel(name);
+        setName(getContactDisplayName(mContact));
     }            
     
-    mContactNameLabel->setAlignment(Qt::AlignHCenter);
-    mContactNameLabel->setFontSpec(fontSpec);
     // color from theme
     QColor textColor = HbColorScheme::color(normalTextColor);
     if (textColor.isValid()) {
@@ -484,7 +479,6 @@
 {
 	qDebug() << "mouseReleaseEvent event->type() = " << (int)event->type();
 
-	//Q_UNUSED(event);
     if (event && event->type() == QEvent::GraphicsSceneMouseRelease) {
         // If the widget doesn't have contact yet and
         // there are contacts, select one.    
@@ -492,18 +486,8 @@
             if (contactsExist()) {				    
                 launchSingleContactSelecting();                  
             } else {
-                // Otherwise ask if user wants to open phonebook
-                // tmp variable used for title, otherwise parent param is ignored in mb
-                QString title = hbTrId("txt_friend_widget_info_you_can_not_use_this_widge");
-                HbDeviceMessageBox mb( title, HbMessageBox::MessageTypeQuestion, this);
-                mb.setAction(new QAction(hbTrId("txt_common_button_open"),   &mb), 
-                    HbDeviceMessageBox::AcceptButtonRole);
-                mb.setAction(new QAction(hbTrId("txt_common_button_cancel"), &mb), 
-                    HbDeviceMessageBox::RejectButtonRole);
-                mb.setIconVisible(false);
-                if (mb.exec() == mb.action(HbDeviceMessageBox::AcceptButtonRole)) {				        
-                    mLauncher->openPhonebookCreateNew();
-                }
+            	// otherwise ask user if want create one
+            	showNoneContactMessage();
             }
         } else if (!mLauncher->isVisible()) {
             // Change the frame layout
@@ -679,25 +663,20 @@
     if (!mContactManager) { 
         createContactManager();
     }
-    bool ret=false;
-    // 
+    bool aResult = false;
+
     if (mContactManager) {
         QList<QContactLocalId> contactIds = mContactManager->contactIds();
         qDebug() << "contact count " << contactIds.count();
-        if (contactIds.count() > 0) {
-        qDebug() << "first " << contactIds.first();
-        int i;
-        for(i=0; i<contactIds.count(); i++) {
-			qDebug() << "contactIds i " << i << " id " << contactIds.at(i);
-        }                        
-            if (contactIds.first() != mContactManager->selfContactId() ||
-                contactIds.count() > 1) {
-                ret=true;
-            }
+    	if (contactIds.count() > 1) {
+    		aResult = true;
+    	} else if (contactIds.count() == 1 &&
+    			   contactIds.first() != mContactManager->selfContactId()) {
+			aResult = true;
         }
     }
     
-    return ret;
+    return aResult;
 }
 
 /*!
@@ -717,20 +696,25 @@
     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;
-    mContactSelectRequest->setArguments(args);
+    if (mContactSelectRequest) {
+    	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;
+		mContactSelectRequest->setArguments(args);
+		mContactSelectRequest->setSynchronous(false);
     
-    qDebug() << "---- setArgs done ---------------------"; //,,28.5.          
+		qDebug() << "---- setArgs done ---------------------"; //,,28.5.          
     
-    result = mContactSelectRequest->send();
-    if (!result) {
-        qDebug() << "Sending XQServiceRequest failed";
-    }  
+		result = mContactSelectRequest->send();
+		if (!result) {
+			qDebug() << "Sending XQServiceRequest failed";
+		}
+    } else {
+    	qDebug() << "mContactSelectRequest not created !!!";
+    }
     
     qDebug() << "- launchSingleContactSelecting() done"; //,,
    
@@ -882,7 +866,11 @@
     update();
 }
 
-void ContactWidgetHs::onSelfContactIdChanged(const QContactLocalId &theOldId,
+/*!
+ * check if local contact was changed to self contact,
+ * if yes remove widget form homescreen 
+ */
+void ContactWidgetHs::onSelfContactIdChanged(const QContactLocalId & /*theOldId*/,
         const QContactLocalId &theNewId) {
     if (0 != theNewId && mContactLocalId == theNewId) {
         qDebug() << "-deleting widget after selfcontact change"
@@ -891,6 +879,9 @@
     }
 }
 
+/*!
+ * function to finish widget and remove widget from homescreen
+ */
 void ContactWidgetHs::finishWidget() {
     mAvatarIconItem->deleteLater();
     mContactNameLabel->deleteLater();
@@ -903,5 +894,42 @@
     	mPendingExit = true;
     }
 }
+
+/*!
+ * Ask if user wants to open phonebook
+ */
+void ContactWidgetHs::showNoneContactMessage() {
+	if (0 == mNoneContactMessage) {
+	    QString aTitle = hbTrId("txt_friend_widget_info_you_can_not_use_this_widge");
+		mNoneContactMessage = new HbDeviceMessageBox(aTitle,
+				HbMessageBox::MessageTypeQuestion,
+				this);
+		mNoneContactMessage->setAction(
+				new QAction(hbTrId("txt_common_button_open"), mNoneContactMessage),
+		        HbDeviceMessageBox::AcceptButtonRole);
+		mNoneContactMessage->setAction(
+				new QAction(hbTrId("txt_common_button_cancel"), mNoneContactMessage),
+				HbDeviceMessageBox::RejectButtonRole);
+		mNoneContactMessage->setIconVisible(false);
+		connect(mNoneContactMessage, SIGNAL(aboutToClose()),
+				this, SLOT(onAboutCloseNoneContactMessage()));
+	}
+	mNoneContactMessage->show();
+}
+
+/*!
+ * if user select open in mNoneContactMessage,
+ * open a phonebook for creating new contact
+ */
+void ContactWidgetHs::onAboutCloseNoneContactMessage() {
+	if (mNoneContactMessage) {
+		const QAction * aResult = mNoneContactMessage->triggeredAction();
+		bool aCanOpenPhonebook = mNoneContactMessage->isAcceptAction(aResult);
+		if (aCanOpenPhonebook) {
+			mLauncher->openPhonebookCreateNew();
+		}
+	}
+}
+
 Q_IMPLEMENT_USER_METATYPE(CntServicesContact)
 Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(CntServicesContactList)