-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.qml
118 lines (99 loc) · 3.26 KB
/
main.qml
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
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
ApplicationWindow {
width: 200
height: 400
visible: true
title: qsTr("Text is ez")
menuBar: MenuBar {
Menu {
title: qsTr("Load")
MenuItem {
text: qsTr("Chat History")
onTriggered: textArea.text = chatLog
}
}
}
// 1. TextArea
// ScrollView {
// id: view
// anchors.fill: parent
// TextArea {
// id: textArea
// textFormat: TextEdit.RichText
// wrapMode: Text.Wrap
// selectByKeyboard: true
// selectByMouse: true
// }
// }
// 2. ListView
ListView {
id: view
anchors.fill: parent
model: chatLogModel
delegate: TextArea {
id: delegateRoot
padding: 0
width: ListView.view.width
textFormat: TextEdit.RichText
wrapMode: Text.Wrap
text: display
Connections {
target: selectionArea
function onSelectionChanged() {
updateSelection();
}
}
Component.onCompleted: updateSelection()
function updateSelection() {
if (index < selectionArea.selStartIndex || index > selectionArea.selEndIndex)
delegateRoot.select(0, 0);
else if (index > selectionArea.selStartIndex && index < selectionArea.selEndIndex)
delegateRoot.selectAll();
else if (index === selectionArea.selStartIndex && index === selectionArea.selEndIndex)
delegateRoot.select(selectionArea.selStartPos, selectionArea.selEndPos);
else if (index === selectionArea.selStartIndex)
delegateRoot.select(selectionArea.selStartPos, delegateRoot.length);
else if (index === selectionArea.selEndIndex)
delegateRoot.select(0, selectionArea.selEndPos);
}
}
ScrollBar.vertical: ScrollBar {
id: scrollBar
policy: ScrollBar.AlwaysOn
minimumSize: 0.1
}
function indexAtRelative(x, y) {
return indexAt(x + contentX, y + contentY)
}
}
MouseArea {
id: selectionArea
property int selStartIndex
property int selEndIndex
property int selStartPos
property int selEndPos
signal selectionChanged
anchors.fill: parent
enabled: !scrollBar.hovered
cursorShape: enabled ? Qt.IBeamCursor : Qt.ArrowCursor
function indexAndPos(x, y) {
const index = view.indexAtRelative(x, y);
if (index === -1)
return;
const item = view.itemAtIndex(index);
const relItemY = item.y - view.contentY;
const pos = item.positionAt(x, y - relItemY);
return [index, pos];
}
onPressed: {
[selStartIndex, selStartPos] = indexAndPos(mouse.x, mouse.y);
selectionChanged();
}
onPositionChanged: {
[selEndIndex, selEndPos] = indexAndPos(mouse.x, mouse.y);
selectionChanged();
}
}
}