diff options
Diffstat (limited to 'components/friendslist.hpp')
-rw-r--r-- | components/friendslist.hpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/components/friendslist.hpp b/components/friendslist.hpp new file mode 100644 index 0000000..445f293 --- /dev/null +++ b/components/friendslist.hpp @@ -0,0 +1,70 @@ +#pragma once +#include <gtkmm.h> +#include "../discord/relationship.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: + 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; + +private: + 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; +}; |