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

Proposed by Nekhelesh Ramananthan
Status: Merged
Approved by: Renato Araujo Oliveira Filho
Approved revision: 789
Merged at revision: 790
Proposed branch: lp:~nik90/ubuntu-calendar-app/revamp-eventdetails-page
Merge into: lp:ubuntu-calendar-app
Diff against target: 1136 lines (+337/-394)
7 files modified
AgendaView.qml (+2/-2)
AllDayEventComponent.qml (+2/-4)
CMakeLists.txt (+22/-14)
EventDetails.qml (+232/-258)
HeaderDateComponent.qml (+1/-1)
MonthComponent.qml (+2/-0)
po/com.ubuntu.calendar.pot (+76/-115)
To merge this branch: bzr merge lp:~nik90/ubuntu-calendar-app/revamp-eventdetails-page
Reviewer Review Type Date Requested Status
Renato Araujo Oliveira Filho (community) Approve
Jenkins Bot continuous-integration Approve
Review via email: mp+288492@code.launchpad.net

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

Description of the change

- 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

To post a comment you must log in.
Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Szymon Waliczek (majster-pl) :
784. By Nekhelesh Ramananthan

merged lp:ubuntu-calendar-app

Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
785. By Nekhelesh Ramananthan

Fixed szymon's review

Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Renato Araujo Oliveira Filho (renatofilho) wrote :

some comments inline.

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

@Renator Replied to your inline comments.

786. By Nekhelesh Ramananthan

Added keyboard shortcut to edit action

787. By Nekhelesh Ramananthan

Removed pagestack connection since it doesn't have any merit of being included there

Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Renato Araujo Oliveira Filho (renatofilho) wrote :

@nick90: Since you are revamp the page is better to fix/update wrong code if necessary.

Check my inline comments.

Revision history for this message
Renato Araujo Oliveira Filho (renatofilho) wrote :

The visual looks different from this doc: https://docs.google.com/document/d/1UZEKYB1JS0CO0gEiPu701rhZSHimJYq6EgeLNhxG_1I/edit#heading=h.luhyfkrvthz3

In the current implementation only the event title has the collection color as background in the doc it shows the event title and time over the collection color background.

788. By Nekhelesh Ramananthan

Added connection to detect external event changes and modify the event details page

Revision history for this message
Renato Araujo Oliveira Filho (renatofilho) wrote :

Long event description is clipped even if there is still space on the screen.

check screenshot.http://imgur.com/GTNhwRx

789. By Nekhelesh Ramananthan

Fixed issues pointed by renato regarding description getting truncated and including location, date in the colored rectangle

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

Fixed remaining issues.

Revision history for this message
Renato Araujo Oliveira Filho (renatofilho) wrote :

looks good. Thanks.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'AgendaView.qml'
--- AgendaView.qml 2016-03-14 16:22:46 +0000
+++ AgendaView.qml 2016-03-16 16:44:44 +0000
@@ -164,8 +164,8 @@
164 ListItemLayout {164 ListItemLayout {
165 id: listitemlayout165 id: listitemlayout
166 padding.top: units.gu(1)166 padding.top: units.gu(1)
167 title.text: mainView.displayLunarCalendar ? i18n.tr("%1 %2 %3 %4 %5").arg(lunarDate.gzYear).arg(lunarDate .IMonthCn).arg(lunarDate.IDayCn)167 title.text: mainView.displayLunarCalendar ? ("%1 %2 %3 %4 %5").arg(lunarDate.gzYear).arg(lunarDate .IMonthCn).arg(lunarDate.IDayCn)
168 .arg(lunarDate.gzDay).arg(lunarDate.isTerm ? lunarDate.Term : "")168 .arg(lunarDate.gzDay).arg(lunarDate.isTerm ? lunarDate.Term : "")
169 : date169 : date
170 title.color: event.startDateTime.toLocaleDateString() === new Date().toLocaleDateString() ? UbuntuColors.orange : UbuntuColors.darkGrey170 title.color: event.startDateTime.toLocaleDateString() === new Date().toLocaleDateString() ? UbuntuColors.orange : UbuntuColors.darkGrey
171 }171 }
172172
=== modified file 'AllDayEventComponent.qml'
--- AllDayEventComponent.qml 2016-03-04 03:08:09 +0000
+++ AllDayEventComponent.qml 2016-03-16 16:44:44 +0000
@@ -143,10 +143,8 @@
143 }143 }
144144
145 if(repeater.compactView) {145 if(repeater.compactView) {
146 // TRANSLATORS: the first parameter refers to the number of all-day events146 // TRANSLATORS: Please keep the translation of this string to a max of
147 // on a given day. "Ev." is short form for "Events".147 // 5 characters as the week view where it is shown has limited space.
148 // Please keep the translation of "Ev." to 3 characters only, as the week view
149 // where it's shown has limited space
150 return i18n.tr("%1 event", "%1 events", events.length).arg(events.length)148 return i18n.tr("%1 event", "%1 events", events.length).arg(events.length)
151 } else {149 } else {
152 if( events.length > 1) {150 if( events.length > 1) {
153151
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2015-11-23 09:21:05 +0000
+++ CMakeLists.txt 2016-03-16 16:44:44 +0000
@@ -1,23 +1,34 @@
1project(com.ubuntu.calendar)1project(com.ubuntu.calendar)
2cmake_minimum_required(VERSION 2.8.9)2cmake_minimum_required(VERSION 2.8.9)
3
3find_program(INTLTOOL_MERGE intltool-merge)4find_program(INTLTOOL_MERGE intltool-merge)
5if(NOT INTLTOOL_MERGE)
6 message(FATAL_ERROR "Could not find intltool-merge, please install the intltool package")
7endif()
8
4find_program(INTLTOOL_EXTRACT intltool-extract)9find_program(INTLTOOL_EXTRACT intltool-extract)
10if(NOT INTLTOOL_EXTRACT)
11 message(FATAL_ERROR "Could not find intltool-extract, please install the intltool package")
12endif()
13
14option(INSTALL_TESTS "Install the tests on make install" on)
15option(CLICK_MODE "Installs to a contained location" on)
516
6# Standard install paths17# Standard install paths
7include(GNUInstallDirs)18include(GNUInstallDirs)
819
9option(INSTALL_TESTS "Install the tests on make install" on)20# Tests
10option(CLICK_MODE "Installs to a contained location" on)21enable_testing()
1122
12set(APP_NAME calendar)23set(APP_NAME calendar)
13set(DESKTOP_FILE "${PROJECT_NAME}_${APP_NAME}.desktop")24set(DESKTOP_FILE "${PROJECT_NAME}_${APP_NAME}.desktop")
14set(APPLICATION_FILE "${PROJECT_NAME}_${APP_NAME}.application")25set(APPLICATION_FILE "${PROJECT_NAME}_${APP_NAME}.application")
15set(URLS_FILE "${PROJECT_NAME}_${APP_NAME}.url-dispatcher")26set(URLS_FILE "${PROJECT_NAME}_${APP_NAME}.url-dispatcher")
16set(MAIN_QML calendar.qml)27set(MAIN_QML calendar.qml)
17set(ICON_FILE calendar-app@30.png)28set(ICON_FILE calendar-app@30.png)
18set(AUTOPILOT_DIR calendar_app)29set(AUTOPILOT_DIR calendar_app)
19set(APP_HARDCODE calendar-app)30set(APP_HARDCODE calendar-app)
20set(UBUNTU_MANIFEST_PATH "click/manifest.json.in" CACHE INTERNAL "Relative path to the manifest file")31set(UBUNTU_MANIFEST_PATH "click/manifest.json.in" CACHE INTERNAL "Relative path to the manifest file")
2132
22if(CLICK_MODE)33if(CLICK_MODE)
23 if(NOT DEFINED BZR_SOURCE)34 if(NOT DEFINED BZR_SOURCE)
@@ -77,9 +88,6 @@
7788
78install(DIRECTORY "3rd-party" DESTINATION ${DATA_DIR})89install(DIRECTORY "3rd-party" DESTINATION ${DATA_DIR})
7990
80# Tests
81enable_testing()
82
83add_subdirectory(click)91add_subdirectory(click)
84add_subdirectory(po)92add_subdirectory(po)
85add_subdirectory(tests)93add_subdirectory(tests)
8694
=== modified file 'EventDetails.qml'
--- EventDetails.qml 2016-03-02 19:55:52 +0000
+++ EventDetails.qml 2016-03-16 16:44:44 +0000
@@ -1,5 +1,5 @@
1/*1/*
2 * Copyright (C) 2013-2014 Canonical Ltd2 * Copyright (C) 2013-2016 Canonical Ltd
3 *3 *
4 * This file is part of Ubuntu Calendar App4 * This file is part of Ubuntu Calendar App
5 *5 *
@@ -15,11 +15,10 @@
15 * You should have received a copy of the GNU General Public License15 * 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/>.16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */17 */
18
18import QtQuick 2.419import QtQuick 2.4
19import Ubuntu.Components 1.320import Ubuntu.Components 1.3
20import Ubuntu.Components.ListItems 1.0 as ListItem21import Ubuntu.Components.Popups 1.3
21import Ubuntu.Components.Themes.Ambiance 1.0
22import Ubuntu.Components.Popups 1.0
23import QtOrganizer 5.022import QtOrganizer 5.0
2423
25import "Defines.js" as Defines24import "Defines.js" as Defines
@@ -32,46 +31,45 @@
3231
33 property var event32 property var event
34 property var model33 property var model
34 property var collection: model.collection(event.collectionId);
3535
36 anchors{36 header: PageHeader {
37 left: parent.left37 title: i18n.tr("Event Details")
38 right: parent.right38 flickable: flicable
39 bottom: parent.bottom39 trailingActionBar.actions: Action {
40 text: i18n.tr("Edit");
41 objectName: "edit"
42 iconName: "edit";
43 enabled: !collection.extendedMetaData("collection-readonly")
44 shortcut: "Ctrl+E"
45 onTriggered: {
46 if( event.itemType === Type.EventOccurrence ) {
47 var dialog = PopupUtils.open(Qt.resolvedUrl("EditEventConfirmationDialog.qml"),root,{"event": event});
48 dialog.editEvent.connect( function(eventId){
49 if( eventId === event.parentId ) {
50 showEditEventPage(internal.parentEvent, model)
51 } else {
52 showEditEventPage(event, model)
53 }
54 });
55 } else {
56 showEditEventPage(event, model)
57 }
58 }
59 }
40 }60 }
4161
42 flickable: null
43
44 title: i18n.tr("Event Details")
45
46 Component.onCompleted: {62 Component.onCompleted: {
47 showEvent(event)63 showEvent(event)
48 }64 }
4965
50 Connections{66 Keys.onEscapePressed: {
51 target: pageStack67 pageStack.pop();
52 onCurrentPageChanged:{68 }
53 if( pageStack.currentPage === root) {69
54 showEvent(event)70 Connections {
55 }71 target: event
56 }72 onItemChanged: showEvent(event)
57 }
58
59 RemindersModel {
60 id: reminderModel
61 }
62
63 function updateCollection(event) {
64
65 var collection = model.collection( event.collectionId );
66 calendarIndicator.color = collection.color
67 eventInfo.color=collection.color
68 // TRANSLATORS: the first parameter refers to the name of event calendar.
69 calendarName.text = i18n.tr("%1 Calendar").arg( collection.name)
70
71 //disable edit in case of read only calendar
72 if( collection.extendedMetaData("collection-readonly") === true ) {
73 editAction.enabled = false
74 }
75 }73 }
7674
77 function updateRecurrence( event ) {75 function updateRecurrence( event ) {
@@ -79,103 +77,124 @@
79 if (event.recurrence) {77 if (event.recurrence) {
80 if(event.recurrence.recurrenceRules[0] !== undefined){78 if(event.recurrence.recurrenceRules[0] !== undefined){
81 var rule = event.recurrence.recurrenceRules[0];79 var rule = event.recurrence.recurrenceRules[0];
82 repeatLabel.text = eventUtils.getRecurrenceString(rule)80 recurrenceLabel.text = eventUtils.getRecurrenceString(rule)
83 } else {81 } else {
84 //For event occurs once, event.recurrence.recurrenceRules == []82 //For event occurs once, event.recurrence.recurrenceRules == []
85 repeatLabel.text = Defines.recurrenceLabel[0];83 recurrenceLabel.text = Defines.recurrenceLabel[0];
86 }84 }
87 }85 }
88 }86 }
8987
90 function updateContacts(event) {88 function updateContacts(event) {
91 var attendees = event.attendees;89 var attendees
90 var attendingCount, notAttendingCount
91
92 attendingCount = 0
93 notAttendingCount = 0
94 attendees = event.attendees
95
92 contactModel.clear();96 contactModel.clear();
97
93 if( attendees !== undefined ) {98 if( attendees !== undefined ) {
94 for (var j = 0 ; j < attendees.length ; ++j) {99 for (var j = 0 ; j < attendees.length ; ++j) {
95 var name = attendees[j].name.trim().length === 0 ?100 var name = attendees[j].name.trim().length === 0 ? attendees[j].emailAddress.replace("mailto:", "")
96 attendees[j].emailAddress.replace("mailto:", ""):101 : attendees[j].name
97 attendees[j].name102
98103 // Sort the participating guests by Attending, Not-Attending and No-Reply for easier diaply in the list view.
99 contactModel.append( {"name": name,"participationStatus": attendees[j].participationStatus } );104 if(attendees[j].participationStatus === 0) {
105 contactModel.insert(attendingCount+notAttendingCount, {"name": name,"participationStatus": attendees[j].participationStatus})
106 notAttendingCount++
107 }
108
109 else if(attendees[j].participationStatus === 1) {
110 contactModel.insert(attendingCount, {"name": name,"participationStatus": attendees[j].participationStatus})
111 attendingCount++
112 }
113
114 else {
115 contactModel.append({"name": name,"participationStatus": attendees[j].participationStatus});
116 }
100 }117 }
101 }118 }
102 }119 }
103120
104 function updateReminder(event) {121 function updateReminder(event) {
105 var reminder = event.detail( Detail.VisualReminder)122 var reminder = event.detail(Detail.VisualReminder)
106 if(reminder) {123 if(reminder) {
107 for(var i=0; i<reminderModel.count; i++) {124 for(var i=0; i<reminderModel.count; i++) {
108 if(reminder.secondsBeforeStart === reminderModel.get(i).value) {125 if(reminder.secondsBeforeStart === reminderModel.get(i).value) {
109 reminderHeader.subText = reminderModel.get(i).label126 reminderLayout.subtitle.text = reminderModel.get(i).label
110 }127 }
111 }128 }
112 } else {129 } else {
113 reminderHeader.subText = reminderModel.get(0).label130 reminderLayout.subtitle.text = reminderModel.get(0).label
114 }131 }
115 }132 }
116133
117 function updateLocation(event) {134 function getDate(e) {
118 if( event.location ) {135 var dateLabel = null
119 locationLabel.text = event.location136
120 }
121 }
122
123 function showEvent(e) {
124 var startTime = e.startDateTime.toLocaleTimeString(Qt.locale(), Locale.ShortFormat)137 var startTime = e.startDateTime.toLocaleTimeString(Qt.locale(), Locale.ShortFormat)
125 var endTime = e.endDateTime.toLocaleTimeString(Qt.locale(), Locale.ShortFormat)138 var endTime = e.endDateTime.toLocaleTimeString(Qt.locale(), Locale.ShortFormat)
126139 var startDay = e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat)
127 var lunarStartDate = null;140 var endDay = e.endDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat)
128 var lunarEndDate = null;141
142 var lunarStartDate = null
143 var lunarEndDate = null
144
145 var allDayString = "(%1)".arg(i18n.tr("All Day"))
146
129 if (mainView.displayLunarCalendar) {147 if (mainView.displayLunarCalendar) {
130 lunarStartDate = Lunar.calendar.solar2lunar(e.startDateTime.getFullYear(),148 lunarStartDate = Lunar.calendar.solar2lunar(e.startDateTime.getFullYear(),
131 e.startDateTime.getMonth() + 1,149 e.startDateTime.getMonth() + 1,
132 e.startDateTime.getDate())150 e.startDateTime.getDate())
133151
134 lunarEndDate = Lunar.calendar.solar2lunar(e.endDateTime.getFullYear(),152 lunarEndDate = Lunar.calendar.solar2lunar(e.endDateTime.getFullYear(),
135 e.endDateTime.getMonth() + 1,153 e.endDateTime.getMonth() + 1,
136 e.endDateTime.getDate())154 e.endDateTime.getDate())
137 }155 }
138156
139 if( e.allDay ) {157 if( e.allDay ) {
140 var days = Math.floor((e.endDateTime - e.startDateTime) / Date.msPerDay);158 var days = Math.floor((e.endDateTime - e.startDateTime) / Date.msPerDay);
141 if( days !== 1 ) {159 if( days !== 1 ) {
142 if (mainView.displayLunarCalendar) {160 if (mainView.displayLunarCalendar) {
143 dateLabel.text = i18n.tr("%1 %2 %3 - %4 %5 %6 (All Day)")161 dateLabel = ("%1 %2 %3 - %4 %5 %6").arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn)
144 .arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn)
145 .arg(lunarEndDate.gzYear).arg(lunarEndDate .IMonthCn).arg(lunarEndDate.IDayCn)162 .arg(lunarEndDate.gzYear).arg(lunarEndDate .IMonthCn).arg(lunarEndDate.IDayCn)
146 } else {163 } else {
147 dateLabel.text = i18n.tr("%1 - %2 (All Day)")164 dateLabel = ("%1 - %2").arg(startDay).arg(e.endDateTime.addDays(-1).toLocaleDateString(Qt.locale(), Locale.LongFormat))
148 .arg( e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat))
149 .arg( e.endDateTime.addDays(-1).toLocaleDateString(Qt.locale(), Locale.LongFormat))
150 }165 }
151 } else {166 } else {
152 if (mainView.displayLunarCalendar) {167 if (mainView.displayLunarCalendar) {
153 dateLabel.text = i18n.tr("%1 %2 %3 (All Day)")168 dateLabel = ("%1 %2 %3").arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn)
154 .arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn)
155 } else {169 } else {
156 dateLabel.text = i18n.tr("%1 (All Day)").arg( e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat))170 dateLabel = startDay
157 }171 }
158 }172 }
159 } else {173
174 dateLabel = dateLabel.concat(" ", allDayString)
175 }
176
177 else {
160 if (e.endDateTime.getDate() !== e.startDateTime.getDate()) {178 if (e.endDateTime.getDate() !== e.startDateTime.getDate()) {
161 if (mainView.displayLunarCalendar) {179 if (mainView.displayLunarCalendar) {
162 dateLabel.text = i18n.tr("%1 %2 %3, %4 - %5 %6 %7, %8")180 dateLabel = ("%1 %2 %3, %4 - %5 %6 %7, %8").arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn).arg(startTime)
163 .arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn).arg(startTime)
164 .arg(lunarEndDate.gzYear).arg(lunarEndDate .IMonthCn).arg(lunarEndDate.IDayCn).arg(endTime);181 .arg(lunarEndDate.gzYear).arg(lunarEndDate .IMonthCn).arg(lunarEndDate.IDayCn).arg(endTime);
165 } else {182 } else {
166 dateLabel.text = e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat) + ", " +startTime + " - "183 dateLabel = ("%1, %2 - %3, %4").arg(startDay).arg(startTime).arg(endDay).arg(endTime)
167 + e.endDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat) + ", " + endTime;
168 }184 }
169 } else {185 } else {
170 if (mainView.displayLunarCalendar) {186 if (mainView.displayLunarCalendar) {
171 dateLabel.text = i18n.tr("%1 %2 %3, %4 - %5")187 dateLabel = ("%1 %2 %3, %4 - %5").arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn).arg(startTime).arg(endTime)
172 .arg(lunarStartDate.gzYear).arg(lunarStartDate .IMonthCn).arg(lunarStartDate.IDayCn).arg(startTime).arg(endTime);
173 } else {188 } else {
174 dateLabel.text = e.startDateTime.toLocaleDateString(Qt.locale(), Locale.LongFormat) + ", " +startTime + " - " + endTime;189 dateLabel = ("%1, %2 - %3").arg(startDay).arg(startTime).arg(endTime)
175 }190 }
176 }191 }
177 }192 }
178193
194 return dateLabel
195 }
196
197 function showEvent(e) {
179 if( e.itemType === Type.EventOccurrence ){198 if( e.itemType === Type.EventOccurrence ){
180 var requestId = -1;199 var requestId = -1;
181 model.onItemsFetched.connect( function(id,fetchedItems){200 model.onItemsFetched.connect( function(id,fetchedItems){
@@ -187,24 +206,10 @@
187 });206 });
188 requestId = model.fetchItems([e.parentId]);207 requestId = model.fetchItems([e.parentId]);
189 }208 }
190 // This is the event title
191 if( e.displayLabel) {
192 titleLabel.text = e.displayLabel;
193 }
194
195 if( e.description ) {
196 descLabel.text = e.description;
197 }
198
199 updateCollection(e);
200209
201 updateContacts(e);210 updateContacts(e);
202
203 updateRecurrence(e);211 updateRecurrence(e);
204
205 updateReminder(e);212 updateReminder(e);
206
207 updateLocation(e);
208 }213 }
209214
210 function showEditEventPage(event, model) {215 function showEditEventPage(event, model) {
@@ -223,37 +228,13 @@
223 })228 })
224 }229 }
225230
226 Keys.onEscapePressed: {231 RemindersModel {
227 pageStack.pop();232 id: reminderModel
228 }233 }
229234
230 Keys.onPressed: {235 ListModel {
231 if ((event.key === Qt.Key_E) && ( event.modifiers & Qt.ControlModifier)) {236 id: contactModel
232 showEditEventPage(event, model);237 }
233 }
234 }
235
236 head.actions: [
237 Action {
238 text: i18n.tr("Edit");
239 objectName: "edit"
240 iconName: "edit";
241 onTriggered: {
242 if( event.itemType === Type.EventOccurrence ) {
243 var dialog = PopupUtils.open(Qt.resolvedUrl("EditEventConfirmationDialog.qml"),root,{"event": event});
244 dialog.editEvent.connect( function(eventId){
245 if( eventId === event.parentId ) {
246 showEditEventPage(internal.parentEvent, model)
247 } else {
248 showEditEventPage(event, model)
249 }
250 });
251 } else {
252 showEditEventPage(event, model)
253 }
254 }
255 }
256 ]
257238
258 EventUtils{239 EventUtils{
259 id:eventUtils240 id:eventUtils
@@ -264,12 +245,6 @@
264 property var parentEvent;245 property var parentEvent;
265 }246 }
266247
267 Rectangle {
268 id: bg
269 color: "white"
270 anchors.fill: parent
271 }
272
273 Scrollbar {248 Scrollbar {
274 flickableItem: flicable249 flickableItem: flicable
275 align: Qt.AlignTrailing250 align: Qt.AlignTrailing
@@ -280,65 +255,53 @@
280255
281 clip: interactive256 clip: interactive
282 anchors.fill: parent257 anchors.fill: parent
283 interactive: contentHeight > height
284
285 contentWidth: parent.width258 contentWidth: parent.width
286 contentHeight: column.height + eventInfo.height + units.gu(3) /*top margin + spacing */259 contentHeight: column.height + titleContainer.height
287260
288 Rectangle{261 Rectangle{
289 id: eventInfo262 id: titleContainer
290263
264 color: collection.color
291 width: parent.width265 width: parent.width
292 height: eventInfoList.height + units.gu(5)266 height: mainEventDetails.height + units.gu(4)
293267
294 Column{268 Column {
295 id:eventInfoList269 id: mainEventDetails
296
297 anchors {
298 left: parent.left
299 right: parent.right
300 top: parent.top
301 margins: units.gu(2)
302 }
303270
304 spacing: units.gu(0.5)271 spacing: units.gu(0.5)
305272 anchors { verticalCenter: parent.verticalCenter; left: parent.left; right: parent.right; margins: units.gu(2) }
306 Label{273
307 id: titleLabel274 Label {
308 objectName: "titleLabel"275 text: event.displayLabel
309 fontSize: "large"276 color: "White"
310 width: parent.width277 textSize: Label.Large
311 wrapMode: Text.WordWrap278 width: parent.width
312 color: "white"279 wrapMode: Text.wrapMode
313 }280 }
314281
315 Label{282 Label {
316 id: dateLabel283 text: getDate(event)
317 objectName: "dateLabel"284 color: "White"
318 color: "white"285 visible: text != ""
319 fontSize: "medium"286 width: parent.width
320 width: parent.width287 wrapMode: Text.wrapMode
321 wrapMode: Text.WordWrap288 }
322 }289
323290 Label {
324 Label{291 text: event.location
325 id: repeatLabel292 color: "White"
326 objectName: "repeatLabel"293 visible: text != ""
327 color: "white"294 width: parent.width
328 fontSize: "small"295 wrapMode: Text.wrapMode
329 width: parent.width296 }
330 wrapMode: Text.WordWrap297
331 visible: repeatLabel.text !== ""298 Label {
332 }299 id: recurrenceLabel
333300 textSize: Label.Small
334 Label{301 color: "White"
335 id: locationLabel302 visible: text != ""
336 objectName: "locationLabel"303 width: parent.width
337 color: "white"304 wrapMode: Text.wrapMode
338 fontSize: "small"
339 width: parent.width
340 wrapMode: Text.WordWrap
341 visible: locationLabel.text !== ""
342 }305 }
343 }306 }
344 }307 }
@@ -346,90 +309,101 @@
346 Column{309 Column{
347 id: column310 id: column
348311
349 spacing: units.gu(1)312 width: parent.width
350 anchors{313 anchors.top: titleContainer.bottom
351 top: eventInfo.bottom314
352 right: parent.right315 ListItem {
353 left:parent.left316 height: units.gu(6)
354 margins: units.gu(2)317 Row{
318 id: calendarNameRow
319
320 spacing: units.gu(1)
321 anchors { verticalCenter: parent.verticalCenter; left: parent.left; right: parent.right; margins: units.gu(2) }
322
323 Label {
324 text: i18n.tr("Calendar")
325 }
326
327 UbuntuShape{
328 id: calendarIndicator
329 width: parent.height
330 height: width
331 color: collection.color
332 anchors.verticalCenter: parent.verticalCenter
333 }
334
335 Label{
336 id:calendarName
337 objectName: "calendarName"
338 text: collection.name
339 }
340 }
355 }341 }
356342
357 Row{343 ListView{
344 model: contactModel
358 width: parent.width345 width: parent.width
359 spacing: units.gu(1)346 height: count !== 0 ? (count+1) * units.gu(7): 0
360 UbuntuShape{347 interactive: false
361 id: calendarIndicator348
362 width: parent.height349 section.property: "participationStatus"
363 height: width350 section.labelPositioning: ViewSection.InlineLabels
364 anchors.verticalCenter: parent.verticalCenter351 section.delegate: ListItem {
352 height: headerText.height + divider.height
353 ListItemLayout {
354 id: headerText
355 title.text: {
356 if (section === "0") {
357 return i18n.tr("Not Attending")
358 }
359
360 else if (section === "1") {
361 return i18n.tr("Attending")
362 }
363
364 else if (section === "2") {
365 return i18n.tr("No Reply")
366 }
367 }
368 title.font.weight: Font.DemiBold
369 }
365 }370 }
366 Label{371
367 id:calendarName372 delegate: ListItem {
368 objectName: "calendarName"373 height: contactListItemLayout.height + divider.height
369 anchors.verticalCenter: parent.verticalCenter374 ListItemLayout {
375 id: contactListItemLayout
376 title.text: name
377 }
370 }378 }
371 }379 }
372380
373 Label{381 ListItem {
374 id: descLabel382 id: descLabel
375 objectName: "descriptionLabel"383 height: descTitle.height + desc.implicitHeight + divider.height + units.gu(4)
376 visible: text != ""384 visible: desc.text !== ""
377 width: parent.width385
378 wrapMode: Text.WordWrap386 Label {
387 id: descTitle
388 text: i18n.tr("Description")
389 anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(2); topMargin: units.gu(1.5) }
390 }
391
392 Label {
393 id: desc
394 text: event.description
395 textSize: Label.Small
396 color: UbuntuColors.graphite
397 wrapMode: Text.WordWrap
398 anchors { left: parent.left; right: parent.right; top: descTitle.bottom; margins: units.gu(2); topMargin: units.gu(0.5) }
399 }
379 }400 }
380401
381 Column {402 ListItem {
382 anchors{403 height: reminderLayout.height + divider.height
383 right: parent.right404 ListItemLayout {
384 left:parent.left405 id: reminderLayout
385 margins: units.gu(-2)406 title.text: i18n.tr("Reminder")
386 }
387
388 ListItem.Header {
389 text: i18n.tr("Guests")
390 visible: contactModel.count !== 0
391 }
392
393 //Guest Entery Model starts
394 Column{
395 id: contactList
396 objectName: 'contactList'
397
398 anchors {
399 left: parent.left
400 right: parent.right
401 }
402
403 ListModel {
404 id: contactModel
405 }
406
407 Repeater{
408 model: contactModel
409 delegate: ListItem.Standard {
410 Label {
411 text: name
412 objectName: "eventGuest%1".arg(index)
413 color: UbuntuColors.midAubergine
414 anchors {
415 left: parent.left
416 leftMargin: units.gu(2)
417 verticalCenter: parent.verticalCenter
418 }
419 }
420
421 control: CheckBox {
422 enabled: false
423 checked: participationStatus
424 }
425 }
426 }
427 }
428 //Guest Entries ends
429
430 ListItem.Subtitled {
431 id: reminderHeader
432 text: i18n.tr("Reminder")
433 }407 }
434 }408 }
435 }409 }
436410
=== modified file 'HeaderDateComponent.qml'
--- HeaderDateComponent.qml 2016-03-02 19:55:52 +0000
+++ HeaderDateComponent.qml 2016-03-16 16:44:44 +0000
@@ -87,7 +87,7 @@
87 var lunarDate = Lunar.calendar.solar2lunar(date.getFullYear(),87 var lunarDate = Lunar.calendar.solar2lunar(date.getFullYear(),
88 date.getMonth() + 1,88 date.getMonth() + 1,
89 date.getDate())89 date.getDate())
90 return i18n.tr("%1 %2 %3").arg(lunarDate.IDayCn).arg(lunarDate.gzDay).arg(lunarDate.isTerm ? lunarDate.Term : "")90 return ("%1 %2 %3").arg(lunarDate.IDayCn).arg(lunarDate.gzDay).arg(lunarDate.isTerm ? lunarDate.Term : "")
91 } else {91 } else {
92 return date.getDate();92 return date.getDate();
93 }93 }
9494
=== modified file 'MonthComponent.qml'
--- MonthComponent.qml 2016-03-02 19:55:52 +0000
+++ MonthComponent.qml 2016-03-16 16:44:44 +0000
@@ -312,6 +312,8 @@
312 id: weekNumLabel;312 id: weekNumLabel;
313 objectName: "weekNumLabel";313 objectName: "weekNumLabel";
314 width: parent.width;314 width: parent.width;
315 // TRANSLATORS: This is shown in the month view as "Wk" as a title
316 // to indicate the week numbers. It should be a max of up to 3 characters.
315 text: i18n.tr("Wk");317 text: i18n.tr("Wk");
316 horizontalAlignment: Text.AlignHCenter;318 horizontalAlignment: Text.AlignHCenter;
317 verticalAlignment: Text.AlignVCenter;319 verticalAlignment: Text.AlignVCenter;
318320
=== 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-16 16:44:44 +0000
@@ -8,7 +8,7 @@
8msgstr ""8msgstr ""
9"Project-Id-Version: \n"9"Project-Id-Version: \n"
10"Report-Msgid-Bugs-To: \n"10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2016-03-04 04:02+0530\n"11"POT-Creation-Date: 2016-03-16 22:10+0530\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,7 +18,7 @@
18"Content-Transfer-Encoding: 8bit\n"18"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
2020
21#: ../AgendaView.qml:50 ../calendar.qml:292 ../calendar.qml:51821#: ../AgendaView.qml:50 ../calendar.qml:321 ../calendar.qml:547
22msgid "Agenda"22msgid "Agenda"
23msgstr ""23msgstr ""
2424
@@ -34,11 +34,6 @@
34msgid "Enable calendars"34msgid "Enable calendars"
35msgstr ""35msgstr ""
3636
37#: ../AgendaView.qml:164
38#, qt-format
39msgid "%1 %2 %3 %4 %5"
40msgstr ""
41
42#: ../AgendaView.qml:19137#: ../AgendaView.qml:191
43msgid "no event name set"38msgid "no event name set"
44msgstr ""39msgstr ""
@@ -51,24 +46,24 @@
51msgid "New event"46msgid "New event"
52msgstr ""47msgstr ""
5348
54#. TRANSLATORS: the first parameter refers to the number of all-day events49#. TRANSLATORS: Please keep the translation of this string to a max of
55#. on a given day. "Ev." is short form for "Events".50#. 5 characters as the week view where it is shown has limited space.
56#. Please keep the translation of "Ev." to 3 characters only, as the week view51#: ../AllDayEventComponent.qml:148
57#. where it's shown has limited space
58#: ../AllDayEventComponent.qml:150
59#, qt-format52#, qt-format
60msgid "%1 ev."53msgid "%1 event"
61msgstr ""54msgid_plural "%1 events"
55msgstr[0] ""
56msgstr[1] ""
6257
63#. TRANSLATORS: the argument refers to the number of all day events58#. TRANSLATORS: the argument refers to the number of all day events
64#: ../AllDayEventComponent.qml:15459#: ../AllDayEventComponent.qml:152
65#, qt-format60#, qt-format
66msgid "%1 all day event"61msgid "%1 all day event"
67msgid_plural "%1 all day events"62msgid_plural "%1 all day events"
68msgstr[0] ""63msgstr[0] ""
69msgstr[1] ""64msgstr[1] ""
7065
71#: ../CalendarChoicePopup.qml:34 ../EventActions.qml:5166#: ../CalendarChoicePopup.qml:34 ../EventActions.qml:52
72msgid "Calendars"67msgid "Calendars"
73msgstr ""68msgstr ""
7469
@@ -78,11 +73,11 @@
7873
79#. TRANSLATORS: Please translate this string to 15 characters only.74#. TRANSLATORS: Please translate this string to 15 characters only.
80#. Currently ,there is no way we can increase width of action menu currently.75#. Currently ,there is no way we can increase width of action menu currently.
81#: ../CalendarChoicePopup.qml:48 ../EventActions.qml:3676#: ../CalendarChoicePopup.qml:48 ../EventActions.qml:37
82msgid "Sync"77msgid "Sync"
83msgstr ""78msgstr ""
8479
85#: ../CalendarChoicePopup.qml:48 ../EventActions.qml:3680#: ../CalendarChoicePopup.qml:48 ../EventActions.qml:37
86msgid "Syncing"81msgid "Syncing"
87msgstr ""82msgstr ""
8883
@@ -95,7 +90,7 @@
95msgstr ""90msgstr ""
9691
97#: ../ColorPickerDialog.qml:55 ../DeleteConfirmationDialog.qml:6092#: ../ColorPickerDialog.qml:55 ../DeleteConfirmationDialog.qml:60
98#: ../EditEventConfirmationDialog.qml:53 ../NewEvent.qml:34093#: ../EditEventConfirmationDialog.qml:53 ../NewEvent.qml:343
99msgid "Cancel"94msgid "Cancel"
100msgstr ""95msgstr ""
10196
@@ -107,23 +102,17 @@
107msgid "Search contact"102msgid "Search contact"
108msgstr ""103msgstr ""
109104
110#: ../DayView.qml:71 ../MonthView.qml:50 ../WeekView.qml:54 ../YearView.qml:57105#: ../DayView.qml:72 ../MonthView.qml:50 ../WeekView.qml:55 ../YearView.qml:57
111msgid "Today"106msgid "Today"
112msgstr ""107msgstr ""
113108
114#. TRANSLATORS: this is a time formatting string,109#. TRANSLATORS: this is a time formatting string,
115#. see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions.110#. see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions.
116#. It's used in the header of the month and week views111#. It's used in the header of the month and week views
117#: ../DayView.qml:115 ../DayView.qml:203 ../MonthView.qml:78112#: ../DayView.qml:122 ../MonthView.qml:78 ../WeekView.qml:144
118#: ../WeekView.qml:137 ../WeekView.qml:256
119msgid "MMMM yyyy"113msgid "MMMM yyyy"
120msgstr ""114msgstr ""
121115
122#: ../DayView.qml:201 ../MonthView.qml:73 ../WeekView.qml:254
123#, qt-format
124msgid "%1 %2"
125msgstr ""
126
127#: ../DeleteConfirmationDialog.qml:31116#: ../DeleteConfirmationDialog.qml:31
128msgid "Delete Recurring Event"117msgid "Delete Recurring Event"
129msgstr ""118msgstr ""
@@ -151,11 +140,11 @@
151msgid "Delete this"140msgid "Delete this"
152msgstr ""141msgstr ""
153142
154#: ../DeleteConfirmationDialog.qml:51 ../NewEvent.qml:347143#: ../DeleteConfirmationDialog.qml:51 ../NewEvent.qml:350
155msgid "Delete"144msgid "Delete"
156msgstr ""145msgstr ""
157146
158#: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:335147#: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:338
159msgid "Edit Event"148msgid "Edit Event"
160msgstr ""149msgstr ""
161150
@@ -173,73 +162,51 @@
173msgid "Edit this"162msgid "Edit this"
174msgstr ""163msgstr ""
175164
176#: ../EventActions.qml:63 ../Settings.qml:29165#: ../EventActions.qml:64 ../Settings.qml:29
177msgid "Settings"166msgid "Settings"
178msgstr ""167msgstr ""
179168
180#. TRANSLATORS: the first argument (%1) refers to a start time for an event,169#. TRANSLATORS: the first argument (%1) refers to a start time for an event,
181#. while the second one (%2) refers to the end time170#. while the second one (%2) refers to the end time
182#: ../EventBubble.qml:97171#: ../EventBubble.qml:100
183#, qt-format172#, qt-format
184msgid "%1 - %2"173msgid "%1 - %2"
185msgstr ""174msgstr ""
186175
187#. TRANSLATORS: the first argument (%1) refers to a time for an event,176#: ../EventDetails.qml:37 ../NewEvent.qml:486
188#. while the second one (%2) refers to title of event
189#: ../EventBubble.qml:108 ../EventBubble.qml:113
190#, qt-format
191msgid "%1 <b>%2</b>"
192msgstr ""
193
194#: ../EventDetails.qml:44 ../NewEvent.qml:483
195msgid "Event Details"177msgid "Event Details"
196msgstr ""178msgstr ""
197179
198#. TRANSLATORS: the first parameter refers to the name of event calendar.180#: ../EventDetails.qml:40
199#: ../EventDetails.qml:69
200#, qt-format
201msgid "%1 Calendar"
202msgstr ""
203
204#: ../EventDetails.qml:143
205#, qt-format
206msgid "%1 %2 %3 - %4 %5 %6 (All Day)"
207msgstr ""
208
209#: ../EventDetails.qml:147
210#, qt-format
211msgid "%1 - %2 (All Day)"
212msgstr ""
213
214#: ../EventDetails.qml:153
215#, qt-format
216msgid "%1 %2 %3 (All Day)"
217msgstr ""
218
219#: ../EventDetails.qml:156
220#, qt-format
221msgid "%1 (All Day)"
222msgstr ""
223
224#: ../EventDetails.qml:162
225#, qt-format
226msgid "%1 %2 %3, %4 - %5 %6 %7, %8"
227msgstr ""
228
229#: ../EventDetails.qml:171
230#, qt-format
231msgid "%1 %2 %3, %4 - %5"
232msgstr ""
233
234#: ../EventDetails.qml:238
235msgid "Edit"181msgid "Edit"
236msgstr ""182msgstr ""
237183
238#: ../EventDetails.qml:389 ../NewEvent.qml:589184#: ../EventDetails.qml:145 ../TimeLineHeader.qml:66
239msgid "Guests"185msgid "All Day"
240msgstr ""186msgstr ""
241187
242#: ../EventDetails.qml:432 ../EventReminder.qml:35 ../NewEvent.qml:701188#: ../EventDetails.qml:324 ../NewEvent.qml:552
189#: com.ubuntu.calendar_calendar.desktop.in.in.h:1
190msgid "Calendar"
191msgstr ""
192
193#: ../EventDetails.qml:357
194msgid "Not Attending"
195msgstr ""
196
197#: ../EventDetails.qml:361
198msgid "Attending"
199msgstr ""
200
201#: ../EventDetails.qml:365
202msgid "No Reply"
203msgstr ""
204
205#: ../EventDetails.qml:388 ../NewEvent.qml:518
206msgid "Description"
207msgstr ""
208
209#: ../EventDetails.qml:406 ../EventReminder.qml:35 ../NewEvent.qml:710
243msgid "Reminder"210msgid "Reminder"
244msgstr ""211msgstr ""
245212
@@ -262,7 +229,7 @@
262#. TRANSLATORS: this refers to how often a recurrent event repeats229#. TRANSLATORS: this refers to how often a recurrent event repeats
263#. and it is shown as the header of the option selector to choose230#. and it is shown as the header of the option selector to choose
264#. its repetition231#. its repetition
265#: ../EventRepetition.qml:242 ../NewEvent.qml:685232#: ../EventRepetition.qml:242 ../NewEvent.qml:688
266msgid "Repeats"233msgid "Repeats"
267msgstr ""234msgstr ""
268235
@@ -293,11 +260,6 @@
293msgid "Weekly on %1"260msgid "Weekly on %1"
294msgstr ""261msgstr ""
295262
296#: ../HeaderDateComponent.qml:90
297#, qt-format
298msgid "%1 %2 %3"
299msgstr ""
300
301#: ../LimitLabelModel.qml:25263#: ../LimitLabelModel.qml:25
302msgid "Never"264msgid "Never"
303msgstr ""265msgstr ""
@@ -310,59 +272,62 @@
310msgid "After Date"272msgid "After Date"
311msgstr ""273msgstr ""
312274
313#: ../MonthComponent.qml:315275#. TRANSLATORS: This is shown in the month view as "Wk" as a title
276#. to indicate the week numbers. It should be a max of up to 3 characters.
277#: ../MonthComponent.qml:317
314msgid "Wk"278msgid "Wk"
315msgstr ""279msgstr ""
316280
317#: ../NewEvent.qml:171281#: ../MonthView.qml:73 ../WeekView.qml:131
282#, qt-format
283msgid "%1 %2"
284msgstr ""
285
286#: ../NewEvent.qml:174
318msgid "End time can't be before start time"287msgid "End time can't be before start time"
319msgstr ""288msgstr ""
320289
321#: ../NewEvent.qml:335 ../NewEventBottomEdge.qml:52290#: ../NewEvent.qml:338 ../NewEventBottomEdge.qml:52
322msgid "New Event"291msgid "New Event"
323msgstr ""292msgstr ""
324293
325#: ../NewEvent.qml:364294#: ../NewEvent.qml:367
326msgid "Save"295msgid "Save"
327msgstr ""296msgstr ""
328297
329#: ../NewEvent.qml:375298#: ../NewEvent.qml:378
330msgid "Error"299msgid "Error"
331msgstr ""300msgstr ""
332301
333#: ../NewEvent.qml:377302#: ../NewEvent.qml:380
334msgid "OK"303msgid "OK"
335msgstr ""304msgstr ""
336305
337#: ../NewEvent.qml:437306#: ../NewEvent.qml:440
338msgid "From"307msgid "From"
339msgstr ""308msgstr ""
340309
341#: ../NewEvent.qml:450310#: ../NewEvent.qml:453
342msgid "To"311msgid "To"
343msgstr ""312msgstr ""
344313
345#: ../NewEvent.qml:467314#: ../NewEvent.qml:470
346msgid "All day event"315msgid "All day event"
347msgstr ""316msgstr ""
348317
349#: ../NewEvent.qml:497318#: ../NewEvent.qml:500
350msgid "Event Name"319msgid "Event Name"
351msgstr ""320msgstr ""
352321
353#: ../NewEvent.qml:515322#: ../NewEvent.qml:537
354msgid "Description"
355msgstr ""
356
357#: ../NewEvent.qml:534
358msgid "Location"323msgid "Location"
359msgstr ""324msgstr ""
360325
361#: ../NewEvent.qml:549 com.ubuntu.calendar_calendar.desktop.in.in.h:1326#: ../NewEvent.qml:592
362msgid "Calendar"327msgid "Guests"
363msgstr ""328msgstr ""
364329
365#: ../NewEvent.qml:598330#: ../NewEvent.qml:601
366msgid "Add Guest"331msgid "Add Guest"
367msgstr ""332msgstr ""
368333
@@ -463,11 +428,7 @@
463msgid "W%1"428msgid "W%1"
464msgstr ""429msgstr ""
465430
466#: ../TimeLineHeader.qml:66431#: ../WeekView.qml:138 ../WeekView.qml:139
467msgid "All Day"
468msgstr ""
469
470#: ../WeekView.qml:131 ../WeekView.qml:132
471msgid "MMM"432msgid "MMM"
472msgstr ""433msgstr ""
473434
@@ -476,26 +437,26 @@
476msgid "Year %1"437msgid "Year %1"
477msgstr ""438msgstr ""
478439
479#: ../calendar.qml:46440#: ../calendar.qml:48
480msgid ""441msgid ""
481"Calendar app accept four arguments: --starttime, --endtime, --newevent and --"442"Calendar app accept four arguments: --starttime, --endtime, --newevent and --"
482"eventid. They will be managed by system. See the source for a full comment "443"eventid. They will be managed by system. See the source for a full comment "
483"about them"444"about them"
484msgstr ""445msgstr ""
485446
486#: ../calendar.qml:260 ../calendar.qml:434447#: ../calendar.qml:289 ../calendar.qml:463
487msgid "Year"448msgid "Year"
488msgstr ""449msgstr ""
489450
490#: ../calendar.qml:268 ../calendar.qml:455451#: ../calendar.qml:297 ../calendar.qml:484
491msgid "Month"452msgid "Month"
492msgstr ""453msgstr ""
493454
494#: ../calendar.qml:276 ../calendar.qml:476455#: ../calendar.qml:305 ../calendar.qml:505
495msgid "Week"456msgid "Week"
496msgstr ""457msgstr ""
497458
498#: ../calendar.qml:284 ../calendar.qml:497459#: ../calendar.qml:313 ../calendar.qml:526
499msgid "Day"460msgid "Day"
500msgstr ""461msgstr ""
501462

Subscribers

People subscribed via source and target branches

to status/vote changes: