1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
import QtQuick 2.0
import Ubuntu.Components 0.1
import "dateExt.js" as DateExt
Item {
id: bubbleOverLay
property var delegate;
property var day;
property int hourHeight: units.gu(10)
property var model;
MouseArea {
anchors.fill: parent
objectName: "mouseArea"
onPressAndHold: {
var selectedDate = new Date(day);
var hour = parseInt(mouseY / hourHeight);
selectedDate.setHours(hour)
pageStack.push(Qt.resolvedUrl("NewEvent.qml"), {"date":selectedDate, "model":eventModel});
}
}
TimeSeparator {
id: separator
objectName: "separator"
width: bubbleOverLay.width
visible: false
z:1
}
QtObject {
id: intern
property var now : new Date();
property var eventMap;
}
function showEventDetails(event) {
pageStack.push(Qt.resolvedUrl("EventDetails.qml"), {"event":event,"model":model});
}
WorkerScript {
id: eventLayoutHelper
source: "EventLayoutHelper.js"
onMessage: {
layoutEvents(messageObject.schedules,messageObject.maxDepth);
}
}
function layoutEvents(array, depth) {
var width = bubbleOverLay.width;
var offset = width/(depth+1);
for(var i=0; i < array.length ; ++i) {
var schedule = array[i];
var x = (schedule.depth) * offset
var w = width - x;
var event = intern.eventMap[schedule.id];
bubbleOverLay.createEvent(event , x, w);
}
}
function createEvents() {
if(!bubbleOverLay || bubbleOverLay == undefined) {
return;
}
destroyAllChildren();
var eventMap = {};
var allSchs = [];
var startDate = new Date(day).midnight();
var endDate = new Date(day).endOfDay();
var items = model.getItems(startDate,endDate);
for(var i = 0; i < items.length; ++i) {
var event = items[i];
if(event.allDay) {
continue;
}
var schedule = {"startDateTime": event.startDateTime, "endDateTime": event.endDateTime,"id":event.itemId };
allSchs.push(schedule);
eventMap[event.itemId] = event;
}
intern.eventMap = eventMap;
eventLayoutHelper.sendMessage(allSchs);
if( intern.now.isSameDay( bubbleOverLay.day ) ) {
bubbleOverLay.showSeparator(intern.now.getHours());
}
}
function destroyAllChildren() {
for( var i = children.length - 1; i >= 0; --i ) {
if( children[i].objectName === "mouseArea" ) {
continue;
}
children[i].visible = false;
if( children[i].objectName !== "separator") {
children[i].destroy();
}
}
}
function createEvent( event, x, width ) {
var hour = event.startDateTime.getHours();
var eventBubble = delegate.createObject(bubbleOverLay);
var yPos = (( event.startDateTime.getMinutes() * hourHeight) / 60) + hour * hourHeight
eventBubble.y = yPos;
var durationMin = (event.endDateTime.getHours() - event.startDateTime.getHours()) * 60;
durationMin += (event.endDateTime.getMinutes() - event.startDateTime.getMinutes());
var height = (durationMin * hourHeight )/ 60;
eventBubble.height = (height > eventBubble.minimumHeight) ? height:eventBubble.minimumHeight ;
eventBubble.x = x;
eventBubble.width = width;
eventBubble.event = event
eventBubble.clicked.connect( bubbleOverLay.showEventDetails );
}
function showSeparator(hour) {
var y = ((intern.now.getMinutes() * hourHeight) / 60) + hour * hourHeight;
separator.y = y;
separator.visible = true;
}
}
|