summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/include/turns/app/widgets/participant_row.hpp1
-rw-r--r--app/src/widgets/participant_row.cpp32
2 files changed, 32 insertions, 1 deletions
diff --git a/app/include/turns/app/widgets/participant_row.hpp b/app/include/turns/app/widgets/participant_row.hpp
index 79de1e9..03c674c 100644
--- a/app/include/turns/app/widgets/participant_row.hpp
+++ b/app/include/turns/app/widgets/participant_row.hpp
@@ -43,6 +43,7 @@ namespace turns::app::widgets
Glib::RefPtr<Glib::Binding> m_title_label{};
Glib::RefPtr<Glib::Binding> m_title_visibility{};
Glib::RefPtr<Glib::Binding> m_toggle_defeated_icon{};
+ Glib::RefPtr<Glib::Binding> m_toggle_defeated_css_classes{};
};
} // namespace turns::app::widgets
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());