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
|
import QtQuick 2.0
Rectangle {
id: root
property Item messageBubble
property ListModel script: Conversation {}
property int scriptIndex: 0
property string sender: "Me"
property int messageCounter: 0
function send(message) {
messageView.positionViewAtEnd()
messageModel.set(messageModel.count - 1, {
"sender": root.sender,
"message": message,
"avatar": "",
"outbound": true,
"time": Qt.formatTime(Date.now()),
"delegateState": ""
})
newMessage()
}
function newMessage() {
messageModel.append({
"sender": root.sender,
"message": "",
"avatar": "",
"outbound": true,
"time": "",
"delegateState": "composing"
})
messageBubble = visualModel.item(visualModel.count - 1)
}
Component.onCompleted: newMessage()
width: 480; height: 640
gradient: Gradient {
GradientStop { position: 0.0; color: "#000000" }
GradientStop { position: 1.0; color: "#080808" }
}
ListView {
id: messageView
anchors {
left: parent.left; top: parent.top; right: parent.right; bottom: composer.top
topMargin: 1; bottomMargin: 2
}
spacing: 2
cacheBuffer: 256
model: VisualDataModel {
id: visualModel
model: ListModel { id: messageModel }
delegate: Bubble {}
}
}
Timer {
interval: 10000
repeat: true
running: true
onTriggered: {
var message = script.get(scriptIndex);
messageModel.insert(messageModel.count - 1, {
"sender": message.sender,
"message": message.message,
"avatar": message.avatar,
"outbound": false,
"time": Qt.formatTime(Date.now()),
"delegateState": ""
})
scriptIndex = (scriptIndex + 1) % script.count
interval = Math.random() * 30000
}
}
Item {
id: composer
height: messageBubble != undefined ? messageBubble.contentHeight : 0
anchors { left: parent.left; right: parent.right; bottom: parent.bottom }
}
}
|