diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-03-22 01:30:51 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-03-22 01:30:51 -0400 |
commit | ac31bc6b94e422b929e63437696994b17002334d (patch) | |
tree | 37c68528ee257bb139a39e30a6668da5f00b3613 /dialogs | |
parent | 60404783bd4ce9be26233fe66fc3a74475d9eaa3 (diff) | |
download | abaddon-portaudio-ac31bc6b94e422b929e63437696994b17002334d.tar.gz abaddon-portaudio-ac31bc6b94e422b929e63437696994b17002334d.zip |
basic member verification for guilds that set rules
Diffstat (limited to 'dialogs')
-rw-r--r-- | dialogs/verificationgate.cpp | 51 | ||||
-rw-r--r-- | dialogs/verificationgate.hpp | 22 |
2 files changed, 73 insertions, 0 deletions
diff --git a/dialogs/verificationgate.cpp b/dialogs/verificationgate.cpp new file mode 100644 index 0000000..bd034f2 --- /dev/null +++ b/dialogs/verificationgate.cpp @@ -0,0 +1,51 @@ +#include "verificationgate.hpp" +#include "../../abaddon.hpp" + +VerificationGateDialog::VerificationGateDialog(Gtk::Window &parent, Snowflake guild_id) + : Gtk::Dialog("Verification Required", parent, true) + , m_bbox(Gtk::ORIENTATION_HORIZONTAL) { + set_default_size(300, 300); + get_style_context()->add_class("app-window"); + get_style_context()->add_class("app-popup"); + + m_ok_button = add_button("Accept", Gtk::RESPONSE_OK); + + m_scroll_rules.set_vexpand(true); + m_scroll_rules.set_hexpand(true); + + m_description.set_line_wrap(true); + m_description.set_line_wrap_mode(Pango::WRAP_WORD_CHAR); + m_description.set_halign(Gtk::ALIGN_CENTER); + m_description.set_margin_bottom(5); + + m_scroll_rules.add(m_rules); + get_content_area()->add(m_description); + get_content_area()->add(m_scroll_rules); + show_all_children(); + + Abaddon::Get().GetDiscordClient().GetVerificationGateInfo(guild_id, sigc::mem_fun(*this, &VerificationGateDialog::OnVerificationGateFetch)); +} + +const VerificationGateInfoObject &VerificationGateDialog::GetVerificationGate() const { + return m_gate_info; +} + +void VerificationGateDialog::OnVerificationGateFetch(const std::optional<VerificationGateInfoObject> &info) { + m_gate_info = *info; + if (m_gate_info.Description.has_value()) + m_description.set_markup("<b>" + Glib::Markup::escape_text(*m_gate_info.Description) + "</b>"); + else + m_description.hide(); + for (const auto &field : *info->VerificationFields) { + if (field.Type == "TERMS") { + for (const auto &rule : field.Values) { + auto *lbl = Gtk::manage(new Gtk::Label(rule)); + lbl->set_halign(Gtk::ALIGN_START); + lbl->set_ellipsize(Pango::ELLIPSIZE_END); + lbl->show(); + m_rules.add(*lbl); + } + break; + } + } +} diff --git a/dialogs/verificationgate.hpp b/dialogs/verificationgate.hpp new file mode 100644 index 0000000..31152b9 --- /dev/null +++ b/dialogs/verificationgate.hpp @@ -0,0 +1,22 @@ +#pragma once +#include <gtkmm.h> +#include <optional> +#include "../../discord/objects.hpp" + +class VerificationGateDialog : public Gtk::Dialog { +public: + VerificationGateDialog(Gtk::Window &parent, Snowflake guild_id); + const VerificationGateInfoObject &GetVerificationGate() const; + +protected: + void OnVerificationGateFetch(const std::optional<VerificationGateInfoObject> &info); + + VerificationGateInfoObject m_gate_info; + + Gtk::Label m_description; + Gtk::ScrolledWindow m_scroll_rules; + Gtk::ListBox m_rules; + Gtk::ButtonBox m_bbox; + + Gtk::Button *m_ok_button; +}; |