summaryrefslogtreecommitdiff
path: root/windows/guildsettings/rolespane.hpp
blob: e5e342a4ef6036c6253c1e77b98e350e329a371a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#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);
    void OnRoleUpdate(Snowflake guild_id, Snowflake role_id);

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