← Back to team overview

ubuntu-touch-coreapps-reviewers team mailing list archive

[Merge] lp:~nik90/ubuntu-calendar-app/revamp-eventdetails-page into lp:ubuntu-calendar-app

 

Nekhelesh Ramananthan has proposed merging lp:~nik90/ubuntu-calendar-app/revamp-eventdetails-page into lp:ubuntu-calendar-app.

Commit message:
- Transitioned EventsDetails.qml to PageHeader
- Removed uses of deprecated ListItems like Subtitled, Header etc
- Fixed translator comments and removed incorrect uses of i18n.tr() calls
- Sorted and categorized guests list into Attending, Not Attending and No Reply as per design
- Cleaned up code

Requested reviews:
  Ubuntu Calendar Developers (ubuntu-calendar-dev)
Related bugs:
  Bug #1393538 in Ubuntu Calendar App: "Redesign Event Details view"
  https://bugs.launchpad.net/ubuntu-calendar-app/+bug/1393538
  Bug #1552697 in Ubuntu Calendar App: ""%1 %2 %3 %4 %5" needs translators' comment"
  https://bugs.launchpad.net/ubuntu-calendar-app/+bug/1552697

For more details, see:
https://code.launchpad.net/~nik90/ubuntu-calendar-app/revamp-eventdetails-page/+merge/288492

- Transitioned EventsDetails.qml to PageHeader
- Removed uses of deprecated ListItems like Subtitled, Header etc
- Fixed translator comments and removed incorrect uses of i18n.tr() calls
- Sorted and categorized guests list into Attending, Not Attending and No Reply as per design
- Cleaned up code
-- 
Your team Ubuntu Calendar Developers is requested to review the proposed merge of lp:~nik90/ubuntu-calendar-app/revamp-eventdetails-page into lp:ubuntu-calendar-app.
=== modified file 'AgendaView.qml'
--- AgendaView.qml	2016-03-03 22:32:56 +0000
+++ AgendaView.qml	2016-03-09 09:23:12 +0000
@@ -161,8 +161,8 @@
                     ListItemLayout {
                         id: listitemlayout
                         padding.top: units.gu(1)
-                        title.text: mainView.displayLunarCalendar ? i18n.tr("%1 %2 %3 %4 %5").arg(lunarDate.gzYear).arg(lunarDate .IMonthCn).arg(lunarDate.IDayCn)
-                                                                                             .arg(lunarDate.gzDay).arg(lunarDate.isTerm ? lunarDate.Term : "")
+                        title.text: mainView.displayLunarCalendar ? ("%1 %2 %3 %4 %5").arg(lunarDate.gzYear).arg(lunarDate .IMonthCn).arg(lunarDate.IDayCn)
+                                                                                      .arg(lunarDate.gzDay).arg(lunarDate.isTerm ? lunarDate.Term : "")
                                                                   : date
                         title.color: event.startDateTime.toLocaleDateString() === new Date().toLocaleDateString() ? UbuntuColors.orange : UbuntuColors.darkGrey
                     }

=== modified file 'AllDayEventComponent.qml'
--- AllDayEventComponent.qml	2016-03-04 03:08:09 +0000
+++ AllDayEventComponent.qml	2016-03-09 09:23:12 +0000
@@ -143,10 +143,8 @@
                     }
 
                     if(repeater.compactView) {
-                        // TRANSLATORS: the first parameter refers to the number of all-day events
-                        // on a given day. "Ev." is short form for "Events".
-                        // Please keep the translation of "Ev." to 3 characters only, as the week view
-                        // where it's shown has limited space
+                        // TRANSLATORS: Please keep the translation of this string to a max of
+                        // 5 characters as the week view where it is shown has limited space.
                         return i18n.tr("%1 event", "%1 events", events.length).arg(events.length)
                     } else {
                         if( events.length > 1) {

=== modified file 'CMakeLists.txt'
--- CMakeLists.txt	2015-11-23 09:21:05 +0000
+++ CMakeLists.txt	2016-03-09 09:23:12 +0000
@@ -1,23 +1,34 @@
 project(com.ubuntu.calendar)
 cmake_minimum_required(VERSION 2.8.9)
+
 find_program(INTLTOOL_MERGE intltool-merge)
+if(NOT INTLTOOL_MERGE)
+    message(FATAL_ERROR "Could not find intltool-merge, please install the intltool package")
+endif()
+
 find_program(INTLTOOL_EXTRACT intltool-extract)
+if(NOT INTLTOOL_EXTRACT)
+    message(FATAL_ERROR "Could not find intltool-extract, please install the intltool package")
+endif()
+
+option(INSTALL_TESTS "Install the tests on make install" on)
+option(CLICK_MODE "Installs to a contained location" on)
 
 # Standard install paths
 include(GNUInstallDirs)
 
-option(INSTALL_TESTS "Install the tests on make install" on)
-option(CLICK_MODE "Installs to a contained location" on)
+# Tests
+enable_testing()
 
-set(APP_NAME calendar)
-set(DESKTOP_FILE "${PROJECT_NAME}_${APP_NAME}.desktop")
-set(APPLICATION_FILE "${PROJECT_NAME}_${APP_NAME}.application")
-set(URLS_FILE "${PROJECT_NAME}_${APP_NAME}.url-dispatcher")
-set(MAIN_QML calendar.qml)
-set(ICON_FILE calendar-app@xxxxxx)
-set(AUTOPILOT_DIR calendar_app)
-set(APP_HARDCODE calendar-app)
-set(UBUNTU_MANIFEST_PATH "click/manifest.json.in" CACHE INTERNAL "Relative path to the manifest file")
+set(APP_NAME                    calendar)
+set(DESKTOP_FILE                "${PROJECT_NAME}_${APP_NAME}.desktop")
+set(APPLICATION_FILE            "${PROJECT_NAME}_${APP_NAME}.application")
+set(URLS_FILE                   "${PROJECT_NAME}_${APP_NAME}.url-dispatcher")
+set(MAIN_QML                    calendar.qml)
+set(ICON_FILE                   calendar-app@xxxxxx)
+set(AUTOPILOT_DIR               calendar_app)
+set(APP_HARDCODE                calendar-app)
+set(UBUNTU_MANIFEST_PATH        "click/manifest.json.in" CACHE INTERNAL "Relative path to the manifest file")
 
 if(CLICK_MODE)
     if(NOT DEFINED BZR_SOURCE)
@@ -77,9 +88,6 @@
 
 install(DIRECTORY "3rd-party" DESTINATION ${DATA_DIR})
 
-# Tests
-enable_testing()
-
 add_subdirectory(click)
 add_subdirectory(po)
 add_subdirectory(tests)

=== modified file 'EventDetails.qml'
--- EventDetails.qml	2016-03-02 19:55:52 +0000
+++ EventDetails.qml	2016-03-09 09:23:12 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013-2014 Canonical Ltd
+ * Copyright (C) 2013-2016 Canonical Ltd
  *
  * This file is part of Ubuntu Calendar App
  *
@@ -15,11 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
+
 import QtQuick 2.4
 import Ubuntu.Components 1.3
-import Ubuntu.Components.ListItems 1.0 as ListItem
-import Ubuntu.Components.Themes.Ambiance 1.0
-import Ubuntu.Components.Popups 1.0
+import Ubuntu.Components.Popups 1.3
 import QtOrganizer 5.0
 
 import "Defines.js" as Defines
@@ -32,45 +31,44 @@
 
     property var event
     property var model
+    property var collection: model.collection(event.collectionId);
 
-    anchors{
-        left: parent.left
-        right: parent.right
-        bottom: parent.bottom
+    header: PageHeader {
+        title: i18n.tr("Event Details")
+        flickable: flicable
+        trailingActionBar.actions: Action {
+            text: i18n.tr("Edit");
+            objectName: "edit"
+            iconName: "edit";
+            enabled: !collection.extendedMetaData("collection-readonly")
+            onTriggered: {
+                if( event.itemType === Type.EventOccurrence ) {
+                    var dialog = PopupUtils.open(Qt.resolvedUrl("EditEventConfirmationDialog.qml"),root,{"event": event});
+                    dialog.editEvent.connect( function(eventId){
+                        if( eventId === event.parentId ) {
+                            showEditEventPage(internal.parentEvent, model)
+                        } else {
+                            showEditEventPage(event, model)
+                        }
+                    });
+                } else {
+                    showEditEventPage(event, model)
+                }
+            }
+        }
     }
 
-    flickable: null
-
-    title: i18n.tr("Event Details")
-
     Component.onCompleted: {
         showEvent(event)
     }
 
-    Connections{
-        target: pageStack
-        onCurrentPageChanged:{
-            if( pageStack.currentPage === root) {
-                showEvent(event)
-            }
-        }
-    }
-
-    RemindersModel {
-        id: reminderModel
-    }
-
-    function updateCollection(event) {
-
-        var collection = model.collection( event.collectionId );
-        calendarIndicator.color = collection.color
-        eventInfo.color=collection.color
-        // TRANSLATORS: the first parameter refers to the name of event calendar.
-        calendarName.text = i18n.tr("%1 Calendar").arg( collection.name)
-
-        //disable edit in case of read only calendar
-        if( collection.extendedMetaData("collection-readonly") === true ) {
-            editAction.enabled = false
+    Keys.onEscapePressed: {
+        pageStack.pop();
+    }
+
+    Keys.onPressed: {
+        if ((event.key === Qt.Key_E) && ( event.modifiers & Qt.ControlModifier)) {
+            showEditEventPage(event, model);
         }
     }
 
@@ -79,103 +77,124 @@
         if (event.recurrence) {
             if(event.recurrence.recurrenceRules[0] !== undefined){
                 var rule =  event.recurrence.recurrenceRules[0];
-                repeatLabel.text = eventUtils.getRecurrenceString(rule)
+                mainEventDetailsLayout.summary.text = eventUtils.getRecurrenceString(rule)
             } else {
                 //For event occurs once, event.recurrence.recurrenceRules == []
-                repeatLabel.text = Defines.recurrenceLabel[0];
+                mainEventDetailsLayout.summary.text = Defines.recurrenceLabel[0];
             }
         }
     }
 
     function updateContacts(event) {
-        var attendees = event.attendees;
+        var attendees
+        var attendingCount, notAttendingCount
+
+        attendingCount = 0
+        notAttendingCount = 0
+        attendees = event.attendees
+
         contactModel.clear();
+
         if( attendees !== undefined ) {
             for (var j = 0 ; j < attendees.length ; ++j) {
-                var name = attendees[j].name.trim().length === 0 ?
-                                attendees[j].emailAddress.replace("mailto:";, ""):
-                                attendees[j].name
-
-                contactModel.append( {"name": name,"participationStatus": attendees[j].participationStatus }  );
+                var name = attendees[j].name.trim().length === 0 ? attendees[j].emailAddress.replace("mailto:";, "")
+                                                                 : attendees[j].name
+
+                // Sort the participating guests by Attending, Not-Attending and No-Reply for easier diaply in the list view.
+                if(attendees[j].participationStatus === 0) {
+                    contactModel.insert(attendingCount+notAttendingCount, {"name": name,"participationStatus": attendees[j].participationStatus})
+                    notAttendingCount++
+                }
+
+                else if(attendees[j].participationStatus === 1) {
+                    contactModel.insert(attendingCount, {"name": name,"participationStatus": attendees[j].participationStatus})
+                    attendingCount++
+                }
+
+                else {
+                    contactModel.append({"name": name,"participationStatus": attendees[j].participationStatus});
+                }
             }
         }
     }
 
     function updateReminder(event) {
-        var reminder = event.detail( Detail.VisualReminder)
+        var reminder = event.detail(Detail.VisualReminder)
         if(reminder) {
             for(var i=0; i<reminderModel.count; i++) {
                 if(reminder.secondsBeforeStart === reminderModel.get(i).value) {
-                    reminderHeader.subText = reminderModel.get(i).label
+                    reminderLayout.subtitle.text = reminderModel.get(i).label
                 }
             }
         } else {
-            reminderHeader.subText = reminderModel.get(0).label
-        }
-    }
-
-    function updateLocation(event) {
-        if( event.location ) {
-            locationLabel.text = event.location
-        }
-    }
-
-    function showEvent(e) {
+            reminderLayout.subtitle.text = reminderModel.get(0).label
+        }
+    }
+
+    function getDate(e) {
+        var dateLabel = null
+
         var startTime = e.startDateTime.toLocaleTimeString(Qt.locale(), Locale.ShortFormat)
         var endTime = e.endDateTime.toLocaleTimeString(Qt.locale(), Locale.ShortFormat)
-
-        var lunarStartDate = null;
-        var lunarEndDate = null;
+        var startDay = e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat)
+        var endDay = e.endDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat)
+
+        var lunarStartDate = null
+        var lunarEndDate = null
+
+        var allDayString = i18n.tr("(All Day)")
+
         if (mainView.displayLunarCalendar) {
             lunarStartDate = Lunar.calendar.solar2lunar(e.startDateTime.getFullYear(),
-                                                   e.startDateTime.getMonth() + 1,
-                                                   e.startDateTime.getDate())
+                                                        e.startDateTime.getMonth() + 1,
+                                                        e.startDateTime.getDate())
 
             lunarEndDate = Lunar.calendar.solar2lunar(e.endDateTime.getFullYear(),
-                                                   e.endDateTime.getMonth() + 1,
-                                                   e.endDateTime.getDate())
+                                                      e.endDateTime.getMonth() + 1,
+                                                      e.endDateTime.getDate())
         }
 
         if( e.allDay ) {
             var days = Math.floor((e.endDateTime - e.startDateTime) / Date.msPerDay);
             if( days !== 1 ) {
                 if (mainView.displayLunarCalendar) {
-                    dateLabel.text = i18n.tr("%1 %2 %3 - %4 %5 %6 (All Day)")
-                    .arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn)
+                    dateLabel = ("%1 %2 %3 - %4 %5 %6").arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn)
                     .arg(lunarEndDate.gzYear).arg(lunarEndDate .IMonthCn).arg(lunarEndDate.IDayCn)
                 } else {
-                    dateLabel.text = i18n.tr("%1 - %2 (All Day)")
-                    .arg( e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat))
-                    .arg( e.endDateTime.addDays(-1).toLocaleDateString(Qt.locale(), Locale.LongFormat))
+                    dateLabel = ("%1 - %2").arg(startDay).arg(e.endDateTime.addDays(-1).toLocaleDateString(Qt.locale(), Locale.LongFormat))
                 }
             } else {
                 if (mainView.displayLunarCalendar) {
-                    dateLabel.text = i18n.tr("%1 %2 %3 (All Day)")
-                    .arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn)
+                    dateLabel = ("%1 %2 %3").arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn)
                 } else {
-                    dateLabel.text = i18n.tr("%1 (All Day)").arg( e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat))
+                    dateLabel = startDay
                 }
             }
-        } else {
+
+            dateLabel = dateLabel.concat(" ", allDayString)
+        }
+
+        else {
             if (e.endDateTime.getDate() !== e.startDateTime.getDate()) {
                 if (mainView.displayLunarCalendar) {
-                    dateLabel.text = i18n.tr("%1 %2 %3, %4 - %5 %6 %7, %8")
-                    .arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn).arg(startTime)
+                    dateLabel = ("%1 %2 %3, %4 - %5 %6 %7, %8").arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn).arg(startTime)
                     .arg(lunarEndDate.gzYear).arg(lunarEndDate .IMonthCn).arg(lunarEndDate.IDayCn).arg(endTime);
                 } else {
-                    dateLabel.text = e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat) + ", " +startTime + " - "
-                            + e.endDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat) +  ", " + endTime;
+                    dateLabel = ("%1, %2 - %3, %4").arg(startDay).arg(startTime).arg(endDay).arg(endTime)
                 }
             } else {
                 if (mainView.displayLunarCalendar) {
-                    dateLabel.text = i18n.tr("%1 %2 %3, %4 - %5")
-                    .arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn).arg(startTime).arg(endTime);
+                    dateLabel = ("%1 %2 %3, %4 - %5").arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn).arg(startTime).arg(endTime)
                 } else {
-                    dateLabel.text = e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat) + ", " +startTime + " - "  + endTime;
+                    dateLabel = ("%1, %2 - %3").arg(startDay).arg(startTime).arg(endTime)
                 }
             }
         }
 
+        return dateLabel
+    }
+
+    function showEvent(e) {
         if( e.itemType === Type.EventOccurrence ){
             var requestId = -1;
             model.onItemsFetched.connect( function(id,fetchedItems){
@@ -187,24 +206,10 @@
             });
             requestId = model.fetchItems([e.parentId]);
         }
-        // This is the event title
-        if( e.displayLabel) {
-            titleLabel.text = e.displayLabel;
-        }
-
-        if( e.description ) {
-            descLabel.text = e.description;
-        }
-
-        updateCollection(e);
 
         updateContacts(e);
-
         updateRecurrence(e);
-
         updateReminder(e);
-
-        updateLocation(e);
     }
 
     function showEditEventPage(event, model) {
@@ -223,37 +228,22 @@
         })
     }
 
-    Keys.onEscapePressed: {
-        pageStack.pop();
-    }
-
-    Keys.onPressed: {
-        if ((event.key === Qt.Key_E) && ( event.modifiers & Qt.ControlModifier)) {
-            showEditEventPage(event, model);
-        }
-    }
-
-    head.actions: [
-        Action {
-            text: i18n.tr("Edit");
-            objectName: "edit"
-            iconName: "edit";
-            onTriggered: {
-                if( event.itemType === Type.EventOccurrence ) {
-                    var dialog = PopupUtils.open(Qt.resolvedUrl("EditEventConfirmationDialog.qml"),root,{"event": event});
-                    dialog.editEvent.connect( function(eventId){
-                        if( eventId === event.parentId ) {
-                            showEditEventPage(internal.parentEvent, model)
-                        } else {
-                            showEditEventPage(event, model)
-                        }
-                    });
-                } else {
-                    showEditEventPage(event, model)
-                }
+    Connections{
+        target: pageStack
+        onCurrentPageChanged:{
+            if( pageStack.currentPage === root) {
+                showEvent(event)
             }
         }
-    ]
+    }
+
+    RemindersModel {
+        id: reminderModel
+    }
+
+    ListModel {
+        id: contactModel
+    }
 
     EventUtils{
         id:eventUtils
@@ -264,12 +254,6 @@
         property var parentEvent;
     }
 
-    Rectangle {
-        id: bg
-        color: "white"
-        anchors.fill: parent
-    }
-
     Scrollbar {
         flickableItem: flicable
         align: Qt.AlignTrailing
@@ -280,156 +264,124 @@
 
         clip: interactive
         anchors.fill: parent
-        interactive: contentHeight > height
-
         contentWidth: parent.width
-        contentHeight: column.height + eventInfo.height + units.gu(3) /*top margin + spacing */
+        contentHeight: column.height + titleContainer.height
 
         Rectangle{
-            id: eventInfo
+            id: titleContainer
 
+            color: collection.color
             width: parent.width
-            height: eventInfoList.height + units.gu(5)
-
-            Column{
-                id:eventInfoList
-
-                anchors {
-                    left: parent.left
-                    right: parent.right
-                    top: parent.top
-                    margins: units.gu(2)
-                }
-
-                spacing: units.gu(0.5)
-
-                Label{
-                    id: titleLabel
-                    objectName: "titleLabel"
-                    fontSize: "large"
-                    width: parent.width
-                    wrapMode: Text.WordWrap
-                    color: "white"
-                }
-
-                Label{
-                    id: dateLabel
-                    objectName: "dateLabel"
-                    color: "white"
-                    fontSize: "medium"
-                    width: parent.width
-                    wrapMode: Text.WordWrap
-                }
-
-                Label{
-                    id: repeatLabel
-                    objectName: "repeatLabel"
-                    color: "white"
-                    fontSize: "small"
-                    width: parent.width
-                    wrapMode: Text.WordWrap
-                    visible: repeatLabel.text !== ""
-                }
-
-                Label{
-                    id: locationLabel
-                    objectName: "locationLabel"
-                    color: "white"
-                    fontSize: "small"
-                    width: parent.width
-                    wrapMode: Text.WordWrap
-                    visible: locationLabel.text !== ""
-                }
+            height: titleLabel.implicitHeight + units.gu(2)
+
+            Label{
+                id: titleLabel
+                objectName: "titleLabel"
+                textSize: Label.Large
+                wrapMode: Text.WordWrap
+                color: "white"
+                text: event.displayLabel
+                anchors { left: parent.left; right: parent.right; margins: units.gu(2); verticalCenter: parent.verticalCenter }
             }
         }
 
         Column{
             id: column
 
-            spacing: units.gu(1)
-            anchors{
-                top: eventInfo.bottom
-                right: parent.right
-                left:parent.left
-                margins: units.gu(2)
-            }
-
-            Row{
+            width: parent.width
+            anchors.top: titleContainer.bottom
+
+            ListItem {
+                height: mainEventDetailsLayout.height + divider.height
+                ListItemLayout {
+                    id: mainEventDetailsLayout
+                    title.text: getDate(event)
+                    subtitle.text: event.location
+                }
+            }
+
+            ListItem {
+                height: units.gu(6)
+                Row{
+                    id: calendarNameRow
+
+                    spacing: units.gu(1)
+                    anchors { verticalCenter: parent.verticalCenter; left: parent.left; right: parent.right; margins: units.gu(2) }
+
+                    Label {
+                        text: i18n.tr("Calendar")
+                    }
+
+                    UbuntuShape{
+                        id: calendarIndicator
+                        width: parent.height
+                        height: width
+                        color: collection.color
+                        anchors.verticalCenter: parent.verticalCenter
+                    }
+
+                    Label{
+                        id:calendarName
+                        objectName: "calendarName"
+                        text: collection.name
+                    }
+                }
+            }
+
+            ListView{
+                model: contactModel
                 width: parent.width
-                spacing: units.gu(1)
-                UbuntuShape{
-                    id: calendarIndicator
-                    width: parent.height
-                    height: width
-                    anchors.verticalCenter: parent.verticalCenter
+                height: count !== 0 ? (count+1) * units.gu(7): 0
+                interactive: false
+
+                section.property: "participationStatus"
+                section.labelPositioning: ViewSection.InlineLabels
+                section.delegate: ListItem {
+                    height: headerText.height + divider.height
+                    ListItemLayout {
+                        id: headerText
+                        title.text: {
+                            if (section === "0") {
+                                return i18n.tr("Not Attending")
+                            }
+
+                            else if (section === "1") {
+                                return i18n.tr("Attending")
+                            }
+
+                            else if (section === "2") {
+                                return i18n.tr("No Reply")
+                            }
+                        }
+                        title.font.weight: Font.DemiBold
+                    }
                 }
-                Label{
-                    id:calendarName
-                    objectName: "calendarName"
-                    anchors.verticalCenter: parent.verticalCenter
+
+                delegate: ListItem {
+                    height: contactListItemLayout.height + divider.height
+                    ListItemLayout {
+                        id: contactListItemLayout
+                        title.text: name
+                    }
                 }
             }
 
-            Label{
+            ListItem {
                 id: descLabel
-                objectName: "descriptionLabel"
-                visible: text != ""
-                width: parent.width
-                wrapMode: Text.WordWrap
+                height: descriptionLabelLayout.height + divider.height
+                visible: descriptionLabelLayout.summary.text !== ""
+                ListItemLayout {
+                    id: descriptionLabelLayout
+                    title.text: i18n.tr("Description")
+                    summary.text: event.description
+                }
             }
 
-            Column {
-                anchors{
-                    right: parent.right
-                    left:parent.left
-                    margins: units.gu(-2)
-                }
-
-                ListItem.Header {
-                    text: i18n.tr("Guests")
-                    visible: contactModel.count !== 0
-                }
-
-                //Guest Entery Model starts
-                Column{
-                    id: contactList
-                    objectName: 'contactList'
-
-                    anchors {
-                        left: parent.left
-                        right: parent.right
-                    }
-
-                    ListModel {
-                        id: contactModel
-                    }
-
-                    Repeater{
-                        model: contactModel
-                        delegate: ListItem.Standard {
-                            Label {
-                                text: name
-                                objectName: "eventGuest%1".arg(index)
-                                color: UbuntuColors.midAubergine
-                                anchors {
-                                    left: parent.left
-                                    leftMargin: units.gu(2)
-                                    verticalCenter: parent.verticalCenter
-                                }
-                            }
-
-                            control: CheckBox {
-                                enabled: false
-                                checked: participationStatus
-                            }
-                        }
-                    }
-                }
-                //Guest Entries ends
-
-                ListItem.Subtitled {
-                    id: reminderHeader
-                    text: i18n.tr("Reminder")
+            ListItem {
+                height: reminderLayout.height + divider.height
+                ListItemLayout {
+                    id: reminderLayout
+                    title.text: i18n.tr("Reminder")
                 }
             }
         }

=== modified file 'HeaderDateComponent.qml'
--- HeaderDateComponent.qml	2016-03-02 19:55:52 +0000
+++ HeaderDateComponent.qml	2016-03-09 09:23:12 +0000
@@ -87,7 +87,7 @@
                 var lunarDate = Lunar.calendar.solar2lunar(date.getFullYear(),
                                                            date.getMonth() + 1,
                                                            date.getDate())
-                return i18n.tr("%1 %2 %3").arg(lunarDate.IDayCn).arg(lunarDate.gzDay).arg(lunarDate.isTerm ? lunarDate.Term : "")
+                return ("%1 %2 %3").arg(lunarDate.IDayCn).arg(lunarDate.gzDay).arg(lunarDate.isTerm ? lunarDate.Term : "")
             } else {
                 return date.getDate();
             }

=== modified file 'MonthComponent.qml'
--- MonthComponent.qml	2016-03-02 19:55:52 +0000
+++ MonthComponent.qml	2016-03-09 09:23:12 +0000
@@ -312,6 +312,8 @@
                     id: weekNumLabel;
                     objectName: "weekNumLabel";
                     width: parent.width;
+                    // TRANSLATORS: This is shown in the month view as "Wk" as a title
+                    // to indicate the week numbers. It should be a max of up to 3 characters.
                     text: i18n.tr("Wk");
                     horizontalAlignment: Text.AlignHCenter;
                     verticalAlignment: Text.AlignVCenter;

=== modified file 'po/com.ubuntu.calendar.pot'
--- po/com.ubuntu.calendar.pot	2016-03-03 22:32:56 +0000
+++ po/com.ubuntu.calendar.pot	2016-03-09 09:23:12 +0000
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-04 04:02+0530\n"
+"POT-Creation-Date: 2016-03-09 14:27+0530\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@xxxxxx>\n"
@@ -18,7 +18,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: ../AgendaView.qml:50 ../calendar.qml:292 ../calendar.qml:518
+#: ../AgendaView.qml:50 ../calendar.qml:321 ../calendar.qml:547
 msgid "Agenda"
 msgstr ""
 
@@ -34,11 +34,6 @@
 msgid "Enable calendars"
 msgstr ""
 
-#: ../AgendaView.qml:164
-#, qt-format
-msgid "%1 %2 %3 %4 %5"
-msgstr ""
-
 #: ../AgendaView.qml:191
 msgid "no event name set"
 msgstr ""
@@ -51,24 +46,24 @@
 msgid "New event"
 msgstr ""
 
-#. TRANSLATORS: the first parameter refers to the number of all-day events
-#. on a given day. "Ev." is short form for "Events".
-#. Please keep the translation of "Ev." to 3 characters only, as the week view
-#. where it's shown has limited space
-#: ../AllDayEventComponent.qml:150
+#. TRANSLATORS: Please keep the translation of this string to a max of
+#. 5 characters as the week view where it is shown has limited space.
+#: ../AllDayEventComponent.qml:148
 #, qt-format
-msgid "%1 ev."
-msgstr ""
+msgid "%1 event"
+msgid_plural "%1 events"
+msgstr[0] ""
+msgstr[1] ""
 
 #. TRANSLATORS: the argument refers to the number of all day events
-#: ../AllDayEventComponent.qml:154
+#: ../AllDayEventComponent.qml:152
 #, qt-format
 msgid "%1 all day event"
 msgid_plural "%1 all day events"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../CalendarChoicePopup.qml:34 ../EventActions.qml:51
+#: ../CalendarChoicePopup.qml:34 ../EventActions.qml:52
 msgid "Calendars"
 msgstr ""
 
@@ -78,11 +73,11 @@
 
 #. TRANSLATORS: Please translate this string  to 15 characters only.
 #. Currently ,there is no way we can increase width of action menu currently.
-#: ../CalendarChoicePopup.qml:48 ../EventActions.qml:36
+#: ../CalendarChoicePopup.qml:48 ../EventActions.qml:37
 msgid "Sync"
 msgstr ""
 
-#: ../CalendarChoicePopup.qml:48 ../EventActions.qml:36
+#: ../CalendarChoicePopup.qml:48 ../EventActions.qml:37
 msgid "Syncing"
 msgstr ""
 
@@ -95,7 +90,7 @@
 msgstr ""
 
 #: ../ColorPickerDialog.qml:55 ../DeleteConfirmationDialog.qml:60
-#: ../EditEventConfirmationDialog.qml:53 ../NewEvent.qml:340
+#: ../EditEventConfirmationDialog.qml:53 ../NewEvent.qml:343
 msgid "Cancel"
 msgstr ""
 
@@ -107,23 +102,17 @@
 msgid "Search contact"
 msgstr ""
 
-#: ../DayView.qml:71 ../MonthView.qml:50 ../WeekView.qml:54 ../YearView.qml:57
+#: ../DayView.qml:72 ../MonthView.qml:50 ../WeekView.qml:55 ../YearView.qml:57
 msgid "Today"
 msgstr ""
 
 #. TRANSLATORS: this is a time formatting string,
 #. see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions.
 #. It's used in the header of the month and week views
-#: ../DayView.qml:115 ../DayView.qml:203 ../MonthView.qml:78
-#: ../WeekView.qml:137 ../WeekView.qml:256
+#: ../DayView.qml:122 ../MonthView.qml:78 ../WeekView.qml:144
 msgid "MMMM yyyy"
 msgstr ""
 
-#: ../DayView.qml:201 ../MonthView.qml:73 ../WeekView.qml:254
-#, qt-format
-msgid "%1 %2"
-msgstr ""
-
 #: ../DeleteConfirmationDialog.qml:31
 msgid "Delete Recurring Event"
 msgstr ""
@@ -151,11 +140,11 @@
 msgid "Delete this"
 msgstr ""
 
-#: ../DeleteConfirmationDialog.qml:51 ../NewEvent.qml:347
+#: ../DeleteConfirmationDialog.qml:51 ../NewEvent.qml:350
 msgid "Delete"
 msgstr ""
 
-#: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:335
+#: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:338
 msgid "Edit Event"
 msgstr ""
 
@@ -173,73 +162,58 @@
 msgid "Edit this"
 msgstr ""
 
-#: ../EventActions.qml:63 ../Settings.qml:29
+#: ../EventActions.qml:64 ../Settings.qml:29
 msgid "Settings"
 msgstr ""
 
 #. TRANSLATORS: the first argument (%1) refers to a start time for an event,
 #. while the second one (%2) refers to the end time
-#: ../EventBubble.qml:97
+#: ../EventBubble.qml:104
 #, qt-format
 msgid "%1 - %2"
 msgstr ""
 
 #. TRANSLATORS: the first argument (%1) refers to a time for an event,
 #. while the second one (%2) refers to title of event
-#: ../EventBubble.qml:108 ../EventBubble.qml:113
+#: ../EventBubble.qml:115 ../EventBubble.qml:120
 #, qt-format
 msgid "%1 <b>%2</b>"
 msgstr ""
 
-#: ../EventDetails.qml:44 ../NewEvent.qml:483
+#: ../EventDetails.qml:36 ../NewEvent.qml:486
 msgid "Event Details"
 msgstr ""
 
-#. TRANSLATORS: the first parameter refers to the name of event calendar.
-#: ../EventDetails.qml:69
-#, qt-format
-msgid "%1 Calendar"
-msgstr ""
-
-#: ../EventDetails.qml:143
-#, qt-format
-msgid "%1 %2 %3 - %4 %5 %6 (All Day)"
-msgstr ""
-
-#: ../EventDetails.qml:147
-#, qt-format
-msgid "%1 - %2 (All Day)"
-msgstr ""
-
-#: ../EventDetails.qml:153
-#, qt-format
-msgid "%1 %2 %3 (All Day)"
-msgstr ""
-
-#: ../EventDetails.qml:156
-#, qt-format
-msgid "%1 (All Day)"
-msgstr ""
-
-#: ../EventDetails.qml:162
-#, qt-format
-msgid "%1 %2 %3, %4 - %5 %6 %7, %8"
-msgstr ""
-
-#: ../EventDetails.qml:171
-#, qt-format
-msgid "%1 %2 %3, %4 - %5"
-msgstr ""
-
-#: ../EventDetails.qml:238
+#: ../EventDetails.qml:39
 msgid "Edit"
 msgstr ""
 
-#: ../EventDetails.qml:389 ../NewEvent.qml:589
-msgid "Guests"
-msgstr ""
-
-#: ../EventDetails.qml:432 ../EventReminder.qml:35 ../NewEvent.qml:701
+#: ../EventDetails.qml:152
+msgid "(All Day)"
+msgstr ""
+
+#: ../EventDetails.qml:312 ../NewEvent.qml:552
+#: com.ubuntu.calendar_calendar.desktop.in.in.h:1
+msgid "Calendar"
+msgstr ""
+
+#: ../EventDetails.qml:345
+msgid "Not Attending"
+msgstr ""
+
+#: ../EventDetails.qml:349
+msgid "Attending"
+msgstr ""
+
+#: ../EventDetails.qml:353
+msgid "No Reply"
+msgstr ""
+
+#: ../EventDetails.qml:380 ../NewEvent.qml:518
+msgid "Description"
+msgstr ""
+
+#: ../EventDetails.qml:389 ../EventReminder.qml:35 ../NewEvent.qml:710
 msgid "Reminder"
 msgstr ""
 
@@ -262,7 +236,7 @@
 #. TRANSLATORS: this refers to how often a recurrent event repeats
 #. and it is shown as the header of the option selector to choose
 #. its repetition
-#: ../EventRepetition.qml:242 ../NewEvent.qml:685
+#: ../EventRepetition.qml:242 ../NewEvent.qml:688
 msgid "Repeats"
 msgstr ""
 
@@ -293,11 +267,6 @@
 msgid "Weekly on %1"
 msgstr ""
 
-#: ../HeaderDateComponent.qml:90
-#, qt-format
-msgid "%1 %2 %3"
-msgstr ""
-
 #: ../LimitLabelModel.qml:25
 msgid "Never"
 msgstr ""
@@ -310,59 +279,62 @@
 msgid "After Date"
 msgstr ""
 
-#: ../MonthComponent.qml:315
+#. TRANSLATORS: This is shown in the month view as "Wk" as a title
+#. to indicate the week numbers. It should be a max of up to 3 characters.
+#: ../MonthComponent.qml:317
 msgid "Wk"
 msgstr ""
 
-#: ../NewEvent.qml:171
+#: ../MonthView.qml:73 ../WeekView.qml:131
+#, qt-format
+msgid "%1 %2"
+msgstr ""
+
+#: ../NewEvent.qml:174
 msgid "End time can't be before start time"
 msgstr ""
 
-#: ../NewEvent.qml:335 ../NewEventBottomEdge.qml:52
+#: ../NewEvent.qml:338 ../NewEventBottomEdge.qml:52
 msgid "New Event"
 msgstr ""
 
-#: ../NewEvent.qml:364
+#: ../NewEvent.qml:367
 msgid "Save"
 msgstr ""
 
-#: ../NewEvent.qml:375
+#: ../NewEvent.qml:378
 msgid "Error"
 msgstr ""
 
-#: ../NewEvent.qml:377
+#: ../NewEvent.qml:380
 msgid "OK"
 msgstr ""
 
-#: ../NewEvent.qml:437
+#: ../NewEvent.qml:440
 msgid "From"
 msgstr ""
 
-#: ../NewEvent.qml:450
+#: ../NewEvent.qml:453
 msgid "To"
 msgstr ""
 
-#: ../NewEvent.qml:467
+#: ../NewEvent.qml:470
 msgid "All day event"
 msgstr ""
 
-#: ../NewEvent.qml:497
+#: ../NewEvent.qml:500
 msgid "Event Name"
 msgstr ""
 
-#: ../NewEvent.qml:515
-msgid "Description"
-msgstr ""
-
-#: ../NewEvent.qml:534
+#: ../NewEvent.qml:537
 msgid "Location"
 msgstr ""
 
-#: ../NewEvent.qml:549 com.ubuntu.calendar_calendar.desktop.in.in.h:1
-msgid "Calendar"
+#: ../NewEvent.qml:592
+msgid "Guests"
 msgstr ""
 
-#: ../NewEvent.qml:598
+#: ../NewEvent.qml:601
 msgid "Add Guest"
 msgstr ""
 
@@ -467,7 +439,7 @@
 msgid "All Day"
 msgstr ""
 
-#: ../WeekView.qml:131 ../WeekView.qml:132
+#: ../WeekView.qml:138 ../WeekView.qml:139
 msgid "MMM"
 msgstr ""
 
@@ -476,26 +448,26 @@
 msgid "Year %1"
 msgstr ""
 
-#: ../calendar.qml:46
+#: ../calendar.qml:48
 msgid ""
 "Calendar app accept four arguments: --starttime, --endtime, --newevent and --"
 "eventid. They will be managed by system. See the source for a full comment "
 "about them"
 msgstr ""
 
-#: ../calendar.qml:260 ../calendar.qml:434
+#: ../calendar.qml:289 ../calendar.qml:463
 msgid "Year"
 msgstr ""
 
-#: ../calendar.qml:268 ../calendar.qml:455
+#: ../calendar.qml:297 ../calendar.qml:484
 msgid "Month"
 msgstr ""
 
-#: ../calendar.qml:276 ../calendar.qml:476
+#: ../calendar.qml:305 ../calendar.qml:505
 msgid "Week"
 msgstr ""
 
-#: ../calendar.qml:284 ../calendar.qml:497
+#: ../calendar.qml:313 ../calendar.qml:526
 msgid "Day"
 msgstr ""
 


Follow ups