From 3689f5ae9f439e9d3883817873928c25048a19cd Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Fri, 25 Sep 2020 23:02:13 -0400 Subject: redo chat messages just a tad --- components/chatwindow.hpp | 70 ++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 34 deletions(-) (limited to 'components/chatwindow.hpp') diff --git a/components/chatwindow.hpp b/components/chatwindow.hpp index 570299d..a399c6b 100644 --- a/components/chatwindow.hpp +++ b/components/chatwindow.hpp @@ -1,66 +1,68 @@ #pragma once #include -#include +#include #include -#include -#include -#include "chatmessage.hpp" +#include +#include #include "../discord/discord.hpp" +#include "chatmessage.hpp" class ChatWindow { public: ChatWindow(); Gtk::Widget *GetRoot() const; - void SetActiveChannel(Snowflake id); Snowflake GetActiveChannel() const; - void SetMessages(std::set msgs); - void AddNewMessage(Snowflake id); - void AddNewHistory(const std::vector &msgs); - void DeleteMessage(Snowflake id); - void UpdateMessage(Snowflake id); + void Clear(); + void SetMessages(const std::set &msgs); // clear contents and replace with given set + void SetActiveChannel(Snowflake id); + void AddNewMessage(Snowflake id); // append new message to bottom + void DeleteMessage(Snowflake id); // add [deleted] indicator + void UpdateMessage(Snowflake id); // add [edited] indicator + void AddNewHistory(const std::vector &id); // prepend messages void InsertChatInput(std::string text); - Snowflake GetOldestListedMessage(); + Snowflake GetOldestListedMessage(); // oldest message that is currently in the ListBox protected: - void ScrollToBottom(); + ChatMessageItemContainer *CreateMessageComponent(Snowflake id); // to be inserted into header's content box + void ProcessNewMessage(Snowflake id, bool prepend); // creates and adds components + void SetMessagesInternal(); void AddNewMessageInternal(); - void AddNewHistoryInternal(); void DeleteMessageInternal(); void UpdateMessageInternal(); - ChatDisplayType GetMessageDisplayType(const Message *data); - ChatMessageItem *CreateMessageComponent(const Message *data); - void ProcessMessage(const Message *data, bool prepend = false); - int m_num_rows = 0; // youd think thered be a Gtk::ListBox::get_row_count or something but nope - std::unordered_map m_id_to_widget; + void AddNewHistoryInternal(); - bool m_scroll_to_bottom = true; + int m_num_rows = 0; + std::unordered_map m_id_to_widget; - bool on_key_press_event(GdkEventKey *e); - void on_scroll_edge_overshot(Gtk::PositionType pos); - - Glib::Dispatcher m_message_set_dispatch; - std::queue> m_message_set_queue; + Glib::Dispatcher m_set_messsages_dispatch; + std::queue> m_set_messages_queue; Glib::Dispatcher m_new_message_dispatch; std::queue m_new_message_queue; - Glib::Dispatcher m_new_history_dispatch; - std::queue> m_new_history_queue; - Glib::Dispatcher m_message_delete_dispatch; - std::queue m_message_delete_queue; - Glib::Dispatcher m_message_edit_dispatch; - std::queue m_message_edit_queue; - std::mutex m_update_mutex; + Glib::Dispatcher m_delete_message_dispatch; + std::queue m_delete_message_queue; + Glib::Dispatcher m_update_message_dispatch; + std::queue m_update_message_queue; + Glib::Dispatcher m_history_dispatch; + std::queue> m_history_queue; + mutable std::mutex m_update_mutex; Snowflake m_active_channel; + bool on_key_press_event(GdkEventKey *e); + void on_scroll_edge_overshot(Gtk::PositionType pos); + + void ScrollToBottom(); + bool m_should_scroll_to_bottom = true; + Gtk::Box *m_main; - Gtk::ListBox *m_listbox; - Gtk::Viewport *m_viewport; + Gtk::ListBox *m_list; Gtk::ScrolledWindow *m_scroll; - Gtk::ScrolledWindow *m_entry_scroll; + Gtk::TextView *m_input; + Gtk::ScrolledWindow *m_input_scroll; public: typedef sigc::signal type_signal_action_message_delete; -- cgit v1.2.3