mirror of https://github.com/Nheko-Reborn/nheko
parent
9d68d59465
commit
cabeb1464c
@ -0,0 +1,107 @@ |
|||||||
|
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 |
||||||
|
|
||||||
|
function up() { |
||||||
|
currentIndex = currentIndex - 1; |
||||||
|
if (currentIndex == -2) |
||||||
|
currentIndex = repeater.count - 1; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
function down() { |
||||||
|
currentIndex = currentIndex + 1; |
||||||
|
if (currentIndex >= repeater.count) |
||||||
|
currentIndex = -1; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
function currentCompletion() { |
||||||
|
if (currentIndex > -1 && currentIndex < repeater.count) |
||||||
|
return completer.completionAt(currentIndex); |
||||||
|
else |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
onCompleterNameChanged: { |
||||||
|
if (completerName) |
||||||
|
completer = TimelineManager.timeline.input.completerFor(completerName); |
||||||
|
|
||||||
|
} |
||||||
|
padding: 0 |
||||||
|
onAboutToShow: currentIndex = -1 |
||||||
|
|
||||||
|
ColumnLayout { |
||||||
|
anchors.fill: parent |
||||||
|
spacing: 0 |
||||||
|
|
||||||
|
Repeater { |
||||||
|
id: repeater |
||||||
|
|
||||||
|
model: completer |
||||||
|
|
||||||
|
delegate: Rectangle { |
||||||
|
color: model.index == popup.currentIndex ? colors.window : colors.base |
||||||
|
height: del.implicitHeight + 4 |
||||||
|
width: del.implicitWidth + 4 |
||||||
|
|
||||||
|
RowLayout { |
||||||
|
id: del |
||||||
|
|
||||||
|
anchors.centerIn: parent |
||||||
|
|
||||||
|
Avatar { |
||||||
|
height: 24 |
||||||
|
width: 24 |
||||||
|
displayName: model.displayName |
||||||
|
url: model.avatarUrl.replace("mxc://", "image://MxcImage/") |
||||||
|
} |
||||||
|
|
||||||
|
Label { |
||||||
|
text: model.displayName |
||||||
|
color: colors.text |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
enter: Transition { |
||||||
|
NumberAnimation { |
||||||
|
property: "opacity" |
||||||
|
from: 0 |
||||||
|
to: 1 |
||||||
|
duration: 100 |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
exit: Transition { |
||||||
|
NumberAnimation { |
||||||
|
property: "opacity" |
||||||
|
from: 1 |
||||||
|
to: 0 |
||||||
|
duration: 100 |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
background: Rectangle { |
||||||
|
color: colors.base |
||||||
|
implicitHeight: popup.contentHeight |
||||||
|
implicitWidth: popup.contentWidth |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue