From fd2d4d6db3c1ed93f1860260a0519c2284b97ffa Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Sun, 28 Jul 2019 23:14:10 -0400 Subject: [PATCH] Update mentions dialog Mentions are now separated into 'this room' and 'all rooms' tab., which allows the user to filter on the current room if they desire. Should add additional logic in the future to show which room the mention was in the for the 'all rooms' view. --- resources/langs/nheko_de.ts | 31 ++++++++++---- resources/langs/nheko_el.ts | 31 ++++++++++---- resources/langs/nheko_en.ts | 31 ++++++++++---- resources/langs/nheko_fi.ts | 31 ++++++++++---- resources/langs/nheko_fr.ts | 31 ++++++++++---- resources/langs/nheko_nl.ts | 31 ++++++++++---- resources/langs/nheko_pl.ts | 31 ++++++++++---- resources/langs/nheko_ru.ts | 31 ++++++++++---- resources/langs/nheko_zh_CN.ts | 31 ++++++++++---- src/ChatPage.cpp | 5 +-- src/dialogs/UserMentions.cpp | 75 ++++++++++++++++++++++++++-------- src/dialogs/UserMentions.h | 15 +++++-- 12 files changed, 270 insertions(+), 104 deletions(-) diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index 15497d60..b596fb67 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -12,7 +12,7 @@ ChatPage - + Failed to upload image. Please try again. Hochladen des Bildes fehlgeschlagen. Bitte versuche es erneut. @@ -977,6 +977,19 @@ Medien-Größe: %2 Hochladen der Bilddatei fehlgeschlagen: %s + + dialogs::UserMentions + + + This Room + + + + + All Rooms + + + dialogs::UserProfile @@ -1056,32 +1069,32 @@ Medien-Größe: %2 - + %1 an image - + %1 a file - + %1 a video clip - + %1 a sticker - + %1 a notification - + %1 an encrypted message @@ -1089,7 +1102,7 @@ Medien-Größe: %2 message-description: - + sent For when someone else is the sender @@ -1108,7 +1121,7 @@ Medien-Größe: %2 utils - + You Du diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts index 84b76ba4..700c3d57 100644 --- a/resources/langs/nheko_el.ts +++ b/resources/langs/nheko_el.ts @@ -12,7 +12,7 @@ ChatPage - + Failed to upload image. Please try again. @@ -975,6 +975,19 @@ Media size: %2 + + dialogs::UserMentions + + + This Room + + + + + All Rooms + + + dialogs::UserProfile @@ -1054,32 +1067,32 @@ Media size: %2 - + %1 an image - + %1 a file - + %1 a video clip - + %1 a sticker - + %1 a notification - + %1 an encrypted message @@ -1087,7 +1100,7 @@ Media size: %2 message-description: - + sent For when someone else is the sender @@ -1106,7 +1119,7 @@ Media size: %2 utils - + You diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index f44f8a73..a8329a94 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -12,7 +12,7 @@ ChatPage - + Failed to upload image. Please try again. Failed to upload image. Please try again. @@ -979,6 +979,19 @@ Media size: %2 Failed to upload image: %s + + dialogs::UserMentions + + + This Room + + + + + All Rooms + + + dialogs::UserProfile @@ -1058,32 +1071,32 @@ Media size: %2 %1 an audio clip - + %1 an image %1 an image - + %1 a file %1 a file - + %1 a video clip %1 a video clip - + %1 a sticker %1 a sticker - + %1 a notification %1 a notification - + %1 an encrypted message %1 an encrypted message @@ -1091,7 +1104,7 @@ Media size: %2 message-description: - + sent For when someone else is the sender sent @@ -1110,7 +1123,7 @@ Media size: %2 utils - + You You diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts index 6494664a..89eb33b7 100644 --- a/resources/langs/nheko_fi.ts +++ b/resources/langs/nheko_fi.ts @@ -12,7 +12,7 @@ ChatPage - + Failed to upload image. Please try again. Kuvan lähettäminen epäonnistui. Ole hyvä ja yritä uudelleen. @@ -979,6 +979,19 @@ Median koko: %2 Kuvan lähetys epäonnistui: %s + + dialogs::UserMentions + + + This Room + + + + + All Rooms + + + dialogs::UserProfile @@ -1058,32 +1071,32 @@ Median koko: %2 - + %1 an image - + %1 a file - + %1 a video clip - + %1 a sticker - + %1 a notification - + %1 an encrypted message @@ -1091,7 +1104,7 @@ Median koko: %2 message-description: - + sent For when someone else is the sender @@ -1110,7 +1123,7 @@ Median koko: %2 utils - + You Sinä diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts index 600d191c..42f82b0f 100644 --- a/resources/langs/nheko_fr.ts +++ b/resources/langs/nheko_fr.ts @@ -12,7 +12,7 @@ ChatPage - + Failed to upload image. Please try again. @@ -978,6 +978,19 @@ Taille du média : %2 + + dialogs::UserMentions + + + This Room + + + + + All Rooms + + + dialogs::UserProfile @@ -1057,32 +1070,32 @@ Taille du média : %2 - + %1 an image - + %1 a file - + %1 a video clip - + %1 a sticker - + %1 a notification - + %1 an encrypted message @@ -1090,7 +1103,7 @@ Taille du média : %2 message-description: - + sent For when someone else is the sender @@ -1109,7 +1122,7 @@ Taille du média : %2 utils - + You diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts index aa1c6928..53840f82 100644 --- a/resources/langs/nheko_nl.ts +++ b/resources/langs/nheko_nl.ts @@ -12,7 +12,7 @@ ChatPage - + Failed to upload image. Please try again. @@ -977,6 +977,19 @@ Mediagrootte: %2 + + dialogs::UserMentions + + + This Room + + + + + All Rooms + + + dialogs::UserProfile @@ -1056,32 +1069,32 @@ Mediagrootte: %2 - + %1 an image - + %1 a file - + %1 a video clip - + %1 a sticker - + %1 a notification - + %1 an encrypted message @@ -1089,7 +1102,7 @@ Mediagrootte: %2 message-description: - + sent For when someone else is the sender @@ -1108,7 +1121,7 @@ Mediagrootte: %2 utils - + You diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts index 4c90292f..f4f98dbb 100644 --- a/resources/langs/nheko_pl.ts +++ b/resources/langs/nheko_pl.ts @@ -12,7 +12,7 @@ ChatPage - + Failed to upload image. Please try again. Nie udało się wysłać obrazu. Spróbuj ponownie. @@ -981,6 +981,19 @@ Rozmiar multimediów: %2 Nie udało się wysłać obrazu: %s + + dialogs::UserMentions + + + This Room + + + + + All Rooms + + + dialogs::UserProfile @@ -1060,32 +1073,32 @@ Rozmiar multimediów: %2 - + %1 an image - + %1 a file - + %1 a video clip - + %1 a sticker - + %1 a notification - + %1 an encrypted message @@ -1093,7 +1106,7 @@ Rozmiar multimediów: %2 message-description: - + sent For when someone else is the sender @@ -1112,7 +1125,7 @@ Rozmiar multimediów: %2 utils - + You diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index 958e93fa..04285c72 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -12,7 +12,7 @@ ChatPage - + Failed to upload image. Please try again. Не удалось загрузить изображение. Пожалуйста, попробуйте еще раз. @@ -980,6 +980,19 @@ Media size: %2 Не удалось загрузить изображение: %s + + dialogs::UserMentions + + + This Room + + + + + All Rooms + + + dialogs::UserProfile @@ -1059,32 +1072,32 @@ Media size: %2 - + %1 an image - + %1 a file - + %1 a video clip - + %1 a sticker - + %1 a notification - + %1 an encrypted message @@ -1092,7 +1105,7 @@ Media size: %2 message-description: - + sent For when someone else is the sender @@ -1111,7 +1124,7 @@ Media size: %2 utils - + You diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts index 8c7b2d34..1e539e64 100644 --- a/resources/langs/nheko_zh_CN.ts +++ b/resources/langs/nheko_zh_CN.ts @@ -12,7 +12,7 @@ ChatPage - + Failed to upload image. Please try again. 上传图像失败。请重试。 @@ -977,6 +977,19 @@ Media size: %2 上传图像失败:%s + + dialogs::UserMentions + + + This Room + + + + + All Rooms + + + dialogs::UserProfile @@ -1064,32 +1077,32 @@ Media size: %2 - + %1 an image - + %1 a file - + %1 a video clip - + %1 a sticker - + %1 a notification - + %1 an encrypted message @@ -1097,7 +1110,7 @@ Media size: %2 message-description: - + sent For when someone else is the sender @@ -1116,7 +1129,7 @@ Media size: %2 utils - + You diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 18188429..ca18d810 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -91,12 +91,11 @@ ChatPage::ChatPage(QSharedPointer userSettings, QWidget *parent) connect(sidebarActions_, &SideBarActions::createRoom, this, &ChatPage::createRoom); user_info_widget_ = new UserInfoWidget(sideBar_); - // user_mentions_widget_ = new UserMentionsWidget(sideBar_); + // user_mentions_widget_ = new UserMentionsWidget(top_bar_); room_list_ = new RoomList(sideBar_); connect(room_list_, &RoomList::joinRoom, this, &ChatPage::joinRoom); sideBarLayout_->addWidget(user_info_widget_); - // sideBarLayout_->addWidget(user_mentions_widget_); sideBarLayout_->addWidget(room_list_); sideBarLayout_->addWidget(sidebarActions_); @@ -1000,7 +999,7 @@ ChatPage::showNotificationsDialog(const mtx::responses::Notifications &res, cons const auto user_id = utils::event_sender(item.event); const auto body = utils::event_body(item.event); - notifDialog->pushItem(event_id, user_id, body, room_id); + notifDialog->pushItem(event_id, user_id, body, room_id, current_room_); } catch (const lmdb::error &e) { nhlog::db()->warn("error while sending desktop notification: {}", e.what()); diff --git a/src/dialogs/UserMentions.cpp b/src/dialogs/UserMentions.cpp index 8f56ec93..4cfcdaca 100644 --- a/src/dialogs/UserMentions.cpp +++ b/src/dialogs/UserMentions.cpp @@ -1,3 +1,4 @@ +#include #include #include "UserMentions.h" @@ -8,31 +9,50 @@ using namespace dialogs; UserMentions::UserMentions(QWidget *parent) : QWidget{parent} { + tab_layout_ = new QTabWidget(this); + top_layout_ = new QVBoxLayout(this); top_layout_->setSpacing(0); top_layout_->setMargin(0); - scroll_area_ = new QScrollArea(this); - scroll_area_->setWidgetResizable(true); - scroll_area_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + local_scroll_area_ = new QScrollArea(this); + local_scroll_area_->setWidgetResizable(true); + local_scroll_area_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + local_scroll_widget_ = new QWidget(this); + local_scroll_widget_->setObjectName("local_scroll_widget"); + + all_scroll_area_ = new QScrollArea(this); + all_scroll_area_->setWidgetResizable(true); + all_scroll_area_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - scroll_widget_ = new QWidget(this); - scroll_widget_->setObjectName("scroll_widget"); + all_scroll_widget_ = new QWidget(this); + all_scroll_widget_->setObjectName("all_scroll_widget"); // Height of the typing display. QFont f; f.setPointSizeF(f.pointSizeF() * 0.9); const int bottomMargin = QFontMetrics(f).height() + 6; - scroll_layout_ = new QVBoxLayout(scroll_widget_); - scroll_layout_->setContentsMargins(4, 0, 15, bottomMargin); - scroll_layout_->setSpacing(0); - scroll_layout_->setObjectName("timelinescrollarea"); + local_scroll_layout_ = new QVBoxLayout(local_scroll_widget_); + local_scroll_layout_->setContentsMargins(4, 0, 15, bottomMargin); + local_scroll_layout_->setSpacing(0); + local_scroll_layout_->setObjectName("localcrollarea"); - scroll_area_->setWidget(scroll_widget_); - scroll_area_->setAlignment(Qt::AlignBottom); + all_scroll_layout_ = new QVBoxLayout(all_scroll_widget_); + all_scroll_layout_->setContentsMargins(4, 0, 15, bottomMargin); + all_scroll_layout_->setSpacing(0); + all_scroll_layout_->setObjectName("allcrollarea"); - top_layout_->addWidget(scroll_area_); + local_scroll_area_->setWidget(local_scroll_widget_); + local_scroll_area_->setAlignment(Qt::AlignBottom); + + all_scroll_area_->setWidget(all_scroll_widget_); + all_scroll_area_->setAlignment(Qt::AlignBottom); + + tab_layout_->addTab(local_scroll_area_, tr("This Room")); + tab_layout_->addTab(all_scroll_area_, tr("All Rooms")); + top_layout_->addWidget(tab_layout_); setLayout(top_layout_); } @@ -41,18 +61,41 @@ void UserMentions::pushItem(const QString &event_id, const QString &user_id, const QString &body, - const QString &room_id) + const QString &room_id, + const QString ¤t_room_id) { + setUpdatesEnabled(false); + + // Add to the 'all' section TimelineItem *view_item = new TimelineItem( - mtx::events::MessageType::Text, user_id, body, true, room_id, scroll_widget_); + mtx::events::MessageType::Text, user_id, body, true, room_id, all_scroll_widget_); view_item->setEventId(event_id); - setUpdatesEnabled(false); view_item->hide(); - scroll_layout_->addWidget(view_item); + all_scroll_layout_->addWidget(view_item); QTimer::singleShot(0, this, [view_item, this]() { view_item->show(); view_item->adjustSize(); setUpdatesEnabled(true); }); + + // if it matches the current room... add it to the current room as well. + if (QString::compare(room_id, current_room_id, Qt::CaseInsensitive) == 0) { + // Add to the 'local' section + TimelineItem *local_view_item = new TimelineItem(mtx::events::MessageType::Text, + user_id, + body, + true, + room_id, + local_scroll_widget_); + local_view_item->setEventId(event_id); + local_view_item->hide(); + + local_scroll_layout_->addWidget(local_view_item); + + QTimer::singleShot(0, this, [local_view_item, this]() { + local_view_item->show(); + local_view_item->adjustSize(); + }); + } } \ No newline at end of file diff --git a/src/dialogs/UserMentions.h b/src/dialogs/UserMentions.h index e995b207..9b43dcfd 100644 --- a/src/dialogs/UserMentions.h +++ b/src/dialogs/UserMentions.h @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -15,14 +16,20 @@ public: void pushItem(const QString &event_id, const QString &user_id, const QString &body, - const QString &room_id); + const QString &room_id, + const QString ¤t_room_id); private: + QTabWidget *tab_layout_; QVBoxLayout *top_layout_; - QVBoxLayout *scroll_layout_; + QVBoxLayout *local_scroll_layout_; + QVBoxLayout *all_scroll_layout_; - QScrollArea *scroll_area_; - QWidget *scroll_widget_; + QScrollArea *local_scroll_area_; + QWidget *local_scroll_widget_; + + QScrollArea *all_scroll_area_; + QWidget *all_scroll_widget_; }; } \ No newline at end of file