diff options
Diffstat (limited to 'app/src/widgets')
| -rw-r--r-- | app/src/widgets/participant_row.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/app/src/widgets/participant_row.cpp b/app/src/widgets/participant_row.cpp index 75321e5..4f55898 100644 --- a/app/src/widgets/participant_row.cpp +++ b/app/src/widgets/participant_row.cpp @@ -2,8 +2,9 @@ #include "turns/lang/messages.hpp" +#include <algorithm> #include <format> -#include <print> +#include <vector> #include <glibmm/i18n.h> #include <glibmm/ustring.h> @@ -15,6 +16,21 @@ namespace turns::app::widgets { auto constexpr static TYPE_NAME = "participant_row"; auto constexpr static TEMPLATE = "/ch/arknet/Turns/widgets/participant_row.ui"; + + auto css_class_for(domain::disposition value) -> Glib::ustring + { + switch (value) + { + case domain::disposition::friendly: + return "disposition-friendly"; + case domain::disposition::hostile: + return "disposition-hostile"; + case domain::disposition::secret: + return "disposition-secret"; + default: + return ""; + } + } } // namespace participant_row::participant_row(Glib::RefPtr<domain::participant> participant) @@ -51,8 +67,22 @@ namespace turns::app::widgets m_subtitle->property_label(), Glib::Binding::Flags::SYNC_CREATE, [](auto n) { return std::vformat(_(lang::priority_number), std::make_format_args(n)); }); + + m_toggle_defeated_css_classes = Glib::Binding::bind_property(participant->property_disposition(), + m_toggle_defeated->property_css_classes(), + Glib::Binding::Flags::SYNC_CREATE, + [this](auto value) { + auto classes = m_toggle_defeated->get_css_classes(); + auto removed = std::ranges::remove_if(classes, [](auto cls) { + return (cls == "disposition-friendly") | (cls == "disposition-hostile") || (cls == "disposition-secret"); + }); + classes.erase(removed.begin(), removed.end()); + classes.push_back(css_class_for(value)); + return classes; + }); } } + auto participant_row::handle_delete() -> void { auto index = Glib::Variant<int>::create(get_index()); |
