diff options
Diffstat (limited to 'src/components/memberlist.hpp')
-rw-r--r-- | src/components/memberlist.hpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/components/memberlist.hpp b/src/components/memberlist.hpp new file mode 100644 index 0000000..60a25bc --- /dev/null +++ b/src/components/memberlist.hpp @@ -0,0 +1,44 @@ +#pragma once +#include <gtkmm.h> +#include <mutex> +#include <unordered_map> +#include <optional> +#include "discord/discord.hpp" + +class LazyImage; +class StatusIndicator; +class MemberListUserRow : public Gtk::ListBoxRow { +public: + MemberListUserRow(const std::optional<GuildData> &guild, const UserData &data); + + Snowflake ID; + +private: + Gtk::EventBox *m_ev; + Gtk::Box *m_box; + LazyImage *m_avatar; + StatusIndicator *m_status_indicator; + Gtk::Label *m_label; + Gtk::Image *m_crown = nullptr; +}; + +class MemberList { +public: + MemberList(); + Gtk::Widget *GetRoot() const; + + void UpdateMemberList(); + void Clear(); + void SetActiveChannel(Snowflake id); + +private: + void AttachUserMenuHandler(Gtk::ListBoxRow *row, Snowflake id); + + Gtk::ScrolledWindow *m_main; + Gtk::ListBox *m_listbox; + + Snowflake m_guild_id; + Snowflake m_chan_id; + + std::unordered_map<Snowflake, Gtk::ListBoxRow *> m_id_to_row; +}; |