diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-11-28 22:48:30 -0500 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-11-28 22:48:30 -0500 |
commit | e1703aea3fd597b23bde90e6c505278c517be611 (patch) | |
tree | 37d98fc90c9cd0844388bfb79beda2204f44af92 /src/windows/guildsettings/memberspane.hpp | |
parent | fd53a76bf6f53a095a639765923a30f2206b2cd6 (diff) | |
parent | e02107feea8214a045e6faa969f00dcbc0d2b072 (diff) | |
download | abaddon-portaudio-e1703aea3fd597b23bde90e6c505278c517be611.tar.gz abaddon-portaudio-e1703aea3fd597b23bde90e6c505278c517be611.zip |
merge master
Diffstat (limited to 'src/windows/guildsettings/memberspane.hpp')
-rw-r--r-- | src/windows/guildsettings/memberspane.hpp | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/src/windows/guildsettings/memberspane.hpp b/src/windows/guildsettings/memberspane.hpp new file mode 100644 index 0000000..01398da --- /dev/null +++ b/src/windows/guildsettings/memberspane.hpp @@ -0,0 +1,135 @@ +#pragma once +#include <unordered_set> +#include <gtkmm.h> +#include "discord/member.hpp" +#include "discord/guild.hpp" +#include "components/lazyimage.hpp" + +class GuildSettingsMembersPaneRolesItem : public Gtk::ListBoxRow { +public: + GuildSettingsMembersPaneRolesItem(bool sensitive, const RoleData &role); + void SetChecked(bool checked); + void SetToggleable(bool toggleable); + void UpdateRoleData(const RoleData &role); + + Snowflake RoleID; + int Position; + +private: + void UpdateLabel(); + void ComputeSensitivity(); + bool m_desired_sensitivity = true; + + RoleData m_role; + + Gtk::Box m_main; + Gtk::CheckButton m_check; + Gtk::Label m_label; + + // own thing so we can stop it from actually changing + typedef sigc::signal<void, Snowflake, bool> type_signal_role_click; + + type_signal_role_click m_signal_role_click; + +public: + type_signal_role_click signal_role_click(); +}; + +class GuildSettingsMembersPaneRoles : public Gtk::ScrolledWindow { +public: + GuildSettingsMembersPaneRoles(Snowflake guild_id); + + void SetRoles(Snowflake user_id, const std::vector<Snowflake> &roles, bool is_owner); + +private: + void CreateRow(bool has_manage_roles, const RoleData &role, bool is_owner); + + void OnRoleToggle(Snowflake role_id, bool new_set); + + void OnRoleCreate(Snowflake guild_id, Snowflake role_id); + void OnRoleUpdate(Snowflake guild_id, Snowflake role_id); + void OnRoleDelete(Snowflake guild_id, Snowflake role_id); + + int m_hoisted_position = 0; + + std::vector<sigc::connection> m_update_connection; + + std::unordered_set<Snowflake> m_set_role_ids; + + Snowflake GuildID; + Snowflake UserID; + + Gtk::ListBox m_list; + + std::unordered_map<Snowflake, GuildSettingsMembersPaneRolesItem *> m_rows; +}; + +class GuildSettingsMembersPaneInfo : public Gtk::ScrolledWindow { +public: + GuildSettingsMembersPaneInfo(Snowflake guild_id); + + void SetUser(Snowflake user_id); + +private: + Snowflake GuildID; + Snowflake UserID; + + Gtk::Label m_bot; + Gtk::Label m_id; + Gtk::Label m_created; + Gtk::Label m_joined; + Gtk::Label m_nickname; + Gtk::Label m_boosting; + GuildSettingsMembersPaneRoles m_roles; + Gtk::Box m_box; +}; + +class GuildSettingsMembersPaneMembers : public Gtk::Box { +public: + GuildSettingsMembersPaneMembers(Snowflake id); + +private: + Snowflake GuildID; + + Gtk::Entry m_search; + Gtk::ScrolledWindow m_list_scroll; + Gtk::ListBox m_list; + + typedef sigc::signal<void, Snowflake> type_signal_member_select; + type_signal_member_select m_signal_member_select; + +public: + type_signal_member_select signal_member_select(); +}; + +class GuildSettingsMembersListItem : public Gtk::ListBoxRow { +public: + GuildSettingsMembersListItem(const GuildData &guild, const GuildMember &member); + + Glib::ustring DisplayTerm; + + Snowflake UserID; + Snowflake GuildID; + +private: + void UpdateColor(); + + Gtk::EventBox m_ev; + LazyImage m_avatar; + Gtk::Label m_name; + Gtk::Box m_main; + Gtk::Image *m_crown = nullptr; +}; + +class GuildSettingsMembersPane : public Gtk::Box { +public: + GuildSettingsMembersPane(Snowflake id); + +private: + Snowflake GuildID; + + Gtk::Box m_layout; + Gtk::Label m_note; + GuildSettingsMembersPaneMembers m_member_list; + GuildSettingsMembersPaneInfo m_member_info; +}; |