summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2024-07-16 14:49:22 +0200
committerFelix Morgner <felix.morgner@gmail.com>2024-07-16 14:49:22 +0200
commit1e90e6ff6ca16b39c813b73562e1ce37bc8f01a2 (patch)
tree97cbbe91f8feb44037cab79c41881d26d242a82d /app/src
parent16d6aa1d19415ee4a782baea143c71a9a1bbe02d (diff)
downloadturns-1e90e6ff6ca16b39c813b73562e1ce37bc8f01a2.tar.xz
turns-1e90e6ff6ca16b39c813b73562e1ce37bc8f01a2.zip
app/ui: add css class based on disposition to toggle defeated button
Implements #1
Diffstat (limited to 'app/src')
-rw-r--r--app/src/widgets/participant_row.cpp32
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());