Newer
Older
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2
import im.nheko 1.0
Popup {
id: popup
property int currentIndex: -1
property string completerName
property var completer
signal completionClicked(string completion)
if (bottomToTop)
down_();
else
up_();
}
function down() {
if (bottomToTop)
up_();
else
down_();
}
function up_() {
currentIndex = currentIndex - 1;
if (currentIndex == -2)
currentIndex = -1;
}
function currentCompletion() {
if (currentIndex > -1 && currentIndex < listView.count)
return completer.completionAt(currentIndex);
else
return null;
}
onCompleterNameChanged: {
completer = TimelineManager.timeline.input.completerFor(completerName);
completer.setSearchString("");
} else {
Connections {
onTimelineChanged: completer = null
target: TimelineManager
}
anchors.fill: parent
implicitWidth: contentItem.childrenRect.width
model: completer
verticalLayoutDirection: popup.bottomToTop ? ListView.BottomToTop : ListView.TopToBottom
delegate: Rectangle {
color: model.index == popup.currentIndex ? colors.highlight : colors.base
height: chooser.childrenRect.height + 4
implicitWidth: chooser.childrenRect.width + 4
MouseArea {
anchors.fill: parent
hoverEnabled: true
onEntered: popup.currentIndex = model.index
onClicked: popup.completionClicked(completer.completionAt(model.index))
}
roleValue: popup.completerName
anchors.centerIn: parent
Avatar {
height: 24
width: 24
displayName: model.displayName
url: model.avatarUrl.replace("mxc://", "image://MxcImage/")
}
Label {
text: model.displayName
color: model.index == popup.currentIndex ? colors.highlightedText : colors.text
Label {
text: model.unicode
color: model.index == popup.currentIndex ? colors.highlightedText : colors.text
font: Settings.emojiFont
}
Label {
text: model.shortName
color: model.index == popup.currentIndex ? colors.highlightedText : colors.text
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
}
}
}
}
}
enter: Transition {
NumberAnimation {
property: "opacity"
from: 0
to: 1
duration: 100
}
}
exit: Transition {
NumberAnimation {
property: "opacity"
from: 1
to: 0
duration: 100
}
}
background: Rectangle {
implicitHeight: popup.contentHeight
implicitWidth: popup.contentWidth
}
}