Merge lp:~majster-pl/ubuntu-calendar-app/new-event-page into lp:ubuntu-calendar-app
- new-event-page
- Merge into trunk
Status: | Rejected | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rejected by: | Renato Araujo Oliveira Filho | ||||||||||||
Proposed branch: | lp:~majster-pl/ubuntu-calendar-app/new-event-page | ||||||||||||
Merge into: | lp:ubuntu-calendar-app | ||||||||||||
Diff against target: |
1758 lines (+714/-626) 7 files modified
EventReminder.qml (+39/-27) EventRepetition.qml (+236/-187) NewEvent.qml (+265/-260) NewEventEntryField.qml (+0/-38) NewEventTimePicker.qml (+94/-58) RemindersModel.qml (+12/-0) po/com.ubuntu.calendar.pot (+68/-56) |
||||||||||||
To merge this branch: | bzr merge lp:~majster-pl/ubuntu-calendar-app/new-event-page | ||||||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Renato Araujo Oliveira Filho (community) | Disapprove | ||
Jenkins Bot | continuous-integration | Needs Fixing | |
Nekhelesh Ramananthan | code-review & testing | Approve | |
Review via email: mp+288637@code.launchpad.net |
Commit message
Description of the change
This is very first implementation of new-event-page.
There is still plenty of space of improvements but I want to get it reviewed before I continue my work.
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote : | # |
Nekhelesh Ramananthan (nik90) wrote : | # |
I'm setting this MP as a work in progress since it is. I have added inline comments of all things that needs fixing. This is just a preliminary check since I suspect more changes.
Do note that when I click the add guest button, I get ,
file://
Not sure if this was introduced in your branch or in trunk by some other branch. Please do check to make sure you don't introduce a regression.
I also see file://
Nekhelesh Ramananthan (nik90) wrote : | # |
Nice work! It is *almost* ready. Just few minor touch ups to do and then we are set to land this MP.
1. In the old guest design layout, I notice 3 minor issues ( refer to http://
a) Remove the listitem dividers of the guests listitem
b) set the guest listitem height as listitemlayout.
c) Align the guest names to the "Add Guest" button. This can be done by setting the left and right margin to -2 gu. Yes negative :)
2. In the repeat and reminders page, the "Repeat" and "Reminder" listitem header is shown using "blue" color due to the new SDK. Please change these to the new list items to fix this issue.
( refer to http://
3. The selection color which is shown when you click on the date/time is a bit strong. Please change the background to lightgray shade and the text color to white/black.
Nekhelesh Ramananthan (nik90) wrote : | # |
Almost there, just noticed one minor issue. In the Event reminders page, the option "No Reminder" is hidden by the page header. I had a quick look at it, and is quite easy to fix -> http://
Nekhelesh Ramananthan (nik90) wrote : | # |
LGTM. Awesome work. We can finish of the new design implementation for the Guests feature when we get design specs for it in another MP.
@renato, You can go ahead test this and top-approve. It fixes the label color issue that bill pointed out as well.
Renato Araujo Oliveira Filho (renatofilho) wrote : | # |
Great work.
I added some small comments but in general the code looks great.
Szymon Waliczek (majster-pl) wrote : | # |
Thanks for review, I added few comments.
Will push fixed code soon.
- 779. By Szymon Waliczek
-
Added Flickable to EventRepetition.qml and fixed anchoring to header.
Removed unnecessary empty lanes and code clean up.
Renato Araujo Oliveira Filho (renatofilho) wrote : | # |
Code looks good, but I can not test it due some conflicts with trunk.
please merge with trunk
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:779
No commit message was specified in the merge proposal. Click on the following link and set the commit message (if you want a jenkins rebuild you need to trigger it yourself):
https:/
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Renato Araujo Oliveira Filho (renatofilho) wrote : | # |
Unmerged revisions
- 779. By Szymon Waliczek
-
Added Flickable to EventRepetition.qml and fixed anchoring to header.
Removed unnecessary empty lanes and code clean up. - 778. By Szymon Waliczek
-
Fix 'No Reminder' hiden under header. in EventReminder.qml
- 777. By Szymon Waliczek
-
Update code to new SDK (header, ListItems)
Small visual improvments in Guest repeater.
Changed color of selection then user choosing date/time. - 776. By Szymon Waliczek
-
Postpone the 'Add guest' redesign - waiting for designs.
- 775. By Szymon Waliczek
-
Fix Save button to be desible when no event name is not set.
- 774. By Szymon Waliczek
-
Fixed everything what Nik90 pointed out in review, apart from AddGuest field as I'm missing designs for it.
- 773. By Szymon Waliczek
-
First implementation of NewEvent.qml page, few code clean ups
Preview Diff
1 | === modified file 'EventReminder.qml' | |||
2 | --- EventReminder.qml 2016-01-29 14:47:31 +0000 | |||
3 | +++ EventReminder.qml 2016-03-15 21:24:54 +0000 | |||
4 | @@ -32,43 +32,54 @@ | |||
5 | 32 | 32 | ||
6 | 33 | visible: false | 33 | visible: false |
7 | 34 | flickable: null | 34 | flickable: null |
22 | 35 | title: i18n.tr("Reminder") | 35 | |
23 | 36 | 36 | header: PageHeader { | |
24 | 37 | head.backAction: Action{ | 37 | title: i18n.tr("Reminder") |
25 | 38 | iconName:"back" | 38 | flickable: _pageFlickable |
26 | 39 | onTriggered:{ | 39 | |
27 | 40 | var repeatCount = 3; | 40 | leadingActionBar.actions: [ |
28 | 41 | var repeatDelay = 5 * 60; | 41 | Action { |
29 | 42 | 42 | iconName: "back" | |
30 | 43 | //reminder on event time | 43 | text: "Back" |
31 | 44 | if( reminderTime === 0 ) { | 44 | shortcut: "Esc" |
32 | 45 | repeatCount = 0; | 45 | onTriggered: onBackClicked() |
19 | 46 | repeatDelay = 0; | ||
20 | 47 | } else if( reminderTime === 300) { //5 min | ||
21 | 48 | repeatCount = 1; | ||
33 | 49 | } | 46 | } |
45 | 50 | 47 | ] | |
46 | 51 | visualReminder.repetitionCount = repeatCount; | 48 | } |
47 | 52 | visualReminder.repetitionDelay = repeatDelay; | 49 | |
48 | 53 | visualReminder.message = eventTitle | 50 | function onBackClicked() { |
49 | 54 | visualReminder.secondsBeforeStart = reminderTime; | 51 | var repeatCount = 3; |
50 | 55 | 52 | var repeatDelay = 5 * 60; | |
51 | 56 | audibleReminder.repetitionCount = repeatCount; | 53 | |
52 | 57 | audibleReminder.repetitionDelay = repeatDelay; | 54 | //reminder on event time |
53 | 58 | audibleReminder.secondsBeforeStart = reminderTime; | 55 | if( reminderTime === 0 ) { |
54 | 59 | 56 | repeatCount = 0; | |
55 | 60 | pop(); | 57 | repeatDelay = 0; |
56 | 58 | } else if( reminderTime === 300) { //5 min | ||
57 | 59 | repeatCount = 1; | ||
58 | 61 | } | 60 | } |
59 | 61 | |||
60 | 62 | visualReminder.repetitionCount = repeatCount; | ||
61 | 63 | visualReminder.repetitionDelay = repeatDelay; | ||
62 | 64 | visualReminder.message = eventTitle | ||
63 | 65 | visualReminder.secondsBeforeStart = reminderTime; | ||
64 | 66 | |||
65 | 67 | audibleReminder.repetitionCount = repeatCount; | ||
66 | 68 | audibleReminder.repetitionDelay = repeatDelay; | ||
67 | 69 | audibleReminder.secondsBeforeStart = reminderTime; | ||
68 | 70 | |||
69 | 71 | pop(); | ||
70 | 62 | } | 72 | } |
71 | 73 | |||
72 | 63 | Scrollbar{ | 74 | Scrollbar{ |
73 | 64 | id:scrollList | 75 | id:scrollList |
74 | 65 | flickableItem: _pageFlickable | 76 | flickableItem: _pageFlickable |
76 | 66 | anchors.fill :parent | 77 | anchors.fill: parent |
77 | 67 | } | 78 | } |
78 | 79 | |||
79 | 68 | Flickable { | 80 | Flickable { |
80 | 69 | id: _pageFlickable | 81 | id: _pageFlickable |
81 | 70 | 82 | ||
82 | 71 | |||
83 | 72 | clip: true | 83 | clip: true |
84 | 73 | anchors.fill: parent | 84 | anchors.fill: parent |
85 | 74 | contentHeight: _reminders.itemHeight * reminderModel.count + units.gu(2) | 85 | contentHeight: _reminders.itemHeight * reminderModel.count + units.gu(2) |
86 | @@ -91,6 +102,7 @@ | |||
87 | 91 | } | 102 | } |
88 | 92 | } | 103 | } |
89 | 93 | } | 104 | } |
90 | 105 | |||
91 | 94 | Component { | 106 | Component { |
92 | 95 | id: selectorDelegate | 107 | id: selectorDelegate |
93 | 96 | OptionSelectorDelegate { text: label; } | 108 | OptionSelectorDelegate { text: label; } |
94 | 97 | 109 | ||
95 | === modified file 'EventRepetition.qml' | |||
96 | --- EventRepetition.qml 2016-03-07 17:57:04 +0000 | |||
97 | +++ EventRepetition.qml 2016-03-15 21:24:54 +0000 | |||
98 | @@ -19,25 +19,37 @@ | |||
99 | 19 | import QtQuick 2.4 | 19 | import QtQuick 2.4 |
100 | 20 | import QtOrganizer 5.0 | 20 | import QtOrganizer 5.0 |
101 | 21 | import Ubuntu.Components 1.3 | 21 | import Ubuntu.Components 1.3 |
103 | 22 | import Ubuntu.Components.ListItems 1.0 as ListItem | 22 | import Ubuntu.Components.ListItems 1.0 as ListItems |
104 | 23 | import Ubuntu.Components.Pickers 1.0 | 23 | import Ubuntu.Components.Pickers 1.0 |
105 | 24 | import QtOrganizer 5.0 | 24 | import QtOrganizer 5.0 |
106 | 25 | import "Defines.js" as Defines | 25 | import "Defines.js" as Defines |
107 | 26 | import "Recurrence.js" as Recurrence | 26 | import "Recurrence.js" as Recurrence |
108 | 27 | 27 | ||
109 | 28 | Page { | 28 | Page { |
111 | 29 | id: repetition | 29 | id: root |
112 | 30 | 30 | ||
113 | 31 | property var weekDays : []; | 31 | property var weekDays : []; |
114 | 32 | property var eventRoot; | 32 | property var eventRoot; |
115 | 33 | property var isEdit | 33 | property var isEdit |
116 | 34 | 34 | ||
117 | 35 | visible: false | 35 | visible: false |
123 | 36 | // TRANSLATORS: this refers to how often a recurrent event repeats | 36 | header: PageHeader { |
124 | 37 | // and it is shown as the header of the page to choose repetition | 37 | // TRANSLATORS: this refers to how often a recurrent event repeats |
125 | 38 | // and as the header of the list item that shows the repetition | 38 | // and it is shown as the header of the page to choose repetition |
126 | 39 | // summary in the page that displays the event details | 39 | // and as the header of the list item that shows the repetition |
127 | 40 | title: i18n.tr("Repeat") | 40 | // summary in the page that displays the event details |
128 | 41 | title: i18n.tr("Repeat") | ||
129 | 42 | flickable: null | ||
130 | 43 | |||
131 | 44 | leadingActionBar.actions: [ | ||
132 | 45 | Action { | ||
133 | 46 | iconName: "back" | ||
134 | 47 | text: "Back" | ||
135 | 48 | shortcut: "Esc" | ||
136 | 49 | onTriggered: onBackClicked() | ||
137 | 50 | } | ||
138 | 51 | ] | ||
139 | 52 | } | ||
140 | 41 | 53 | ||
141 | 42 | EventUtils{ | 54 | EventUtils{ |
142 | 43 | id:eventUtils | 55 | id:eventUtils |
143 | @@ -92,192 +104,229 @@ | |||
144 | 92 | recurrenceOption.selectedIndex = index; | 104 | recurrenceOption.selectedIndex = index; |
145 | 93 | } | 105 | } |
146 | 94 | 106 | ||
192 | 95 | head.backAction: Action{ | 107 | function onBackClicked() { |
193 | 96 | id:backAction | 108 | var recurrenceRule = Defines.recurrenceValue[ recurrenceOption.selectedIndex ]; |
194 | 97 | iconName: "back" | 109 | |
195 | 98 | onTriggered: { | 110 | if (recurrenceRule !== RecurrenceRule.Invalid) { |
196 | 99 | var recurrenceRule = Defines.recurrenceValue[ recurrenceOption.selectedIndex ]; | 111 | if (eventRoot.rule === null || eventRoot.rule === undefined ){ |
197 | 100 | 112 | eventRoot.rule = Qt.createQmlObject("import QtOrganizer 5.0; RecurrenceRule {}", eventRoot.event.recurrence,"EventRepetition.qml"); | |
198 | 101 | if (recurrenceRule !== RecurrenceRule.Invalid) { | 113 | } |
199 | 102 | if (eventRoot.rule === null || eventRoot.rule === undefined ){ | 114 | |
200 | 103 | eventRoot.rule = Qt.createQmlObject("import QtOrganizer 5.0; RecurrenceRule {}", eventRoot.event.recurrence,"EventRepetition.qml"); | 115 | var rule = eventRoot.rule; |
201 | 104 | } | 116 | rule.frequency = recurrenceRule; |
202 | 105 | 117 | switch(recurrenceOption.selectedIndex){ | |
203 | 106 | var rule = eventRoot.rule; | 118 | case 1: //daily |
204 | 107 | rule.frequency = recurrenceRule; | 119 | case 2: //weekly |
205 | 108 | switch(recurrenceOption.selectedIndex){ | 120 | case 3: //weekly |
206 | 109 | case 1: //daily | 121 | case 4: //weekly |
207 | 110 | case 2: //weekly | 122 | case 5: //weekly |
208 | 111 | case 3: //weekly | 123 | rule.daysOfWeek = eventUtils.getDaysOfWeek(recurrenceOption.selectedIndex, weekDays ); |
209 | 112 | case 4: //weekly | 124 | break; |
210 | 113 | case 5: //weekly | 125 | case 6: //monthly |
211 | 114 | rule.daysOfWeek = eventUtils.getDaysOfWeek(recurrenceOption.selectedIndex, weekDays ); | 126 | rule.daysOfMonth = [eventRoot.date.getDate()]; |
212 | 115 | break; | 127 | break; |
213 | 116 | case 6: //monthly | 128 | case 7: //yearly |
214 | 117 | rule.daysOfMonth = [eventRoot.date.getDate()]; | 129 | rule.monthsOfYear = [eventRoot.date.getMonth()]; |
215 | 118 | break; | 130 | rule.daysOfMonth = [eventRoot.date.getDate()]; |
216 | 119 | case 7: //yearly | 131 | break; |
217 | 120 | rule.monthsOfYear = [eventRoot.date.getMonth()]; | 132 | case 0: //once |
218 | 121 | rule.daysOfMonth = [eventRoot.date.getDate()]; | 133 | default: |
219 | 122 | break; | 134 | //it should not come here |
220 | 123 | case 0: //once | 135 | break; |
221 | 124 | default: | 136 | } |
222 | 125 | //it should not come here | 137 | |
223 | 126 | break; | 138 | if (limitOptions.selectedIndex === 1 |
224 | 127 | } | 139 | && recurrenceOption.selectedIndex > 0 |
225 | 128 | 140 | && limitCount.text != "") { | |
226 | 129 | if (limitOptions.selectedIndex === 1 | 141 | rule.limit = parseInt(limitCount.text); |
227 | 130 | && recurrenceOption.selectedIndex > 0 | 142 | } |
228 | 131 | && limitCount.text != "") { | 143 | else if (limitOptions.selectedIndex === 2 && recurrenceOption.selectedIndex > 0) { |
229 | 132 | rule.limit = parseInt(limitCount.text); | 144 | rule.limit = datePick.date; |
185 | 133 | } | ||
186 | 134 | else if (limitOptions.selectedIndex === 2 && recurrenceOption.selectedIndex > 0) { | ||
187 | 135 | rule.limit = datePick.date; | ||
188 | 136 | } | ||
189 | 137 | else { | ||
190 | 138 | rule.limit = undefined; | ||
191 | 139 | } | ||
230 | 140 | } | 145 | } |
231 | 141 | else { | 146 | else { |
233 | 142 | eventRoot.rule = null; | 147 | rule.limit = undefined; |
234 | 143 | } | 148 | } |
237 | 144 | pop() | 149 | } |
238 | 145 | } | 150 | else { |
239 | 151 | eventRoot.rule = null; | ||
240 | 152 | } | ||
241 | 153 | pop() | ||
242 | 146 | } | 154 | } |
243 | 147 | 155 | ||
283 | 148 | Column{ | 156 | Flickable { |
284 | 149 | id:repeatColumn | 157 | anchors { fill: parent; topMargin: parent.header.height } |
285 | 150 | 158 | contentHeight: repeatColumn.height + units.gu(2) | |
286 | 151 | anchors.fill: parent | 159 | interactive: repeatColumn.height > height ? true : false |
287 | 152 | spacing: units.gu(1) | 160 | Column{ |
288 | 153 | 161 | id:repeatColumn | |
289 | 154 | ListItem.Header{ | 162 | |
290 | 155 | text: i18n.tr("Repeat") | 163 | width: parent.width |
252 | 156 | } | ||
253 | 157 | |||
254 | 158 | OptionSelector{ | ||
255 | 159 | id: recurrenceOption | ||
256 | 160 | visible: true | ||
257 | 161 | |||
258 | 162 | anchors { | ||
259 | 163 | left: parent.left | ||
260 | 164 | right: parent.right | ||
261 | 165 | margins: units.gu(2) | ||
262 | 166 | } | ||
263 | 167 | |||
264 | 168 | model: Defines.recurrenceLabel | ||
265 | 169 | containerHeight: itemHeight * 4 | ||
266 | 170 | onExpandedChanged: Qt.inputMethod.hide(); | ||
267 | 171 | } | ||
268 | 172 | |||
269 | 173 | ListItem.Header{ | ||
270 | 174 | text: i18n.tr("Repeats On:") | ||
271 | 175 | visible: recurrenceOption.selectedIndex == 5 | ||
272 | 176 | } | ||
273 | 177 | |||
274 | 178 | Row { | ||
275 | 179 | id: weeksRow | ||
276 | 180 | |||
277 | 181 | anchors { | ||
278 | 182 | left: parent.left | ||
279 | 183 | right: parent.right | ||
280 | 184 | margins: units.gu(2) | ||
281 | 185 | } | ||
282 | 186 | |||
291 | 187 | spacing: units.gu(1) | 164 | spacing: units.gu(1) |
385 | 188 | visible: recurrenceOption.selectedIndex == 5 | 165 | |
386 | 189 | 166 | ListItem { | |
387 | 190 | Repeater { | 167 | height: repeatListItem.height |
388 | 191 | model: Defines.weekLabel | 168 | divider.visible: false |
389 | 192 | Column { | 169 | |
390 | 193 | id: weeksRowColumn | 170 | ListItemLayout { |
391 | 194 | spacing: units.gu(1) | 171 | id: repeatListItem |
392 | 195 | Label { | 172 | title.text: i18n.tr("Repeat") |
393 | 196 | id:lbl | 173 | title.color: Theme.palette.selected.overlayText |
394 | 197 | text:modelData | 174 | } |
395 | 198 | anchors.horizontalCenter: parent.horizontalCenter | 175 | } |
396 | 199 | } | 176 | |
397 | 200 | CheckBox { | 177 | OptionSelector{ |
398 | 201 | id: weekCheck | 178 | id: recurrenceOption |
399 | 202 | onCheckedChanged: { | 179 | visible: true |
400 | 203 | //EDS consider 7 as Sunday index so if the index is 0 then we have to explicitly push Sunday. | 180 | |
401 | 204 | if(index === 0) | 181 | anchors { |
402 | 205 | (checked) ? weekDays.push(Qt.Sunday) : weekDays.splice(weekDays.indexOf(Qt.Sunday),1); | 182 | left: parent.left |
403 | 206 | else | 183 | right: parent.right |
404 | 207 | (checked) ? weekDays.push(index) : weekDays.splice(weekDays.indexOf(index),1); | 184 | margins: units.gu(2) |
405 | 208 | } | 185 | } |
406 | 209 | checked:{ | 186 | |
407 | 210 | (weekDays.length === 0 && eventRoot.date && (index === eventRoot.date.getDay()) && !isEdit) ? true : false; | 187 | model: Defines.recurrenceLabel |
408 | 211 | } | 188 | containerHeight: itemHeight * 4 |
409 | 212 | 189 | onExpandedChanged: Qt.inputMethod.hide(); | |
410 | 213 | } | 190 | } |
411 | 214 | } | 191 | |
412 | 215 | } | 192 | ListItem { |
413 | 216 | } | 193 | visible: recurrenceOption.selectedIndex == 5 |
414 | 217 | 194 | divider.visible: false | |
415 | 218 | ListItem.Header { | 195 | |
416 | 219 | text: i18n.tr("Recurring event ends") | 196 | ListItemLayout { |
417 | 220 | visible: recurrenceOption.selectedIndex != 0 | 197 | id: repeatsOnListItem |
418 | 221 | } | 198 | title.text: i18n.tr("Repeats On:") |
419 | 222 | 199 | title.color: Theme.palette.selected.overlayText | |
420 | 223 | OptionSelector{ | 200 | } |
421 | 224 | id: limitOptions | 201 | } |
422 | 225 | visible: recurrenceOption.selectedIndex != 0 | 202 | |
423 | 226 | 203 | Row { | |
424 | 227 | anchors { | 204 | id: weeksRow |
425 | 228 | left: parent.left | 205 | |
426 | 229 | right: parent.right | 206 | anchors { |
427 | 230 | margins: units.gu(2) | 207 | left: parent.left |
428 | 231 | } | 208 | right: parent.right |
429 | 232 | 209 | margins: units.gu(2) | |
430 | 233 | model: limitLabels | 210 | } |
431 | 234 | containerHeight: itemHeight * 4 | 211 | |
432 | 235 | onExpandedChanged: Qt.inputMethod.hide() | 212 | spacing: units.gu(1) |
433 | 236 | } | 213 | visible: recurrenceOption.selectedIndex == 5 |
434 | 237 | 214 | ||
435 | 238 | ListItem.Header{ | 215 | Repeater { |
436 | 239 | // TRANSLATORS: this refers to how often a recurrent event repeats | 216 | model: Defines.weekLabel |
437 | 240 | // and it is shown as the header of the option selector to choose | 217 | Column { |
438 | 241 | // its repetition | 218 | id: weeksRowColumn |
439 | 242 | text:i18n.tr("Repeats") | 219 | spacing: units.gu(1) |
440 | 243 | visible: recurrenceOption.selectedIndex != 0 | 220 | Label { |
441 | 244 | && limitOptions.selectedIndex == 1 | 221 | id:lbl |
442 | 245 | } | 222 | text:modelData |
443 | 246 | 223 | anchors.horizontalCenter: parent.horizontalCenter | |
444 | 247 | TextField { | 224 | } |
445 | 248 | id: limitCount | 225 | CheckBox { |
446 | 249 | objectName: "eventLimitCount" | 226 | id: weekCheck |
447 | 250 | 227 | onCheckedChanged: { | |
448 | 251 | anchors { | 228 | //EDS consider 7 as Sunday index so if the index is 0 then we have to explicitly push Sunday. |
449 | 252 | left: parent.left | 229 | if(index === 0) |
450 | 253 | right: parent.right | 230 | (checked) ? weekDays.push(Qt.Sunday) : weekDays.splice(weekDays.indexOf(Qt.Sunday),1); |
451 | 254 | margins: units.gu(2) | 231 | else |
452 | 255 | } | 232 | (checked) ? weekDays.push(index) : weekDays.splice(weekDays.indexOf(index),1); |
453 | 256 | 233 | } | |
454 | 257 | visible: recurrenceOption.selectedIndex != 0 && limitOptions.selectedIndex == 1 | 234 | checked:{ |
455 | 258 | validator: IntValidator{ bottom: 1; } | 235 | (weekDays.length === 0 && eventRoot.date && (index === eventRoot.date.getDay()) && !isEdit) ? true : false; |
456 | 259 | inputMethodHints: Qt.ImhDialableCharactersOnly | 236 | } |
457 | 260 | 237 | ||
458 | 261 | onTextChanged: { | 238 | } |
459 | 262 | backAction.enabled = !!text.trim() | 239 | } |
460 | 263 | } | 240 | } |
461 | 264 | } | 241 | } |
462 | 265 | 242 | ||
463 | 266 | ListItem.Header{ | 243 | ListItem { |
464 | 267 | text:i18n.tr("Date") | 244 | visible: recurrenceOption.selectedIndex != 0 |
465 | 268 | visible: recurrenceOption.selectedIndex != 0 && limitOptions.selectedIndex == 2 | 245 | divider.visible: false |
466 | 269 | } | 246 | height: recurringEventListItem.height |
467 | 270 | 247 | ||
468 | 271 | DatePicker{ | 248 | ListItemLayout { |
469 | 272 | id:datePick; | 249 | id: recurringEventListItem |
470 | 273 | 250 | title.text: i18n.tr("Recurring event ends") | |
471 | 274 | anchors { | 251 | title.color: Theme.palette.selected.overlayText |
472 | 275 | left: parent.left | 252 | } |
473 | 276 | right: parent.right | 253 | } |
474 | 277 | margins: units.gu(2) | 254 | |
475 | 278 | } | 255 | OptionSelector{ |
476 | 279 | 256 | id: limitOptions | |
477 | 280 | visible: recurrenceOption.selectedIndex != 0 && limitOptions.selectedIndex===2 | 257 | visible: recurrenceOption.selectedIndex != 0 |
478 | 258 | |||
479 | 259 | anchors { | ||
480 | 260 | left: parent.left | ||
481 | 261 | right: parent.right | ||
482 | 262 | margins: units.gu(2) | ||
483 | 263 | } | ||
484 | 264 | |||
485 | 265 | model: limitLabels | ||
486 | 266 | containerHeight: itemHeight * 4 | ||
487 | 267 | onExpandedChanged: Qt.inputMethod.hide() | ||
488 | 268 | } | ||
489 | 269 | |||
490 | 270 | ListItem { | ||
491 | 271 | visible: recurrenceOption.selectedIndex != 0 | ||
492 | 272 | && limitOptions.selectedIndex == 1 | ||
493 | 273 | divider.visible: false | ||
494 | 274 | height: repeatsListItem.height | ||
495 | 275 | |||
496 | 276 | ListItemLayout { | ||
497 | 277 | id: repeatsListItem | ||
498 | 278 | // TRANSLATORS: this refers to how often a recurrent event repeats | ||
499 | 279 | // and it is shown as the header of the option selector to choose | ||
500 | 280 | // its repetition | ||
501 | 281 | title.text:i18n.tr("Repeats") | ||
502 | 282 | title.color: Theme.palette.selected.overlayText | ||
503 | 283 | } | ||
504 | 284 | |||
505 | 285 | } | ||
506 | 286 | |||
507 | 287 | TextField { | ||
508 | 288 | id: limitCount | ||
509 | 289 | objectName: "eventLimitCount" | ||
510 | 290 | |||
511 | 291 | anchors { | ||
512 | 292 | left: parent.left | ||
513 | 293 | right: parent.right | ||
514 | 294 | margins: units.gu(2) | ||
515 | 295 | } | ||
516 | 296 | |||
517 | 297 | visible: recurrenceOption.selectedIndex != 0 && limitOptions.selectedIndex == 1 | ||
518 | 298 | validator: IntValidator{ bottom: 1; } | ||
519 | 299 | inputMethodHints: Qt.ImhDialableCharactersOnly | ||
520 | 300 | |||
521 | 301 | onTextChanged: { | ||
522 | 302 | backAction.enabled = !!text.trim() | ||
523 | 303 | } | ||
524 | 304 | } | ||
525 | 305 | |||
526 | 306 | ListItem { | ||
527 | 307 | visible: recurrenceOption.selectedIndex != 0 && limitOptions.selectedIndex == 2 | ||
528 | 308 | divider.visible: false | ||
529 | 309 | height: dateListItem.height | ||
530 | 310 | |||
531 | 311 | ListItemLayout { | ||
532 | 312 | id: dateListItem | ||
533 | 313 | title.text:i18n.tr("Date") | ||
534 | 314 | title.color: Theme.palette.selected.overlayText | ||
535 | 315 | } | ||
536 | 316 | } | ||
537 | 317 | |||
538 | 318 | DatePicker{ | ||
539 | 319 | id:datePick; | ||
540 | 320 | |||
541 | 321 | anchors { | ||
542 | 322 | left: parent.left | ||
543 | 323 | right: parent.right | ||
544 | 324 | margins: units.gu(2) | ||
545 | 325 | } | ||
546 | 326 | |||
547 | 327 | visible: recurrenceOption.selectedIndex != 0 && limitOptions.selectedIndex===2 | ||
548 | 328 | } | ||
549 | 281 | } | 329 | } |
550 | 282 | } | 330 | } |
551 | 331 | |||
552 | 283 | } | 332 | } |
553 | 284 | 333 | ||
554 | === modified file 'NewEvent.qml' | |||
555 | --- NewEvent.qml 2016-03-14 20:25:50 +0000 | |||
556 | +++ NewEvent.qml 2016-03-15 21:24:54 +0000 | |||
557 | @@ -66,8 +66,7 @@ | |||
558 | 66 | } | 66 | } |
559 | 67 | } | 67 | } |
560 | 68 | 68 | ||
563 | 69 | function cancel() | 69 | function cancel() { |
562 | 70 | { | ||
564 | 71 | if (pageStack) | 70 | if (pageStack) |
565 | 72 | pageStack.pop(); | 71 | pageStack.pop(); |
566 | 73 | root.canceled() | 72 | root.canceled() |
567 | @@ -254,6 +253,11 @@ | |||
568 | 254 | secondsBeforeStart: root.reminderValue | 253 | secondsBeforeStart: root.reminderValue |
569 | 255 | } | 254 | } |
570 | 256 | 255 | ||
571 | 256 | RemindersModel { | ||
572 | 257 | id: reminderModel | ||
573 | 258 | } | ||
574 | 259 | |||
575 | 260 | |||
576 | 257 | function getDaysOfWeek(){ | 261 | function getDaysOfWeek(){ |
577 | 258 | var daysOfWeek = []; | 262 | var daysOfWeek = []; |
578 | 259 | switch(recurrenceOption.selectedIndex){ | 263 | switch(recurrenceOption.selectedIndex){ |
579 | @@ -310,7 +314,6 @@ | |||
580 | 310 | scrollAnimation.start() | 314 | scrollAnimation.start() |
581 | 311 | } | 315 | } |
582 | 312 | 316 | ||
583 | 313 | Keys.onEscapePressed: root.cancel() | ||
584 | 314 | onStartDateChanged: { | 317 | onStartDateChanged: { |
585 | 315 | if (!startDate) | 318 | if (!startDate) |
586 | 316 | return | 319 | return |
587 | @@ -333,42 +336,47 @@ | |||
588 | 333 | 336 | ||
589 | 334 | header: PageHeader { | 337 | header: PageHeader { |
590 | 335 | id: pageHeader | 338 | id: pageHeader |
622 | 336 | 339 | property Component delegate: Component { | |
623 | 337 | flickable: null | 340 | AbstractButton { |
624 | 338 | title: isEdit ? i18n.tr("Edit Event"):i18n.tr("New Event") | 341 | id: button |
625 | 339 | leadingActionBar.actions: Action { | 342 | action: modelData |
626 | 340 | id: backAction | 343 | width: label.width + units.gu(4) |
627 | 341 | 344 | height: parent.height | |
628 | 342 | name: "cancel" | 345 | Rectangle { |
629 | 343 | text: i18n.tr("Cancel") | 346 | color: parent.pressed ? UbuntuColors.coolGrey : UbuntuColors.slate |
630 | 344 | iconName: isEdit ? "back" : "down" | 347 | opacity: 0.1 |
631 | 345 | onTriggered: root.cancel() | 348 | anchors.fill: parent |
632 | 346 | } | 349 | visible: button.pressed |
633 | 347 | 350 | } | |
634 | 348 | trailingActionBar.actions: [ | 351 | Label { |
635 | 349 | Action { | 352 | anchors.centerIn: parent |
636 | 350 | text: i18n.tr("Delete"); | 353 | id: label |
637 | 351 | objectName: "delete" | 354 | text: action.text |
638 | 352 | iconName: "delete" | 355 | font.weight: text === i18n.tr("Save") ? Font.Normal : Font.Light |
639 | 353 | visible : isEdit | 356 | } |
640 | 354 | onTriggered: { | 357 | } |
641 | 355 | var dialog = PopupUtils.open(Qt.resolvedUrl("DeleteConfirmationDialog.qml"),root,{"event": event}); | 358 | } |
642 | 356 | dialog.deleteEvent.connect( function(eventId){ | 359 | leadingActionBar { |
643 | 357 | model.removeItem(eventId); | 360 | anchors.leftMargin: 0 |
644 | 358 | if (pageStack) | 361 | actions: Action { |
645 | 359 | pageStack.pop(); | 362 | text: i18n.tr("Cancel") |
646 | 360 | root.eventDeleted(eventId); | 363 | iconName: "close" |
647 | 361 | }); | 364 | shortcut: "Esc" |
648 | 362 | } | 365 | onTriggered: root.cancel() |
649 | 363 | }, | 366 | } |
650 | 364 | Action { | 367 | delegate: pageHeader.delegate |
651 | 365 | iconName: "ok" | 368 | } |
652 | 366 | objectName: "save" | 369 | trailingActionBar { |
653 | 370 | anchors.rightMargin: 0 | ||
654 | 371 | actions: Action { | ||
655 | 367 | text: i18n.tr("Save") | 372 | text: i18n.tr("Save") |
656 | 373 | iconName: "tick" | ||
657 | 374 | shortcut: "Ctrl+S" | ||
658 | 368 | enabled: !!titleEdit.text.trim() | 375 | enabled: !!titleEdit.text.trim() |
660 | 369 | onTriggered: saveToQtPim(); | 376 | onTriggered: saveToQtPim() |
661 | 370 | } | 377 | } |
663 | 371 | ] | 378 | delegate: pageHeader.delegate |
664 | 379 | } | ||
665 | 372 | } | 380 | } |
666 | 373 | 381 | ||
667 | 374 | Component{ | 382 | Component{ |
668 | @@ -389,7 +397,6 @@ | |||
669 | 389 | 397 | ||
670 | 390 | Flickable{ | 398 | Flickable{ |
671 | 391 | id: flickable | 399 | id: flickable |
672 | 392 | clip: true | ||
673 | 393 | 400 | ||
674 | 394 | property var activeItem: null | 401 | property var activeItem: null |
675 | 395 | 402 | ||
676 | @@ -419,11 +426,11 @@ | |||
677 | 419 | flickable.returnToBounds() | 426 | flickable.returnToBounds() |
678 | 420 | } | 427 | } |
679 | 421 | 428 | ||
680 | 429 | clip: true | ||
681 | 422 | flickableDirection: Flickable.VerticalFlick | 430 | flickableDirection: Flickable.VerticalFlick |
682 | 423 | anchors{ | 431 | anchors{ |
683 | 424 | left: parent.left | 432 | left: parent.left |
686 | 425 | top: parent.top | 433 | top: parent.header.bottom |
685 | 426 | topMargin: pageHeader.height | ||
687 | 427 | right: parent.right | 434 | right: parent.right |
688 | 428 | bottom: keyboardRectangle.top | 435 | bottom: keyboardRectangle.top |
689 | 429 | } | 436 | } |
690 | @@ -437,7 +444,8 @@ | |||
691 | 437 | 444 | ||
692 | 438 | NewEventTimePicker{ | 445 | NewEventTimePicker{ |
693 | 439 | id: startDateTimeInput | 446 | id: startDateTimeInput |
695 | 440 | header: i18n.tr("From") | 447 | //TRANSLATORS: this referes to date. eg: From: Wendsday, 9 March 2016 |
696 | 448 | headerText: i18n.tr("From") | ||
697 | 441 | showTimePicker: !allDayEventCheckbox.checked | 449 | showTimePicker: !allDayEventCheckbox.checked |
698 | 442 | anchors { | 450 | anchors { |
699 | 443 | left: parent.left | 451 | left: parent.left |
700 | @@ -450,7 +458,8 @@ | |||
701 | 450 | 458 | ||
702 | 451 | NewEventTimePicker{ | 459 | NewEventTimePicker{ |
703 | 452 | id: endDateTimeInput | 460 | id: endDateTimeInput |
705 | 453 | header: i18n.tr("To") | 461 | //TRANSLATORS: this referes to date. eg: To: Wendsday, 9 March 2016 |
706 | 462 | headerText: i18n.tr("To") | ||
707 | 454 | showTimePicker: !allDayEventCheckbox.checked | 463 | showTimePicker: !allDayEventCheckbox.checked |
708 | 455 | anchors { | 464 | anchors { |
709 | 456 | left: parent.left | 465 | left: parent.left |
710 | @@ -461,184 +470,186 @@ | |||
711 | 461 | } | 470 | } |
712 | 462 | } | 471 | } |
713 | 463 | 472 | ||
885 | 464 | ListItems.Standard { | 473 | // All day event ListItem with Switch |
886 | 465 | anchors { | 474 | ListItem { |
887 | 466 | left: parent.left | 475 | width: parent.width |
888 | 467 | right: parent.right | 476 | |
889 | 468 | } | 477 | ListItemLayout { |
890 | 469 | 478 | title.text: i18n.tr("All day event") | |
891 | 470 | text: i18n.tr("All day event") | 479 | Switch { |
892 | 471 | showDivider: false | 480 | id: allDayEventCheckbox |
893 | 472 | control: CheckBox { | 481 | checked: false |
894 | 473 | objectName: "allDayEventCheckbox" | 482 | SlotsLayout.position: SlotsLayout.Trailing; |
895 | 474 | id: allDayEventCheckbox | 483 | } |
896 | 475 | checked: false | 484 | } |
897 | 476 | } | 485 | onClicked: { |
898 | 477 | } | 486 | Haptics.play() |
899 | 478 | 487 | allDayEventCheckbox.checked = !allDayEventCheckbox.checked | |
900 | 479 | ListItems.ThinDivider {} | 488 | } |
901 | 480 | 489 | ||
902 | 481 | Column { | 490 | } |
903 | 482 | width: parent.width | 491 | |
904 | 483 | spacing: units.gu(1) | 492 | // ListItem which holds "Event details" label + TextField + TextArea + TextField |
905 | 484 | 493 | ListItem { | |
906 | 485 | ListItems.Header{ | 494 | height: eventDetailsColumn.height + (eventDetailsColumn.anchors.margins*2) |
907 | 486 | text: i18n.tr("Event Details") | 495 | |
908 | 487 | } | 496 | Column { |
909 | 488 | 497 | id: eventDetailsColumn | |
910 | 489 | TextField { | 498 | spacing: units.gu(2) |
911 | 490 | id: titleEdit | 499 | anchors { |
912 | 491 | objectName: "newEventName" | 500 | left: parent.left |
913 | 492 | 501 | right: parent.right | |
914 | 493 | anchors { | 502 | top: parent.top |
915 | 494 | left: parent.left | 503 | margins: units.gu(2) |
916 | 495 | right: parent.right | 504 | } |
917 | 496 | margins: units.gu(2) | 505 | |
918 | 497 | } | 506 | Label { |
919 | 498 | 507 | width: parent.width | |
920 | 499 | inputMethodHints: Qt.ImhNoPredictiveText | 508 | text: i18n.tr("Event details") |
921 | 500 | placeholderText: i18n.tr("Event Name") | 509 | elide: Text.ElideRight |
922 | 501 | onFocusChanged: { | 510 | } |
923 | 502 | if(titleEdit.focus) { | 511 | |
924 | 503 | flickable.makeMeVisible(titleEdit); | 512 | TextField { |
925 | 504 | } | 513 | id: titleEdit |
926 | 505 | } | 514 | objectName: "newEventName" |
927 | 506 | } | 515 | |
928 | 507 | 516 | width: parent.width | |
929 | 508 | TextArea{ | 517 | inputMethodHints: Qt.ImhNoPredictiveText |
930 | 509 | id: messageEdit | 518 | placeholderText: i18n.tr("Event Name") |
931 | 510 | objectName: "eventDescriptionInput" | 519 | |
932 | 511 | 520 | onFocusChanged: { | |
933 | 512 | anchors { | 521 | if(titleEdit.focus) { |
934 | 513 | left: parent.left | 522 | flickable.makeMeVisible(titleEdit); |
935 | 514 | right: parent.right | 523 | } |
936 | 515 | margins: units.gu(2) | 524 | } |
937 | 516 | } | 525 | } |
938 | 517 | 526 | ||
939 | 518 | placeholderText: i18n.tr("Description") | 527 | TextArea{ |
940 | 519 | onFocusChanged: { | 528 | id: messageEdit |
941 | 520 | if(messageEdit.focus) { | 529 | objectName: "eventDescriptionInput" |
942 | 521 | flickable.makeMeVisible(messageEdit); | 530 | |
943 | 522 | } | 531 | width: parent.width |
944 | 523 | } | 532 | placeholderText: i18n.tr("Description") |
945 | 524 | } | 533 | |
946 | 525 | 534 | onFocusChanged: { | |
947 | 526 | TextField { | 535 | if(messageEdit.focus) { |
948 | 527 | id: locationEdit | 536 | flickable.makeMeVisible(messageEdit); |
949 | 528 | objectName: "eventLocationInput" | 537 | } |
950 | 529 | 538 | } | |
951 | 530 | anchors { | 539 | } |
952 | 531 | left: parent.left | 540 | |
953 | 532 | right: parent.right | 541 | TextField { |
954 | 533 | margins: units.gu(2) | 542 | id: locationEdit |
955 | 534 | } | 543 | objectName: "eventLocationInput" |
956 | 535 | 544 | ||
957 | 536 | inputMethodHints: Qt.ImhNoPredictiveText | 545 | width: parent.width |
958 | 537 | placeholderText: i18n.tr("Location") | 546 | inputMethodHints: Qt.ImhNoPredictiveText |
959 | 538 | 547 | placeholderText: i18n.tr("Location") | |
960 | 539 | onFocusChanged: { | 548 | |
961 | 540 | if(locationEdit.focus) { | 549 | onFocusChanged: { |
962 | 541 | flickable.makeMeVisible(locationEdit); | 550 | if(locationEdit.focus) { |
963 | 542 | } | 551 | flickable.makeMeVisible(locationEdit); |
964 | 543 | } | 552 | } |
965 | 544 | } | 553 | } |
966 | 545 | } | 554 | } |
967 | 546 | 555 | } | |
968 | 547 | Column { | 556 | } |
969 | 548 | width: parent.width | 557 | |
970 | 549 | spacing: units.gu(1) | 558 | // ListItem to hold calendars selector |
971 | 550 | 559 | ListItem { | |
972 | 551 | ListItems.Header { | 560 | height: chooseCalendarColumn.height + (eventDetailsColumn.anchors.topMargin*2) |
973 | 552 | text: i18n.tr("Calendar") | 561 | |
974 | 553 | } | 562 | Column { |
975 | 554 | 563 | id: chooseCalendarColumn | |
976 | 555 | OptionSelector{ | 564 | spacing: units.gu(2) |
977 | 556 | id: calendarsOption | 565 | anchors { |
978 | 557 | objectName: "calendarsOption" | 566 | left: parent.left |
979 | 558 | 567 | right: parent.right | |
980 | 559 | anchors { | 568 | top: parent.top |
981 | 560 | left: parent.left | 569 | topMargin: units.gu(2) |
982 | 561 | right: parent.right | 570 | } |
983 | 562 | margins: units.gu(2) | 571 | |
984 | 563 | } | 572 | Label { |
985 | 564 | 573 | width: parent.width | |
986 | 565 | containerHeight: itemHeight * 4 | 574 | anchors { |
987 | 566 | model: root.model.getWritableCollections(); | 575 | left: parent.left |
988 | 567 | 576 | leftMargin: units.gu(2) | |
989 | 568 | delegate: OptionSelectorDelegate{ | 577 | right: parent.right |
990 | 569 | text: modelData.name | 578 | rightMargin: units.gu(2) |
991 | 570 | 579 | } | |
992 | 571 | UbuntuShape{ | 580 | text: i18n.tr("Choose calendar") |
993 | 572 | id: calColor | 581 | elide: Text.ElideRight |
994 | 573 | width: height | 582 | } |
995 | 574 | height: parent.height - units.gu(2) | 583 | |
996 | 575 | color: modelData.color | 584 | ListItems.ItemSelector { |
997 | 576 | anchors { | 585 | id: calendarsOption |
998 | 577 | right: parent.right | 586 | model: root.model.getWritableCollections(); |
999 | 578 | rightMargin: units.gu(4) | 587 | delegate: OptionSelectorDelegate { text: modelData.name } |
1000 | 579 | verticalCenter: parent.verticalCenter | 588 | } |
1001 | 580 | } | 589 | |
1002 | 581 | } | 590 | } |
1003 | 582 | } | 591 | } |
1004 | 583 | onExpandedChanged: Qt.inputMethod.hide(); | 592 | |
1005 | 584 | } | 593 | |
1006 | 585 | } | 594 | ListItem { |
1007 | 586 | 595 | height: guestsColumn.height + (guestsColumn.anchors.margins*2) | |
1008 | 587 | Column { | 596 | |
1009 | 588 | width: parent.width | 597 | Column { |
1010 | 589 | spacing: units.gu(1) | 598 | id: guestsColumn |
1011 | 590 | 599 | spacing: units.gu(2) | |
1012 | 591 | ListItems.Header { | 600 | anchors { |
1013 | 592 | text: i18n.tr("Guests") | 601 | left: parent.left |
1014 | 593 | } | 602 | right: parent.right |
1015 | 594 | 603 | top: parent.top | |
1016 | 595 | Button{ | 604 | margins: units.gu(2) |
1017 | 596 | id: addGuestButton | 605 | } |
1018 | 597 | objectName: "addGuestButton" | 606 | |
1019 | 598 | 607 | Label { | |
1020 | 599 | property var contactsPopup: null | 608 | width: parent.width |
1021 | 600 | 609 | text: i18n.tr("Guests") | |
1022 | 601 | text: i18n.tr("Add Guest") | 610 | elide: Text.ElideRight |
1023 | 602 | anchors { | 611 | } |
1024 | 603 | left: parent.left | 612 | |
1025 | 604 | right: parent.right | 613 | Button{ |
1026 | 605 | margins: units.gu(2) | 614 | id: addGuestButton |
1027 | 606 | } | 615 | objectName: "addGuestButton" |
1028 | 607 | 616 | ||
1029 | 608 | onClicked: { | 617 | property var contactsPopup: null |
1030 | 609 | if (contactsPopup) | 618 | |
1031 | 610 | return | 619 | text: i18n.tr("Add Guest") |
1032 | 611 | 620 | anchors { left: parent.left; right: parent.right } | |
1033 | 612 | flickable.makeMeVisible(addGuestButton) | 621 | |
1034 | 613 | contactsPopup = PopupUtils.open(Qt.resolvedUrl("ContactChoicePopup.qml"), addGuestButton); | 622 | onClicked: { |
1035 | 614 | contactsPopup.contactSelected.connect( function(contact, emailAddress) { | 623 | if (contactsPopup) |
1036 | 615 | if(!internal.isContactAlreadyAdded(contact, emailAddress) ) { | 624 | return |
1037 | 616 | var t = internal.contactToAttendee(contact, emailAddress); | 625 | |
1038 | 617 | contactModel.append({"contact": t}); | 626 | flickable.makeMeVisible(addGuestButton) |
1039 | 618 | } | 627 | contactsPopup = PopupUtils.open(Qt.resolvedUrl("ContactChoicePopup.qml"), addGuestButton); |
1040 | 619 | 628 | contactsPopup.contactSelected.connect( function(contact, emailAddress) { | |
1041 | 620 | }); | 629 | if(!internal.isContactAlreadyAdded(contact, emailAddress) ) { |
1042 | 621 | contactsPopup.Component.onDestruction.connect( function() { | 630 | var t = internal.contactToAttendee(contact, emailAddress); |
1043 | 622 | addGuestButton.contactsPopup = null | 631 | contactModel.append({"contact": t}); |
1044 | 623 | }) | 632 | } |
1045 | 624 | } | 633 | |
1046 | 625 | } | 634 | }); |
1047 | 626 | 635 | contactsPopup.Component.onDestruction.connect( function() { | |
1048 | 627 | UbuntuShape { | 636 | addGuestButton.contactsPopup = null |
1049 | 628 | anchors { | 637 | }) |
1050 | 629 | left: parent.left | 638 | } |
1051 | 630 | right: parent.right | 639 | } |
1052 | 631 | margins: units.gu(2) | 640 | |
882 | 632 | } | ||
883 | 633 | |||
884 | 634 | height: contactList.height | ||
1053 | 635 | 641 | ||
1054 | 636 | Column{ | 642 | Column{ |
1055 | 637 | id: contactList | 643 | id: contactList |
1056 | 638 | objectName: "guestList" | 644 | objectName: "guestList" |
1057 | 639 | 645 | ||
1060 | 640 | spacing: units.gu(1) | 646 | anchors { |
1061 | 641 | width: parent.width | 647 | left: parent.left; |
1062 | 648 | leftMargin: units.gu(-2); | ||
1063 | 649 | right: parent.right; | ||
1064 | 650 | rightMargin: units.gu(-2); | ||
1065 | 651 | |||
1066 | 652 | } | ||
1067 | 642 | clip: true | 653 | clip: true |
1068 | 643 | 654 | ||
1069 | 644 | ListModel{ | 655 | ListModel{ |
1070 | @@ -650,7 +661,11 @@ | |||
1071 | 650 | delegate: ListItem { | 661 | delegate: ListItem { |
1072 | 651 | objectName: "eventGuest%1".arg(index) | 662 | objectName: "eventGuest%1".arg(index) |
1073 | 652 | 663 | ||
1074 | 664 | height: guestListItemLayout.height | ||
1075 | 665 | divider.visible: false | ||
1076 | 666 | |||
1077 | 653 | ListItemLayout { | 667 | ListItemLayout { |
1078 | 668 | id: guestListItemLayout | ||
1079 | 654 | title.text: contact.name | 669 | title.text: contact.name |
1080 | 655 | subtitle.text: contact.emailAddress | 670 | subtitle.text: contact.emailAddress |
1081 | 656 | } | 671 | } |
1082 | @@ -666,27 +681,28 @@ | |||
1083 | 666 | } | 681 | } |
1084 | 667 | } | 682 | } |
1085 | 668 | } | 683 | } |
1092 | 669 | } | 684 | |
1093 | 670 | 685 | //TODO// | |
1094 | 671 | ListItems.ThinDivider { | 686 | ///////////////// |
1095 | 672 | visible: (event != undefined) && (event.itemType === Type.Event) | 687 | |
1096 | 673 | } | 688 | } |
1091 | 674 | |||
1097 | 675 | } | 689 | } |
1098 | 676 | 690 | ||
1100 | 677 | ListItems.Subtitled{ | 691 | |
1101 | 692 | ListItem { | ||
1102 | 678 | id:thisHappens | 693 | id:thisHappens |
1103 | 679 | objectName :"thisHappens" | 694 | objectName :"thisHappens" |
1104 | 680 | 695 | ||
1107 | 681 | anchors { | 696 | height: thisHappensLayout.height |
1108 | 682 | left: parent.left | 697 | |
1109 | 698 | ListItemLayout { | ||
1110 | 699 | id: thisHappensLayout | ||
1111 | 700 | title.text: i18n.tr("Repeats") | ||
1112 | 701 | summary.text: (event != undefined) && (event.itemType === Type.Event) ? rule === null ? i18n.tr(Defines.recurrenceLabel[0]) | ||
1113 | 702 | : eventUtils.getRecurrenceString(rule) | ||
1114 | 703 | : "" | ||
1115 | 704 | ProgressionSlot {} | ||
1116 | 683 | } | 705 | } |
1117 | 684 | |||
1118 | 685 | showDivider: false | ||
1119 | 686 | progression: true | ||
1120 | 687 | visible: (event != undefined) && (event.itemType === Type.Event) | ||
1121 | 688 | text: i18n.tr("Repeats") | ||
1122 | 689 | subText: (event != undefined) && (event.itemType === Type.Event) ? rule === null ? Defines.recurrenceLabel[0] : eventUtils.getRecurrenceString(rule) : "" | ||
1123 | 690 | onClicked: { | 706 | onClicked: { |
1124 | 691 | var stack = pageStack | 707 | var stack = pageStack |
1125 | 692 | if (!stack) | 708 | if (!stack) |
1126 | @@ -696,41 +712,23 @@ | |||
1127 | 696 | } | 712 | } |
1128 | 697 | } | 713 | } |
1129 | 698 | 714 | ||
1130 | 699 | ListItems.ThinDivider { | ||
1131 | 700 | visible: (event != undefined) && (event.itemType === Type.Event) | ||
1132 | 701 | } | ||
1133 | 702 | 715 | ||
1135 | 703 | ListItems.Subtitled{ | 716 | ListItem { |
1136 | 704 | id:eventReminder | 717 | id:eventReminder |
1137 | 705 | objectName : "eventReminder" | 718 | objectName : "eventReminder" |
1138 | 706 | 719 | ||
1162 | 707 | anchors.left:parent.left | 720 | height: eventReminderLayout.height |
1163 | 708 | showDivider: false | 721 | |
1164 | 709 | progression: true | 722 | ListItemLayout { |
1165 | 710 | text: i18n.tr("Reminder") | 723 | id: eventReminderLayout |
1166 | 711 | 724 | title.text: i18n.tr("Reminder") | |
1167 | 712 | RemindersModel { | 725 | subtitle.text: i18n.tr("%1").arg(reminderModel.getSelectedReminder()) |
1168 | 713 | id: reminderModel | 726 | ProgressionSlot {} |
1169 | 714 | } | 727 | } |
1170 | 715 | 728 | ||
1171 | 716 | subText:{ | 729 | onClicked: { |
1149 | 717 | if(visualReminder.secondsBeforeStart !== -1) { | ||
1150 | 718 | for( var i=0; i<reminderModel.count; i++ ) { | ||
1151 | 719 | if(visualReminder.secondsBeforeStart === reminderModel.get(i).value) { | ||
1152 | 720 | return reminderModel.get(i).label | ||
1153 | 721 | } | ||
1154 | 722 | } | ||
1155 | 723 | } else { | ||
1156 | 724 | return reminderModel.get(0).label | ||
1157 | 725 | } | ||
1158 | 726 | |||
1159 | 727 | } | ||
1160 | 728 | |||
1161 | 729 | onClicked:{ | ||
1172 | 730 | var stack = pageStack | 730 | var stack = pageStack |
1176 | 731 | if (!stack) | 731 | if (!stack) stack = bottomEdgePageStack |
1174 | 732 | stack = bottomEdgePageStack | ||
1175 | 733 | |||
1177 | 734 | stack.push(Qt.resolvedUrl("EventReminder.qml"), | 732 | stack.push(Qt.resolvedUrl("EventReminder.qml"), |
1178 | 735 | {"visualReminder": visualReminder, | 733 | {"visualReminder": visualReminder, |
1179 | 736 | "audibleReminder": audibleReminder, | 734 | "audibleReminder": audibleReminder, |
1180 | @@ -739,8 +737,15 @@ | |||
1181 | 739 | } | 737 | } |
1182 | 740 | } | 738 | } |
1183 | 741 | 739 | ||
1184 | 742 | ListItems.ThinDivider {} | ||
1185 | 743 | } | 740 | } |
1186 | 741 | |||
1187 | 742 | |||
1188 | 743 | } | ||
1189 | 744 | |||
1190 | 745 | // Scrollbar | ||
1191 | 746 | Scrollbar{ | ||
1192 | 747 | flickableItem: flickable | ||
1193 | 748 | align: Qt.AlignTrailing | ||
1194 | 744 | } | 749 | } |
1195 | 745 | 750 | ||
1196 | 746 | // used to keep the field visible when the keyboard appear or dismiss | 751 | // used to keep the field visible when the keyboard appear or dismiss |
1197 | 747 | 752 | ||
1198 | === removed file 'NewEventEntryField.qml' | |||
1199 | --- NewEventEntryField.qml 2016-01-29 14:47:31 +0000 | |||
1200 | +++ NewEventEntryField.qml 1970-01-01 00:00:00 +0000 | |||
1201 | @@ -1,38 +0,0 @@ | |||
1202 | 1 | /* | ||
1203 | 2 | * Copyright (C) 2013-2014 Canonical Ltd | ||
1204 | 3 | * | ||
1205 | 4 | * This file is part of Ubuntu Calendar App | ||
1206 | 5 | * | ||
1207 | 6 | * Ubuntu Calendar App is free software: you can redistribute it and/or modify | ||
1208 | 7 | * it under the terms of the GNU General Public License version 3 as | ||
1209 | 8 | * published by the Free Software Foundation. | ||
1210 | 9 | * | ||
1211 | 10 | * Ubuntu Calendar App is distributed in the hope that it will be useful, | ||
1212 | 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
1213 | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
1214 | 13 | * GNU General Public License for more details. | ||
1215 | 14 | * | ||
1216 | 15 | * You should have received a copy of the GNU General Public License | ||
1217 | 16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
1218 | 17 | */ | ||
1219 | 18 | |||
1220 | 19 | import QtQuick 2.4 | ||
1221 | 20 | import Ubuntu.Components 1.3 | ||
1222 | 21 | |||
1223 | 22 | Label { | ||
1224 | 23 | id: root | ||
1225 | 24 | |||
1226 | 25 | property bool highlighted: false | ||
1227 | 26 | |||
1228 | 27 | height: units.gu(6) | ||
1229 | 28 | |||
1230 | 29 | verticalAlignment: Text.AlignVCenter | ||
1231 | 30 | color: highlighted ? "#2C001E" : Theme.palette.normal.baseText | ||
1232 | 31 | |||
1233 | 32 | Rectangle { | ||
1234 | 33 | z: -1 | ||
1235 | 34 | anchors.fill: parent | ||
1236 | 35 | color: root.highlighted ? Theme.palette.selected.background | ||
1237 | 36 | : "Transparent" | ||
1238 | 37 | } | ||
1239 | 38 | } | ||
1240 | 39 | 0 | ||
1241 | === modified file 'NewEventTimePicker.qml' | |||
1242 | --- NewEventTimePicker.qml 2016-01-25 17:52:33 +0000 | |||
1243 | +++ NewEventTimePicker.qml 2016-03-15 21:24:54 +0000 | |||
1244 | @@ -1,75 +1,111 @@ | |||
1245 | 1 | import QtQuick 2.4 | 1 | import QtQuick 2.4 |
1247 | 2 | import Ubuntu.Components.ListItems 1.0 as ListItem | 2 | import Ubuntu.Components 1.3 |
1248 | 3 | import Ubuntu.Components.Themes.Ambiance 1.0 | 3 | import Ubuntu.Components.Themes.Ambiance 1.0 |
1250 | 4 | import Ubuntu.Components.Pickers 1.0 | 4 | import Ubuntu.Components.Pickers 1.3 |
1251 | 5 | //import QtQuick.Layouts 1.1 | ||
1252 | 5 | 6 | ||
1254 | 6 | Column { | 7 | ListItem { |
1255 | 7 | id: dateTimeInput | 8 | id: dateTimeInput |
1260 | 8 | property alias header: listHeader.text | 9 | |
1261 | 9 | 10 | property string headerText //header label ("From" or "To") | |
1262 | 10 | property date dateTime; | 11 | property date dateTime //keep date from DatePicker |
1263 | 11 | property bool showTimePicker; | 12 | property bool showTimePicker //if true then user is able to set time on event |
1264 | 13 | |||
1265 | 14 | // when new date set in DatePicker then this will be run. | ||
1266 | 15 | onDateTimeChanged: { | ||
1267 | 16 | layout.summary.text = dateTime.toLocaleDateString() // set date | ||
1268 | 17 | secondLabel.text = Qt.formatTime(dateTime, "hh:mm AP").replace(/\./g, "") // set time | ||
1269 | 18 | } | ||
1270 | 12 | 19 | ||
1271 | 13 | function clearFocus() { | 20 | function clearFocus() { |
1274 | 14 | dateInput.focus = false; | 21 | dateBG.focus = false; |
1275 | 15 | timeInput.focus = false; | 22 | timeBG.focus = false; |
1276 | 16 | } | 23 | } |
1277 | 17 | 24 | ||
1278 | 25 | // function to open date/time picker | ||
1279 | 18 | function openDatePicker (element, caller, callerProperty, mode) { | 26 | function openDatePicker (element, caller, callerProperty, mode) { |
1280 | 19 | element.highlighted = true; | 27 | element.highlighted = true; |
1281 | 20 | var picker = PickerPanel.openDatePicker(caller, callerProperty, mode); | 28 | var picker = PickerPanel.openDatePicker(caller, callerProperty, mode); |
1282 | 21 | if (!picker) return; | 29 | if (!picker) return; |
1327 | 22 | picker.closed.connect(function () { | 30 | picker.closed.connect(function () { element.highlighted = false; }); |
1328 | 23 | element.highlighted = false; | 31 | } |
1329 | 24 | }); | 32 | |
1330 | 25 | } | 33 | height: layout.height + divider.height |
1331 | 26 | 34 | ||
1332 | 27 | onDateTimeChanged: { | 35 | // backgroud color of full date fabel, to be shown when user click on date and DatePicker is visable |
1333 | 28 | dateInput.text = dateTime.toLocaleDateString(); | 36 | Rectangle { |
1334 | 29 | timeInput.text = Qt.formatTime(dateTime); | 37 | id: dateBG |
1335 | 30 | } | 38 | |
1336 | 31 | 39 | property bool highlighted: false | |
1337 | 32 | ListItem.Header { | 40 | |
1338 | 33 | id: listHeader | 41 | height: layout.summary.height + units.gu(3.5) |
1339 | 34 | } | 42 | width: showTimePicker ? layout.title.width + units.gu(3) : layout.width |
1340 | 35 | 43 | anchors.bottom: parent.bottom | |
1341 | 36 | Item { | 44 | color: highlighted ? UbuntuColors.lightGrey : "transparent" |
1342 | 37 | anchors { | 45 | |
1343 | 38 | left: parent.left | 46 | Behavior on color { ColorAnimation {} } |
1344 | 39 | right: parent.right | 47 | } |
1345 | 40 | margins: units.gu(2) | 48 | |
1346 | 41 | } | 49 | // backgroud color of time label, to be shown when user click on date and DatePicker is visable |
1347 | 42 | 50 | Rectangle { | |
1348 | 43 | height: dateInput.height | 51 | id: timeBG |
1349 | 44 | 52 | ||
1350 | 45 | NewEventEntryField{ | 53 | property bool highlighted: false |
1351 | 46 | id: dateInput | 54 | |
1352 | 47 | objectName: "dateInput" | 55 | height: dateBG.height |
1353 | 48 | 56 | width: slot.width + units.gu(4) | |
1354 | 49 | text: "" | 57 | anchors.bottom: parent.bottom |
1355 | 50 | anchors.left: parent.left | 58 | anchors.right: parent.right |
1356 | 51 | width: !showTimePicker ? parent.width : 4 * parent.width / 5 | 59 | color: highlighted ? UbuntuColors.lightGrey : "transparent" |
1357 | 52 | 60 | ||
1358 | 53 | MouseArea{ | 61 | Behavior on color { ColorAnimation {} } |
1359 | 54 | anchors.fill: parent | 62 | } |
1360 | 55 | onClicked: openDatePicker(dateInput, dateTimeInput, "dateTime", "Years|Months|Days") | 63 | |
1361 | 56 | } | 64 | // ListItemLayout to keep full date label and time label |
1362 | 57 | } | 65 | ListItemLayout { |
1363 | 58 | 66 | id: layout | |
1364 | 59 | NewEventEntryField{ | 67 | |
1365 | 60 | id: timeInput | 68 | title.text: headerText |
1366 | 61 | objectName: "timeInput" | 69 | title.color: Theme.palette.selected.overlayText |
1367 | 62 | 70 | title.font.pixelSize: FontUtils.sizeToPixels("small") | |
1368 | 63 | text: "" | 71 | subtitle.text: " " |
1369 | 64 | anchors.right: parent.right | 72 | summary.color: dateBG.highlighted ? "white" : Theme.palette.selected.fieldText |
1370 | 65 | width: parent.width / 5 | 73 | summary.font.pixelSize: FontUtils.sizeToPixels("medium") |
1371 | 74 | |||
1372 | 75 | Behavior on summary.color { ColorAnimation {} } | ||
1373 | 76 | |||
1374 | 77 | // Item to hold Trailing tile label item | ||
1375 | 78 | Item { | ||
1376 | 79 | id: slot | ||
1377 | 80 | |||
1378 | 81 | width: secondLabel.width | ||
1379 | 82 | height: parent.height | ||
1380 | 66 | visible: showTimePicker | 83 | visible: showTimePicker |
1386 | 67 | horizontalAlignment: Text.AlignRight | 84 | SlotsLayout.overrideVerticalPositioning: true |
1387 | 68 | 85 | ||
1388 | 69 | MouseArea{ | 86 | // label to keep time [ 10:20 AM ] |
1389 | 70 | anchors.fill: parent | 87 | Label { |
1390 | 71 | onClicked: openDatePicker(timeInput, dateTimeInput, "dateTime", "Hours|Minutes") | 88 | id: secondLabel |
1391 | 89 | |||
1392 | 90 | fontSize: "medium" | ||
1393 | 91 | color: timeBG.highlighted ? "white" : Theme.palette.selected.fieldText | ||
1394 | 92 | y: layout.mainSlot.y + layout.summary.y + layout.summary.baselineOffset - baselineOffset | ||
1395 | 93 | Behavior on color { ColorAnimation {} } | ||
1396 | 72 | } | 94 | } |
1397 | 73 | } | 95 | } |
1398 | 74 | } | 96 | } |
1399 | 97 | |||
1400 | 98 | // AbstractButton to be triggered when user click on full date | ||
1401 | 99 | AbstractButton { | ||
1402 | 100 | anchors.fill: dateBG | ||
1403 | 101 | onClicked: { openDatePicker(dateBG, dateTimeInput, "dateTime", "Years|Months|Days")} | ||
1404 | 102 | } | ||
1405 | 103 | |||
1406 | 104 | // AbstractButton to be triggered when user click on time | ||
1407 | 105 | AbstractButton { | ||
1408 | 106 | anchors.fill: timeBG | ||
1409 | 107 | visible: showTimePicker | ||
1410 | 108 | onClicked: { openDatePicker(timeBG, dateTimeInput, "dateTime", "Hours|Minutes")} | ||
1411 | 109 | } | ||
1412 | 110 | |||
1413 | 75 | } | 111 | } |
1414 | 76 | 112 | ||
1415 | === modified file 'RemindersModel.qml' | |||
1416 | --- RemindersModel.qml 2016-03-14 14:30:16 +0000 | |||
1417 | +++ RemindersModel.qml 2016-03-15 21:24:54 +0000 | |||
1418 | @@ -40,5 +40,17 @@ | |||
1419 | 40 | reminderModel.append({ "label": i18n.tr("2 weeks"), "value": 1209600 }) | 40 | reminderModel.append({ "label": i18n.tr("2 weeks"), "value": 1209600 }) |
1420 | 41 | reminderModel.loaded() | 41 | reminderModel.loaded() |
1421 | 42 | } | 42 | } |
1422 | 43 | |||
1423 | 44 | function getSelectedReminder() { | ||
1424 | 45 | if(visualReminder.secondsBeforeStart !== -1) { | ||
1425 | 46 | for( var i=0; i<reminderModel.count; i++ ) { | ||
1426 | 47 | if(visualReminder.secondsBeforeStart === reminderModel.get(i).value) { | ||
1427 | 48 | return reminderModel.get(i).label | ||
1428 | 49 | } | ||
1429 | 50 | } | ||
1430 | 51 | } else { | ||
1431 | 52 | return reminderModel.get(0).label | ||
1432 | 53 | } | ||
1433 | 54 | } | ||
1434 | 43 | } | 55 | } |
1435 | 44 | 56 | ||
1436 | 45 | 57 | ||
1437 | === modified file 'po/com.ubuntu.calendar.pot' | |||
1438 | --- po/com.ubuntu.calendar.pot 2016-03-03 22:32:56 +0000 | |||
1439 | +++ po/com.ubuntu.calendar.pot 2016-03-15 21:24:54 +0000 | |||
1440 | @@ -8,7 +8,7 @@ | |||
1441 | 8 | msgstr "" | 8 | msgstr "" |
1442 | 9 | "Project-Id-Version: \n" | 9 | "Project-Id-Version: \n" |
1443 | 10 | "Report-Msgid-Bugs-To: \n" | 10 | "Report-Msgid-Bugs-To: \n" |
1445 | 11 | "POT-Creation-Date: 2016-03-04 04:02+0530\n" | 11 | "POT-Creation-Date: 2016-03-15 12:32+0000\n" |
1446 | 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
1447 | 13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | 13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
1448 | 14 | "Language-Team: LANGUAGE <LL@li.org>\n" | 14 | "Language-Team: LANGUAGE <LL@li.org>\n" |
1449 | @@ -18,7 +18,7 @@ | |||
1450 | 18 | "Content-Transfer-Encoding: 8bit\n" | 18 | "Content-Transfer-Encoding: 8bit\n" |
1451 | 19 | "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" | 19 | "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" |
1452 | 20 | 20 | ||
1454 | 21 | #: ../AgendaView.qml:50 ../calendar.qml:292 ../calendar.qml:518 | 21 | #: ../AgendaView.qml:50 ../calendar.qml:321 ../calendar.qml:547 |
1455 | 22 | msgid "Agenda" | 22 | msgid "Agenda" |
1456 | 23 | msgstr "" | 23 | msgstr "" |
1457 | 24 | 24 | ||
1458 | @@ -57,8 +57,10 @@ | |||
1459 | 57 | #. where it's shown has limited space | 57 | #. where it's shown has limited space |
1460 | 58 | #: ../AllDayEventComponent.qml:150 | 58 | #: ../AllDayEventComponent.qml:150 |
1461 | 59 | #, qt-format | 59 | #, qt-format |
1464 | 60 | msgid "%1 ev." | 60 | msgid "%1 event" |
1465 | 61 | msgstr "" | 61 | msgid_plural "%1 events" |
1466 | 62 | msgstr[0] "" | ||
1467 | 63 | msgstr[1] "" | ||
1468 | 62 | 64 | ||
1469 | 63 | #. TRANSLATORS: the argument refers to the number of all day events | 65 | #. TRANSLATORS: the argument refers to the number of all day events |
1470 | 64 | #: ../AllDayEventComponent.qml:154 | 66 | #: ../AllDayEventComponent.qml:154 |
1471 | @@ -68,7 +70,7 @@ | |||
1472 | 68 | msgstr[0] "" | 70 | msgstr[0] "" |
1473 | 69 | msgstr[1] "" | 71 | msgstr[1] "" |
1474 | 70 | 72 | ||
1476 | 71 | #: ../CalendarChoicePopup.qml:34 ../EventActions.qml:51 | 73 | #: ../CalendarChoicePopup.qml:34 ../EventActions.qml:52 |
1477 | 72 | msgid "Calendars" | 74 | msgid "Calendars" |
1478 | 73 | msgstr "" | 75 | msgstr "" |
1479 | 74 | 76 | ||
1480 | @@ -78,11 +80,11 @@ | |||
1481 | 78 | 80 | ||
1482 | 79 | #. TRANSLATORS: Please translate this string to 15 characters only. | 81 | #. TRANSLATORS: Please translate this string to 15 characters only. |
1483 | 80 | #. Currently ,there is no way we can increase width of action menu currently. | 82 | #. Currently ,there is no way we can increase width of action menu currently. |
1485 | 81 | #: ../CalendarChoicePopup.qml:48 ../EventActions.qml:36 | 83 | #: ../CalendarChoicePopup.qml:48 ../EventActions.qml:37 |
1486 | 82 | msgid "Sync" | 84 | msgid "Sync" |
1487 | 83 | msgstr "" | 85 | msgstr "" |
1488 | 84 | 86 | ||
1490 | 85 | #: ../CalendarChoicePopup.qml:48 ../EventActions.qml:36 | 87 | #: ../CalendarChoicePopup.qml:48 ../EventActions.qml:37 |
1491 | 86 | msgid "Syncing" | 88 | msgid "Syncing" |
1492 | 87 | msgstr "" | 89 | msgstr "" |
1493 | 88 | 90 | ||
1494 | @@ -95,7 +97,7 @@ | |||
1495 | 95 | msgstr "" | 97 | msgstr "" |
1496 | 96 | 98 | ||
1497 | 97 | #: ../ColorPickerDialog.qml:55 ../DeleteConfirmationDialog.qml:60 | 99 | #: ../ColorPickerDialog.qml:55 ../DeleteConfirmationDialog.qml:60 |
1499 | 98 | #: ../EditEventConfirmationDialog.qml:53 ../NewEvent.qml:340 | 100 | #: ../EditEventConfirmationDialog.qml:53 ../NewEvent.qml:362 |
1500 | 99 | msgid "Cancel" | 101 | msgid "Cancel" |
1501 | 100 | msgstr "" | 102 | msgstr "" |
1502 | 101 | 103 | ||
1503 | @@ -107,23 +109,17 @@ | |||
1504 | 107 | msgid "Search contact" | 109 | msgid "Search contact" |
1505 | 108 | msgstr "" | 110 | msgstr "" |
1506 | 109 | 111 | ||
1508 | 110 | #: ../DayView.qml:71 ../MonthView.qml:50 ../WeekView.qml:54 ../YearView.qml:57 | 112 | #: ../DayView.qml:72 ../MonthView.qml:50 ../WeekView.qml:55 ../YearView.qml:57 |
1509 | 111 | msgid "Today" | 113 | msgid "Today" |
1510 | 112 | msgstr "" | 114 | msgstr "" |
1511 | 113 | 115 | ||
1512 | 114 | #. TRANSLATORS: this is a time formatting string, | 116 | #. TRANSLATORS: this is a time formatting string, |
1513 | 115 | #. see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions. | 117 | #. see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions. |
1514 | 116 | #. It's used in the header of the month and week views | 118 | #. It's used in the header of the month and week views |
1517 | 117 | #: ../DayView.qml:115 ../DayView.qml:203 ../MonthView.qml:78 | 119 | #: ../DayView.qml:122 ../MonthView.qml:78 ../WeekView.qml:144 |
1516 | 118 | #: ../WeekView.qml:137 ../WeekView.qml:256 | ||
1518 | 119 | msgid "MMMM yyyy" | 120 | msgid "MMMM yyyy" |
1519 | 120 | msgstr "" | 121 | msgstr "" |
1520 | 121 | 122 | ||
1521 | 122 | #: ../DayView.qml:201 ../MonthView.qml:73 ../WeekView.qml:254 | ||
1522 | 123 | #, qt-format | ||
1523 | 124 | msgid "%1 %2" | ||
1524 | 125 | msgstr "" | ||
1525 | 126 | |||
1526 | 127 | #: ../DeleteConfirmationDialog.qml:31 | 123 | #: ../DeleteConfirmationDialog.qml:31 |
1527 | 128 | msgid "Delete Recurring Event" | 124 | msgid "Delete Recurring Event" |
1528 | 129 | msgstr "" | 125 | msgstr "" |
1529 | @@ -151,11 +147,11 @@ | |||
1530 | 151 | msgid "Delete this" | 147 | msgid "Delete this" |
1531 | 152 | msgstr "" | 148 | msgstr "" |
1532 | 153 | 149 | ||
1534 | 154 | #: ../DeleteConfirmationDialog.qml:51 ../NewEvent.qml:347 | 150 | #: ../DeleteConfirmationDialog.qml:51 |
1535 | 155 | msgid "Delete" | 151 | msgid "Delete" |
1536 | 156 | msgstr "" | 152 | msgstr "" |
1537 | 157 | 153 | ||
1539 | 158 | #: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:335 | 154 | #: ../EditEventConfirmationDialog.qml:29 |
1540 | 159 | msgid "Edit Event" | 155 | msgid "Edit Event" |
1541 | 160 | msgstr "" | 156 | msgstr "" |
1542 | 161 | 157 | ||
1543 | @@ -173,25 +169,25 @@ | |||
1544 | 173 | msgid "Edit this" | 169 | msgid "Edit this" |
1545 | 174 | msgstr "" | 170 | msgstr "" |
1546 | 175 | 171 | ||
1548 | 176 | #: ../EventActions.qml:63 ../Settings.qml:29 | 172 | #: ../EventActions.qml:64 ../Settings.qml:29 |
1549 | 177 | msgid "Settings" | 173 | msgid "Settings" |
1550 | 178 | msgstr "" | 174 | msgstr "" |
1551 | 179 | 175 | ||
1552 | 180 | #. TRANSLATORS: the first argument (%1) refers to a start time for an event, | 176 | #. TRANSLATORS: the first argument (%1) refers to a start time for an event, |
1553 | 181 | #. while the second one (%2) refers to the end time | 177 | #. while the second one (%2) refers to the end time |
1555 | 182 | #: ../EventBubble.qml:97 | 178 | #: ../EventBubble.qml:104 |
1556 | 183 | #, qt-format | 179 | #, qt-format |
1557 | 184 | msgid "%1 - %2" | 180 | msgid "%1 - %2" |
1558 | 185 | msgstr "" | 181 | msgstr "" |
1559 | 186 | 182 | ||
1560 | 187 | #. TRANSLATORS: the first argument (%1) refers to a time for an event, | 183 | #. TRANSLATORS: the first argument (%1) refers to a time for an event, |
1561 | 188 | #. while the second one (%2) refers to title of event | 184 | #. while the second one (%2) refers to title of event |
1563 | 189 | #: ../EventBubble.qml:108 ../EventBubble.qml:113 | 185 | #: ../EventBubble.qml:115 ../EventBubble.qml:120 |
1564 | 190 | #, qt-format | 186 | #, qt-format |
1565 | 191 | msgid "%1 <b>%2</b>" | 187 | msgid "%1 <b>%2</b>" |
1566 | 192 | msgstr "" | 188 | msgstr "" |
1567 | 193 | 189 | ||
1569 | 194 | #: ../EventDetails.qml:44 ../NewEvent.qml:483 | 190 | #: ../EventDetails.qml:44 |
1570 | 195 | msgid "Event Details" | 191 | msgid "Event Details" |
1571 | 196 | msgstr "" | 192 | msgstr "" |
1572 | 197 | 193 | ||
1573 | @@ -235,38 +231,34 @@ | |||
1574 | 235 | msgid "Edit" | 231 | msgid "Edit" |
1575 | 236 | msgstr "" | 232 | msgstr "" |
1576 | 237 | 233 | ||
1578 | 238 | #: ../EventDetails.qml:389 ../NewEvent.qml:589 | 234 | #: ../EventDetails.qml:389 ../NewEvent.qml:615 |
1579 | 239 | msgid "Guests" | 235 | msgid "Guests" |
1580 | 240 | msgstr "" | 236 | msgstr "" |
1581 | 241 | 237 | ||
1583 | 242 | #: ../EventDetails.qml:432 ../EventReminder.qml:35 ../NewEvent.qml:701 | 238 | #: ../EventDetails.qml:432 ../EventReminder.qml:35 ../NewEvent.qml:754 |
1584 | 243 | msgid "Reminder" | 239 | msgid "Reminder" |
1585 | 244 | msgstr "" | 240 | msgstr "" |
1586 | 245 | 241 | ||
1592 | 246 | #. TRANSLATORS: this refers to how often a recurrent event repeats | 242 | #: ../EventRepetition.qml:43 ../EventRepetition.qml:175 |
1588 | 247 | #. and it is shown as the header of the page to choose repetition | ||
1589 | 248 | #. and as the header of the list item that shows the repetition | ||
1590 | 249 | #. summary in the page that displays the event details | ||
1591 | 250 | #: ../EventRepetition.qml:40 ../EventRepetition.qml:155 | ||
1593 | 251 | msgid "Repeat" | 243 | msgid "Repeat" |
1594 | 252 | msgstr "" | 244 | msgstr "" |
1595 | 253 | 245 | ||
1597 | 254 | #: ../EventRepetition.qml:174 | 246 | #: ../EventRepetition.qml:202 |
1598 | 255 | msgid "Repeats On:" | 247 | msgid "Repeats On:" |
1599 | 256 | msgstr "" | 248 | msgstr "" |
1600 | 257 | 249 | ||
1602 | 258 | #: ../EventRepetition.qml:219 | 250 | #: ../EventRepetition.qml:254 |
1603 | 259 | msgid "Recurring event ends" | 251 | msgid "Recurring event ends" |
1604 | 260 | msgstr "" | 252 | msgstr "" |
1605 | 261 | 253 | ||
1606 | 262 | #. TRANSLATORS: this refers to how often a recurrent event repeats | 254 | #. TRANSLATORS: this refers to how often a recurrent event repeats |
1607 | 263 | #. and it is shown as the header of the option selector to choose | 255 | #. and it is shown as the header of the option selector to choose |
1608 | 264 | #. its repetition | 256 | #. its repetition |
1610 | 265 | #: ../EventRepetition.qml:242 ../NewEvent.qml:685 | 257 | #: ../EventRepetition.qml:285 ../NewEvent.qml:730 |
1611 | 266 | msgid "Repeats" | 258 | msgid "Repeats" |
1612 | 267 | msgstr "" | 259 | msgstr "" |
1613 | 268 | 260 | ||
1615 | 269 | #: ../EventRepetition.qml:267 | 261 | #: ../EventRepetition.qml:317 |
1616 | 270 | msgid "Date" | 262 | msgid "Date" |
1617 | 271 | msgstr "" | 263 | msgstr "" |
1618 | 272 | 264 | ||
1619 | @@ -314,58 +306,74 @@ | |||
1620 | 314 | msgid "Wk" | 306 | msgid "Wk" |
1621 | 315 | msgstr "" | 307 | msgstr "" |
1622 | 316 | 308 | ||
1624 | 317 | #: ../NewEvent.qml:171 | 309 | #: ../MonthView.qml:73 ../WeekView.qml:131 |
1625 | 310 | #, qt-format | ||
1626 | 311 | msgid "%1 %2" | ||
1627 | 312 | msgstr "" | ||
1628 | 313 | |||
1629 | 314 | #: ../NewEvent.qml:173 | ||
1630 | 318 | msgid "End time can't be before start time" | 315 | msgid "End time can't be before start time" |
1631 | 319 | msgstr "" | 316 | msgstr "" |
1632 | 320 | 317 | ||
1638 | 321 | #: ../NewEvent.qml:335 ../NewEventBottomEdge.qml:52 | 318 | #: ../NewEvent.qml:355 ../NewEvent.qml:372 |
1634 | 322 | msgid "New Event" | ||
1635 | 323 | msgstr "" | ||
1636 | 324 | |||
1637 | 325 | #: ../NewEvent.qml:364 | ||
1639 | 326 | msgid "Save" | 319 | msgid "Save" |
1640 | 327 | msgstr "" | 320 | msgstr "" |
1641 | 328 | 321 | ||
1643 | 329 | #: ../NewEvent.qml:375 | 322 | #: ../NewEvent.qml:387 |
1644 | 330 | msgid "Error" | 323 | msgid "Error" |
1645 | 331 | msgstr "" | 324 | msgstr "" |
1646 | 332 | 325 | ||
1648 | 333 | #: ../NewEvent.qml:377 | 326 | #: ../NewEvent.qml:389 |
1649 | 334 | msgid "OK" | 327 | msgid "OK" |
1650 | 335 | msgstr "" | 328 | msgstr "" |
1651 | 336 | 329 | ||
1653 | 337 | #: ../NewEvent.qml:437 | 330 | #. TRANSLATORS: this referes to date. eg: From: Wendsday, 9 March 2016 |
1654 | 331 | #: ../NewEvent.qml:454 | ||
1655 | 338 | msgid "From" | 332 | msgid "From" |
1656 | 339 | msgstr "" | 333 | msgstr "" |
1657 | 340 | 334 | ||
1659 | 341 | #: ../NewEvent.qml:450 | 335 | #. TRANSLATORS: this referes to date. eg: To: Wendsday, 9 March 2016 |
1660 | 336 | #: ../NewEvent.qml:468 | ||
1661 | 342 | msgid "To" | 337 | msgid "To" |
1662 | 343 | msgstr "" | 338 | msgstr "" |
1663 | 344 | 339 | ||
1665 | 345 | #: ../NewEvent.qml:467 | 340 | #: ../NewEvent.qml:484 |
1666 | 346 | msgid "All day event" | 341 | msgid "All day event" |
1667 | 347 | msgstr "" | 342 | msgstr "" |
1668 | 348 | 343 | ||
1670 | 349 | #: ../NewEvent.qml:497 | 344 | #: ../NewEvent.qml:514 |
1671 | 345 | msgid "Event details" | ||
1672 | 346 | msgstr "" | ||
1673 | 347 | |||
1674 | 348 | #: ../NewEvent.qml:524 | ||
1675 | 350 | msgid "Event Name" | 349 | msgid "Event Name" |
1676 | 351 | msgstr "" | 350 | msgstr "" |
1677 | 352 | 351 | ||
1679 | 353 | #: ../NewEvent.qml:515 | 352 | #: ../NewEvent.qml:538 |
1680 | 354 | msgid "Description" | 353 | msgid "Description" |
1681 | 355 | msgstr "" | 354 | msgstr "" |
1682 | 356 | 355 | ||
1684 | 357 | #: ../NewEvent.qml:534 | 356 | #: ../NewEvent.qml:553 |
1685 | 358 | msgid "Location" | 357 | msgid "Location" |
1686 | 359 | msgstr "" | 358 | msgstr "" |
1687 | 360 | 359 | ||
1690 | 361 | #: ../NewEvent.qml:549 com.ubuntu.calendar_calendar.desktop.in.in.h:1 | 360 | #: ../NewEvent.qml:586 |
1691 | 362 | msgid "Calendar" | 361 | msgid "Choose calendar" |
1692 | 363 | msgstr "" | 362 | msgstr "" |
1693 | 364 | 363 | ||
1695 | 365 | #: ../NewEvent.qml:598 | 364 | #: ../NewEvent.qml:645 |
1696 | 366 | msgid "Add Guest" | 365 | msgid "Add Guest" |
1697 | 367 | msgstr "" | 366 | msgstr "" |
1698 | 368 | 367 | ||
1699 | 368 | #: ../NewEvent.qml:755 | ||
1700 | 369 | #, qt-format | ||
1701 | 370 | msgid "%1" | ||
1702 | 371 | msgstr "" | ||
1703 | 372 | |||
1704 | 373 | #: ../NewEventBottomEdge.qml:52 | ||
1705 | 374 | msgid "New Event" | ||
1706 | 375 | msgstr "" | ||
1707 | 376 | |||
1708 | 369 | #: ../RecurrenceLabelDefines.qml:23 | 377 | #: ../RecurrenceLabelDefines.qml:23 |
1709 | 370 | msgid "Once" | 378 | msgid "Once" |
1710 | 371 | msgstr "" | 379 | msgstr "" |
1711 | @@ -467,7 +475,7 @@ | |||
1712 | 467 | msgid "All Day" | 475 | msgid "All Day" |
1713 | 468 | msgstr "" | 476 | msgstr "" |
1714 | 469 | 477 | ||
1716 | 470 | #: ../WeekView.qml:131 ../WeekView.qml:132 | 478 | #: ../WeekView.qml:138 ../WeekView.qml:139 |
1717 | 471 | msgid "MMM" | 479 | msgid "MMM" |
1718 | 472 | msgstr "" | 480 | msgstr "" |
1719 | 473 | 481 | ||
1720 | @@ -476,29 +484,33 @@ | |||
1721 | 476 | msgid "Year %1" | 484 | msgid "Year %1" |
1722 | 477 | msgstr "" | 485 | msgstr "" |
1723 | 478 | 486 | ||
1725 | 479 | #: ../calendar.qml:46 | 487 | #: ../calendar.qml:48 |
1726 | 480 | msgid "" | 488 | msgid "" |
1727 | 481 | "Calendar app accept four arguments: --starttime, --endtime, --newevent and --" | 489 | "Calendar app accept four arguments: --starttime, --endtime, --newevent and --" |
1728 | 482 | "eventid. They will be managed by system. See the source for a full comment " | 490 | "eventid. They will be managed by system. See the source for a full comment " |
1729 | 483 | "about them" | 491 | "about them" |
1730 | 484 | msgstr "" | 492 | msgstr "" |
1731 | 485 | 493 | ||
1733 | 486 | #: ../calendar.qml:260 ../calendar.qml:434 | 494 | #: ../calendar.qml:289 ../calendar.qml:463 |
1734 | 487 | msgid "Year" | 495 | msgid "Year" |
1735 | 488 | msgstr "" | 496 | msgstr "" |
1736 | 489 | 497 | ||
1738 | 490 | #: ../calendar.qml:268 ../calendar.qml:455 | 498 | #: ../calendar.qml:297 ../calendar.qml:484 |
1739 | 491 | msgid "Month" | 499 | msgid "Month" |
1740 | 492 | msgstr "" | 500 | msgstr "" |
1741 | 493 | 501 | ||
1743 | 494 | #: ../calendar.qml:276 ../calendar.qml:476 | 502 | #: ../calendar.qml:305 ../calendar.qml:505 |
1744 | 495 | msgid "Week" | 503 | msgid "Week" |
1745 | 496 | msgstr "" | 504 | msgstr "" |
1746 | 497 | 505 | ||
1748 | 498 | #: ../calendar.qml:284 ../calendar.qml:497 | 506 | #: ../calendar.qml:313 ../calendar.qml:526 |
1749 | 499 | msgid "Day" | 507 | msgid "Day" |
1750 | 500 | msgstr "" | 508 | msgstr "" |
1751 | 501 | 509 | ||
1752 | 510 | #: com.ubuntu.calendar_calendar.desktop.in.in.h:1 | ||
1753 | 511 | msgid "Calendar" | ||
1754 | 512 | msgstr "" | ||
1755 | 513 | |||
1756 | 502 | #: com.ubuntu.calendar_calendar.desktop.in.in.h:2 | 514 | #: com.ubuntu.calendar_calendar.desktop.in.in.h:2 |
1757 | 503 | msgid "A calendar for Ubuntu which syncs with online accounts." | 515 | msgid "A calendar for Ubuntu which syncs with online accounts." |
1758 | 504 | msgstr "" | 516 | msgstr "" |
FAILED: Continuous integration, rev:773 /code.launchpad .net/~majster- pl/ubuntu- calendar- app/new- event-page/ +merge/ 288637/ +edit-commit- message
No commit message was specified in the merge proposal. Click on the following link and set the commit message (if you want a jenkins rebuild you need to trigger it yourself):
https:/
https:/ /core-apps- jenkins. ubuntu. com/job/ calendar- app-ci/ 788/ /core-apps- jenkins. ubuntu. com/job/ generic- update- mp/738/ console
Executed test runs:
None: https:/
Click here to trigger a rebuild: /core-apps- jenkins. ubuntu. com/job/ calendar- app-ci/ 788/rebuild
https:/