~renatofilho/ubuntu-calendar-app/optimize

« back to all changes in this revision

Viewing changes to TimeLineBase.qml

  • Committer: Renato Araujo Oliveira Filho
  • Date: 2016-02-29 13:35:03 UTC
  • Revision ID: renato.filho@canonical.com-20160229133503-e32ztw19v9wkvlc5
Use async function to calculate event layout.

Show diffs side-by-side

added added

removed removed

Lines of Context:
73
73
        }
74
74
    }
75
75
 
76
 
//    WorkerScript {
77
 
//        id: eventLayoutHelper
78
 
 
79
 
//        source: "EventLayoutHelper.js"
80
 
//        onMessage: {
81
 
//            // check if anything changed during the process
82
 
//            if (intern.dirty) {
83
 
//                console.debug("Something has changed while work script was running, ignore message")
84
 
//            } else {
85
 
//                // nothing changed we can draw the events now
86
 
//                layoutEvents(messageObject.schedules, messageObject.maxDepth);
87
 
//            }
88
 
 
89
 
//            if (!messageObject.hasMore) {
90
 
//                var currentDate = new Date()
91
 
//                intern.busy = false
92
 
//                if (intern.dirty) {
93
 
//                    idleCreateEvents()
94
 
//                }
95
 
//            }
96
 
//        }
97
 
//    }
98
 
 
99
 
    function drawEvents() {
100
 
        destroyAllChildren();
101
 
 
102
 
        var eventMap = CanlendarCanvas.dayEventsMap(model, day)
103
 
        for (var i=0; i < eventMap.length; i++) {
104
 
            createVisual(eventMap[i])
 
76
    WorkerScript {
 
77
        id: eventLayoutHelper
 
78
 
 
79
        source: "calendar_canvas_worker.js"
 
80
        onMessage: {
 
81
            // check if anything changed during the process
 
82
            if (intern.dirty) {
 
83
                console.debug("Something has changed while work script was running, ignore message")
 
84
            } else {
 
85
                var events = messageObject.reply
 
86
                for (var i=0; i < events.length; i++) {
 
87
                    createVisual(events[i])
 
88
                }
 
89
            }
 
90
            intern.busy = false
 
91
            intern.eventsById = []
 
92
            if (intern.dirty) {
 
93
                idleCreateEvents()
 
94
            }
105
95
        }
106
96
    }
107
97
 
120
110
 
121
111
        eventBubble.sizeOfRow = eventInfo.width
122
112
        eventBubble.depthInRow = eventInfo.y
123
 
 
124
 
        //eventBubble.x = (eventWidth * eventInfo.y)
125
 
        //eventBubble.width = eventWidth
126
 
 
127
113
        eventBubble.y = eventInfo.startTime * bubbleOverLay.minuteHeight
128
114
        eventBubble.z = eventInfo.y
129
 
 
130
115
        eventBubble.height = (eventInfo.endTime - eventInfo.startTime) * bubbleOverLay.minuteHeight
131
116
        eventBubble.model = bubbleOverLay.model
132
 
        eventBubble.event = eventInfo.event
 
117
        eventBubble.event = intern.eventsById[eventInfo.eventId]
133
118
        eventBubble.visible = true
134
119
        eventBubble.clicked.connect( bubbleOverLay.showEventDetails );
135
 
 
136
120
    }
137
121
 
138
122
     function idleCreateEvents() {
156
140
        intern.busy = true
157
141
        intern.dirty = false
158
142
        destroyAllChildren();
 
143
        intern.eventsById = []
159
144
 
160
 
        var eventMap = CanlendarCanvas.dayEventsMap(model, day)
161
 
        for (var i=0; i < eventMap.length; i++) {
162
 
            createVisual(eventMap[i])
 
145
        var startDate = day.midnight()
 
146
        var itemsOfTheDay = model.itemsByTimePeriod(startDate, startDate.endOfDay())
 
147
        for(var i=0; i < itemsOfTheDay.length; i++) {
 
148
            var e = itemsOfTheDay[i]
 
149
            intern.eventsById[e.itemId] = e
163
150
        }
164
 
 
165
 
        intern.busy = false
 
151
        var eventInfo = CanlendarCanvas.parseDayEvents(startDate, itemsOfTheDay)
 
152
        eventLayoutHelper.sendMessage({'events': eventInfo})
166
153
 
167
154
        if(intern.now.isSameDay( bubbleOverLay.day )) {
168
155
            bubbleOverLay.showSeparator();
169
156
        }
 
157
 
 
158
        intern.busy = false
170
159
    }
171
160
 
172
161
    function destroyAllChildren() {
193
182
        return unusedEvent
194
183
    }
195
184
 
196
 
    function createEvent( event, depth, sizeOfRow ) {
197
 
        var eventBubble;
198
 
        if(intern.unUsedEvents.length === 0) {
199
 
            var incubator = delegate.incubateObject(bubbleOverLay)
200
 
            incubator.forceCompletion()
201
 
            eventBubble = incubator.object
202
 
        } else {
203
 
            eventBubble = getUnusedEventBubble();
204
 
        }
205
 
        assignBubbleProperties(eventBubble, event, depth, sizeOfRow);
206
 
    }
207
 
 
208
185
    function showSeparator() {
209
186
        var y = ((intern.now.getMinutes() * hourHeight) / 60) + intern.now.getHours() * hourHeight;
210
187
        separator.y = y;
219
196
 
220
197
        isEventBubble: false
221
198
        Drag.active: overlayMouseArea.drag.active
222
 
        isLiveEditing: overlayMouseArea.creatingEvent
 
199
        //isLiveEditing: overlayMouseArea.creatingEvent
223
200
        visible: overlayMouseArea.creatingEvent
224
 
        depthInRow: -10000
 
201
        y: event ? CanlendarCanvas.minutesSince(bubbleOverLay.day, event.startDateTime) * bubbleOverLay.minuteHeight : 0
225
202
    }
226
203
 
227
204
    Item {
269
246
            var event = createOrganizerEvent(selectedDate)
270
247
 
271
248
            Haptics.play()
272
 
            assignBubbleProperties(temporaryEvent, event, 1, overlayMouseArea.width);
 
249
 
 
250
            temporaryEvent.sizeOfRow = 1.0
 
251
            temporaryEvent.depthInRow = 0
 
252
            temporaryEvent.z = 1000
 
253
            temporaryEvent.height = 60 * bubbleOverLay.minuteHeight
 
254
            temporaryEvent.model = bubbleOverLay.model
 
255
            temporaryEvent.event = event
 
256
            temporaryEvent.visible = true
273
257
            creatingEvent = true
274
258
        }
275
259
 
306
290
        id: intern
307
291
 
308
292
        property var now : new Date();
309
 
        property var eventMap;
 
293
        property var eventsById: []
310
294
        property var unUsedEvents: []
311
295
        property bool busy: false
312
296
        property bool dirty: false