mirror of
https://github.com/celisej567/abaddon.git
synced 2026-09-06 20:15:19 +03:00
add basic menu to chat messages
This commit is contained in:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user