From e0ef1ef7974ed483ea0a3e4d8096f439f3d9ca4b Mon Sep 17 00:00:00 2001 From: blue Date: Fri, 21 Aug 2020 00:32:30 +0300 Subject: [PATCH] Some basic message painting --- ui/CMakeLists.txt | 1 + ui/models/account.cpp | 2 +- ui/models/account.h | 2 +- ui/models/element.cpp | 7 +- ui/models/element.h | 1 + ui/models/item.cpp | 9 +++ ui/models/item.h | 1 + ui/models/messagefeed.cpp | 102 +++++++++++++++++---------- ui/models/messagefeed.h | 16 ++++- ui/models/room.cpp | 7 +- ui/utils/feedview.cpp | 5 ++ ui/utils/feedview.h | 2 + ui/utils/messagedelegate.cpp | 130 +++++++++++++++++++++++++++++++++++ ui/utils/messagedelegate.h | 50 ++++++++++++++ ui/widgets/conversation.cpp | 3 + ui/widgets/conversation.h | 2 + 16 files changed, 296 insertions(+), 44 deletions(-) create mode 100644 ui/utils/messagedelegate.cpp create mode 100644 ui/utils/messagedelegate.h diff --git a/ui/CMakeLists.txt b/ui/CMakeLists.txt index 23f5f39..c4a8aa6 100644 --- a/ui/CMakeLists.txt +++ b/ui/CMakeLists.txt @@ -40,6 +40,7 @@ set(squawkUI_SRC utils/comboboxdelegate.cpp utils/dropshadoweffect.cpp utils/feedview.cpp + utils/messagedelegate.cpp ) # Tell CMake to create the helloworld executable diff --git a/ui/models/account.cpp b/ui/models/account.cpp index 00dd6b2..f8d0c37 100644 --- a/ui/models/account.cpp +++ b/ui/models/account.cpp @@ -231,7 +231,7 @@ void Models::Account::toOfflineState() Item::toOfflineState(); } -QString Models::Account::getAvatarPath() +QString Models::Account::getAvatarPath() const { return avatarPath; } diff --git a/ui/models/account.h b/ui/models/account.h index 2563382..686d4da 100644 --- a/ui/models/account.h +++ b/ui/models/account.h @@ -57,7 +57,7 @@ namespace Models { QString getError() const; void setAvatarPath(const QString& path); - QString getAvatarPath(); + QString getAvatarPath() const; void setAvailability(Shared::Availability p_avail); void setAvailability(unsigned int p_avail); diff --git a/ui/models/element.cpp b/ui/models/element.cpp index 98a54a5..88d990c 100644 --- a/ui/models/element.cpp +++ b/ui/models/element.cpp @@ -27,7 +27,7 @@ Models::Element::Element(Type p_type, const Models::Account* acc, const QString& avatarPath(), avatarState(Shared::Avatar::empty), account(acc), - feed(new MessageFeed()) + feed(new MessageFeed(this)) { connect(feed, &MessageFeed::requestArchive, this, &Element::requestArchive); @@ -149,3 +149,8 @@ void Models::Element::responseArchive(const std::list list) { feed->responseArchive(list); } + +bool Models::Element::isRoom() const +{ + return type != contact; +} diff --git a/ui/models/element.h b/ui/models/element.h index 29c4e76..41cb642 100644 --- a/ui/models/element.h +++ b/ui/models/element.h @@ -42,6 +42,7 @@ public: void changeMessage(const QString& id, const QMap& data); unsigned int getMessagesCount() const; void responseArchive(const std::list list); + bool isRoom() const; signals: void requestArchive(const QString& before); diff --git a/ui/models/item.cpp b/ui/models/item.cpp index e006ad0..4a88dd2 100644 --- a/ui/models/item.cpp +++ b/ui/models/item.cpp @@ -283,6 +283,15 @@ Shared::ConnectionState Models::Item::getAccountConnectionState() const return acc->getState(); } +QString Models::Item::getAccountAvatarPath() const +{ + const Account* acc = getParentAccount(); + if (acc == nullptr) { + return ""; + } + return acc->getAvatarPath(); +} + QString Models::Item::getDisplayedName() const { return name; diff --git a/ui/models/item.h b/ui/models/item.h index 4f3e29a..4661479 100644 --- a/ui/models/item.h +++ b/ui/models/item.h @@ -80,6 +80,7 @@ class Item : public QObject{ QString getAccountName() const; QString getAccountJid() const; QString getAccountResource() const; + QString getAccountAvatarPath() const; Shared::ConnectionState getAccountConnectionState() const; Shared::Availability getAccountAvailability() const; diff --git a/ui/models/messagefeed.cpp b/ui/models/messagefeed.cpp index f7e6b4b..5226ed3 100644 --- a/ui/models/messagefeed.cpp +++ b/ui/models/messagefeed.cpp @@ -17,35 +17,39 @@ */ #include "messagefeed.h" +#include "element.h" +#include "room.h" #include -const QHash MessageFeed::roles = { +const QHash Models::MessageFeed::roles = { {Text, "text"}, {Sender, "sender"}, {Date, "date"}, {DeliveryState, "deliveryState"}, {Correction, "correction"}, - {SentByMe,"sentByMe"} + {SentByMe,"sentByMe"}, + {Avatar, "avatar"} }; -MessageFeed::MessageFeed(QObject* parent): +Models::MessageFeed::MessageFeed(const Element* ri, QObject* parent): QAbstractListModel(parent), storage(), indexById(storage.get()), indexByTime(storage.get