Files
abaddon/windows/guildsettings/rolespane.hpp
ouwou ae38add931 add ability to reorder roles
- some other small tweaks
2021-03-12 01:55:46 -05:00

102 lines
2.4 KiB
C++

#pragma once
#include <gtkmm.h>
#include <unordered_map>
#include "../../discord/guild.hpp"
#include "../../components/draglistbox.hpp"
class GuildSettingsRolesPaneRolesListItem : public Gtk::ListBoxRow {
public:
GuildSettingsRolesPaneRolesListItem(const GuildData &guild, const RoleData &role);
Glib::ustring DisplayTerm;
Snowflake GuildID;
Snowflake RoleID;
int Position;
private:
void UpdateItem(const RoleData &role);
Gtk::EventBox m_ev;
Gtk::Label m_name;
};
class GuildSettingsRolesPaneRoles : public Gtk::Box {
public:
GuildSettingsRolesPaneRoles(Snowflake guild_id);
private:
void OnRoleCreate(Snowflake guild_id, Snowflake role_id);
void OnRoleDelete(Snowflake guild_id, Snowflake role_id);
Snowflake GuildID;
Gtk::Entry m_search;
Gtk::ScrolledWindow m_list_scroll;
DragListBox m_list;
typedef sigc::signal<void, Snowflake /* role_id */> type_signal_role_select;
type_signal_role_select m_signal_role_select;
public:
std::unordered_map<Snowflake, GuildSettingsRolesPaneRolesListItem *> m_rows;
type_signal_role_select signal_role_select();
};
class GuildSettingsRolesPanePermItem : public Gtk::CheckButton {
public:
GuildSettingsRolesPanePermItem(Permission perm);
private:
Permission m_permission;
typedef sigc::signal<void, Permission, bool> type_signal_permission_click;
type_signal_permission_click m_signal_permission;
public:
type_signal_permission_click signal_permission_click();
};
class GuildSettingsRolesPaneInfo : public Gtk::ScrolledWindow {
public:
GuildSettingsRolesPaneInfo(Snowflake guild_id);
void SetRole(const RoleData &role);
private:
void OnRoleUpdate(Snowflake guild_id, Snowflake role_id);
void OnPermissionToggle(Permission perm, bool new_set);
void UpdateRoleName();
Snowflake GuildID;
Snowflake RoleID;
Permission m_perms;
std::vector<sigc::connection> m_update_connections;
Gtk::Box m_layout;
Gtk::Box m_meta;
Gtk::Entry m_role_name;
Gtk::ColorButton m_color_button;
Gtk::Grid m_grid;
std::unordered_map<Permission, GuildSettingsRolesPanePermItem *> m_perm_items;
};
class GuildSettingsRolesPane : public Gtk::Box {
public:
GuildSettingsRolesPane(Snowflake id);
private:
void OnRoleSelect(Snowflake role_id);
Snowflake GuildID;
Gtk::Box m_layout;
GuildSettingsRolesPaneRoles m_roles_list;
GuildSettingsRolesPaneInfo m_roles_perms;
};