Remove usage of HScrollableTextArea
This commit is contained in:
		
							
								
								
									
										1
									
								
								TODO.md
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								TODO.md
									
									
									
									
									
								
							@@ -29,6 +29,7 @@
 | 
				
			|||||||
- Catch server 5xx errors when sending message and retry 
 | 
					- Catch server 5xx errors when sending message and retry 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Popups and room settings can't be scrolled when not enough height to show all
 | 
					- Popups and room settings can't be scrolled when not enough height to show all
 | 
				
			||||||
 | 
					- `TextArea`s in Popups grow past window height instead of being scrollable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Handle cases where a known account's access token is invalid
 | 
					- Handle cases where a known account's access token is invalid
 | 
				
			||||||
- If an account is gone from the user's config, discard UI state last page
 | 
					- If an account is gone from the user's config, discard UI state last page
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,120 +0,0 @@
 | 
				
			|||||||
// SPDX-License-Identifier: LGPL-3.0-or-later
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import QtQuick 2.12
 | 
					 | 
				
			||||||
import QtQuick.Controls 2.12
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ScrollView {
 | 
					 | 
				
			||||||
    id: scrollView
 | 
					 | 
				
			||||||
    opacity: enabled ? 1 : theme.disabledElementsOpacity
 | 
					 | 
				
			||||||
    clip: true
 | 
					 | 
				
			||||||
    ScrollBar.vertical.visible: contentHeight > height
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Set it only on component creation to avoid binding loops
 | 
					 | 
				
			||||||
    Component.onCompleted: if (! text) {
 | 
					 | 
				
			||||||
        text                    = window.getState(this, "text", "")
 | 
					 | 
				
			||||||
        textArea.cursorPosition = text.length
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    onTextChanged: window.saveState(this)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    default property alias textAreaData: textArea.data
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    property string saveName: ""
 | 
					 | 
				
			||||||
    property var saveId: "ALL"
 | 
					 | 
				
			||||||
    property var saveProperties: ["text"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    property alias placeholderText: textArea.placeholderText
 | 
					 | 
				
			||||||
    property alias placeholderTextColor: textArea.placeholderTextColor
 | 
					 | 
				
			||||||
    property alias area: textArea
 | 
					 | 
				
			||||||
    property alias text: textArea.text
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    property var focusItemOnTab: null
 | 
					 | 
				
			||||||
    property var disabledText: null
 | 
					 | 
				
			||||||
    property string defaultText: ""
 | 
					 | 
				
			||||||
    readonly property bool changed: text !== defaultText
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    function reset() { area.clear(); text = defaultText }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Behavior on opacity { HNumberAnimation {} }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    TextArea {
 | 
					 | 
				
			||||||
        id: textArea
 | 
					 | 
				
			||||||
        text: defaultText
 | 
					 | 
				
			||||||
        enabled: parent.enabled
 | 
					 | 
				
			||||||
        leftPadding: theme.spacing
 | 
					 | 
				
			||||||
        rightPadding: leftPadding
 | 
					 | 
				
			||||||
        topPadding: theme.spacing / 1.5
 | 
					 | 
				
			||||||
        bottomPadding: topPadding
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        readOnly: ! visible
 | 
					 | 
				
			||||||
        selectByMouse: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        wrapMode: TextEdit.Wrap
 | 
					 | 
				
			||||||
        font.family: theme.fontFamily.sans
 | 
					 | 
				
			||||||
        font.pixelSize: theme.fontSize.normal
 | 
					 | 
				
			||||||
        font.pointSize: -1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        placeholderTextColor: theme.controls.textArea.placeholderText
 | 
					 | 
				
			||||||
        color: theme.controls.textArea.text
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        background: Rectangle {
 | 
					 | 
				
			||||||
            id: textAreaBackground
 | 
					 | 
				
			||||||
            color: theme.controls.textArea.background
 | 
					 | 
				
			||||||
            radius: theme.radius
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Keys.onPressed: if (
 | 
					 | 
				
			||||||
            event.modifiers & Qt.AltModifier ||
 | 
					 | 
				
			||||||
            event.modifiers & Qt.MetaModifier
 | 
					 | 
				
			||||||
        ) event.accepted = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        KeyNavigation.priority: KeyNavigation.BeforeItem
 | 
					 | 
				
			||||||
        KeyNavigation.tab: focusItemOnTab
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Binding on color {
 | 
					 | 
				
			||||||
            value: "transparent"
 | 
					 | 
				
			||||||
            when: disabledText !== null && ! textArea.enabled
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Binding on placeholderTextColor {
 | 
					 | 
				
			||||||
            value: "transparent"
 | 
					 | 
				
			||||||
            when: disabledText !== null && ! textArea.enabled
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Binding on implicitHeight {
 | 
					 | 
				
			||||||
            value: disabledTextLabel.implicitHeight
 | 
					 | 
				
			||||||
            when: disabledText !== null && ! textArea.enabled
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Behavior on color { HColorAnimation {} }
 | 
					 | 
				
			||||||
        Behavior on placeholderTextColor { HColorAnimation {} }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        HLabel {
 | 
					 | 
				
			||||||
            id: disabledTextLabel
 | 
					 | 
				
			||||||
            anchors.fill: parent
 | 
					 | 
				
			||||||
            visible: opacity > 0
 | 
					 | 
				
			||||||
            opacity: disabledText !== null && parent.enabled ? 0 : 1
 | 
					 | 
				
			||||||
            text: disabledText || ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            leftPadding: parent.leftPadding
 | 
					 | 
				
			||||||
            rightPadding: parent.rightPadding
 | 
					 | 
				
			||||||
            topPadding: parent.topPadding
 | 
					 | 
				
			||||||
            bottomPadding: parent.bottomPadding
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            wrapMode:
 | 
					 | 
				
			||||||
                parent.wrapMode === TextEdit.Wrap ? Text.Wrap :
 | 
					 | 
				
			||||||
                parent.wrapMode === TextEdit.WordWrap ? Text.WordWrap :
 | 
					 | 
				
			||||||
                parent.wrapMode === TextEdit.WrapAnywhere ? Text.WrapAnywhere :
 | 
					 | 
				
			||||||
                Text.NoWrap
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            font.family: parent.font.family
 | 
					 | 
				
			||||||
            font.pixelSize: parent.font.pixelSize
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            Behavior on opacity { HNumberAnimation {} }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
// SPDX-License-Identifier: LGPL-3.0-or-later
 | 
					// SPDX-License-Identifier: LGPL-3.0-or-later
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import QtQuick 2.12
 | 
					import QtQuick 2.12
 | 
				
			||||||
 | 
					import QtQuick.Controls 2.12
 | 
				
			||||||
import QtQuick.Layouts 1.12
 | 
					import QtQuick.Layouts 1.12
 | 
				
			||||||
import "../Base"
 | 
					import "../Base"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -12,7 +13,7 @@ BoxPopup {
 | 
				
			|||||||
    okText: qsTr("Invite")
 | 
					    okText: qsTr("Invite")
 | 
				
			||||||
    okEnabled: invitingAllowed && Boolean(inviteArea.text.trim())
 | 
					    okEnabled: invitingAllowed && Boolean(inviteArea.text.trim())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    onOpened: inviteArea.area.forceActiveFocus()
 | 
					    onOpened: inviteArea.forceActiveFocus()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    onInvitingAllowedChanged:
 | 
					    onInvitingAllowedChanged:
 | 
				
			||||||
        if (! invitingAllowed && inviteFuture) inviteFuture.cancel()
 | 
					        if (! invitingAllowed && inviteFuture) inviteFuture.cancel()
 | 
				
			||||||
@@ -60,14 +61,16 @@ BoxPopup {
 | 
				
			|||||||
    property var failedInvites: []
 | 
					    property var failedInvites: []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    HScrollableTextArea {
 | 
					    ScrollView {
 | 
				
			||||||
        id: inviteArea
 | 
					 | 
				
			||||||
        focusItemOnTab: box.firstButton
 | 
					 | 
				
			||||||
        area.placeholderText:
 | 
					 | 
				
			||||||
            qsTr("User IDs (e.g. @bob:matrix.org @alice:localhost)")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Layout.fillWidth: true
 | 
					        Layout.fillWidth: true
 | 
				
			||||||
        Layout.fillHeight: true
 | 
					        Layout.fillHeight: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        HTextArea {
 | 
				
			||||||
 | 
					            id: inviteArea
 | 
				
			||||||
 | 
					            focusItemOnTab: box.firstButton
 | 
				
			||||||
 | 
					            placeholderText:
 | 
				
			||||||
 | 
					                qsTr("User IDs (e.g. @bob:matrix.org @alice:localhost)")
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    HLabel {
 | 
					    HLabel {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
// SPDX-License-Identifier: LGPL-3.0-or-later
 | 
					// SPDX-License-Identifier: LGPL-3.0-or-later
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import QtQuick 2.12
 | 
					import QtQuick 2.12
 | 
				
			||||||
 | 
					import QtQuick.Controls 2.12
 | 
				
			||||||
import QtQuick.Layouts 1.12
 | 
					import QtQuick.Layouts 1.12
 | 
				
			||||||
import "../Base"
 | 
					import "../Base"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -20,12 +21,14 @@ BoxPopup {
 | 
				
			|||||||
    property string traceback: ""
 | 
					    property string traceback: ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    HScrollableTextArea {
 | 
					    ScrollView {
 | 
				
			||||||
        text: [message, traceback].join("\n\n") || qsTr("No info available")
 | 
					 | 
				
			||||||
        area.readOnly: true
 | 
					 | 
				
			||||||
        area.font.family: theme.fontFamily.mono
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Layout.fillWidth: true
 | 
					        Layout.fillWidth: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        HTextArea {
 | 
				
			||||||
 | 
					            text: [message, traceback].join("\n\n") || qsTr("No info available")
 | 
				
			||||||
 | 
					            readOnly: true
 | 
				
			||||||
 | 
					            font.family: theme.fontFamily.mono
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    HCheckBox {
 | 
					    HCheckBox {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user