2019-07-07 23:52:41 -04:00
|
|
|
// Copyright 2019 miruka
|
|
|
|
// This file is part of harmonyqml, licensed under LGPLv3.
|
|
|
|
|
2019-07-13 05:39:01 -04:00
|
|
|
import QtQuick 2.12
|
|
|
|
import QtQuick.Layouts 1.12
|
2019-04-28 15:18:36 -04:00
|
|
|
import "../../Base"
|
2019-03-21 23:28:14 -04:00
|
|
|
|
|
|
|
Column {
|
2019-07-19 23:07:26 -04:00
|
|
|
id: eventDelegate
|
2019-03-21 23:28:14 -04:00
|
|
|
|
2019-07-19 23:07:26 -04:00
|
|
|
// Remember timeline goes from newest message at index 0 to oldest
|
|
|
|
property var previousItem: eventList.model.get(model.index + 1)
|
|
|
|
property var nextItem: eventList.model.get(model.index - 1)
|
2019-03-21 23:28:14 -04:00
|
|
|
|
2019-07-20 02:21:12 -04:00
|
|
|
property int modelIndex: model.index
|
|
|
|
onModelIndexChanged: {
|
2019-07-19 23:07:26 -04:00
|
|
|
previousItem = eventList.model.get(model.index + 1)
|
|
|
|
nextItem = eventList.model.get(model.index - 1)
|
2019-07-02 23:32:39 -04:00
|
|
|
}
|
|
|
|
|
2019-07-19 23:07:26 -04:00
|
|
|
property var senderInfo: senderInfo = users.find(model.senderId)
|
2019-07-19 20:55:52 -04:00
|
|
|
|
2019-07-19 23:07:26 -04:00
|
|
|
property bool isOwn: chatPage.userId === model.senderId
|
|
|
|
property bool onRight: eventList.ownEventsOnRight && isOwn
|
|
|
|
property bool combine: eventList.canCombine(previousItem, model)
|
|
|
|
property bool talkBreak: eventList.canTalkBreak(previousItem, model)
|
|
|
|
property bool dayBreak: eventList.canDayBreak(previousItem, model)
|
2019-07-19 20:55:52 -04:00
|
|
|
|
2019-07-19 23:07:26 -04:00
|
|
|
readonly property bool smallAvatar:
|
|
|
|
eventList.canCombine(model, nextItem) &&
|
|
|
|
(model.eventType == "RoomMessageEmote" ||
|
|
|
|
! model.eventType.startsWith("RoomMessage"))
|
2019-03-21 23:28:14 -04:00
|
|
|
|
2019-07-19 23:07:26 -04:00
|
|
|
readonly property bool collapseAvatar: combine
|
|
|
|
readonly property bool hideAvatar: onRight
|
2019-03-21 23:28:14 -04:00
|
|
|
|
2019-07-19 23:07:26 -04:00
|
|
|
readonly property bool hideNameLine:
|
|
|
|
model.eventType == "RoomMessageEmote" ||
|
|
|
|
! model.eventType.startsWith("RoomMessage") ||
|
|
|
|
onRight ||
|
|
|
|
combine
|
2019-04-20 03:29:24 -04:00
|
|
|
|
2019-07-18 06:23:31 -04:00
|
|
|
width: eventList.width
|
2019-04-20 03:29:24 -04:00
|
|
|
|
2019-03-21 23:28:14 -04:00
|
|
|
topPadding:
|
2019-07-19 23:07:26 -04:00
|
|
|
model.eventType == "RoomCreateEvent" ? 0 :
|
|
|
|
dayBreak ? theme.spacing * 4 :
|
2019-07-16 05:29:47 -04:00
|
|
|
talkBreak ? theme.spacing * 6 :
|
2019-07-19 23:07:26 -04:00
|
|
|
combine ? theme.spacing / 2 :
|
2019-07-16 05:29:47 -04:00
|
|
|
theme.spacing * 2
|
2019-04-17 16:43:18 -04:00
|
|
|
|
2019-07-20 02:21:12 -04:00
|
|
|
Daybreak {
|
|
|
|
visible: dayBreak
|
2019-07-19 23:07:26 -04:00
|
|
|
width: eventDelegate.width
|
2019-04-28 14:48:59 -04:00
|
|
|
}
|
2019-03-21 23:28:14 -04:00
|
|
|
|
2019-07-02 22:29:09 -04:00
|
|
|
EventContent {
|
2019-07-18 07:22:41 -04:00
|
|
|
x: onRight ? parent.width - width : 0
|
|
|
|
Behavior on x { HNumberAnimation {} }
|
2019-04-28 14:48:59 -04:00
|
|
|
}
|
2019-03-21 23:28:14 -04:00
|
|
|
}
|