calendarui/agendaeventviewer/src/agendaeventview.cpp
changeset 77 b0711afde476
parent 68 a5a1242fd2e8
--- a/calendarui/agendaeventviewer/src/agendaeventview.cpp	Thu Sep 02 20:25:23 2010 +0300
+++ b/calendarui/agendaeventviewer/src/agendaeventview.cpp	Fri Sep 17 08:29:05 2010 +0300
@@ -62,10 +62,7 @@
 // Constants
 #define CHARACTER_SPACE     " "
 #define CHARACTER_HYPHEN    " - "
-
-
-//This Property is use for setting a primary left icon
-static const char *primaryLeftIconItem("leftPrimaryIconItem");
+#define DUMMY_ICON           "dummyIcon"
 
 /*!
 	\class AgendaEventView.
@@ -93,9 +90,10 @@
 		mProgressTimer(NULL),
 		mProgressIconCount(0),
 		mMaptileStatusReceived(false),
+		mCalenEditorClosed(true),
 		mMaptileStatus(-1),
 		mNotesPluginLoaded(false),
-		mCalenEditorClosed(true)		        
+		mEntryIdDeleted(0)
 {
 	OstTraceFunctionEntry0( AGENDAEVENTVIEW_AGENDAEVENTVIEW_ENTRY );
 	mTranslator->loadCommon();
@@ -115,9 +113,6 @@
 	mSubjectWidget = qobject_cast<AgendaEventViewerItem *> (
 			mDocLoader->findWidget(AGENDA_EVENT_VIEWER_SUBJECT_WIDGET));
 
-    //load layout that supports icon before subject label
-    mSubjectWidget->setProperty(primaryLeftIconItem,true);  
-
 	mDateTimeWidget = qobject_cast<AgendaEventViewerItem *> (
 			mDocLoader->findWidget(AGENDA_EVENT_VIEWER_DATE_TIME_WIDGET));
 
@@ -214,7 +209,10 @@
 
 	mOriginalAgendaEntry = entry;
 	mAgendaEntry = entry;
-
+	
+	// For later reference
+	mParentId = mOwner->mAgendaUtil->parentEntry(mAgendaEntry).id();
+	
 	// Add the viewer data reading from the agenda entry.
 	addViewerData();
 	
@@ -247,11 +245,11 @@
 		mMainWindow = new HbMainWindow();
 		mMainWindow->addView(mViewer);
 		mMainWindow->setCurrentView(mViewer);
-	    connect(mMainWindow,SIGNAL(orientationChanged(Qt::Orientation)),this,SLOT(changedOrientation(Qt::Orientation)));		
+	    connect(mMainWindow,SIGNAL(orientationChanged(Qt::Orientation)),this,SLOT(changedOrientation(Qt::Orientation)));
 	} else {
 		window->addView(mViewer);
 		window->setCurrentView(mViewer);
-		connect(window,SIGNAL(orientationChanged(Qt::Orientation)),this,SLOT(changedOrientation(Qt::Orientation)));		
+		connect(window,SIGNAL(orientationChanged(Qt::Orientation)),this,SLOT(changedOrientation(Qt::Orientation)));
 	}
 	
 	// Add softkey after adding view on window
@@ -419,6 +417,8 @@
     getSubjectIcon(mAgendaEntry.type(),subjectIcon);
     itemList.append(subjectIcon);
     itemList.append(priorityIcon);
+    // This "DUMMY_ICON" is required only for the subject layout.
+    itemList.append(DUMMY_ICON);
     itemList.append(QString::null);
 
 	mSubjectWidget->setEventViewerItemData(itemList, Qt::DecorationRole);
@@ -441,8 +441,7 @@
     itemData.append(QString::null);
     itemData.append(QString::null);
     itemData.append("qtg_small_calendar");
-
-    mDateTimeWidget->setProperty(primaryLeftIconItem, false);
+    itemData.append(QString::null);
 
     mDateTimeWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
     itemData.clear();
@@ -527,21 +526,18 @@
 {
 	OstTraceFunctionEntry0( AGENDAEVENTVIEW_ADDLOCATIONDATA_ENTRY );
 	QStringList itemData;
+	itemData.append(QString::null);
+	itemData.append(QString::null);
+	itemData.append("qtg_small_location");
 	QString progressIcon(QString::null);	
 	if ( mLocationFeatureEnabled ) {
 	    getProgressIndicatorstatus(progressIcon);
 	}
 	 if( progressIcon.isNull() ) {
 	     itemData.append(QString::null);
-	     itemData.append(QString::null);
-	     itemData.append("qtg_small_location");
-	     mLocationWidget->setProperty(primaryLeftIconItem, false);
 	 }
 	 else {
-	     itemData.append("qtg_small_location");
-	     itemData.append( progressIcon );  
-	     itemData.append(QString::null);
-	     mLocationWidget->setProperty(primaryLeftIconItem, true);
+	     itemData.append( progressIcon );
 	 }
 	mLocationWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
 	itemData.clear();
@@ -579,7 +575,7 @@
 	itemData.append(QString::null);
     itemData.append(QString::null);
     itemData.append("qtg_small_reminder");
-    mReminderWidget->setProperty(primaryLeftIconItem, false); 
+    itemData.append(QString::null);
 	mReminderWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
 	itemData.clear();
 	itemData.append(QString::null);
@@ -601,7 +597,7 @@
 	itemData.append(QString::null);
 	itemData.append(QString::null);
 	itemData.append(QString::null);
-	mReminderWidget->setProperty(primaryLeftIconItem, true);
+	itemData.append(QString::null);
 	mReminderWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
 	itemData.clear();
 	completedText = systemLocale.format(mAgendaEntry.completedDateTime().date(),
@@ -626,7 +622,7 @@
     }else {
            itemData.append("qtg_small_repeat");
     }
-    mRepeatWidget->setProperty(primaryLeftIconItem, false);
+    itemData.append(QString::null);
 	mRepeatWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
 	itemData.clear();
 	itemData.append(QString::null);
@@ -645,7 +641,7 @@
 	itemData.append(QString::null);
 	itemData.append(QString::null);
     itemData.append(QString::null);
-    mDescriptionWidget->setProperty(primaryLeftIconItem, true);
+    itemData.append(QString::null);
 	mDescriptionWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
 	itemData.clear();
 	itemData.append(hbTrId("txt_calendar_dblist_description"));
@@ -934,6 +930,9 @@
 {
 	OstTraceFunctionEntry0( AGENDAEVENTVIEW_SHOWDELETEOCCURENCEPOPUP_ENTRY );
 	HbDialog *popUp = new HbDialog();
+	// Set the parent for the dialog
+	// Once the parent object is deleted the dialog will also be deleted
+	popUp->setParent(this);
 	popUp->setDismissPolicy(HbDialog::NoDismiss);
 	popUp->setTimeout(HbDialog::NoTimeout);
 	popUp->setAttribute( Qt::WA_DeleteOnClose, true );
@@ -977,6 +976,9 @@
     OstTraceFunctionEntry0( AGENDAEVENTVIEW_SHOWDELETECONFIRMATIONQUERY_ENTRY );
     
     HbMessageBox *popup = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+	// Set the parent for the dialog
+	// Once the parent object is deleted the dialog will also be deleted
+    popup->setParent(this);
     popup->setDismissPolicy(HbDialog::NoDismiss);
     popup->setTimeout(HbDialog::NoTimeout);
     popup->setAttribute( Qt::WA_DeleteOnClose, true );
@@ -1016,7 +1018,7 @@
         popup->removeAction(list[i]);
         }
     HbAction *deleteAction = 
-					new HbAction(hbTrId("txt_calendar_button_delete"), popup);
+					new HbAction(hbTrId("txt_common_button_delete"), popup);
     popup->addAction(deleteAction);
     connect(deleteAction, SIGNAL(triggered()), this ,
 												SLOT(handleDeleteAction()));
@@ -1243,12 +1245,28 @@
 void AgendaEventView::handleEntryDeletion(ulong id)
 {
     OstTraceFunctionEntry0( AGENDAEVENTVIEW_HANDLEENTRYDELETION_ENTRY );
-
-	if (id == mAgendaEntry.id()) {
-		// Close the agenda entry viewer
-		close();
-		mOwner->deletingCompleted();
-	}
+	// Check if the entry which is viewed has been deleted or not
+	// The first check id == mAgendaEntry.id() will fail for the following case
+    // Exceptional entry is opened in the viewer. Edit this occurence in editor.
+    // From editor delete all occurences of the entry. In this case the viewer 
+    // has the exceptional entry id which is not the same id which got deleted.
+    // Its the parent entry id. So checking if its a child and the entry deleted
+    // is the parent of this child.
+    if (id == mAgendaEntry.id() || 
+    		(!mAgendaEntry.recurrenceId().isNull() && id == mParentId)) {
+    	// If the editor is opened and the deletion is happening from editor
+    	// then there is no need to emit the signal deletingCompleted() [as the 
+    	// deletingStarted() is not been emitted already]
+    	// In this case closing of viewer will happen only once the editor 
+    	// is closed properly
+    	mEntryIdDeleted = id;
+    	if(!mCalenEditor) {
+    		// If the editor is not opened then emit deletingCompleted() 
+    		// and close the viewer
+    		mOwner->deletingCompleted();
+    		close();
+    	}
+    }
 
 	OstTraceFunctionExit0( AGENDAEVENTVIEW_HANDLEENTRYDELETION_EXIT );
 }
@@ -1278,9 +1296,26 @@
 
 	// Cleanup.
     mCalenEditorClosed = true;
-	mCalenEditor->deleteLater();
 	mOwner->editingCompleted();
-
+	if(mCalenEditor) {
+		mCalenEditor->deleteLater();
+		// Check if the entry is deleted
+		if(mEntryIdDeleted) {
+			ulong currentId = mAgendaEntry.id();
+			// If the deleted entry is the same as current id then close viewer
+			// The second check is for exceptional entries which will be true,
+			// when all the occurences of the entry is deleted from the editor
+			// In this case the entry id deleted won't the same as current id
+			if(currentId == mEntryIdDeleted || mEntryIdDeleted == mParentId) {
+				// Close the viewer as the entry no longer exists
+				close();
+			}
+			// Reset the value.
+			mEntryIdDeleted = 0;
+		}
+	}
+	
+	
 	OstTraceFunctionExit0( AGENDAEVENTVIEW_HANDLECALENDAREDITORCLOSED_EXIT );
 }
 
@@ -1362,10 +1397,10 @@
         mProgressIconCount = mProgressIconCount % 10 + 1;
         iconName.append(QVariant(mProgressIconCount).toString());
         QStringList itemData;
+        itemData.append(QString::null);
+        itemData.append(QString::null);
         itemData.append("qtg_small_location");
         itemData.append(iconName);
-        itemData.append(QString::null);
-        mLocationWidget->setProperty(primaryLeftIconItem, true);
         mLocationWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
         mProgressTimer->start(100);
     }
@@ -1378,7 +1413,7 @@
             itemData.append(QString::null);
             itemData.append(QString::null);
             itemData.append("qtg_small_location");
-            mLocationWidget->setProperty(primaryLeftIconItem, false);
+            itemData.append(QString::null);
             mLocationWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
             Qt::Orientations orientation=hbInstance->allMainWindows().first()->orientation();
             mMaptilePath.clear();
@@ -1396,12 +1431,12 @@
         }
         else {
             QStringList itemData;
+            itemData.append(QString::null);
+            itemData.append(QString::null);
             itemData.append("qtg_small_location");
             QString stopIcon;
             stopIcon.append(QString("qtg_mono_search_stop"));
             itemData.append(stopIcon);
-            itemData.append(QString::null);
-            mLocationWidget->setProperty(primaryLeftIconItem, true);
             mLocationWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
 
         }
@@ -1475,6 +1510,8 @@
     getSubjectIcon(mAgendaEntry.type(),subjectIcon);
     itemList.append(subjectIcon);
     itemList.append(priorityIcon);
+    // This "DUMMY_ICON" is required only for the subject layout.
+    itemList.append(DUMMY_ICON);
     itemList.append(QString::null);
 
 	mSubjectWidget->setEventViewerItemData(itemList, Qt::DecorationRole);
@@ -1501,6 +1538,7 @@
  */
 void AgendaEventView::saveAndCloseEditor()
 {
+	OstTraceFunctionEntry0( AGENDAEVENTVIEW_SAVEANDCLOSEEDITOR_ENTRY );
     if(mCalenEditorClosed){
         QObject *plugin = qobject_cast<QObject*> (
                 mNotesEditorPluginLoader->instance());
@@ -1517,6 +1555,7 @@
             mCalenEditor->saveAndCloseEditor();
         }
     }
+    OstTraceFunctionEntry0( AGENDAEVENTVIEW_SAVEANDCLOSEEDITOR_EXIT );
 }
 
 /*!
@@ -1525,6 +1564,8 @@
  */
 void AgendaEventView::closeAgendaEventView()
 {
-    close();  
+	OstTraceFunctionEntry0( AGENDAEVENTVIEW_CLOSEAGENDAEVENTVIEW_ENTRY );
+    close();
+    OstTraceFunctionEntry0( AGENDAEVENTVIEW_CLOSEAGENDAEVENTVIEW_EXIT );
 }
 // End of file