Skip to content
Snippets Groups Projects
MessageInput.qml 4.14 KiB
Newer Older
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2
import QtQuick.Window 2.2
Nicolas Werner's avatar
Nicolas Werner committed
import im.nheko 1.0

Rectangle {
    color: colors.window
    Layout.fillWidth: true
    Layout.preferredHeight: textInput.height
    Layout.minimumHeight: 40

    RowLayout {
        id: inputBar

        anchors.fill: parent
        spacing: 16

        ImageButton {
            Layout.alignment: Qt.AlignBottom
            hoverEnabled: true
            width: 22
            height: 22
            image: ":/icons/icons/ui/place-call.png"
            Layout.topMargin: 8
            Layout.bottomMargin: 8
            Layout.leftMargin: 16
        }

        ImageButton {
            Layout.alignment: Qt.AlignBottom
            hoverEnabled: true
            width: 22
            height: 22
            image: ":/icons/icons/ui/paper-clip-outline.png"
            Layout.topMargin: 8
            Layout.bottomMargin: 8
Nicolas Werner's avatar
Nicolas Werner committed
            onClicked: TimelineManager.timeline.input.openFileSelection()

            Rectangle {
                anchors.fill: parent
                color: colors.window
                visible: TimelineManager.timeline.input.uploading

                NhekoBusyIndicator {
                    anchors.fill: parent
                    running: parent.visible
                }

            }

        }

        ScrollView {
            id: textInput

            Layout.alignment: Qt.AlignBottom
            Layout.maximumHeight: Window.height / 4
            Layout.fillWidth: true

            TextArea {
Nicolas Werner's avatar
Nicolas Werner committed
                id: textArea

                placeholderText: qsTr("Write a message...")
                placeholderTextColor: colors.buttonText
                color: colors.text
                wrapMode: TextEdit.Wrap
Nicolas Werner's avatar
Nicolas Werner committed
                onTextChanged: TimelineManager.timeline.input.updateState(selectionStart, selectionEnd, cursorPosition, text)
                onCursorPositionChanged: TimelineManager.timeline.input.updateState(selectionStart, selectionEnd, cursorPosition, text)
                onSelectionStartChanged: TimelineManager.timeline.input.updateState(selectionStart, selectionEnd, cursorPosition, text)
                onSelectionEndChanged: TimelineManager.timeline.input.updateState(selectionStart, selectionEnd, cursorPosition, text)
                Keys.onPressed: {
                    if (event.matches(StandardKey.Paste)) {
Nicolas Werner's avatar
Nicolas Werner committed
                        TimelineManager.timeline.input.paste(false);
                        event.accepted = true;
                    } else if (event.matches(StandardKey.InsertParagraphSeparator)) {
                        TimelineManager.timeline.input.send();
                        textArea.clear();
                        event.accepted = true;
Nicolas Werner's avatar
Nicolas Werner committed
                    }
Nicolas Werner's avatar
Nicolas Werner committed
                }

                Connections {
                    function onInsertText(text_) {
                        textArea.insert(textArea.cursorPosition, text_);
Nicolas Werner's avatar
Nicolas Werner committed
                    }
Nicolas Werner's avatar
Nicolas Werner committed

                    target: TimelineManager.timeline.input
                MouseArea {
                    // workaround for wrong cursor shape on some platforms
                    anchors.fill: parent
Nicolas Werner's avatar
Nicolas Werner committed
                    acceptedButtons: Qt.MiddleButton
                    cursorShape: Qt.IBeamCursor
Nicolas Werner's avatar
Nicolas Werner committed
                    onClicked: TimelineManager.timeline.input.paste(true)
                }

                background: Rectangle {
                    color: colors.window
                }

            }

        }

        ImageButton {
            Layout.alignment: Qt.AlignRight | Qt.AlignBottom
            hoverEnabled: true
            width: 22
            height: 22
            image: ":/icons/icons/ui/smile.png"
            Layout.topMargin: 8
            Layout.bottomMargin: 8
        }

        ImageButton {
            Layout.alignment: Qt.AlignRight | Qt.AlignBottom
            hoverEnabled: true
            width: 22
            height: 22
            image: ":/icons/icons/ui/cursor.png"
            Layout.topMargin: 8
            Layout.bottomMargin: 8
            Layout.rightMargin: 16
Nicolas Werner's avatar
Nicolas Werner committed
            onClicked: {
                TimelineManager.timeline.input.send();
                textArea.clear();
            }