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