Merge lp:~dpniel/ubuntu-calendar-app/ScrollView2 into lp:ubuntu-calendar-app
- ScrollView2
- Merge into trunk
Status: | Work in progress |
---|---|
Proposed branch: | lp:~dpniel/ubuntu-calendar-app/ScrollView2 |
Merge into: | lp:ubuntu-calendar-app |
Diff against target: |
1313 lines (+555/-486) 4 files modified
NewEvent.qml (+305/-301) TimeLineBaseComponent.qml (+133/-132) YearView.qml (+20/-8) po/com.ubuntu.calendar.pot (+97/-45) |
To merge this branch: | bzr merge lp:~dpniel/ubuntu-calendar-app/ScrollView2 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jenkins Bot | continuous-integration | Needs Fixing | |
Ubuntu Calendar Developers | Pending | ||
Review via email: mp+285027@code.launchpad.net |
Commit message
Adds ScrollView component to view Flickables
It's not possible to add the ScrollView to the PathView where used for
horizontal traversing, like in year view as Path doesn't inherit
Flickable. So another solution will Probably be needed for those areas.
Description of the change
Adds ScrollView component to view Flickables
It's not possible to add the ScrollView to the PathView where used for
horizontal traversing, like in year view as Path doesn't inherit
Flickable. So another solution will Probably be needed for those areas.
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote : | # |
- 759. By Dan Chapman
-
Forward on yearviewdelegate refresh call
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:759
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:759
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Unmerged revisions
- 759. By Dan Chapman
-
Forward on yearviewdelegate refresh call
- 758. By Dan Chapman
-
Adds ScrollView component to view Flickables
It's not possible to add the ScrollView to the PathView where used for
horizontal traversing, like in year view as Path doesn't inherit
Flickable. So another solution will Probably be needed for those areas.
Preview Diff
1 | === modified file 'NewEvent.qml' | |||
2 | --- NewEvent.qml 2016-02-02 22:54:03 +0000 | |||
3 | +++ NewEvent.qml 2016-02-04 10:08:25 +0000 | |||
4 | @@ -344,321 +344,325 @@ | |||
5 | 344 | id:eventUtils | 344 | id:eventUtils |
6 | 345 | } | 345 | } |
7 | 346 | 346 | ||
40 | 347 | Flickable{ | 347 | ScrollView { |
9 | 348 | id: flickable | ||
10 | 349 | clip: true | ||
11 | 350 | |||
12 | 351 | property var activeItem: null | ||
13 | 352 | |||
14 | 353 | function makeMeVisible(item) { | ||
15 | 354 | if (!item) { | ||
16 | 355 | return | ||
17 | 356 | } | ||
18 | 357 | |||
19 | 358 | activeItem = item | ||
20 | 359 | var position = flickable.contentItem.mapFromItem(item, 0, 0); | ||
21 | 360 | |||
22 | 361 | // check if the item is already visible | ||
23 | 362 | var bottomY = flickable.contentY + flickable.height | ||
24 | 363 | var itemBottom = position.y + item.height | ||
25 | 364 | if (position.y >= flickable.contentY && itemBottom <= bottomY) { | ||
26 | 365 | return; | ||
27 | 366 | } | ||
28 | 367 | |||
29 | 368 | // if it is not, try to scroll and make it visible | ||
30 | 369 | var targetY = position.y + item.height - flickable.height | ||
31 | 370 | if (targetY >= 0 && position.y) { | ||
32 | 371 | flickable.contentY = targetY; | ||
33 | 372 | } else if (position.y < flickable.contentY) { | ||
34 | 373 | // if it is hidden at the top, also show it | ||
35 | 374 | flickable.contentY = position.y; | ||
36 | 375 | } | ||
37 | 376 | flickable.returnToBounds() | ||
38 | 377 | } | ||
39 | 378 | |||
41 | 379 | anchors.fill: parent | 348 | anchors.fill: parent |
262 | 380 | contentWidth: width | 349 | |
263 | 381 | contentHeight: column.height + units.gu(10) | 350 | Flickable{ |
264 | 382 | 351 | id: flickable | |
265 | 383 | Column { | 352 | clip: true |
266 | 384 | id: column | 353 | |
267 | 385 | 354 | property var activeItem: null | |
268 | 386 | width: parent.width | 355 | |
269 | 387 | 356 | function makeMeVisible(item) { | |
270 | 388 | NewEventTimePicker{ | 357 | if (!item) { |
271 | 389 | id: startDateTimeInput | 358 | return |
272 | 390 | header: i18n.tr("From") | 359 | } |
273 | 391 | showTimePicker: !allDayEventCheckbox.checked | 360 | |
274 | 392 | anchors { | 361 | activeItem = item |
275 | 393 | left: parent.left | 362 | var position = flickable.contentItem.mapFromItem(item, 0, 0); |
276 | 394 | right: parent.right | 363 | |
277 | 395 | } | 364 | // check if the item is already visible |
278 | 396 | onDateTimeChanged: { | 365 | var bottomY = flickable.contentY + flickable.height |
279 | 397 | startDate = dateTime; | 366 | var itemBottom = position.y + item.height |
280 | 398 | } | 367 | if (position.y >= flickable.contentY && itemBottom <= bottomY) { |
281 | 399 | } | 368 | return; |
282 | 400 | 369 | } | |
283 | 401 | NewEventTimePicker{ | 370 | |
284 | 402 | id: endDateTimeInput | 371 | // if it is not, try to scroll and make it visible |
285 | 403 | header: i18n.tr("To") | 372 | var targetY = position.y + item.height - flickable.height |
286 | 404 | showTimePicker: !allDayEventCheckbox.checked | 373 | if (targetY >= 0 && position.y) { |
287 | 405 | anchors { | 374 | flickable.contentY = targetY; |
288 | 406 | left: parent.left | 375 | } else if (position.y < flickable.contentY) { |
289 | 407 | right: parent.right | 376 | // if it is hidden at the top, also show it |
290 | 408 | } | 377 | flickable.contentY = position.y; |
291 | 409 | onDateTimeChanged: { | 378 | } |
292 | 410 | endDate = dateTime; | 379 | flickable.returnToBounds() |
293 | 411 | } | 380 | } |
294 | 412 | } | 381 | |
295 | 413 | 382 | anchors.fill: parent | |
296 | 414 | ListItem.Standard { | 383 | contentWidth: width |
297 | 415 | anchors { | 384 | contentHeight: column.height + units.gu(10) |
298 | 416 | left: parent.left | 385 | |
299 | 417 | right: parent.right | 386 | Column { |
300 | 418 | } | 387 | id: column |
301 | 419 | 388 | ||
302 | 420 | text: i18n.tr("All day event") | 389 | width: parent.width |
303 | 421 | showDivider: false | 390 | |
304 | 422 | control: CheckBox { | 391 | NewEventTimePicker{ |
305 | 423 | objectName: "allDayEventCheckbox" | 392 | id: startDateTimeInput |
306 | 424 | id: allDayEventCheckbox | 393 | header: i18n.tr("From") |
307 | 425 | checked: false | 394 | showTimePicker: !allDayEventCheckbox.checked |
308 | 426 | } | 395 | anchors { |
309 | 427 | } | 396 | left: parent.left |
310 | 428 | 397 | right: parent.right | |
311 | 429 | ListItem.ThinDivider {} | 398 | } |
312 | 430 | 399 | onDateTimeChanged: { | |
313 | 431 | Column { | 400 | startDate = dateTime; |
314 | 432 | width: parent.width | 401 | } |
315 | 433 | spacing: units.gu(1) | 402 | } |
316 | 434 | 403 | ||
317 | 435 | ListItem.Header{ | 404 | NewEventTimePicker{ |
318 | 436 | text: i18n.tr("Event Details") | 405 | id: endDateTimeInput |
319 | 437 | } | 406 | header: i18n.tr("To") |
320 | 438 | 407 | showTimePicker: !allDayEventCheckbox.checked | |
321 | 439 | TextField { | 408 | anchors { |
322 | 440 | id: titleEdit | 409 | left: parent.left |
323 | 441 | objectName: "newEventName" | 410 | right: parent.right |
324 | 442 | 411 | } | |
325 | 443 | anchors { | 412 | onDateTimeChanged: { |
326 | 444 | left: parent.left | 413 | endDate = dateTime; |
327 | 445 | right: parent.right | 414 | } |
328 | 446 | margins: units.gu(2) | 415 | } |
329 | 447 | } | 416 | |
330 | 448 | 417 | ListItem.Standard { | |
331 | 449 | placeholderText: i18n.tr("Event Name") | 418 | anchors { |
332 | 450 | onFocusChanged: { | 419 | left: parent.left |
333 | 451 | if(titleEdit.focus) { | 420 | right: parent.right |
334 | 452 | flickable.makeMeVisible(titleEdit); | 421 | } |
335 | 453 | } | 422 | |
336 | 454 | } | 423 | text: i18n.tr("All day event") |
337 | 455 | } | 424 | showDivider: false |
338 | 456 | 425 | control: CheckBox { | |
339 | 457 | TextArea{ | 426 | objectName: "allDayEventCheckbox" |
340 | 458 | id: messageEdit | 427 | id: allDayEventCheckbox |
341 | 459 | objectName: "eventDescriptionInput" | 428 | checked: false |
342 | 460 | 429 | } | |
343 | 461 | anchors { | 430 | } |
344 | 462 | left: parent.left | 431 | |
345 | 463 | right: parent.right | 432 | ListItem.ThinDivider {} |
346 | 464 | margins: units.gu(2) | 433 | |
347 | 465 | } | 434 | Column { |
348 | 466 | 435 | width: parent.width | |
349 | 467 | placeholderText: i18n.tr("Description") | 436 | spacing: units.gu(1) |
350 | 468 | onFocusChanged: { | 437 | |
351 | 469 | if(messageEdit.focus) { | 438 | ListItem.Header{ |
352 | 470 | flickable.makeMeVisible(messageEdit); | 439 | text: i18n.tr("Event Details") |
353 | 471 | } | 440 | } |
354 | 472 | } | 441 | |
355 | 473 | } | 442 | TextField { |
356 | 474 | 443 | id: titleEdit | |
357 | 475 | TextField { | 444 | objectName: "newEventName" |
358 | 476 | id: locationEdit | 445 | |
359 | 477 | objectName: "eventLocationInput" | 446 | anchors { |
360 | 478 | 447 | left: parent.left | |
361 | 479 | anchors { | 448 | right: parent.right |
362 | 480 | left: parent.left | 449 | margins: units.gu(2) |
363 | 481 | right: parent.right | 450 | } |
364 | 482 | margins: units.gu(2) | 451 | |
365 | 483 | } | 452 | placeholderText: i18n.tr("Event Name") |
366 | 484 | 453 | onFocusChanged: { | |
367 | 485 | placeholderText: i18n.tr("Location") | 454 | if(titleEdit.focus) { |
368 | 486 | 455 | flickable.makeMeVisible(titleEdit); | |
369 | 487 | onFocusChanged: { | 456 | } |
370 | 488 | if(locationEdit.focus) { | 457 | } |
371 | 489 | flickable.makeMeVisible(locationEdit); | 458 | } |
372 | 490 | } | 459 | |
373 | 491 | } | 460 | TextArea{ |
374 | 492 | } | 461 | id: messageEdit |
375 | 493 | } | 462 | objectName: "eventDescriptionInput" |
376 | 494 | 463 | ||
377 | 495 | Column { | 464 | anchors { |
378 | 496 | width: parent.width | 465 | left: parent.left |
379 | 497 | spacing: units.gu(1) | 466 | right: parent.right |
380 | 498 | 467 | margins: units.gu(2) | |
381 | 499 | ListItem.Header { | 468 | } |
382 | 500 | text: i18n.tr("Calendar") | 469 | |
383 | 501 | } | 470 | placeholderText: i18n.tr("Description") |
384 | 502 | 471 | onFocusChanged: { | |
385 | 503 | OptionSelector{ | 472 | if(messageEdit.focus) { |
386 | 504 | id: calendarsOption | 473 | flickable.makeMeVisible(messageEdit); |
387 | 505 | objectName: "calendarsOption" | 474 | } |
388 | 506 | 475 | } | |
389 | 507 | anchors { | 476 | } |
390 | 508 | left: parent.left | 477 | |
391 | 509 | right: parent.right | 478 | TextField { |
392 | 510 | margins: units.gu(2) | 479 | id: locationEdit |
393 | 511 | } | 480 | objectName: "eventLocationInput" |
394 | 512 | 481 | ||
395 | 513 | containerHeight: itemHeight * 4 | 482 | anchors { |
396 | 514 | model: root.model.getWritableCollections(); | 483 | left: parent.left |
397 | 515 | 484 | right: parent.right | |
398 | 516 | delegate: OptionSelectorDelegate{ | 485 | margins: units.gu(2) |
399 | 517 | text: modelData.name | 486 | } |
400 | 518 | 487 | ||
401 | 519 | UbuntuShape{ | 488 | placeholderText: i18n.tr("Location") |
402 | 520 | id: calColor | 489 | |
403 | 521 | width: height | 490 | onFocusChanged: { |
404 | 522 | height: parent.height - units.gu(2) | 491 | if(locationEdit.focus) { |
405 | 523 | color: modelData.color | 492 | flickable.makeMeVisible(locationEdit); |
406 | 524 | anchors.right: parent.right | 493 | } |
407 | 525 | anchors.rightMargin: units.gu(2) | 494 | } |
408 | 526 | anchors.verticalCenter: parent.verticalCenter | 495 | } |
409 | 527 | } | 496 | } |
410 | 528 | } | 497 | |
411 | 529 | onExpandedChanged: Qt.inputMethod.hide(); | 498 | Column { |
412 | 530 | } | 499 | width: parent.width |
413 | 531 | } | 500 | spacing: units.gu(1) |
414 | 532 | 501 | ||
415 | 533 | Column { | 502 | ListItem.Header { |
416 | 534 | width: parent.width | 503 | text: i18n.tr("Calendar") |
417 | 535 | spacing: units.gu(1) | 504 | } |
418 | 536 | 505 | ||
419 | 537 | ListItem.Header { | 506 | OptionSelector{ |
420 | 538 | text: i18n.tr("Guests") | 507 | id: calendarsOption |
421 | 539 | } | 508 | objectName: "calendarsOption" |
422 | 540 | 509 | ||
423 | 541 | Button{ | 510 | anchors { |
424 | 542 | text: i18n.tr("Add Guest") | 511 | left: parent.left |
425 | 543 | objectName: "addGuestButton" | 512 | right: parent.right |
426 | 544 | 513 | margins: units.gu(2) | |
427 | 545 | anchors { | 514 | } |
428 | 546 | left: parent.left | 515 | |
429 | 547 | right: parent.right | 516 | containerHeight: itemHeight * 4 |
430 | 548 | margins: units.gu(2) | 517 | model: root.model.getWritableCollections(); |
431 | 549 | } | 518 | |
432 | 550 | 519 | delegate: OptionSelectorDelegate{ | |
433 | 551 | onClicked: { | 520 | text: modelData.name |
434 | 552 | var popup = PopupUtils.open(Qt.resolvedUrl("ContactChoicePopup.qml"), contactList); | 521 | |
435 | 553 | popup.contactSelected.connect( function(contact) { | 522 | UbuntuShape{ |
436 | 554 | var t = internal.contactToAttendee(contact); | 523 | id: calColor |
437 | 555 | if( !internal.isContactAlreadyAdded(contact) ) { | 524 | width: height |
438 | 556 | contactModel.append(t); | 525 | height: parent.height - units.gu(2) |
439 | 557 | contactList.array.push(t); | 526 | color: modelData.color |
440 | 558 | } | 527 | anchors.right: parent.right |
441 | 559 | }); | 528 | anchors.rightMargin: units.gu(2) |
442 | 560 | } | 529 | anchors.verticalCenter: parent.verticalCenter |
443 | 561 | } | 530 | } |
444 | 562 | 531 | } | |
445 | 563 | UbuntuShape { | 532 | onExpandedChanged: Qt.inputMethod.hide(); |
446 | 564 | anchors { | 533 | } |
447 | 565 | left: parent.left | 534 | } |
448 | 566 | right: parent.right | 535 | |
449 | 567 | margins: units.gu(2) | 536 | Column { |
450 | 568 | } | 537 | width: parent.width |
451 | 569 | 538 | spacing: units.gu(1) | |
452 | 570 | height: contactList.height | 539 | |
453 | 571 | 540 | ListItem.Header { | |
454 | 572 | Column{ | 541 | text: i18n.tr("Guests") |
455 | 573 | id: contactList | 542 | } |
456 | 574 | objectName: "guestList" | 543 | |
457 | 575 | 544 | Button{ | |
458 | 576 | spacing: units.gu(1) | 545 | text: i18n.tr("Add Guest") |
459 | 577 | width: parent.width | 546 | objectName: "addGuestButton" |
460 | 578 | clip: true | 547 | |
461 | 579 | 548 | anchors { | |
462 | 580 | property var array: [] | 549 | left: parent.left |
463 | 581 | 550 | right: parent.right | |
464 | 582 | ListModel{ | 551 | margins: units.gu(2) |
465 | 583 | id: contactModel | 552 | } |
466 | 584 | } | 553 | |
467 | 585 | 554 | onClicked: { | |
468 | 586 | Repeater{ | 555 | var popup = PopupUtils.open(Qt.resolvedUrl("ContactChoicePopup.qml"), contactList); |
469 | 587 | model: contactModel | 556 | popup.contactSelected.connect( function(contact) { |
470 | 588 | delegate: ListItem.Standard { | 557 | var t = internal.contactToAttendee(contact); |
471 | 589 | objectName: "eventGuest%1".arg(index) | 558 | if( !internal.isContactAlreadyAdded(contact) ) { |
472 | 590 | height: units.gu(4) | 559 | contactModel.append(t); |
473 | 591 | text: name | 560 | contactList.array.push(t); |
474 | 592 | removable: true | 561 | } |
475 | 593 | onItemRemoved: { | 562 | }); |
476 | 594 | contactList.array.splice(index, 1) | 563 | } |
477 | 595 | contactModel.remove(index) | 564 | } |
478 | 596 | } | 565 | |
479 | 597 | } | 566 | UbuntuShape { |
480 | 598 | } | 567 | anchors { |
481 | 599 | } | 568 | left: parent.left |
482 | 569 | right: parent.right | ||
483 | 570 | margins: units.gu(2) | ||
484 | 571 | } | ||
485 | 572 | |||
486 | 573 | height: contactList.height | ||
487 | 574 | |||
488 | 575 | Column{ | ||
489 | 576 | id: contactList | ||
490 | 577 | objectName: "guestList" | ||
491 | 578 | |||
492 | 579 | spacing: units.gu(1) | ||
493 | 580 | width: parent.width | ||
494 | 581 | clip: true | ||
495 | 582 | |||
496 | 583 | property var array: [] | ||
497 | 584 | |||
498 | 585 | ListModel{ | ||
499 | 586 | id: contactModel | ||
500 | 587 | } | ||
501 | 588 | |||
502 | 589 | Repeater{ | ||
503 | 590 | model: contactModel | ||
504 | 591 | delegate: ListItem.Standard { | ||
505 | 592 | objectName: "eventGuest%1".arg(index) | ||
506 | 593 | height: units.gu(4) | ||
507 | 594 | text: name | ||
508 | 595 | removable: true | ||
509 | 596 | onItemRemoved: { | ||
510 | 597 | contactList.array.splice(index, 1) | ||
511 | 598 | contactModel.remove(index) | ||
512 | 599 | } | ||
513 | 600 | } | ||
514 | 601 | } | ||
515 | 602 | } | ||
516 | 603 | } | ||
517 | 604 | |||
518 | 605 | ListItem.ThinDivider { | ||
519 | 606 | visible: event.itemType === Type.Event | ||
520 | 607 | } | ||
521 | 608 | |||
522 | 609 | } | ||
523 | 610 | |||
524 | 611 | ListItem.Subtitled{ | ||
525 | 612 | id:thisHappens | ||
526 | 613 | objectName :"thisHappens" | ||
527 | 614 | |||
528 | 615 | anchors { | ||
529 | 616 | left: parent.left | ||
530 | 617 | } | ||
531 | 618 | |||
532 | 619 | showDivider: false | ||
533 | 620 | progression: true | ||
534 | 621 | visible: event.itemType === Type.Event | ||
535 | 622 | text: i18n.tr("Repeats") | ||
536 | 623 | subText: event.itemType === Type.Event ? rule === null ? Defines.recurrenceLabel[0] : eventUtils.getRecurrenceString(rule) : "" | ||
537 | 624 | onClicked: pageStack.push(Qt.resolvedUrl("EventRepetition.qml"),{"eventRoot": root,"isEdit":isEdit}); | ||
538 | 600 | } | 625 | } |
539 | 601 | 626 | ||
540 | 602 | ListItem.ThinDivider { | 627 | ListItem.ThinDivider { |
541 | 603 | visible: event.itemType === Type.Event | 628 | visible: event.itemType === Type.Event |
542 | 604 | } | 629 | } |
543 | 605 | 630 | ||
584 | 606 | } | 631 | ListItem.Subtitled{ |
585 | 607 | 632 | id:eventReminder | |
586 | 608 | ListItem.Subtitled{ | 633 | objectName : "eventReminder" |
587 | 609 | id:thisHappens | 634 | |
588 | 610 | objectName :"thisHappens" | 635 | anchors.left:parent.left |
589 | 611 | 636 | showDivider: false | |
590 | 612 | anchors { | 637 | progression: true |
591 | 613 | left: parent.left | 638 | text: i18n.tr("Reminder") |
592 | 614 | } | 639 | |
593 | 615 | 640 | RemindersModel { | |
594 | 616 | showDivider: false | 641 | id: reminderModel |
595 | 617 | progression: true | 642 | } |
596 | 618 | visible: event.itemType === Type.Event | 643 | |
597 | 619 | text: i18n.tr("Repeats") | 644 | subText:{ |
598 | 620 | subText: event.itemType === Type.Event ? rule === null ? Defines.recurrenceLabel[0] : eventUtils.getRecurrenceString(rule) : "" | 645 | if(visualReminder.secondsBeforeStart !== -1) { |
599 | 621 | onClicked: pageStack.push(Qt.resolvedUrl("EventRepetition.qml"),{"eventRoot": root,"isEdit":isEdit}); | 646 | for( var i=0; i<reminderModel.count; i++ ) { |
600 | 622 | } | 647 | if(visualReminder.secondsBeforeStart === reminderModel.get(i).value) { |
601 | 623 | 648 | return reminderModel.get(i).label | |
602 | 624 | ListItem.ThinDivider { | 649 | } |
563 | 625 | visible: event.itemType === Type.Event | ||
564 | 626 | } | ||
565 | 627 | |||
566 | 628 | ListItem.Subtitled{ | ||
567 | 629 | id:eventReminder | ||
568 | 630 | objectName : "eventReminder" | ||
569 | 631 | |||
570 | 632 | anchors.left:parent.left | ||
571 | 633 | showDivider: false | ||
572 | 634 | progression: true | ||
573 | 635 | text: i18n.tr("Reminder") | ||
574 | 636 | |||
575 | 637 | RemindersModel { | ||
576 | 638 | id: reminderModel | ||
577 | 639 | } | ||
578 | 640 | |||
579 | 641 | subText:{ | ||
580 | 642 | if(visualReminder.secondsBeforeStart !== -1) { | ||
581 | 643 | for( var i=0; i<reminderModel.count; i++ ) { | ||
582 | 644 | if(visualReminder.secondsBeforeStart === reminderModel.get(i).value) { | ||
583 | 645 | return reminderModel.get(i).label | ||
603 | 646 | } | 650 | } |
604 | 651 | } else { | ||
605 | 652 | return reminderModel.get(0).label | ||
606 | 647 | } | 653 | } |
609 | 648 | } else { | 654 | |
608 | 649 | return reminderModel.get(0).label | ||
610 | 650 | } | 655 | } |
611 | 651 | 656 | ||
612 | 657 | onClicked: pageStack.push(Qt.resolvedUrl("EventReminder.qml"), | ||
613 | 658 | {"visualReminder": visualReminder, | ||
614 | 659 | "audibleReminder": audibleReminder, | ||
615 | 660 | "reminderModel": reminderModel, | ||
616 | 661 | "eventTitle": titleEdit.text}) | ||
617 | 652 | } | 662 | } |
618 | 653 | 663 | ||
624 | 654 | onClicked: pageStack.push(Qt.resolvedUrl("EventReminder.qml"), | 664 | ListItem.ThinDivider {} |
620 | 655 | {"visualReminder": visualReminder, | ||
621 | 656 | "audibleReminder": audibleReminder, | ||
622 | 657 | "reminderModel": reminderModel, | ||
623 | 658 | "eventTitle": titleEdit.text}) | ||
625 | 659 | } | 665 | } |
626 | 660 | |||
627 | 661 | ListItem.ThinDivider {} | ||
628 | 662 | } | 666 | } |
629 | 663 | } | 667 | } |
630 | 664 | // used to keep the field visible when the keyboard appear or dismiss | 668 | // used to keep the field visible when the keyboard appear or dismiss |
631 | 665 | 669 | ||
632 | === modified file 'TimeLineBaseComponent.qml' | |||
633 | --- TimeLineBaseComponent.qml 2016-01-29 14:35:14 +0000 | |||
634 | +++ TimeLineBaseComponent.qml 2016-02-04 10:08:25 +0000 | |||
635 | @@ -111,11 +111,11 @@ | |||
636 | 111 | } | 111 | } |
637 | 112 | 112 | ||
638 | 113 | Timer{ | 113 | Timer{ |
644 | 114 | interval: 200; running: true; repeat: false | 114 | interval: 200; running: true; repeat: false |
645 | 115 | onTriggered: { | 115 | onTriggered: { |
646 | 116 | mainModel = modelComponent.createObject(); | 116 | mainModel = modelComponent.createObject(); |
647 | 117 | activityLoader.running = Qt.binding( function (){ return mainModel.isLoading;}); | 117 | activityLoader.running = Qt.binding( function (){ return mainModel.isLoading;}); |
648 | 118 | } | 118 | } |
649 | 119 | } | 119 | } |
650 | 120 | 120 | ||
651 | 121 | Component { | 121 | Component { |
652 | @@ -171,139 +171,140 @@ | |||
653 | 171 | width: units.gu(0.1) | 171 | width: units.gu(0.1) |
654 | 172 | height: parent.height | 172 | height: parent.height |
655 | 173 | } | 173 | } |
661 | 174 | 174 | ScrollView { | |
657 | 175 | Flickable { | ||
658 | 176 | id: timeLineView | ||
659 | 177 | objectName: "timelineview" | ||
660 | 178 | |||
662 | 179 | height: parent.height | 175 | height: parent.height |
663 | 180 | width: parent.width - units.gu(6) | 176 | width: parent.width - units.gu(6) |
664 | 181 | 177 | ||
695 | 182 | boundsBehavior: Flickable.StopAtBounds | 178 | Flickable { |
696 | 183 | 179 | id: timeLineView | |
697 | 184 | property int delegateWidth: { | 180 | objectName: "timelineview" |
668 | 185 | if( type == ViewType.ViewTypeWeek ) { | ||
669 | 186 | width/3 - units.gu(1) /*partial visible area*/ | ||
670 | 187 | } else { | ||
671 | 188 | width | ||
672 | 189 | } | ||
673 | 190 | } | ||
674 | 191 | |||
675 | 192 | contentHeight: units.gu(8) * 24 | ||
676 | 193 | contentWidth: { | ||
677 | 194 | if( type == ViewType.ViewTypeWeek ) { | ||
678 | 195 | delegateWidth*7 | ||
679 | 196 | } else { | ||
680 | 197 | width | ||
681 | 198 | } | ||
682 | 199 | } | ||
683 | 200 | |||
684 | 201 | onContentWidthChanged: { | ||
685 | 202 | scrollToCurrentTime(); | ||
686 | 203 | scrollTocurrentDate(); | ||
687 | 204 | } | ||
688 | 205 | |||
689 | 206 | clip: true | ||
690 | 207 | |||
691 | 208 | TimeLineBackground{} | ||
692 | 209 | |||
693 | 210 | Row { | ||
694 | 211 | id: week | ||
698 | 212 | anchors.fill: parent | 181 | anchors.fill: parent |
777 | 213 | Repeater { | 182 | boundsBehavior: Flickable.StopAtBounds |
778 | 214 | model: type == ViewType.ViewTypeWeek ? 7 : 1 | 183 | |
779 | 215 | 184 | property int delegateWidth: { | |
780 | 216 | delegate: TimeLineBase { | 185 | if( type == ViewType.ViewTypeWeek ) { |
781 | 217 | property int idx: index | 186 | width/3 - units.gu(1) /*partial visible area*/ |
782 | 218 | anchors.top: parent.top | 187 | } else { |
783 | 219 | width: { | 188 | width |
784 | 220 | if( type == ViewType.ViewTypeWeek ) { | 189 | } |
785 | 221 | parent.width / 7 | 190 | } |
786 | 222 | } else { | 191 | |
787 | 223 | (parent.width) | 192 | contentHeight: units.gu(8) * 24 |
788 | 224 | } | 193 | contentWidth: { |
789 | 225 | } | 194 | if( type == ViewType.ViewTypeWeek ) { |
790 | 226 | height: parent.height | 195 | delegateWidth*7 |
791 | 227 | delegate: comp | 196 | } else { |
792 | 228 | day: startDay.addDays(index) | 197 | width |
793 | 229 | model: mainModel | 198 | } |
794 | 230 | 199 | } | |
795 | 231 | Connections{ | 200 | |
796 | 232 | target: mainModel | 201 | onContentWidthChanged: { |
797 | 233 | 202 | scrollToCurrentTime(); | |
798 | 234 | onModelChanged: { | 203 | scrollTocurrentDate(); |
799 | 235 | createEvents(); | 204 | } |
800 | 236 | } | 205 | |
801 | 237 | } | 206 | clip: true |
802 | 238 | 207 | ||
803 | 239 | DropArea { | 208 | TimeLineBackground{} |
804 | 240 | id: dropArea | 209 | |
805 | 241 | objectName: "mouseArea" | 210 | Row { |
806 | 242 | anchors.fill: parent | 211 | id: week |
807 | 243 | 212 | anchors.fill: parent | |
808 | 244 | function modifyEventForDrag(drag) { | 213 | Repeater { |
809 | 245 | var event = drag.source.event; | 214 | model: type == ViewType.ViewTypeWeek ? 7 : 1 |
810 | 246 | var diff = event.endDateTime.getTime() - event.startDateTime.getTime(); | 215 | |
811 | 247 | 216 | delegate: TimeLineBase { | |
812 | 248 | var startDate = getTimeFromYPos(drag.y, day); | 217 | property int idx: index |
813 | 249 | var endDate = new Date( startDate.getTime() + diff ); | 218 | anchors.top: parent.top |
814 | 250 | 219 | width: { | |
815 | 251 | event.startDateTime = startDate; | 220 | if( type == ViewType.ViewTypeWeek ) { |
816 | 252 | event.endDateTime = endDate; | 221 | parent.width / 7 |
817 | 253 | 222 | } else { | |
818 | 254 | return event; | 223 | (parent.width) |
819 | 255 | } | 224 | } |
820 | 256 | 225 | } | |
743 | 257 | onDropped: { | ||
744 | 258 | var event = dropArea.modifyEventForDrag(drop); | ||
745 | 259 | model.saveItem(event); | ||
746 | 260 | } | ||
747 | 261 | |||
748 | 262 | onPositionChanged: { | ||
749 | 263 | dropArea.modifyEventForDrag(drag) | ||
750 | 264 | var eventBubble = drag.source; | ||
751 | 265 | eventBubble.assingnBgColor(); | ||
752 | 266 | eventBubble.setDetails(); | ||
753 | 267 | |||
754 | 268 | if( eventBubble.y + eventBubble.height + units.gu(8) > timeLineView.contentY + timeLineView.height ) { | ||
755 | 269 | var diff = Math.abs((eventBubble.y + eventBubble.height + units.gu(8)) - | ||
756 | 270 | (timeLineView.height + timeLineView.contentY)); | ||
757 | 271 | timeLineView.contentY += diff | ||
758 | 272 | |||
759 | 273 | if(timeLineView.contentY >= timeLineView.contentHeight - timeLineView.height) { | ||
760 | 274 | timeLineView.contentY = timeLineView.contentHeight - timeLineView.height | ||
761 | 275 | } | ||
762 | 276 | } | ||
763 | 277 | |||
764 | 278 | if(eventBubble.y - units.gu(8) < timeLineView.contentY ) { | ||
765 | 279 | var diff = Math.abs((eventBubble.y - units.gu(8)) - timeLineView.contentY); | ||
766 | 280 | timeLineView.contentY -= diff | ||
767 | 281 | |||
768 | 282 | if(timeLineView.contentY <= 0) { | ||
769 | 283 | timeLineView.contentY = 0; | ||
770 | 284 | } | ||
771 | 285 | } | ||
772 | 286 | } | ||
773 | 287 | } | ||
774 | 288 | |||
775 | 289 | Loader{ | ||
776 | 290 | objectName: "weekdevider" | ||
821 | 291 | height: parent.height | 226 | height: parent.height |
829 | 292 | width: units.gu(0.15) | 227 | delegate: comp |
830 | 293 | sourceComponent: type == ViewType.ViewTypeWeek ? weekDividerComponent : undefined | 228 | day: startDay.addDays(index) |
831 | 294 | } | 229 | model: mainModel |
832 | 295 | 230 | ||
833 | 296 | Component { | 231 | Connections{ |
834 | 297 | id: weekDividerComponent | 232 | target: mainModel |
835 | 298 | SimpleDivider{ | 233 | |
836 | 234 | onModelChanged: { | ||
837 | 235 | createEvents(); | ||
838 | 236 | } | ||
839 | 237 | } | ||
840 | 238 | |||
841 | 239 | DropArea { | ||
842 | 240 | id: dropArea | ||
843 | 241 | objectName: "mouseArea" | ||
844 | 299 | anchors.fill: parent | 242 | anchors.fill: parent |
852 | 300 | } | 243 | |
853 | 301 | } | 244 | function modifyEventForDrag(drag) { |
854 | 302 | 245 | var event = drag.source.event; | |
855 | 303 | Connections{ | 246 | var diff = event.endDateTime.getTime() - event.startDateTime.getTime(); |
856 | 304 | target: mainModel | 247 | |
857 | 305 | onStartPeriodChanged:{ | 248 | var startDate = getTimeFromYPos(drag.y, day); |
858 | 306 | destroyAllChildren(); | 249 | var endDate = new Date( startDate.getTime() + diff ); |
859 | 250 | |||
860 | 251 | event.startDateTime = startDate; | ||
861 | 252 | event.endDateTime = endDate; | ||
862 | 253 | |||
863 | 254 | return event; | ||
864 | 255 | } | ||
865 | 256 | |||
866 | 257 | onDropped: { | ||
867 | 258 | var event = dropArea.modifyEventForDrag(drop); | ||
868 | 259 | model.saveItem(event); | ||
869 | 260 | } | ||
870 | 261 | |||
871 | 262 | onPositionChanged: { | ||
872 | 263 | dropArea.modifyEventForDrag(drag) | ||
873 | 264 | var eventBubble = drag.source; | ||
874 | 265 | eventBubble.assingnBgColor(); | ||
875 | 266 | eventBubble.setDetails(); | ||
876 | 267 | |||
877 | 268 | if( eventBubble.y + eventBubble.height + units.gu(8) > timeLineView.contentY + timeLineView.height ) { | ||
878 | 269 | var diff = Math.abs((eventBubble.y + eventBubble.height + units.gu(8)) - | ||
879 | 270 | (timeLineView.height + timeLineView.contentY)); | ||
880 | 271 | timeLineView.contentY += diff | ||
881 | 272 | |||
882 | 273 | if(timeLineView.contentY >= timeLineView.contentHeight - timeLineView.height) { | ||
883 | 274 | timeLineView.contentY = timeLineView.contentHeight - timeLineView.height | ||
884 | 275 | } | ||
885 | 276 | } | ||
886 | 277 | |||
887 | 278 | if(eventBubble.y - units.gu(8) < timeLineView.contentY ) { | ||
888 | 279 | var diff = Math.abs((eventBubble.y - units.gu(8)) - timeLineView.contentY); | ||
889 | 280 | timeLineView.contentY -= diff | ||
890 | 281 | |||
891 | 282 | if(timeLineView.contentY <= 0) { | ||
892 | 283 | timeLineView.contentY = 0; | ||
893 | 284 | } | ||
894 | 285 | } | ||
895 | 286 | } | ||
896 | 287 | } | ||
897 | 288 | |||
898 | 289 | Loader{ | ||
899 | 290 | objectName: "weekdevider" | ||
900 | 291 | height: parent.height | ||
901 | 292 | width: units.gu(0.15) | ||
902 | 293 | sourceComponent: type == ViewType.ViewTypeWeek ? weekDividerComponent : undefined | ||
903 | 294 | } | ||
904 | 295 | |||
905 | 296 | Component { | ||
906 | 297 | id: weekDividerComponent | ||
907 | 298 | SimpleDivider{ | ||
908 | 299 | anchors.fill: parent | ||
909 | 300 | } | ||
910 | 301 | } | ||
911 | 302 | |||
912 | 303 | Connections{ | ||
913 | 304 | target: mainModel | ||
914 | 305 | onStartPeriodChanged:{ | ||
915 | 306 | destroyAllChildren(); | ||
916 | 307 | } | ||
917 | 307 | } | 308 | } |
918 | 308 | } | 309 | } |
919 | 309 | } | 310 | } |
920 | 310 | 311 | ||
921 | === modified file 'YearView.qml' | |||
922 | --- YearView.qml 2016-02-03 08:06:25 +0000 | |||
923 | +++ YearView.qml 2016-02-04 10:08:25 +0000 | |||
924 | @@ -89,15 +89,27 @@ | |||
925 | 89 | 89 | ||
926 | 90 | Component{ | 90 | Component{ |
927 | 91 | id: delegateComponent | 91 | id: delegateComponent |
936 | 92 | 92 | ScrollView { | |
937 | 93 | YearViewDelegate{ | 93 | id: scrollView |
930 | 94 | focus: index == yearPathView.currentIndex | ||
931 | 95 | |||
932 | 96 | scrollMonth: 0; | ||
933 | 97 | isCurrentItem: index == yearPathView.currentIndex | ||
934 | 98 | year: (currentYear + yearPathView.indexType(index)) | ||
935 | 99 | |||
938 | 100 | anchors.fill: parent | 94 | anchors.fill: parent |
939 | 95 | // This is just forwarding the function call on to the delegate | ||
940 | 96 | signal refresh() | ||
941 | 97 | |||
942 | 98 | YearViewDelegate{ | ||
943 | 99 | id: yrView | ||
944 | 100 | focus: index == yearPathView.currentIndex | ||
945 | 101 | |||
946 | 102 | scrollMonth: 0; | ||
947 | 103 | isCurrentItem: index == yearPathView.currentIndex | ||
948 | 104 | year: (currentYear + yearPathView.indexType(index)) | ||
949 | 105 | |||
950 | 106 | anchors.fill: parent | ||
951 | 107 | |||
952 | 108 | Connections { | ||
953 | 109 | target: scrollView | ||
954 | 110 | onRefresh: yrView.refresh() | ||
955 | 111 | } | ||
956 | 112 | } | ||
957 | 101 | } | 113 | } |
958 | 102 | } | 114 | } |
959 | 103 | } | 115 | } |
960 | 104 | 116 | ||
961 | === modified file 'po/com.ubuntu.calendar.pot' | |||
962 | --- po/com.ubuntu.calendar.pot 2016-02-03 14:55:42 +0000 | |||
963 | +++ po/com.ubuntu.calendar.pot 2016-02-04 10:08:25 +0000 | |||
964 | @@ -1,6 +1,6 @@ | |||
965 | 1 | # SOME DESCRIPTIVE TITLE. | 1 | # SOME DESCRIPTIVE TITLE. |
966 | 2 | # Copyright (C) YEAR Canonical Ltd. | 2 | # Copyright (C) YEAR Canonical Ltd. |
968 | 3 | # This file is distributed under the same license as the PACKAGE package. | 3 | # This file is distributed under the same license as the package. |
969 | 4 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | 4 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
970 | 5 | # | 5 | # |
971 | 6 | #, fuzzy | 6 | #, fuzzy |
972 | @@ -8,7 +8,7 @@ | |||
973 | 8 | msgstr "" | 8 | msgstr "" |
974 | 9 | "Project-Id-Version: \n" | 9 | "Project-Id-Version: \n" |
975 | 10 | "Report-Msgid-Bugs-To: \n" | 10 | "Report-Msgid-Bugs-To: \n" |
977 | 11 | "POT-Creation-Date: 2016-01-11 21:36+0800\n" | 11 | "POT-Creation-Date: 2016-02-04 10:03+0000\n" |
978 | 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
979 | 13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | 13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
980 | 14 | "Language-Team: LANGUAGE <LL@li.org>\n" | 14 | "Language-Team: LANGUAGE <LL@li.org>\n" |
981 | @@ -18,30 +18,39 @@ | |||
982 | 18 | "Content-Transfer-Encoding: 8bit\n" | 18 | "Content-Transfer-Encoding: 8bit\n" |
983 | 19 | "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" | 19 | "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" |
984 | 20 | 20 | ||
987 | 21 | #: ../AgendaView.qml:51 ../DayView.qml:40 ../MonthView.qml:39 | 21 | #: ../AgendaView.qml:52 ../DayView.qml:41 ../MonthView.qml:40 |
988 | 22 | #: ../WeekView.qml:44 ../YearView.qml:36 | 22 | #: ../WeekView.qml:45 ../YearView.qml:43 |
989 | 23 | msgid "Today" | 23 | msgid "Today" |
990 | 24 | msgstr "" | 24 | msgstr "" |
991 | 25 | 25 | ||
993 | 26 | #: ../AgendaView.qml:92 | 26 | #: ../AgendaView.qml:62 ../calendar.qml:291 ../calendar.qml:512 |
994 | 27 | msgid "Agenda" | ||
995 | 28 | msgstr "" | ||
996 | 29 | |||
997 | 30 | #: ../AgendaView.qml:101 | ||
998 | 27 | msgid "No upcoming events" | 31 | msgid "No upcoming events" |
999 | 28 | msgstr "" | 32 | msgstr "" |
1000 | 29 | 33 | ||
1002 | 30 | #: ../AgendaView.qml:95 | 34 | #: ../AgendaView.qml:104 |
1003 | 31 | msgid "You have no calendars enabled" | 35 | msgid "You have no calendars enabled" |
1004 | 32 | msgstr "" | 36 | msgstr "" |
1005 | 33 | 37 | ||
1007 | 34 | #: ../AgendaView.qml:105 | 38 | #: ../AgendaView.qml:114 |
1008 | 35 | msgid "Enable calendars" | 39 | msgid "Enable calendars" |
1009 | 36 | msgstr "" | 40 | msgstr "" |
1010 | 37 | 41 | ||
1011 | 38 | #. TRANSLATORS: the first argument (%1) refers to a start time for an event, | 42 | #. TRANSLATORS: the first argument (%1) refers to a start time for an event, |
1012 | 39 | #. while the second one (%2) refers to the end time | 43 | #. while the second one (%2) refers to the end time |
1014 | 40 | #: ../AgendaView.qml:168 ../EventBubble.qml:133 | 44 | #: ../AgendaView.qml:177 ../EventBubble.qml:133 |
1015 | 41 | #, qt-format | 45 | #, qt-format |
1016 | 42 | msgid "%1 - %2" | 46 | msgid "%1 - %2" |
1017 | 43 | msgstr "" | 47 | msgstr "" |
1018 | 44 | 48 | ||
1019 | 49 | #: ../AgendaView.qml:183 | ||
1020 | 50 | #, qt-format | ||
1021 | 51 | msgid "%1 %2 %3 %4 %5" | ||
1022 | 52 | msgstr "" | ||
1023 | 53 | |||
1024 | 45 | #. TRANSLATORS: the first parameter refers to the number of all-day events | 54 | #. TRANSLATORS: the first parameter refers to the number of all-day events |
1025 | 46 | #. on a given day. "Ev." is short form for "Events". | 55 | #. on a given day. "Ev." is short form for "Events". |
1026 | 47 | #. Please keep the translation of "Ev." to 3 characters only, as the week view | 56 | #. Please keep the translation of "Ev." to 3 characters only, as the week view |
1027 | @@ -59,21 +68,21 @@ | |||
1028 | 59 | msgstr[0] "" | 68 | msgstr[0] "" |
1029 | 60 | msgstr[1] "" | 69 | msgstr[1] "" |
1030 | 61 | 70 | ||
1032 | 62 | #: ../CalendarChoicePopup.qml:33 ../EventActions.qml:60 | 71 | #: ../CalendarChoicePopup.qml:33 ../EventActions.qml:63 |
1033 | 63 | msgid "Calendars" | 72 | msgid "Calendars" |
1034 | 64 | msgstr "" | 73 | msgstr "" |
1035 | 65 | 74 | ||
1037 | 66 | #: ../CalendarChoicePopup.qml:37 | 75 | #: ../CalendarChoicePopup.qml:37 ../Settings.qml:32 |
1038 | 67 | msgid "Back" | 76 | msgid "Back" |
1039 | 68 | msgstr "" | 77 | msgstr "" |
1040 | 69 | 78 | ||
1041 | 70 | #. TRANSLATORS: Please translate this string to 15 characters only. | 79 | #. TRANSLATORS: Please translate this string to 15 characters only. |
1042 | 71 | #. Currently ,there is no way we can increase width of action menu currently. | 80 | #. Currently ,there is no way we can increase width of action menu currently. |
1044 | 72 | #: ../CalendarChoicePopup.qml:51 ../EventActions.qml:36 | 81 | #: ../CalendarChoicePopup.qml:51 ../EventActions.qml:37 |
1045 | 73 | msgid "Sync" | 82 | msgid "Sync" |
1046 | 74 | msgstr "" | 83 | msgstr "" |
1047 | 75 | 84 | ||
1049 | 76 | #: ../CalendarChoicePopup.qml:51 ../EventActions.qml:36 | 85 | #: ../CalendarChoicePopup.qml:51 ../EventActions.qml:37 |
1050 | 77 | msgid "Syncing" | 86 | msgid "Syncing" |
1051 | 78 | msgstr "" | 87 | msgstr "" |
1052 | 79 | 88 | ||
1053 | @@ -101,10 +110,16 @@ | |||
1054 | 101 | #. TRANSLATORS: this is a time formatting string, | 110 | #. TRANSLATORS: this is a time formatting string, |
1055 | 102 | #. see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions. | 111 | #. see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions. |
1056 | 103 | #. It's used in the header of the month and week views | 112 | #. It's used in the header of the month and week views |
1058 | 104 | #: ../DayView.qml:59 ../MonthView.qml:60 ../WeekView.qml:63 | 113 | #: ../DayView.qml:64 ../DayView.qml:157 ../MonthView.qml:62 |
1059 | 114 | #: ../MonthView.qml:149 ../WeekView.qml:68 ../WeekView.qml:180 | ||
1060 | 105 | msgid "MMMM yyyy" | 115 | msgid "MMMM yyyy" |
1061 | 106 | msgstr "" | 116 | msgstr "" |
1062 | 107 | 117 | ||
1063 | 118 | #: ../DayView.qml:155 ../MonthView.qml:144 ../WeekView.qml:178 | ||
1064 | 119 | #, qt-format | ||
1065 | 120 | msgid "%1 %2" | ||
1066 | 121 | msgstr "" | ||
1067 | 122 | |||
1068 | 108 | #: ../DeleteConfirmationDialog.qml:31 | 123 | #: ../DeleteConfirmationDialog.qml:31 |
1069 | 109 | msgid "Delete Recurring Event" | 124 | msgid "Delete Recurring Event" |
1070 | 110 | msgstr "" | 125 | msgstr "" |
1071 | @@ -136,7 +151,7 @@ | |||
1072 | 136 | msgid "Delete" | 151 | msgid "Delete" |
1073 | 137 | msgstr "" | 152 | msgstr "" |
1074 | 138 | 153 | ||
1076 | 139 | #: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:324 | 154 | #: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:325 |
1077 | 140 | msgid "Edit Event" | 155 | msgid "Edit Event" |
1078 | 141 | msgstr "" | 156 | msgstr "" |
1079 | 142 | 157 | ||
1080 | @@ -154,10 +169,14 @@ | |||
1081 | 154 | msgid "Edit this" | 169 | msgid "Edit this" |
1082 | 155 | msgstr "" | 170 | msgstr "" |
1083 | 156 | 171 | ||
1085 | 157 | #: ../EventActions.qml:50 ../NewEvent.qml:324 | 172 | #: ../EventActions.qml:52 ../NewEvent.qml:325 |
1086 | 158 | msgid "New Event" | 173 | msgid "New Event" |
1087 | 159 | msgstr "" | 174 | msgstr "" |
1088 | 160 | 175 | ||
1089 | 176 | #: ../EventActions.qml:75 ../Settings.qml:30 | ||
1090 | 177 | msgid "Settings" | ||
1091 | 178 | msgstr "" | ||
1092 | 179 | |||
1093 | 161 | #. TRANSLATORS: the first argument (%1) refers to a time for an event, | 180 | #. TRANSLATORS: the first argument (%1) refers to a time for an event, |
1094 | 162 | #. while the second one (%2) refers to title of event | 181 | #. while the second one (%2) refers to title of event |
1095 | 163 | #: ../EventBubble.qml:144 ../EventBubble.qml:149 | 182 | #: ../EventBubble.qml:144 ../EventBubble.qml:149 |
1096 | @@ -165,35 +184,55 @@ | |||
1097 | 165 | msgid "%1 <b>%2</b>" | 184 | msgid "%1 <b>%2</b>" |
1098 | 166 | msgstr "" | 185 | msgstr "" |
1099 | 167 | 186 | ||
1101 | 168 | #: ../EventDetails.qml:43 ../NewEvent.qml:435 | 187 | #: ../EventDetails.qml:44 ../NewEvent.qml:439 |
1102 | 169 | msgid "Event Details" | 188 | msgid "Event Details" |
1103 | 170 | msgstr "" | 189 | msgstr "" |
1104 | 171 | 190 | ||
1105 | 172 | #. TRANSLATORS: the first parameter refers to the name of event calendar. | 191 | #. TRANSLATORS: the first parameter refers to the name of event calendar. |
1107 | 173 | #: ../EventDetails.qml:68 | 192 | #: ../EventDetails.qml:69 |
1108 | 174 | #, qt-format | 193 | #, qt-format |
1109 | 175 | msgid "%1 Calendar" | 194 | msgid "%1 Calendar" |
1110 | 176 | msgstr "" | 195 | msgstr "" |
1111 | 177 | 196 | ||
1113 | 178 | #: ../EventDetails.qml:129 | 197 | #: ../EventDetails.qml:143 |
1114 | 198 | #, qt-format | ||
1115 | 199 | msgid "%1 %2 %3 - %4 %5 %6 (All Day)" | ||
1116 | 200 | msgstr "" | ||
1117 | 201 | |||
1118 | 202 | #: ../EventDetails.qml:147 | ||
1119 | 179 | #, qt-format | 203 | #, qt-format |
1120 | 180 | msgid "%1 - %2 (All Day)" | 204 | msgid "%1 - %2 (All Day)" |
1121 | 181 | msgstr "" | 205 | msgstr "" |
1122 | 182 | 206 | ||
1124 | 183 | #: ../EventDetails.qml:133 | 207 | #: ../EventDetails.qml:153 |
1125 | 208 | #, qt-format | ||
1126 | 209 | msgid "%1 %2 %3 (All Day)" | ||
1127 | 210 | msgstr "" | ||
1128 | 211 | |||
1129 | 212 | #: ../EventDetails.qml:156 | ||
1130 | 184 | #, qt-format | 213 | #, qt-format |
1131 | 185 | msgid "%1 (All Day)" | 214 | msgid "%1 (All Day)" |
1132 | 186 | msgstr "" | 215 | msgstr "" |
1133 | 187 | 216 | ||
1135 | 188 | #: ../EventDetails.qml:203 | 217 | #: ../EventDetails.qml:162 |
1136 | 218 | #, qt-format | ||
1137 | 219 | msgid "%1 %2 %3, %4 - %5 %6 %7, %8" | ||
1138 | 220 | msgstr "" | ||
1139 | 221 | |||
1140 | 222 | #: ../EventDetails.qml:171 | ||
1141 | 223 | #, qt-format | ||
1142 | 224 | msgid "%1 %2 %3, %4 - %5" | ||
1143 | 225 | msgstr "" | ||
1144 | 226 | |||
1145 | 227 | #: ../EventDetails.qml:238 | ||
1146 | 189 | msgid "Edit" | 228 | msgid "Edit" |
1147 | 190 | msgstr "" | 229 | msgstr "" |
1148 | 191 | 230 | ||
1150 | 192 | #: ../EventDetails.qml:354 ../NewEvent.qml:537 | 231 | #: ../EventDetails.qml:389 ../NewEvent.qml:541 |
1151 | 193 | msgid "Guests" | 232 | msgid "Guests" |
1152 | 194 | msgstr "" | 233 | msgstr "" |
1153 | 195 | 234 | ||
1155 | 196 | #: ../EventDetails.qml:397 ../EventReminder.qml:35 ../NewEvent.qml:634 | 235 | #: ../EventDetails.qml:432 ../EventReminder.qml:35 ../NewEvent.qml:638 |
1156 | 197 | msgid "Reminder" | 236 | msgid "Reminder" |
1157 | 198 | msgstr "" | 237 | msgstr "" |
1158 | 199 | 238 | ||
1159 | @@ -216,7 +255,7 @@ | |||
1160 | 216 | #. TRANSLATORS: this refers to how often a recurrent event repeats | 255 | #. TRANSLATORS: this refers to how often a recurrent event repeats |
1161 | 217 | #. and it is shown as the header of the option selector to choose | 256 | #. and it is shown as the header of the option selector to choose |
1162 | 218 | #. its repetition | 257 | #. its repetition |
1164 | 219 | #: ../EventRepetition.qml:242 ../NewEvent.qml:618 | 258 | #: ../EventRepetition.qml:242 ../NewEvent.qml:622 |
1165 | 220 | msgid "Repeats" | 259 | msgid "Repeats" |
1166 | 221 | msgstr "" | 260 | msgstr "" |
1167 | 222 | 261 | ||
1168 | @@ -247,6 +286,11 @@ | |||
1169 | 247 | msgid "Weekly on %1" | 286 | msgid "Weekly on %1" |
1170 | 248 | msgstr "" | 287 | msgstr "" |
1171 | 249 | 288 | ||
1172 | 289 | #: ../HeaderDateComponent.qml:90 | ||
1173 | 290 | #, qt-format | ||
1174 | 291 | msgid "%1 %2 %3" | ||
1175 | 292 | msgstr "" | ||
1176 | 293 | |||
1177 | 250 | #: ../LimitLabelModel.qml:25 | 294 | #: ../LimitLabelModel.qml:25 |
1178 | 251 | msgid "Never" | 295 | msgid "Never" |
1179 | 252 | msgstr "" | 296 | msgstr "" |
1180 | @@ -259,6 +303,10 @@ | |||
1181 | 259 | msgid "After Date" | 303 | msgid "After Date" |
1182 | 260 | msgstr "" | 304 | msgstr "" |
1183 | 261 | 305 | ||
1184 | 306 | #: ../MonthComponent.qml:262 | ||
1185 | 307 | msgid "Wk" | ||
1186 | 308 | msgstr "" | ||
1187 | 309 | |||
1188 | 262 | #: ../NewEvent.qml:84 | 310 | #: ../NewEvent.qml:84 |
1189 | 263 | msgid "Save" | 311 | msgid "Save" |
1190 | 264 | msgstr "" | 312 | msgstr "" |
1191 | @@ -267,43 +315,43 @@ | |||
1192 | 267 | msgid "End time can't be before start time" | 315 | msgid "End time can't be before start time" |
1193 | 268 | msgstr "" | 316 | msgstr "" |
1194 | 269 | 317 | ||
1196 | 270 | #: ../NewEvent.qml:334 | 318 | #: ../NewEvent.qml:335 |
1197 | 271 | msgid "Error" | 319 | msgid "Error" |
1198 | 272 | msgstr "" | 320 | msgstr "" |
1199 | 273 | 321 | ||
1201 | 274 | #: ../NewEvent.qml:336 | 322 | #: ../NewEvent.qml:337 |
1202 | 275 | msgid "OK" | 323 | msgid "OK" |
1203 | 276 | msgstr "" | 324 | msgstr "" |
1204 | 277 | 325 | ||
1206 | 278 | #: ../NewEvent.qml:389 | 326 | #: ../NewEvent.qml:393 |
1207 | 279 | msgid "From" | 327 | msgid "From" |
1208 | 280 | msgstr "" | 328 | msgstr "" |
1209 | 281 | 329 | ||
1211 | 282 | #: ../NewEvent.qml:402 | 330 | #: ../NewEvent.qml:406 |
1212 | 283 | msgid "To" | 331 | msgid "To" |
1213 | 284 | msgstr "" | 332 | msgstr "" |
1214 | 285 | 333 | ||
1216 | 286 | #: ../NewEvent.qml:419 | 334 | #: ../NewEvent.qml:423 |
1217 | 287 | msgid "All day event" | 335 | msgid "All day event" |
1218 | 288 | msgstr "" | 336 | msgstr "" |
1219 | 289 | 337 | ||
1221 | 290 | #: ../NewEvent.qml:448 | 338 | #: ../NewEvent.qml:452 |
1222 | 291 | msgid "Event Name" | 339 | msgid "Event Name" |
1223 | 292 | msgstr "" | 340 | msgstr "" |
1224 | 293 | 341 | ||
1226 | 294 | #: ../NewEvent.qml:466 | 342 | #: ../NewEvent.qml:470 |
1227 | 295 | msgid "Description" | 343 | msgid "Description" |
1228 | 296 | msgstr "" | 344 | msgstr "" |
1229 | 297 | 345 | ||
1231 | 298 | #: ../NewEvent.qml:484 | 346 | #: ../NewEvent.qml:488 |
1232 | 299 | msgid "Location" | 347 | msgid "Location" |
1233 | 300 | msgstr "" | 348 | msgstr "" |
1234 | 301 | 349 | ||
1236 | 302 | #: ../NewEvent.qml:499 com.ubuntu.calendar_calendar.desktop.in.in.h:1 | 350 | #: ../NewEvent.qml:503 com.ubuntu.calendar_calendar.desktop.in.in.h:1 |
1237 | 303 | msgid "Calendar" | 351 | msgid "Calendar" |
1238 | 304 | msgstr "" | 352 | msgstr "" |
1239 | 305 | 353 | ||
1241 | 306 | #: ../NewEvent.qml:541 | 354 | #: ../NewEvent.qml:545 |
1242 | 307 | msgid "Add Guest" | 355 | msgid "Add Guest" |
1243 | 308 | msgstr "" | 356 | msgstr "" |
1244 | 309 | 357 | ||
1245 | @@ -390,52 +438,56 @@ | |||
1246 | 390 | msgid "2 weeks" | 438 | msgid "2 weeks" |
1247 | 391 | msgstr "" | 439 | msgstr "" |
1248 | 392 | 440 | ||
1249 | 441 | #: ../Settings.qml:60 | ||
1250 | 442 | msgid "Show week numbers" | ||
1251 | 443 | msgstr "" | ||
1252 | 444 | |||
1253 | 445 | #: ../Settings.qml:91 | ||
1254 | 446 | msgid "Show lunar calendar" | ||
1255 | 447 | msgstr "" | ||
1256 | 448 | |||
1257 | 393 | #: ../TimeLineBase.qml:73 | 449 | #: ../TimeLineBase.qml:73 |
1258 | 394 | msgid "Untitled" | 450 | msgid "Untitled" |
1259 | 395 | msgstr "" | 451 | msgstr "" |
1260 | 396 | 452 | ||
1261 | 397 | #. TRANSLATORS: W refers to Week, followed by the actual week number (%1) | 453 | #. TRANSLATORS: W refers to Week, followed by the actual week number (%1) |
1263 | 398 | #: ../TimeLineHeader.qml:54 | 454 | #: ../TimeLineHeader.qml:53 |
1264 | 399 | #, qt-format | 455 | #, qt-format |
1265 | 400 | msgid "W%1" | 456 | msgid "W%1" |
1266 | 401 | msgstr "" | 457 | msgstr "" |
1267 | 402 | 458 | ||
1269 | 403 | #: ../TimeLineHeader.qml:66 | 459 | #: ../TimeLineHeader.qml:65 |
1270 | 404 | msgid "All Day" | 460 | msgid "All Day" |
1271 | 405 | msgstr "" | 461 | msgstr "" |
1272 | 406 | 462 | ||
1274 | 407 | #: ../YearView.qml:54 | 463 | #: ../YearView.qml:61 ../YearView.qml:124 |
1275 | 408 | #, qt-format | 464 | #, qt-format |
1276 | 409 | msgid "Year %1" | 465 | msgid "Year %1" |
1277 | 410 | msgstr "" | 466 | msgstr "" |
1278 | 411 | 467 | ||
1280 | 412 | #: ../calendar.qml:45 | 468 | #: ../calendar.qml:46 |
1281 | 413 | msgid "" | 469 | msgid "" |
1282 | 414 | "Calendar app accept four arguments: --starttime, --endtime, --newevent and --" | 470 | "Calendar app accept four arguments: --starttime, --endtime, --newevent and --" |
1283 | 415 | "eventid. They will be managed by system. See the source for a full comment " | 471 | "eventid. They will be managed by system. See the source for a full comment " |
1284 | 416 | "about them" | 472 | "about them" |
1285 | 417 | msgstr "" | 473 | msgstr "" |
1286 | 418 | 474 | ||
1288 | 419 | #: ../calendar.qml:354 | 475 | #: ../calendar.qml:259 ../calendar.qml:428 |
1289 | 420 | msgid "Year" | 476 | msgid "Year" |
1290 | 421 | msgstr "" | 477 | msgstr "" |
1291 | 422 | 478 | ||
1293 | 423 | #: ../calendar.qml:388 | 479 | #: ../calendar.qml:267 ../calendar.qml:449 |
1294 | 424 | msgid "Month" | 480 | msgid "Month" |
1295 | 425 | msgstr "" | 481 | msgstr "" |
1296 | 426 | 482 | ||
1298 | 427 | #: ../calendar.qml:421 | 483 | #: ../calendar.qml:275 ../calendar.qml:470 |
1299 | 428 | msgid "Week" | 484 | msgid "Week" |
1300 | 429 | msgstr "" | 485 | msgstr "" |
1301 | 430 | 486 | ||
1303 | 431 | #: ../calendar.qml:459 | 487 | #: ../calendar.qml:283 ../calendar.qml:491 |
1304 | 432 | msgid "Day" | 488 | msgid "Day" |
1305 | 433 | msgstr "" | 489 | msgstr "" |
1306 | 434 | 490 | ||
1307 | 435 | #: ../calendar.qml:491 | ||
1308 | 436 | msgid "Agenda" | ||
1309 | 437 | msgstr "" | ||
1310 | 438 | |||
1311 | 439 | #: com.ubuntu.calendar_calendar.desktop.in.in.h:2 | 491 | #: com.ubuntu.calendar_calendar.desktop.in.in.h:2 |
1312 | 440 | msgid "A calendar for Ubuntu which syncs with online accounts." | 492 | msgid "A calendar for Ubuntu which syncs with online accounts." |
1313 | 441 | msgstr "" | 493 | msgstr "" |
FAILED: Continuous integration, rev:758 /core-apps- jenkins. ubuntu. com/job/ run-ap- tests-ci/ 998/ /core-apps- jenkins. ubuntu. com/job/ generic- update- mp/548/ console
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild: /core-apps- jenkins. ubuntu. com/job/ run-ap- tests-ci/ 998/rebuild
https:/