You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
4.2 KiB

import QtQuick 2.0
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.0
import "../components" as Components
Components.ChatRoot {
id: root
chatList: chatListView
property string chatBackgroundSelf: "#056162"
property string chatBackgroundThem: "#262d31"
property int itemHeightDefault: 68
property int itemHeightSmall: 32
historyPopupBackgroundColor: "#262d31"
historyPopupTextColor: "white"
Image {
// background
source: "qrc:/whatsthat/bg.png"
anchors.fill: parent
fillMode: Image.Tile
}
Components.ChatListView {
id: chatListView
anchors.fill: parent
anchors.topMargin: 10
anchors.leftMargin: 32
anchors.rightMargin: 32
onScrollToBottom: root.scrollToBottom();
delegate: RowLayout {
id: item
property int itemHeight: textColumn.implicitHeight + 12
height: itemHeight + 12
width: parent.width
spacing: 0
Item {
visible: outgoing
Layout.fillWidth: true
Layout.preferredHeight: 32
}
Rectangle {
id: textRectangle
radius: 4
clip: true
color: outgoing ? root.chatBackgroundSelf : root.chatBackgroundThem
Layout.preferredHeight: itemHeight
Layout.preferredWidth: {
var max_width = item.width / 6 * 4;
var meta_width = metaRow.implicitWidth + 32;
var text_width = textMessage.implicitWidth + 32;
if(meta_width > text_width)
if(meta_width < max_width) return meta_width;
if(text_width < max_width) return text_width;
return max_width;
}
ColumnLayout {
id: textColumn
anchors.fill: parent
anchors.margins: 6
anchors.leftMargin: 10
anchors.rightMargin: 10
Layout.fillWidth: true
Layout.preferredHeight: itemHeight
RowLayout {
id: metaRow
spacing: 8
Item {
visible: !isHead
Layout.fillWidth: true
}
Text {
visible: !outgoing && isHead
font.pointSize: 12 * ctx.scaleFactor
color: "lightblue"
text: name
}
Item {
visible: isHead
Layout.fillWidth: true
}
Text {
font.pointSize: 12 * ctx.scaleFactor
color: "#98ac90"
text: datestr + " " + hourstr
Layout.rightMargin: 0
}
}
Text {
id: textMessage
color: "white"
text: message
wrapMode: Text.WordWrap
width: parent.width
font.pointSize: 14 * ctx.scaleFactor
Layout.preferredWidth: parent.width
}
}
}
Item {
visible: !outgoing
Layout.fillWidth: true
Layout.preferredHeight: 32
}
}
}
onFetchHistory: {
// Prepend new items to the model by calling `getPage()`.
// temp. disable visibility to 'break' the touch gesture,
// if we dont the list scrolling bugs out by "jumping"
chatListView.visible = false;
var count_results = chatModel.getPage();
if(!chatListView.atBottom) {
var jump_to = count_results <= 1 ? 0 : count_results + 1
chatListView.positionViewAtIndex(jump_to, ListView.Beginning)
}
chatListView.visible = true;
}
}