diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2020-08-30 02:00:56 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2020-08-30 02:00:56 -0400 |
commit | c90c777daa1d3bc4029380529033f3c51383bbb7 (patch) | |
tree | 48f3f3cdb88793ab20e4f7e7899b015edae4c1ce /components/chatmessage.cpp | |
parent | facb89012a4ed58397b5e7334a8cb5c3d751b85e (diff) | |
download | abaddon-portaudio-c90c777daa1d3bc4029380529033f3c51383bbb7.tar.gz abaddon-portaudio-c90c777daa1d3bc4029380529033f3c51383bbb7.zip |
add basic menu to chat messages
Diffstat (limited to 'components/chatmessage.cpp')
-rw-r--r-- | components/chatmessage.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/components/chatmessage.cpp b/components/chatmessage.cpp index 29b2ac6..6ac4a99 100644 --- a/components/chatmessage.cpp +++ b/components/chatmessage.cpp @@ -1,4 +1,5 @@ #include "chatmessage.hpp" +#include "../abaddon.hpp" ChatMessageContainer::ChatMessageContainer(const MessageData *data) { UserID = data->Author.ID; @@ -52,6 +53,56 @@ void ChatMessageContainer::AddNewContent(Gtk::Widget *widget, bool prepend) { m_content_box->pack_start(*widget); } +ChatMessageItem::ChatMessageItem() { + m_menu_copy_id = Gtk::manage(new Gtk::MenuItem("_Copy ID", true)); + m_menu_copy_id->signal_activate().connect(sigc::mem_fun(*this, &ChatMessageItem::on_menu_copy_id)); + m_menu.append(*m_menu_copy_id); + + m_menu_delete_message = Gtk::manage(new Gtk::MenuItem("_Delete Message", true)); + m_menu_delete_message->signal_activate().connect(sigc::mem_fun(*this, &ChatMessageItem::on_menu_message_delete)); + m_menu.append(*m_menu_delete_message); + + m_menu.show_all(); +} + +void ChatMessageItem::SetAbaddon(Abaddon *ptr) { + m_abaddon = ptr; +} + +void ChatMessageItem::on_menu_message_delete() { + m_abaddon->ActionChatDeleteMessage(ChannelID, ID); +} + +void ChatMessageItem::on_menu_copy_id() { + Gtk::Clipboard::get()->set_text(std::to_string(ID)); +} + +// broken format v +// clang-format off +void ChatMessageItem::AttachMenuHandler(Gtk::Widget *widget) { + widget->signal_button_press_event().connect([this](GdkEventButton *event) -> bool { + if (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY) { + ShowMenu(reinterpret_cast<GdkEvent *>(event)); + return true; + } + + return false; + }, false); +} +// clang-format on + +void ChatMessageItem::ShowMenu(const GdkEvent *event) { + auto &client = m_abaddon->GetDiscordClient(); + auto *data = client.GetMessage(ID); + m_menu_delete_message->set_sensitive(client.GetUserData().ID == data->Author.ID); + m_menu.popup_at_pointer(event); +} + +void ChatMessageItem::AddMenuItem(Gtk::MenuItem *item) { + item->show(); + m_menu.append(*item); +} + ChatMessageTextItem::ChatMessageTextItem(const MessageData *data) { set_can_focus(false); set_editable(false); @@ -60,6 +111,16 @@ ChatMessageTextItem::ChatMessageTextItem(const MessageData *data) { set_hexpand(true); get_buffer()->set_text(data->Content); show(); + + AttachMenuHandler(this); + m_menu_copy_content = Gtk::manage(new Gtk::MenuItem("Copy _Message", true)); + AddMenuItem(m_menu_copy_content); + m_menu_copy_content->signal_activate().connect(sigc::mem_fun(*this, &ChatMessageTextItem::on_menu_copy_content)); +} + +void ChatMessageTextItem::on_menu_copy_content() { + auto *data = m_abaddon->GetDiscordClient().GetMessage(ID); + Gtk::Clipboard::get()->set_text(data->Content); } void ChatMessageTextItem::MarkAsDeleted() { |