diff options
-rw-r--r-- | components/chatmessage.cpp | 11 | ||||
-rw-r--r-- | components/chatmessage.hpp | 1 | ||||
-rw-r--r-- | components/chatwindow.cpp | 32 |
3 files changed, 30 insertions, 14 deletions
diff --git a/components/chatmessage.cpp b/components/chatmessage.cpp index 98bbcdc..c846e20 100644 --- a/components/chatmessage.cpp +++ b/components/chatmessage.cpp @@ -395,8 +395,15 @@ ChatMessageUserEventItem::ChatMessageUserEventItem(const Message *data) { set_hexpand(true); m_label->set_halign(Gtk::ALIGN_START); m_label->set_use_markup(); - if (data->Type == MessageType::GUILD_MEMBER_JOIN) - m_label->set_markup("<span color='#999999'><i>[user joined]</i></span>"); + switch (data->Type) { + case MessageType::GUILD_MEMBER_JOIN: + m_label->set_markup("<span color='#999999'><i>[user joined]</i></span>"); + break; + case MessageType::CHANNEL_PINNED_MESSAGE: + m_label->set_markup("<span color='#999999'><i>[message pinned]</i></span>"); + break; + default: break; + } add(*m_label); show_all(); diff --git a/components/chatmessage.hpp b/components/chatmessage.hpp index 35cdcd1..91c74f1 100644 --- a/components/chatmessage.hpp +++ b/components/chatmessage.hpp @@ -10,6 +10,7 @@ enum class ChatDisplayType { Embed, Image, GuildMemberJoin, + ChannelPinnedMessage, }; // contains the username and timestamp, chat items get stuck into its box diff --git a/components/chatwindow.cpp b/components/chatwindow.cpp index c0a09a5..fe56bf1 100644 --- a/components/chatwindow.cpp +++ b/components/chatwindow.cpp @@ -89,6 +89,8 @@ ChatDisplayType ChatWindow::GetMessageDisplayType(const Message *data) { return ChatDisplayType::Embed; else if (data->Type == MessageType::GUILD_MEMBER_JOIN) return ChatDisplayType::GuildMemberJoin; + else if (data->Type == MessageType::CHANNEL_PINNED_MESSAGE) + return ChatDisplayType::ChannelPinnedMessage; return ChatDisplayType::Unknown; } @@ -97,19 +99,25 @@ ChatMessageItem *ChatWindow::CreateMessageComponent(const Message *data) { auto type = GetMessageDisplayType(data); ChatMessageItem *widget = nullptr; - if (type == ChatDisplayType::Text) { - widget = Gtk::manage(new ChatMessageTextItem(data)); + switch (type) { + case ChatDisplayType::Text: { + widget = Gtk::manage(new ChatMessageTextItem(data)); - widget->signal_action_message_delete().connect([this](Snowflake channel_id, Snowflake id) { - m_signal_action_message_delete.emit(channel_id, id); - }); - widget->signal_action_message_edit().connect([this](Snowflake channel_id, Snowflake id) { - m_signal_action_message_edit.emit(channel_id, id); - }); - } else if (type == ChatDisplayType::Embed) { - widget = Gtk::manage(new ChatMessageEmbedItem(data)); - } else if (type == ChatDisplayType::GuildMemberJoin) { - widget = Gtk::manage(new ChatMessageUserEventItem(data)); + widget->signal_action_message_delete().connect([this](Snowflake channel_id, Snowflake id) { + m_signal_action_message_delete.emit(channel_id, id); + }); + widget->signal_action_message_edit().connect([this](Snowflake channel_id, Snowflake id) { + m_signal_action_message_edit.emit(channel_id, id); + }); + } break; + case ChatDisplayType::Embed: { + widget = Gtk::manage(new ChatMessageEmbedItem(data)); + } break; + case ChatDisplayType::GuildMemberJoin: + case ChatDisplayType::ChannelPinnedMessage: { + widget = Gtk::manage(new ChatMessageUserEventItem(data)); + } break; + default: break; } if (widget == nullptr) return nullptr; |