diff --git a/qml/component/FileBubble.qml b/qml/component/FileBubble.qml index fee665fc2..5240af179 100644 --- a/qml/component/FileBubble.qml +++ b/qml/component/FileBubble.qml @@ -3,20 +3,23 @@ import QtQuick.Controls 2.2 import QtQuick.Controls.Material 2.2 AvatarContainer { + readonly property var downloadAndOpen: downloadable.downloadAndOpen + readonly property var saveFileAs: downloadable.saveFileAs + DownloadableContent { id: downloadable - width: downloadButton.width - height: downloadButton.height + width: downloadDelegate.width + height: downloadDelegate.height - Button { - id: downloadButton + TextDelegate { + id: downloadDelegate - text: content.body + maximumWidth: messageListView.width highlighted: !sentByMe - flat: true + timeLabelVisible: false - onClicked: downloadable.saveFileAs() + displayText: "File: " + content.body } } } diff --git a/qml/component/MessageBubble.qml b/qml/component/MessageBubble.qml index 70bfe91fa..fcde06ece 100644 --- a/qml/component/MessageBubble.qml +++ b/qml/component/MessageBubble.qml @@ -8,49 +8,12 @@ AvatarContainer { id: messageRow - Rectangle { - id: messageRect + TextDelegate { + maximumWidth: messageListView.width - (!sentByMe ? 40 + messageRow.spacing : 0) + flat: isNotice + highlighted: !sentByMe + timeLabelVisible: Math.abs(time - aboveTime) > 600000 || index == 0 - width: Math.min(Math.max(messageText.implicitWidth, (timeText.visible ? timeText.implicitWidth : 0)) + 24, messageListView.width - (!sentByMe ? 40 + messageRow.spacing : 0)) - height: messageText.implicitHeight + (timeText.visible ? timeText.implicitHeight : 0) + 24 - - color: isNotice ? "transparent" : !sentByMe ? Material.accent : background - border.color: Material.accent - border.width: isNotice ? 2 : 0 - - ColumnLayout { - id: messageColumn - - anchors.fill: parent - anchors.margins: 12 - spacing: 0 - - Label { - id: messageText - Layout.maximumWidth: parent.width - text: display - color: isNotice || sentByMe ? Material.foreground : "white" - - wrapMode: Label.Wrap - linkColor: isNotice || sentByMe ? Material.accent : "white" - // textFormat: contentType === "text/html" ? Text.RichText : Text.StyledText - textFormat: Text.StyledText - onLinkActivated: Qt.openUrlExternally(link) - } - - Label { - id: timeText - visible: Math.abs(time - aboveTime) > 600000 || index == 0 - Layout.alignment: Qt.AlignRight - text: Qt.formatTime(time, "hh:mm") - color: isNotice || sentByMe ? "grey" : "white" - font.pointSize: 8 - -// Component.onCompleted: { -// console.log("Difference: " + Math.abs(time - aboveTime)) -// console.log("Index: " + index) -// } - } - } + displayText: display } } diff --git a/qml/component/StateBubble.qml b/qml/component/StateBubble.qml index 77a52e53b..a7e9e9939 100644 --- a/qml/component/StateBubble.qml +++ b/qml/component/StateBubble.qml @@ -2,25 +2,10 @@ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Controls.Material 2.2 -Rectangle { - readonly property bool isEmote: eventType === "emote" +TextDelegate { + maximumWidth: messageListView.width + highlighted: eventType === "emote" + timeLabelVisible: false - id: stateRect - - width: Math.min(stateText.implicitWidth + 24, messageListView.width) - height: stateText.implicitHeight + 24 - - color: isEmote ? Material.accent : background - - Label { - id: stateText - text: "" + author.displayName + " " + display - color: isEmote ? "white" : Material.foreground - linkColor: isEmote || darkTheme ? "white" : Material.accent - anchors.fill: parent - anchors.margins: 12 - wrapMode: Label.Wrap - textFormat: Text.StyledText - onLinkActivated: Qt.openUrlExternally(link) - } + displayText: "" + author.displayName + " " + display } diff --git a/qml/component/TextDelegate.qml b/qml/component/TextDelegate.qml new file mode 100644 index 000000000..f3c805b2a --- /dev/null +++ b/qml/component/TextDelegate.qml @@ -0,0 +1,52 @@ +import QtQuick 2.9 +import QtQuick.Controls 2.2 +import QtQuick.Controls.Material 2.2 +import QtQuick.Layouts 1.3 + +Rectangle { + property bool flat: false + property bool highlighted: false + property string displayText + property alias timeLabelVisible: timeText.visible + + property int maximumWidth + + readonly property bool darkBackground: highlighted && !flat + + id: messageRect + + width: Math.min(Math.max(messageText.implicitWidth, (timeText.visible ? timeText.implicitWidth : 0)) + 24, maximumWidth) + height: messageText.implicitHeight + (timeText.visible ? timeText.implicitHeight : 0) + 24 + + color: flat ? "transparent" : highlighted ? Material.accent : background + border.color: Material.accent + border.width: flat ? 2 : 0 + + ColumnLayout { + id: messageColumn + + anchors.fill: parent + anchors.margins: 12 + spacing: 0 + + Label { + id: messageText + Layout.maximumWidth: parent.width + text: displayText + color: darkBackground ? "white": Material.foreground + + wrapMode: Label.Wrap + linkColor: darkBackground ? "white" : Material.accent + textFormat: Text.StyledText + onLinkActivated: Qt.openUrlExternally(link) + } + + Label { + id: timeText + Layout.alignment: Qt.AlignRight + text: Qt.formatTime(time, "hh:mm") + color: darkBackground ? "white" : "grey" + font.pointSize: 8 + } + } +} diff --git a/res.qrc b/res.qrc index e040dd73d..e5a201b23 100644 --- a/res.qrc +++ b/res.qrc @@ -29,5 +29,6 @@ qml/Setting.qml qml/form/SettingAccountForm.qml qml/form/SettingAppearanceForm.qml + qml/component/TextDelegate.qml