2020-08-26 05:46:43 +00:00
|
|
|
#pragma once
|
|
|
|
#include <gtkmm.h>
|
|
|
|
#include "../discord/discord.hpp"
|
|
|
|
|
2020-08-27 22:50:47 +00:00
|
|
|
enum class ChatDisplayType {
|
|
|
|
Unknown,
|
|
|
|
Text,
|
|
|
|
};
|
|
|
|
|
2020-08-30 06:00:56 +00:00
|
|
|
class Abaddon;
|
|
|
|
|
2020-08-30 02:45:27 +00:00
|
|
|
// contains the username and timestamp, chat items get stuck into its box
|
|
|
|
class ChatMessageContainer : public Gtk::ListBoxRow {
|
|
|
|
public:
|
|
|
|
Snowflake UserID;
|
|
|
|
|
|
|
|
ChatMessageContainer(const MessageData *data);
|
|
|
|
void AddNewContent(Gtk::Widget *widget, bool prepend = false);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
Gtk::Box *m_main_box;
|
|
|
|
Gtk::Box *m_content_box;
|
|
|
|
Gtk::Box *m_meta_box;
|
|
|
|
Gtk::Label *m_author;
|
|
|
|
Gtk::Label *m_timestamp;
|
|
|
|
};
|
|
|
|
|
|
|
|
class ChatMessageItem {
|
2020-08-26 05:46:43 +00:00
|
|
|
public:
|
2020-08-30 06:00:56 +00:00
|
|
|
ChatMessageItem();
|
|
|
|
void SetAbaddon(Abaddon *ptr);
|
|
|
|
|
|
|
|
Snowflake ChannelID;
|
2020-08-26 05:46:43 +00:00
|
|
|
Snowflake ID;
|
2020-08-30 06:00:56 +00:00
|
|
|
ChatDisplayType MessageType = ChatDisplayType::Unknown;
|
2020-08-29 05:14:07 +00:00
|
|
|
|
2020-08-30 06:00:56 +00:00
|
|
|
virtual void ShowMenu(const GdkEvent *event);
|
|
|
|
void AddMenuItem(Gtk::MenuItem *item);
|
2020-08-29 05:14:07 +00:00
|
|
|
virtual void MarkAsDeleted() = 0;
|
2020-08-31 00:24:02 +00:00
|
|
|
virtual void MarkAsEdited() = 0;
|
2020-08-30 06:00:56 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
void AttachMenuHandler(Gtk::Widget *widget);
|
|
|
|
void on_menu_copy_id();
|
|
|
|
void on_menu_message_delete();
|
|
|
|
|
|
|
|
Gtk::Menu m_menu;
|
|
|
|
Gtk::MenuItem *m_menu_copy_id;
|
|
|
|
Gtk::MenuItem *m_menu_delete_message;
|
|
|
|
|
|
|
|
Abaddon *m_abaddon = nullptr;
|
2020-08-26 05:46:43 +00:00
|
|
|
};
|
|
|
|
|
2020-08-30 02:45:27 +00:00
|
|
|
class ChatMessageTextItem
|
|
|
|
: public Gtk::TextView // oh well
|
|
|
|
, public ChatMessageItem {
|
2020-08-26 05:46:43 +00:00
|
|
|
public:
|
2020-08-27 22:50:47 +00:00
|
|
|
ChatMessageTextItem(const MessageData *data);
|
2020-08-31 00:24:02 +00:00
|
|
|
|
|
|
|
void EditContent(std::string content);
|
|
|
|
|
2020-08-29 05:14:07 +00:00
|
|
|
virtual void MarkAsDeleted();
|
2020-08-31 00:24:02 +00:00
|
|
|
virtual void MarkAsEdited();
|
2020-08-30 06:00:56 +00:00
|
|
|
|
|
|
|
protected:
|
2020-08-31 00:24:02 +00:00
|
|
|
void UpdateAttributes();
|
|
|
|
|
|
|
|
std::string m_content;
|
|
|
|
|
|
|
|
bool m_was_deleted = false;
|
|
|
|
bool m_was_edited = false;
|
|
|
|
|
2020-08-30 06:00:56 +00:00
|
|
|
void on_menu_copy_content();
|
|
|
|
Gtk::MenuItem *m_menu_copy_content;
|
|
|
|
Gtk::MenuItem *m_menu_delete_message;
|
2020-08-26 05:46:43 +00:00
|
|
|
};
|