diff options
Diffstat (limited to 'components/friendslist.hpp')
-rw-r--r-- | components/friendslist.hpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/components/friendslist.hpp b/components/friendslist.hpp new file mode 100644 index 0000000..c161de4 --- /dev/null +++ b/components/friendslist.hpp @@ -0,0 +1,79 @@ +#pragma once +#include <gtkmm.h> +#include "../discord/relationship.hpp" +#include "../discord/activity.hpp" + +class FriendsListAddComponent : public Gtk::Box { +public: + FriendsListAddComponent(); + +private: + Gtk::Label m_label; + Gtk::Label m_status; + Gtk::Entry m_entry; + Gtk::Button m_add; + Gtk::Box m_box; +}; + +class FriendsList : public Gtk::Box { +public: + FriendsList(); + +private: + void OnRelationshipRemove(Snowflake id, RelationshipType type); + + enum FilterMode { + FILTER_FRIENDS, + FILTER_ONLINE, + FILTER_PENDING, + FILTER_BLOCKED, + }; + + FilterMode m_filter_mode; + + int ListSortFunc(Gtk::ListBoxRow *a, Gtk::ListBoxRow *b); + bool ListFilterFunc(Gtk::ListBoxRow *row); + + FriendsListAddComponent m_add; + Gtk::RadioButtonGroup m_group; + Gtk::ButtonBox m_buttons; + Gtk::ScrolledWindow m_scroll; + Gtk::ListBox m_list; +}; + +class FriendsListFriendRow : public Gtk::ListBoxRow { +public: + FriendsListFriendRow(RelationshipType type, const UserData &str); + + Snowflake ID; + RelationshipType Type; + Glib::ustring Name; + PresenceStatus Status; + +private: + void UpdatePresenceLabel(); + void OnPresenceUpdate(const UserData &user, PresenceStatus status); + + Gtk::Label *m_status_lbl; + + Gtk::Menu m_menu; + Gtk::MenuItem m_remove; // or cancel or ignore + Gtk::MenuItem m_accept; // incoming + + using type_signal_remove = sigc::signal<void>; + using type_signal_accept = sigc::signal<void>; + type_signal_remove m_signal_remove; + type_signal_accept m_signal_accept; + +public: + type_signal_remove signal_action_remove(); + type_signal_accept signal_action_accept(); +}; + +class FriendsListWindow : public Gtk::Window { +public: + FriendsListWindow(); + +private: + FriendsList m_friends; +}; |