diff options
Diffstat (limited to 'windows/guildsettings')
-rw-r--r-- | windows/guildsettings/auditlogpane.cpp | 13 | ||||
-rw-r--r-- | windows/guildsettings/auditlogpane.hpp | 7 | ||||
-rw-r--r-- | windows/guildsettings/banspane.cpp | 18 | ||||
-rw-r--r-- | windows/guildsettings/banspane.hpp | 7 | ||||
-rw-r--r-- | windows/guildsettings/invitespane.cpp | 16 | ||||
-rw-r--r-- | windows/guildsettings/invitespane.hpp | 7 |
6 files changed, 54 insertions, 14 deletions
diff --git a/windows/guildsettings/auditlogpane.cpp b/windows/guildsettings/auditlogpane.cpp index d6b6fee..cd82425 100644 --- a/windows/guildsettings/auditlogpane.cpp +++ b/windows/guildsettings/auditlogpane.cpp @@ -9,15 +9,20 @@ GuildSettingsAuditLogPane::GuildSettingsAuditLogPane(Snowflake id) set_hexpand(true); set_vexpand(true); + m_list.set_selection_mode(Gtk::SELECTION_NONE); + m_list.show(); + add(m_list); +} + +void GuildSettingsAuditLogPane::on_switched_to() { + if (m_requested) return; + m_requested = true; + auto &discord = Abaddon::Get().GetDiscordClient(); const auto self_id = discord.GetUserData().ID; if (discord.HasGuildPermission(self_id, GuildID, Permission::VIEW_AUDIT_LOG)) discord.FetchAuditLog(GuildID, sigc::mem_fun(*this, &GuildSettingsAuditLogPane::OnAuditLogFetch)); - - m_list.set_selection_mode(Gtk::SELECTION_NONE); - m_list.show(); - add(m_list); } void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { diff --git a/windows/guildsettings/auditlogpane.hpp b/windows/guildsettings/auditlogpane.hpp index caa5af6..9421e22 100644 --- a/windows/guildsettings/auditlogpane.hpp +++ b/windows/guildsettings/auditlogpane.hpp @@ -1,12 +1,17 @@ #pragma once #include <gtkmm.h> +#include "../../components//inotifyswitched.hpp" #include "../../discord/objects.hpp" -class GuildSettingsAuditLogPane : public Gtk::ScrolledWindow { +class GuildSettingsAuditLogPane : public Gtk::ScrolledWindow, public INotifySwitched { public: GuildSettingsAuditLogPane(Snowflake id); private: + void on_switched_to() override; + + bool m_requested = false; + Gtk::ListBox m_list; void OnAuditLogFetch(const AuditLogData &data); diff --git a/windows/guildsettings/banspane.cpp b/windows/guildsettings/banspane.cpp index 517ae09..3ea71bb 100644 --- a/windows/guildsettings/banspane.cpp +++ b/windows/guildsettings/banspane.cpp @@ -22,9 +22,7 @@ GuildSettingsBansPane::GuildSettingsBansPane(Snowflake id) const auto self_id = discord.GetUserData().ID; const auto can_ban = discord.HasGuildPermission(self_id, GuildID, Permission::BAN_MEMBERS); - if (can_ban) { - discord.FetchGuildBans(id, sigc::mem_fun(*this, &GuildSettingsBansPane::OnGuildBansFetch)); - } else { + if (!can_ban) { for (const auto &ban : discord.GetBansInGuild(id)) OnGuildBanFetch(ban); @@ -50,11 +48,25 @@ GuildSettingsBansPane::GuildSettingsBansPane(Snowflake id) add(m_scroll); show_all_children(); + m_view.set_enable_search(false); m_view.set_model(m_model); m_view.append_column("User", m_columns.m_col_user); m_view.append_column("Reason", m_columns.m_col_reason); } +void GuildSettingsBansPane::on_switched_to() { + if (m_requested) return; + m_requested = true; + + auto &discord = Abaddon::Get().GetDiscordClient(); + + const auto self_id = discord.GetUserData().ID; + const auto can_ban = discord.HasGuildPermission(self_id, GuildID, Permission::BAN_MEMBERS); + + if (can_ban) + discord.FetchGuildBans(GuildID, sigc::mem_fun(*this, &GuildSettingsBansPane::OnGuildBansFetch)); +} + void GuildSettingsBansPane::OnGuildBanFetch(const BanData &ban) { const auto user = Abaddon::Get().GetDiscordClient().GetUser(ban.User.ID); auto &row = *m_model->append(); diff --git a/windows/guildsettings/banspane.hpp b/windows/guildsettings/banspane.hpp index f492226..39fef78 100644 --- a/windows/guildsettings/banspane.hpp +++ b/windows/guildsettings/banspane.hpp @@ -1,13 +1,18 @@ #pragma once #include <gtkmm.h> +#include "../../components/inotifyswitched.hpp" #include "../../discord/snowflake.hpp" #include "../../discord/ban.hpp" -class GuildSettingsBansPane : public Gtk::Box { +class GuildSettingsBansPane : public Gtk::Box, public INotifySwitched { public: GuildSettingsBansPane(Snowflake id); private: + void on_switched_to() override; + + bool m_requested = false; + void OnGuildBanFetch(const BanData &ban); void OnGuildBansFetch(const std::vector<BanData> &bans); void OnMenuUnban(); diff --git a/windows/guildsettings/invitespane.cpp b/windows/guildsettings/invitespane.cpp index a47460f..8e91bf6 100644 --- a/windows/guildsettings/invitespane.cpp +++ b/windows/guildsettings/invitespane.cpp @@ -16,10 +16,6 @@ GuildSettingsInvitesPane::GuildSettingsInvitesPane(Snowflake id) m_menu.show_all(); auto &discord = Abaddon::Get().GetDiscordClient(); - const auto self_id = discord.GetUserData().ID; - - if (discord.HasGuildPermission(self_id, GuildID, Permission::MANAGE_GUILD)) - discord.FetchGuildInvites(GuildID, sigc::mem_fun(*this, &GuildSettingsInvitesPane::OnInvitesFetch)); discord.signal_invite_create().connect(sigc::mem_fun(*this, &GuildSettingsInvitesPane::OnInviteCreate)); discord.signal_invite_delete().connect(sigc::mem_fun(*this, &GuildSettingsInvitesPane::OnInviteDelete)); @@ -27,6 +23,7 @@ GuildSettingsInvitesPane::GuildSettingsInvitesPane(Snowflake id) m_view.show(); add(m_view); + m_view.set_enable_search(false); m_view.set_model(m_model); m_view.append_column("Code", m_columns.m_col_code); m_view.append_column("Expires", m_columns.m_col_expires); @@ -39,6 +36,17 @@ GuildSettingsInvitesPane::GuildSettingsInvitesPane(Snowflake id) column->set_resizable(true); } +void GuildSettingsInvitesPane::on_switched_to() { + if (m_requested) return; + m_requested = true; + + auto &discord = Abaddon::Get().GetDiscordClient(); + const auto self_id = discord.GetUserData().ID; + + if (discord.HasGuildPermission(self_id, GuildID, Permission::MANAGE_GUILD)) + discord.FetchGuildInvites(GuildID, sigc::mem_fun(*this, &GuildSettingsInvitesPane::OnInvitesFetch)); +} + void GuildSettingsInvitesPane::AppendInvite(const InviteData &invite) { auto &discord = Abaddon::Get().GetDiscordClient(); auto &row = *m_model->append(); diff --git a/windows/guildsettings/invitespane.hpp b/windows/guildsettings/invitespane.hpp index c32f194..b9d1255 100644 --- a/windows/guildsettings/invitespane.hpp +++ b/windows/guildsettings/invitespane.hpp @@ -1,12 +1,17 @@ #pragma once #include <gtkmm.h> +#include "../../components/inotifyswitched.hpp" #include "../../discord/objects.hpp" -class GuildSettingsInvitesPane : public Gtk::ScrolledWindow { +class GuildSettingsInvitesPane : public Gtk::ScrolledWindow, public INotifySwitched { public: GuildSettingsInvitesPane(Snowflake id); private: + void on_switched_to() override; + + bool m_requested = false; + void AppendInvite(const InviteData &invite); void OnInviteFetch(const std::optional<InviteData> &invite); void OnInvitesFetch(const std::vector<InviteData> &invites); |