From 718a58d388abd228c6a08f9fa3365588c06923ba Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 28 Jul 2023 20:05:47 +0200 Subject: [PATCH] Get rid of redundant constructions and make room implicit --- resources/qml/MessageView.qml | 4 ++-- resources/qml/delegates/Redacted.qml | 9 +++++---- src/timeline/EventDelegateChooser.cpp | 6 +++++- src/timeline/EventDelegateChooser.h | 15 ++++++++++++--- src/timeline/TimelineModel.cpp | 3 +++ src/timeline/TimelineModel.h | 1 + 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml index 41d996c1..417a4f5a 100644 --- a/resources/qml/MessageView.qml +++ b/resources/qml/MessageView.qml @@ -65,7 +65,7 @@ Item { width: chat.delegateMaxWidth height: Math.max((section.item?.height ?? 0) + gridContainer.implicitHeight, 10) anchors.horizontalCenter: ListView.view.contentItem.horizontalCenter - room: chatRoot.roommodel + //room: chatRoot.roommodel required property var day required property bool isSender @@ -203,7 +203,7 @@ Item { color: type == MtxEvent.NoticeMessage ? palette.buttonText : palette.text font.italic: type == MtxEvent.NoticeMessage - formatted: formattedBody + formatted: formattedBody + "a" Layout.fillWidth: true //Layout.maximumWidth: implicitWidth diff --git a/resources/qml/delegates/Redacted.qml b/resources/qml/delegates/Redacted.qml index a09e4c3f..1bb3209f 100644 --- a/resources/qml/delegates/Redacted.qml +++ b/resources/qml/delegates/Redacted.qml @@ -2,10 +2,10 @@ // // SPDX-License-Identifier: GPL-3.0-or-later -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 -import im.nheko 1.0 +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import im.nheko Control { id: msgRoot @@ -14,6 +14,7 @@ Control { property bool fitsMetadata: false //parent.width - redactedLayout.width > metadataWidth + 4 required property string eventId + required property Room room contentItem: RowLayout { id: redactedLayout diff --git a/src/timeline/EventDelegateChooser.cpp b/src/timeline/EventDelegateChooser.cpp index 5e6ee37e..7fec38dd 100644 --- a/src/timeline/EventDelegateChooser.cpp +++ b/src/timeline/EventDelegateChooser.cpp @@ -84,7 +84,8 @@ void EventDelegateChooser::componentComplete() { QQuickItem::componentComplete(); - // eventIncubator.reset(eventIndex); + eventIncubator.reset(eventId_); + replyIncubator.reset(replyId); // eventIncubator.forceCompletion(); } @@ -226,6 +227,9 @@ EventDelegateChooser::DelegateIncubator::reset(QString id) for (const auto choice : qAsConst(chooser.choices_)) { const auto &choiceValue = choice->roleValues(); if (choiceValue.contains(role) || choiceValue.empty()) { + nhlog::ui()->debug( + "Instantiating type: {}, c {}", (int)role, choiceValue.contains(role)); + if (auto child = qobject_cast(object())) { child->setParentItem(nullptr); } diff --git a/src/timeline/EventDelegateChooser.h b/src/timeline/EventDelegateChooser.h index b627b383..1cd2d65a 100644 --- a/src/timeline/EventDelegateChooser.h +++ b/src/timeline/EventDelegateChooser.h @@ -55,9 +55,9 @@ public: Q_PROPERTY(QQmlListProperty choices READ choices CONSTANT FINAL) Q_PROPERTY(QQuickItem *main READ main NOTIFY mainChanged FINAL) Q_PROPERTY(QQuickItem *reply READ reply NOTIFY replyChanged FINAL) - Q_PROPERTY(TimelineModel *room READ room WRITE setRoom NOTIFY roomChanged REQUIRED FINAL) Q_PROPERTY(QString eventId READ eventId WRITE setEventId NOTIFY eventIdChanged REQUIRED FINAL) Q_PROPERTY(QString replyTo READ replyTo WRITE setReplyTo NOTIFY replyToChanged REQUIRED FINAL) + Q_PROPERTY(TimelineModel *room READ room WRITE setRoom NOTIFY roomChanged REQUIRED FINAL) QQmlListProperty choices(); @@ -74,9 +74,12 @@ public: { if (m != room_) { room_ = m; - eventIncubator.reset(eventId_); - replyIncubator.reset(replyId); emit roomChanged(); + + if (isComponentComplete()) { + eventIncubator.reset(eventId_); + replyIncubator.reset(replyId); + } } } [[nodiscard]] TimelineModel *room() { return room_; } @@ -85,12 +88,18 @@ public: { eventId_ = idx; emit eventIdChanged(); + + if (isComponentComplete()) + eventIncubator.reset(eventId_); } [[nodiscard]] QString eventId() const { return eventId_; } void setReplyTo(QString id) { replyId = id; emit replyToChanged(); + + if (isComponentComplete()) + replyIncubator.reset(replyId); } [[nodiscard]] QString replyTo() const { return replyId; } diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index 066d8b01..66f7d5b8 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -561,6 +561,7 @@ TimelineModel::roleNames() const {ReplyTo, "replyTo"}, {ThreadId, "threadId"}, {Reactions, "reactions"}, + {Room, "room"}, {RoomId, "roomId"}, {RoomName, "roomName"}, {RoomTopic, "roomTopic"}, @@ -899,6 +900,8 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r auto id = relations(event).replaces().value_or(event_id(event)); return QVariant::fromValue(events.reactions(id)); } + case Room: + return QVariant::fromValue(this); case RoomId: return QVariant(room_id_); case RoomName: diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index b81fc209..2b22ad61 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -267,6 +267,7 @@ public: ReplyTo, ThreadId, Reactions, + Room, RoomId, RoomName, RoomTopic,