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); - scroll_widget_ = new QWidget(this); - scroll_widget_->setObjectName("scroll_widget"); + 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); + + 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) { - TimelineItem *view_item = new TimelineItem( - mtx::events::MessageType::Text, user_id, body, true, room_id, scroll_widget_); - view_item->setEventId(event_id); setUpdatesEnabled(false); + + // Add to the 'all' section + TimelineItem *view_item = new TimelineItem( + mtx::events::MessageType::Text, user_id, body, true, room_id, all_scroll_widget_); + view_item->setEventId(event_id); 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