Files
abaddon/components/friendslist.hpp
2021-05-07 03:04:05 -04:00

78 lines
1.7 KiB
C++

#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:
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;
};