Merge lp:~ubuntu-calendar-dev/ubuntu-calendar-app/5-Improved-EventDetails into lp:ubuntu-calendar-app

Proposed by Mihir Soni
Status: Merged
Approved by: Nekhelesh Ramananthan
Approved revision: 471
Merged at revision: 474
Proposed branch: lp:~ubuntu-calendar-dev/ubuntu-calendar-app/5-Improved-EventDetails
Merge into: lp:ubuntu-calendar-app
Diff against target: 652 lines (+195/-273)
4 files modified
EventDetails.qml (+175/-217)
EventDetailsInfo.qml (+0/-44)
NewEvent.qml (+15/-7)
tests/autopilot/calendar_app/__init__.py (+5/-5)
To merge this branch: bzr merge lp:~ubuntu-calendar-dev/ubuntu-calendar-app/5-Improved-EventDetails
Reviewer Review Type Date Requested Status
Nekhelesh Ramananthan Approve
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve
Review via email: mp+235333@code.launchpad.net

Commit message

Redesigned Event Details page.

Description of the change

Redesigned Event Details page.

Initial design idea , ahoneybun

1. Removed EventDetailsInfo.qml (As we are not using it)
2. Removed Google maps, as discussed on IRC (http://paste.ubuntu.com/8382143/)

To post a comment you must log in.
463. By Mihir Soni

uncommented po direcotry in CMake

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

At the moment we have a regression,

Edit an event which is part of a series like "Calendar App Meeting". Pressing "Edit Series" works as expected. However when you click "Edit this", the new event page does not hold the details of the event.

review: Needs Fixing
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
464. By Mihir Soni

Resolved editing current occurence event issue

465. By Mihir Soni

merged

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
466. By Mihir Soni

Merge from trunk

467. By Mihir Soni

Fixed margin issues

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
468. By Mihir Soni

Fixed AP

469. By Mihir Soni

Merge from trunk

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
470. By Mihir Soni

pep8 errors

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

Tested and works as expected. Nice work Mihir!

Just one minor quirk,

606 - text: i18n.tr("Repeats")
607 - subText: eventUtils.getRecurrenceString(rule)
608 + text: i18n.tr("This Happens")

Why this change? I thought we (popey) agreed to using "Repeats" rather than "This Happens".

Also why did you remove,

613 - ListItem.ThinDivider {}

review: Needs Fixing
471. By Nekhelesh Ramananthan

Fixed minor issue

Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

I fixed the issues above. It looks good now.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'EventDetails.qml'
--- EventDetails.qml 2014-09-21 09:39:21 +0000
+++ EventDetails.qml 2014-09-24 11:32:08 +0000
@@ -17,7 +17,7 @@
17 */17 */
18import QtQuick 2.318import QtQuick 2.3
19import Ubuntu.Components 1.119import Ubuntu.Components 1.1
20import Ubuntu.Components.ListItems 1.020import Ubuntu.Components.ListItems 1.0 as ListItem
21import Ubuntu.Components.Themes.Ambiance 1.021import Ubuntu.Components.Themes.Ambiance 1.0
22import Ubuntu.Components.Popups 1.022import Ubuntu.Components.Popups 1.0
23import QtOrganizer 5.023import QtOrganizer 5.0
@@ -28,10 +28,8 @@
28 id: root28 id: root
29 objectName: "eventDetails"29 objectName: "eventDetails"
3030
31 property var event;31 property var event
32 property string headerColor :"black"32 property var model
33 property string detailColor :"grey"
34 property var model;
3533
36 anchors{34 anchors{
37 left: parent.left35 left: parent.left
@@ -44,15 +42,14 @@
44 title: i18n.tr("Event Details")42 title: i18n.tr("Event Details")
4543
46 Component.onCompleted: {44 Component.onCompleted: {
4745 showEvent(event)
48 showEvent(event);
49 }46 }
5047
51 Connections{48 Connections{
52 target: pageStack49 target: pageStack
53 onCurrentPageChanged:{50 onCurrentPageChanged:{
54 if( pageStack.currentPage === root) {51 if( pageStack.currentPage === root) {
55 showEvent(event);52 showEvent(event)
56 }53 }
57 }54 }
58 }55 }
@@ -64,15 +61,16 @@
64 function updateCollection(event) {61 function updateCollection(event) {
65 var collection = model.collection( event.collectionId );62 var collection = model.collection( event.collectionId );
66 calendarIndicator.color = collection.color63 calendarIndicator.color = collection.color
67 calendarName.text = collection.name64 eventInfo.color=collection.color
65 calendarName.text = i18n.tr("%1 Calendar").arg( collection.name)
68 }66 }
6967
70 function updateRecurrence( event ) {68 function updateRecurrence( event ) {
71 var index = 0;69 var index = 0;
72 if(event.recurrence) {70 if (event.recurrence) {
73 if(event.recurrence.recurrenceRules[0] !== undefined){71 if(event.recurrence.recurrenceRules[0] !== undefined){
74 var rule = event.recurrence.recurrenceRules[0];72 var rule = event.recurrence.recurrenceRules[0];
75 recurrentHeader.value = eventUtils.getRecurrenceString(rule)73 repeatLabel.text = eventUtils.getRecurrenceString(rule)
76 }74 }
77 }75 }
78 }76 }
@@ -81,7 +79,7 @@
81 var attendees = event.attendees;79 var attendees = event.attendees;
82 contactModel.clear();80 contactModel.clear();
83 if( attendees !== undefined ) {81 if( attendees !== undefined ) {
84 for( var j = 0 ; j < attendees.length ; ++j ) {82 for (var j = 0 ; j < attendees.length ; ++j) {
85 contactModel.append( {"name": attendees[j].name,"participationStatus": attendees[j].participationStatus } );83 contactModel.append( {"name": attendees[j].name,"participationStatus": attendees[j].participationStatus } );
86 }84 }
87 }85 }
@@ -92,43 +90,25 @@
92 if( reminder ) {90 if( reminder ) {
93 for(var i=0; i<reminderModel.count; i++) {91 for(var i=0; i<reminderModel.count; i++) {
94 if(reminder.secondsBeforeStart === reminderModel.get(i).value)92 if(reminder.secondsBeforeStart === reminderModel.get(i).value)
95 reminderHeader.value = reminderModel.get(i).label93 reminderHeader.subText = reminderModel.get(i).label
96 }94 }
97 } else {95 } else {
98 reminderHeader.value = reminderModel.get(0).label96 reminderHeader.subText = reminderModel.get(0).label
99 }97 }
100 }98 }
10199
102 function updateLocation(event) {100 function updateLocation(event) {
103 if( event.location ) {101 if( event.location ) {
104 locationLabel.text = event.location;102 locationLabel.text = i18n.tr("%1").arg(event.location)
105
106 // FIXME: need to cache map image to avoid duplicate download every time
107 var imageSrc = "http://maps.googleapis.com/maps/api/staticmap?center="+event.location+
108 "&markers=color:red|"+event.location+"&zoom=15&size="+mapContainer.width+
109 "x"+mapContainer.height+"&sensor=false";
110 mapImage.source = imageSrc;
111 }
112 else {
113 // TODO: use different color for empty text
114 locationLabel.text = i18n.tr("Not specified")
115 mapImage.source = "";
116 }103 }
117 }104 }
118105
119 function showEvent(e) {106 function showEvent(e) {
120 // TRANSLATORS: this is a time formatting string,107 var startTime = e.startDateTime.toLocaleTimeString(Qt.locale(), Locale.ShortFormat)
121 // see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions108 var endTime = e.endDateTime.toLocaleTimeString(Qt.locale(), Locale.ShortFormat)
122 // It's used to display the start and end times of an event in the event details109
123 // and new event views110 dateLabel.text = e.allDay === true ? i18n.tr("%1 (All Day)").arg( e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat))
124 var timeFormat = Qt.locale().timeFormat(Locale.ShortFormat);111 : e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat) + ", " +startTime + " - " + endTime;
125 // TRANSLATORS: this is a date formatting string,
126 // see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions
127 // It's used to display the date in the event details view
128 var dateFormat = i18n.tr("MMMM dd, yyyy")
129 eventDate.value = e.startDateTime.toLocaleString(Qt.locale(),dateFormat);
130 var startTime = e.startDateTime.toLocaleTimeString(Qt.locale(), timeFormat);
131 var endTime = e.endDateTime.toLocaleTimeString(Qt.locale(), timeFormat);
132112
133 if( e.itemType === Type.EventOccurrence ){113 if( e.itemType === Type.EventOccurrence ){
134 var requestId = -1;114 var requestId = -1;
@@ -141,15 +121,6 @@
141 });121 });
142 requestId = model.fetchItems([e.parentId]);122 requestId = model.fetchItems([e.parentId]);
143 }123 }
144
145 allDayEventCheckbox.checked = e.allDay;
146
147 startHeader.visible = !e.allDay;
148 endHeader.visible = !e.allDay;
149
150 startHeader.value = startTime;
151 endHeader.value = endTime;
152
153 // This is the event title124 // This is the event title
154 if( e.displayLabel) {125 if( e.displayLabel) {
155 titleLabel.text = e.displayLabel;126 titleLabel.text = e.displayLabel;
@@ -170,7 +141,6 @@
170 updateLocation(e);141 updateLocation(e);
171 }142 }
172143
173
174 Keys.onEscapePressed: {144 Keys.onEscapePressed: {
175 pageStack.pop();145 pageStack.pop();
176 }146 }
@@ -181,44 +151,41 @@
181 }151 }
182 }152 }
183153
184 tools: ToolbarItems {154 head.actions: [
185 ToolbarButton {155 Action {
186 action:Action {156 text: i18n.tr("Delete");
187 text: i18n.tr("Delete");157 objectName: "delete"
188 objectName: "delete"158 iconName: "delete"
189 iconName: "delete"159 onTriggered: {
190 onTriggered: {160 var dialog = PopupUtils.open(Qt.resolvedUrl("DeleteConfirmationDialog.qml"),root,{"event": event});
191 var dialog = PopupUtils.open(Qt.resolvedUrl("DeleteConfirmationDialog.qml"),root,{"event": event});161 dialog.deleteEvent.connect( function(eventId){
192 dialog.deleteEvent.connect( function(eventId){162 model.removeItem(eventId);
193 model.removeItem(eventId);163 pageStack.pop();
194 pageStack.pop();164 });
165 }
166 },
167
168 Action {
169 text: i18n.tr("Edit");
170 objectName: "edit"
171 iconName: "edit";
172 onTriggered: {
173 if( event.itemType === Type.EventOccurrence ) {
174 var dialog = PopupUtils.open(Qt.resolvedUrl("EditEventConfirmationDialog.qml"),root,{"event": event});
175 dialog.editEvent.connect( function(eventId){
176 if( eventId === event.parentId ) {
177 pageStack.push(Qt.resolvedUrl("NewEvent.qml"),{"event":internal.parentEvent,"model":model});
178 } else {
179 pageStack.push(Qt.resolvedUrl("NewEvent.qml"),{"event":event,"model":model});
180 }
195 });181 });
182 } else {
183 pageStack.push(Qt.resolvedUrl("NewEvent.qml"),{"event":event,"model":model});
196 }184 }
197 }185 }
198 }186 }
187 ]
199188
200 ToolbarButton {
201 action:Action {
202 text: i18n.tr("Edit");
203 objectName: "edit"
204 iconName: "edit";
205 onTriggered: {
206 if( event.itemType === Type.EventOccurrence ) {
207 var dialog = PopupUtils.open(Qt.resolvedUrl("EditEventConfirmationDialog.qml"),root,{"event": event});
208 dialog.editEvent.connect( function(eventId){
209 if( eventId === event.parentId ) {
210 pageStack.push(Qt.resolvedUrl("NewEvent.qml"),{"event":internal.parentEvent,"model":model});
211 } else {
212 pageStack.push(Qt.resolvedUrl("NewEvent.qml"),{"event":event,"model":model});
213 }
214 });
215 } else {
216 pageStack.push(Qt.resolvedUrl("NewEvent.qml"),{"event":event,"model":model});
217 }
218 }
219 }
220 }
221 }
222 EventUtils{189 EventUtils{
223 id:eventUtils190 id:eventUtils
224 }191 }
@@ -241,59 +208,81 @@
241208
242 Flickable{209 Flickable{
243 id: flicable210 id: flicable
244 width: parent.width211
245 height: parent.height212 clip: interactive
246 clip: true213 anchors.fill: parent
247214 interactive: contentHeight > height
248 contentHeight: column.height + units.gu(3) /*top margin + spacing */215
249 contentWidth: parent.width216 contentWidth: parent.width
250217 contentHeight: column.height + eventInfo.height + units.gu(3) /*top margin + spacing */
251 interactive: contentHeight > height218
219 Rectangle{
220 id: eventInfo
221
222 width: parent.width
223 height: eventInfoList.height + units.gu(5)
224
225 Column{
226 id:eventInfoList
227
228 anchors {
229 left: parent.left
230 right: parent.right
231 top: parent.top
232 margins: units.gu(2)
233 }
234
235 spacing: units.gu(0.5)
236
237 Label{
238 id: titleLabel
239 objectName: "titleLabel"
240 fontSize: "x-large"
241 width: parent.width
242 wrapMode: Text.WordWrap
243 color: "white"
244 }
245
246 Label{
247 id: dateLabel
248 objectName: "dateLabel"
249 color: "white"
250 fontSize: "medium"
251 width: parent.width
252 wrapMode: Text.WordWrap
253 }
254
255 Label{
256 id: repeatLabel
257 objectName: "repeatLabel"
258 color: "white"
259 fontSize: "small"
260 width: parent.width
261 wrapMode: Text.WordWrap
262 visible: repeatLabel.text !== ""
263 }
264
265 Label{
266 id: locationLabel
267 objectName: "locationLabel"
268 color: "white"
269 fontSize: "small"
270 width: parent.width
271 wrapMode: Text.WordWrap
272 visible: locationLabel.text !== ""
273 }
274 }
275 }
252276
253 Column{277 Column{
254 id: column278 id: column
279
255 spacing: units.gu(1)280 spacing: units.gu(1)
256 anchors{281 anchors{
257 top:parent.top282 top: eventInfo.bottom
258 topMargin: units.gu(2)
259 right: parent.right283 right: parent.right
260 rightMargin: units.gu(2)
261 left:parent.left284 left:parent.left
262 leftMargin: units.gu(2)285 margins: units.gu(2)
263 }
264 property int timeLabelMaxLen: Math.max( startHeader.headerWidth, endHeader.headerWidth,eventDate.headerWidth)// Dynamic Width
265 EventDetailsInfo{
266 id: eventDate
267 xMargin:column.timeLabelMaxLen
268 header: i18n.tr("Date")
269 }
270 EventDetailsInfo{
271 id: startHeader
272 xMargin:column.timeLabelMaxLen
273 header: i18n.tr("Start")
274 }
275 EventDetailsInfo{
276 id: endHeader
277 xMargin: column.timeLabelMaxLen
278 header: i18n.tr("End")
279 }
280 Row {
281 width: parent.width
282 spacing: units.gu(1)
283 anchors.margins: units.gu(0.5)
284 visible: allDayEventCheckbox.checked
285
286 Label {
287 text: i18n.tr("All day event")
288 anchors.verticalCenter: allDayEventCheckbox.verticalCenter
289 color: headerColor
290 }
291
292 CheckBox {
293 id: allDayEventCheckbox
294 checked: false
295 enabled: false
296 }
297 }286 }
298287
299 Row{288 Row{
@@ -302,109 +291,78 @@
302 UbuntuShape{291 UbuntuShape{
303 id: calendarIndicator292 id: calendarIndicator
304 width: parent.height293 width: parent.height
305 height: parent.height294 height: width
306 anchors.verticalCenter: parent.verticalCenter295 anchors.verticalCenter: parent.verticalCenter
307 }296 }
308 Label{297 Label{
309 id:calendarName298 id:calendarName
310 objectName: "calendarName"299 objectName: "calendarName"
311 anchors.verticalCenter: parent.verticalCenter300 anchors.verticalCenter: parent.verticalCenter
312 color: headerColor
313 }301 }
314 }302 }
315303
316 ThinDivider{}
317 Label{
318 id: titleLabel
319 objectName: "titleLabel"
320 fontSize: "large"
321 width: parent.width
322 wrapMode: Text.WordWrap
323 color: headerColor
324 }
325 Label{304 Label{
326 id: descLabel305 id: descLabel
327 objectName: "descriptionLabel"306 objectName: "descriptionLabel"
328 wrapMode: Text.WordWrap307 visible: text != ""
329 fontSize: "small"308 width: parent.width
330 width: parent.width309 wrapMode: Text.WordWrap
331 color: detailColor310 }
332 }311
333 ThinDivider{}312 Column {
334 EventDetailsInfo{313 anchors{
335 id: mapHeader314 right: parent.right
336 header: i18n.tr("Location")315 left:parent.left
337 }316 margins: units.gu(-2)
338 Label{317 }
339 id: locationLabel318
340 objectName: "locationLabel"319 ListItem.Header {
341 fontSize: "medium"320 text: i18n.tr("Guests")
342 width: parent.width321 visible: contactModel.count !== 0
343 wrapMode: Text.WordWrap322 }
344 color: detailColor323
345 }324 //Guest Entery Model starts
346325 Column{
347 //map control with location326 id: contactList
348 Rectangle{327 objectName: 'contactList'
349 id: mapContainer328
350 width:parent.width329 anchors {
351 height: units.gu(10)330 left: parent.left
352 visible: mapImage.status == Image.Ready331 right: parent.right
353332 }
354 Image {333
355 id: mapImage334 ListModel {
356 anchors.fill: parent335 id: contactModel
357 opacity: 0.5336 }
358 }337
359 }338 Repeater{
360 ThinDivider{}339 model: contactModel
361 Label{340 delegate: ListItem.Standard {
362 text: i18n.tr("Guests");341 Label {
363 fontSize: "medium"342 text: name
364 color: headerColor343 objectName: "eventGuest%1".arg(index)
365 font.bold: true344 color: UbuntuColors.midAubergine
366 }345 anchors {
367 //Guest Entery Model starts346 left: parent.left
368 Column{347 leftMargin: units.gu(2)
369 id: contactList348 verticalCenter: parent.verticalCenter
370 objectName: 'contactList'349 }
371 spacing: units.gu(1)350 }
372 width: parent.width351
373 clip: true352 control: CheckBox {
374 ListModel {353 enabled: false
375 id: contactModel354 checked: participationStatus
376 }355 }
377 Repeater{356 }
378 model: contactModel357 }
379 delegate: Row{358 }
380 spacing: units.gu(1)359 //Guest Entries ends
381 CheckBox{360
382 checked: participationStatus361 ListItem.Subtitled {
383 enabled: false362 id: reminderHeader
384 }363 text: i18n.tr("Reminder")
385 Label {364 }
386 text:name365 }
387 anchors.verticalCenter: parent.verticalCenter
388 color: detailColor
389 }
390 }
391 }
392 }
393
394 //Guest Entries ends
395 ThinDivider{}
396 property int recurranceAreaMaxWidth: Math.max( recurrentHeader.headerWidth, reminderHeader.headerWidth) //Dynamic Height
397 EventDetailsInfo{
398 id: recurrentHeader
399 xMargin: column.recurranceAreaMaxWidth
400 header: i18n.tr("Repeats")
401 }
402 EventDetailsInfo{
403 id: reminderHeader
404 xMargin: column.recurranceAreaMaxWidth
405 header: i18n.tr("Reminder")
406 }
407
408 }366 }
409 }367 }
410}368}
411369
=== removed file 'EventDetailsInfo.qml'
--- EventDetailsInfo.qml 2014-09-20 10:45:35 +0000
+++ EventDetailsInfo.qml 1970-01-01 00:00:00 +0000
@@ -1,44 +0,0 @@
1/*
2 * Copyright (C) 2013-2014 Canonical Ltd
3 *
4 * This file is part of Ubuntu Calendar App
5 *
6 * Ubuntu Calendar App is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 3 as
8 * published by the Free Software Foundation.
9 *
10 * Ubuntu Calendar App is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18import QtQuick 2.3
19import Ubuntu.Components 1.1
20import Ubuntu.Components.Themes.Ambiance 1.0
21Item
22{
23 property alias header: header.text
24 property alias value: value.text
25 property string headerColor :"black"
26 property string detailColor :"grey"
27 property int xMargin
28 property int headerWidth: header.width
29 width: parent.width
30 height: header.height
31 Label{
32 id: header
33 color: headerColor
34 font.bold: true
35 fontSize: "medium"
36 anchors.left: parent.left
37 }
38 Label{
39 id:value
40 x: xMargin + units.gu(1)
41 color: detailColor
42 fontSize: "medium"
43 }
44}
450
=== modified file 'NewEvent.qml'
--- NewEvent.qml 2014-09-22 06:51:06 +0000
+++ NewEvent.qml 2014-09-24 11:32:08 +0000
@@ -114,10 +114,11 @@
114 //Editing Event114 //Editing Event
115 function editEvent(e) {115 function editEvent(e) {
116 //If there is a ReccruenceRule use that , else create fresh Recurrence Object.116 //If there is a ReccruenceRule use that , else create fresh Recurrence Object.
117 rule = (e.recurrence.recurrenceRules[0] === undefined || e.recurrence.recurrenceRules[0] === null) ?117 if(e.itemType === Type.Event){
118 Qt.createQmlObject("import QtOrganizer 5.0; RecurrenceRule {}", event.recurrence,"EventRepetition.qml")118 rule = (e.recurrence.recurrenceRules[0] === undefined || e.recurrence.recurrenceRules[0] === null) ?
119 : e.recurrence.recurrenceRules[0];119 Qt.createQmlObject("import QtOrganizer 5.0; RecurrenceRule {}", event.recurrence,"EventRepetition.qml")
120120 : e.recurrence.recurrenceRules[0];
121 }
121 startDate =new Date(e.startDateTime);122 startDate =new Date(e.startDateTime);
122 endDate = new Date(e.endDateTime);123 endDate = new Date(e.endDateTime);
123124
@@ -587,7 +588,10 @@
587 }588 }
588 }589 }
589590
590 ListItem.ThinDivider {}591 ListItem.ThinDivider {
592 visible: event.itemType === Type.Event
593 }
594
591 }595 }
592596
593 ListItem.Subtitled{597 ListItem.Subtitled{
@@ -603,11 +607,13 @@
603 progression: true607 progression: true
604 visible: event.itemType === Type.Event608 visible: event.itemType === Type.Event
605 text: i18n.tr("Repeats")609 text: i18n.tr("Repeats")
606 subText: eventUtils.getRecurrenceString(rule)610 subText: event.itemType === Type.Event ? eventUtils.getRecurrenceString(rule) : ""
607 onClicked: pageStack.push(Qt.resolvedUrl("EventRepetition.qml"),{"rule": rule,"date":date,"isEdit":isEdit});611 onClicked: pageStack.push(Qt.resolvedUrl("EventRepetition.qml"),{"rule": rule,"date":date,"isEdit":isEdit});
608 }612 }
609613
610 ListItem.ThinDivider {}614 ListItem.ThinDivider {
615 visible: event.itemType === Type.Event
616 }
611617
612 ListItem.Subtitled{618 ListItem.Subtitled{
613 id:eventReminder619 id:eventReminder
@@ -638,6 +644,8 @@
638 "reminderModel": reminderModel,644 "reminderModel": reminderModel,
639 "eventTitle": titleEdit.text})645 "eventTitle": titleEdit.text})
640 }646 }
647
648 ListItem.ThinDivider {}
641 }649 }
642 }650 }
643 // used to keep the field visible when the keyboard appear or dismiss651 // used to keep the field visible when the keyboard appear or dismiss
644652
=== modified file 'tests/autopilot/calendar_app/__init__.py'
--- tests/autopilot/calendar_app/__init__.py 2014-09-19 12:26:42 +0000
+++ tests/autopilot/calendar_app/__init__.py 2014-09-24 11:32:08 +0000
@@ -682,7 +682,7 @@
682 return data.Event(calendar, name, description, location, guests)682 return data.Event(calendar, name, description, location, guests)
683683
684 def _get_calendar(self):684 def _get_calendar(self):
685 return self._get_label_text('calendarName')685 return self._get_label_text('calendarName').split(" ")[0]
686686
687 def _get_name(self):687 def _get_name(self):
688 return self._get_label_text('titleLabel')688 return self._get_label_text('titleLabel')
@@ -700,10 +700,10 @@
700 guests = []700 guests = []
701 contacts_list = self.select_single(701 contacts_list = self.select_single(
702 'QQuickColumn', objectName='contactList')702 'QQuickColumn', objectName='contactList')
703 guest_labels = contacts_list.select_many('Label')703 guests.append(
704 for label in guest_labels:704 contacts_list.select_single(
705 guests.append(label.text)705 "Label",
706706 objectName='eventGuest0').text)
707 return guests707 return guests
708708
709709

Subscribers

People subscribed via source and target branches

to status/vote changes: