Add usermarker.

square-messages
Black Hat 2018-09-13 13:05:51 +08:00
parent 3ef1744b5c
commit 29624c5f59
4 changed files with 46 additions and 21 deletions

View File

@ -3,20 +3,13 @@ import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3
import Matrique.Settings 0.1
Item {
property alias icon: iconText.text
property var color: MSettings.darkTheme ? "white" : "black"
Text {
property alias icon: materialLabel.text
id: item
id: materialLabel
Text {
anchors.fill: parent
id: iconText
font.pointSize: 16
font.family: materialFont.name
color: item.color
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
font.pointSize: 16
font.family: materialFont.name
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}

View File

@ -93,13 +93,29 @@ RowLayout {
active: eventType === "image" || eventType === "file" || eventType === "audio"
}
AutoLabel {
Row {
Layout.alignment: Qt.AlignRight
visible: Math.abs(time - aboveTime) > 600000 || index == 0
text: Qt.formatTime(time, "hh:mm")
coloredBackground: highlighted
Material.foreground: "grey"
font.pointSize: 8
spacing: 8
AutoLabel {
id: timeLabel
visible: Math.abs(time - aboveTime) > 600000 || index == 0
text: Qt.formatTime(time, "hh:mm")
coloredBackground: highlighted
Material.foreground: "grey"
font.pointSize: 8
}
MaterialIcon {
height: timeLabel.height
visible: userMarker.length > 0
icon: "\ue5ca"
color: highlighted ? "white": Material.foreground
font.pointSize: 12
}
}
}

View File

@ -32,6 +32,7 @@ QHash<int, QByteArray> MessageEventModel::roleNames() const {
roles[AnnotationRole] = "annotation";
roles[EventResolvedTypeRole] = "eventResolvedType";
roles[PlainTextRole] = "plainText";
roles[UserMarkerRole] = "userMarker";
return roles;
}
@ -137,6 +138,11 @@ void MessageEventModel::setRoom(MatriqueRoom* room) {
&MessageEventModel::refreshEvent);
connect(m_currentRoom, &Room::fileTransferCancelled, this,
&MessageEventModel::refreshEvent);
connect(m_currentRoom, &Room::readMarkerForUserMoved, this,
[=](User* user, QString fromEventId, QString toEventId) {
refreshEventRoles(fromEventId, {UserMarkerRole});
refreshEventRoles(toEventId, {UserMarkerRole});
});
qDebug() << "Connected to room" << room->id() << "as"
<< room->localUser()->id();
} else
@ -624,6 +630,15 @@ QVariant MessageEventModel::data(const QModelIndex& idx, int role) const {
return role == TimeRole ? QVariant(ts) : renderDate(ts);
}
if (role == UserMarkerRole) {
QVariantList variantList;
for (User* user : m_currentRoom->usersAtEventId(evt.id())) {
if (user == m_currentRoom->localUser()) continue;
variantList.append(QVariant::fromValue(user));
}
return variantList;
}
if (role == AboveEventTypeRole || role == AboveSectionRole ||
role == AboveAuthorRole || role == AboveTimeRole)
for (auto r = row + 1; r < rowCount(); ++r) {

View File

@ -29,6 +29,7 @@ class MessageEventModel : public QAbstractListModel {
LongOperationRole,
AnnotationRole,
PlainTextRole,
UserMarkerRole,
// For debugging
EventResolvedTypeRole,
};
@ -42,7 +43,7 @@ class MessageEventModel : public QAbstractListModel {
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index,
int role = Qt::DisplayRole) const override;
QHash<int, QByteArray> roleNames() const;
QHash<int, QByteArray> roleNames() const override;
private slots:
int refreshEvent(const QString& eventId);