mirror of
https://github.com/celisej567/abaddon.git
synced 2026-09-06 20:15:19 +03:00
93 lines
2.1 KiB
C++
93 lines
2.1 KiB
C++
#pragma once
|
|
#include <gtkmm.h>
|
|
#include "../discord/objects.hpp"
|
|
|
|
class FriendsListAddComponent : public Gtk::Box {
|
|
public:
|
|
FriendsListAddComponent();
|
|
|
|
private:
|
|
void Submit();
|
|
bool OnKeyPress(GdkEventKey *e);
|
|
|
|
Gtk::Label m_label;
|
|
Gtk::Label m_status;
|
|
Gtk::Entry m_entry;
|
|
Gtk::Button m_add;
|
|
Gtk::Box m_box;
|
|
|
|
bool m_requesting = false;
|
|
};
|
|
|
|
class FriendsListFriendRow;
|
|
class FriendsList : public Gtk::Box {
|
|
public:
|
|
FriendsList();
|
|
|
|
private:
|
|
FriendsListFriendRow *MakeRow(const UserData &user, RelationshipType type);
|
|
|
|
void OnRelationshipAdd(const RelationshipAddData &data);
|
|
void OnRelationshipRemove(Snowflake id, RelationshipType type);
|
|
|
|
void OnActionAccept(Snowflake id);
|
|
void OnActionRemove(Snowflake id);
|
|
|
|
void PopulateRelationships();
|
|
|
|
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;
|
|
};
|