summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt2
-rw-r--r--app/CMakeLists.txt1
-rw-r--r--app/include/turns/app/application.hpp2
-rw-r--r--app/include/turns/app/widgets/participant_row.hpp5
-rw-r--r--app/include/turns/app/widgets/turn_order_view.hpp48
-rw-r--r--app/include/turns/app/windows/main.hpp7
-rw-r--r--app/src/application.cpp14
-rw-r--r--app/src/widgets/participant_row.cpp20
-rw-r--r--app/src/widgets/turn_order_view.cpp66
-rw-r--r--app/src/windows/main.cpp36
-rw-r--r--domain/src/turn_order.cpp4
-rw-r--r--res/CMakeLists.txt1
-rw-r--r--res/ui.cmb (renamed from res/windows/windows.cmb)100
-rw-r--r--res/widgets/participant_row.ui21
-rw-r--r--res/widgets/turn_order_view.ui24
-rw-r--r--res/widgets/widgets.cmb83
-rw-r--r--res/windows/main.ui22
17 files changed, 263 insertions, 193 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 66fca94..76b9015 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,7 +23,7 @@ check_ipo_supported(RESULT CAN_DO_IPO LANGUAGES CXX)
set(CMAKE_CXX_STANDARD "23")
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ${CAN_DO_IPO})
+# set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ${CAN_DO_IPO})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index 4f024a4..eb426ca 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -3,6 +3,7 @@
add_library("app"
"src/application.cpp"
"src/widgets/participant_row.cpp"
+ "src/widgets/turn_order_view.cpp"
"src/windows/main.cpp"
"src/windows/participant_editor.cpp"
)
diff --git a/app/include/turns/app/application.hpp b/app/include/turns/app/application.hpp
index 81fe333..6506dd7 100644
--- a/app/include/turns/app/application.hpp
+++ b/app/include/turns/app/application.hpp
@@ -27,6 +27,8 @@ namespace turns::app
auto on_shutdown() -> void;
auto on_startup() -> void;
+ auto register_derived_widgets() -> void;
+
AdwApplication * m_adw;
Glib::RefPtr<Gtk::Application> m_application;
windows::main * m_main;
diff --git a/app/include/turns/app/widgets/participant_row.hpp b/app/include/turns/app/widgets/participant_row.hpp
index a8f225f..79de1e9 100644
--- a/app/include/turns/app/widgets/participant_row.hpp
+++ b/app/include/turns/app/widgets/participant_row.hpp
@@ -28,9 +28,6 @@ namespace turns::app::widgets
participant_row(Glib::RefPtr<domain::participant> participant);
- auto set_subtitle(Glib::ustring const & value) -> void;
- auto set_title(Glib::ustring const & value) -> void;
-
private:
auto handle_delete() -> void;
auto handle_edit() -> void;
@@ -41,7 +38,9 @@ namespace turns::app::widgets
Gtk::Label * m_title;
Gtk::ToggleButton * m_toggle_defeated;
+ Glib::RefPtr<Glib::Binding> m_subtitle_label{};
Glib::RefPtr<Glib::Binding> m_subtitle_visibility{};
+ Glib::RefPtr<Glib::Binding> m_title_label{};
Glib::RefPtr<Glib::Binding> m_title_visibility{};
Glib::RefPtr<Glib::Binding> m_toggle_defeated_icon{};
};
diff --git a/app/include/turns/app/widgets/turn_order_view.hpp b/app/include/turns/app/widgets/turn_order_view.hpp
new file mode 100644
index 0000000..c55483a
--- /dev/null
+++ b/app/include/turns/app/widgets/turn_order_view.hpp
@@ -0,0 +1,48 @@
+#ifndef TURNS_APP_WIDGETS_TURN_ORDER_VIEW_HPP
+#define TURNS_APP_WIDGETS_TURN_ORDER_VIEW_HPP
+
+#include "turns/app/widgets/template_widget.hpp"
+#include "turns/domain/turn_order.hpp"
+#include "turns/domain/participant.hpp"
+#include "turns/domain/disposition.hpp"
+
+#include <array>
+
+#include <glibmm/object.h>
+#include <glibmm/propertyproxy.h>
+#include <glibmm/refptr.h>
+#include <gtkmm/listbox.h>
+#include <gtkmm/scrolledwindow.h>
+#include <gtkmm/widget.h>
+#include <glibmm/ustring.h>
+
+namespace turns::app::widgets
+{
+ struct turn_order_view : template_widget<turn_order_view, Gtk::ScrolledWindow>
+ {
+ auto constexpr inline static children = std::array{
+ "view",
+ };
+
+ turn_order_view();
+
+ auto append(Glib::ustring name, float priority, domain::disposition disposition) -> void;
+ auto clear() -> void;
+ auto get(std::size_t index) -> Glib::RefPtr<domain::participant>;
+ auto remove(std::size_t index) -> void;
+
+
+ auto get_n_items() const noexcept -> unsigned int;
+ auto property_n_items() const -> Glib::PropertyProxy_ReadOnly<unsigned int>;
+
+ private:
+ auto handle_create_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *;
+
+ Glib::RefPtr<domain::turn_order> m_model;
+ Gtk::ListBox * m_view;
+
+ Glib::PropertyProxy_ReadOnly<unsigned int> m_n_items;
+ };
+} // namespace turns::app::widgets
+
+#endif \ No newline at end of file
diff --git a/app/include/turns/app/windows/main.hpp b/app/include/turns/app/windows/main.hpp
index 694876e..5e13cf0 100644
--- a/app/include/turns/app/windows/main.hpp
+++ b/app/include/turns/app/windows/main.hpp
@@ -2,6 +2,7 @@
#define TURNS_APP_WINDOWS_MAIN_WINDOW_HPP
#include "turns/domain/turn_order.hpp"
+#include "turns/app/widgets/turn_order_view.hpp"
#include <adwaita.h>
#include <giomm/simpleaction.h>
@@ -25,19 +26,15 @@ namespace turns::app::windows
main(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder);
private:
- auto handle_create_list_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *;
auto handle_add_participant() -> void;
auto handle_clear() -> void;
auto handle_edit_participant(Glib::VariantBase param) -> void;
AdwApplicationWindow * m_adw;
Gtk::Widget * m_empty;
- Gtk::ListBox * m_participant_list;
Gtk::Stack * m_stack;
AdwWindowTitle * m_title;
- Gtk::ScrolledWindow * m_turn_order;
-
- Glib::RefPtr<domain::turn_order> m_participant_list_data;
+ widgets::turn_order_view * m_turn_order;
Glib::PropertyProxy<Glib::ustring> m_subtitle;
diff --git a/app/src/application.cpp b/app/src/application.cpp
index 1d38ea1..35dcfdb 100644
--- a/app/src/application.cpp
+++ b/app/src/application.cpp
@@ -1,5 +1,6 @@
#include "turns/app/application.hpp"
+#include "turns/app/widgets/turn_order_view.hpp"
#include "turns/app/windows/main.hpp"
#include <glibmm/wrap.h>
@@ -29,9 +30,6 @@ namespace turns::app
m_adw = adw_application_new("ch.arknet.Turns", G_APPLICATION_DEFAULT_FLAGS);
m_application = Glib::wrap(GTK_APPLICATION(m_adw));
- auto builder = Gtk::Builder::create_from_resource("/ch/arknet/Turns/windows/main.ui");
- m_main = Gtk::Builder::get_widget_derived<windows::main>(builder, "main");
-
m_application->signal_activate().connect(sigc::mem_fun(*this, &application::on_activate));
m_application->signal_shutdown().connect(sigc::mem_fun(*this, &application::on_shutdown));
m_application->signal_startup().connect(sigc::mem_fun(*this, &application::on_startup));
@@ -44,6 +42,9 @@ namespace turns::app
auto application::on_activate() -> void
{
+ auto builder = Gtk::Builder::create_from_resource("/ch/arknet/Turns/windows/main.ui");
+ m_main = Gtk::Builder::get_widget_derived<windows::main>(builder, "main");
+
m_application->add_window(*m_main);
m_main->present();
}
@@ -62,6 +63,13 @@ namespace turns::app
m_application->add_action("quit", sigc::mem_fun(*this, &application::handle_action_quit));
m_application->set_accel_for_action("app.quit", "<ctrl>q");
m_application->set_accel_for_action("win.clear", "<Primary>x");
+
+ register_derived_widgets();
+ }
+
+ auto application::register_derived_widgets() -> void
+ {
+ static_cast<void>(widgets::turn_order_view{});
}
} // namespace turns::app \ No newline at end of file
diff --git a/app/src/widgets/participant_row.cpp b/app/src/widgets/participant_row.cpp
index 9e0419a..75321e5 100644
--- a/app/src/widgets/participant_row.cpp
+++ b/app/src/widgets/participant_row.cpp
@@ -45,22 +45,14 @@ namespace turns::app::widgets
if (participant)
{
- set_title(participant->get_name());
- auto priority = participant->get_priority();
- set_subtitle(std::vformat(_(lang::priority_number), std::make_format_args(priority)));
- }
- }
-
- auto participant_row::set_subtitle(Glib::ustring const & value) -> void
- {
- m_subtitle->property_label() = value;
- }
+ m_title_label = Glib::Binding::bind_property(participant->property_name(), m_title->property_label(), Glib::Binding::Flags::SYNC_CREATE);
- auto participant_row::set_title(Glib::ustring const & value) -> void
- {
- m_title->property_label() = value;
+ m_subtitle_label = Glib::Binding::bind_property(participant->property_priority(),
+ m_subtitle->property_label(),
+ Glib::Binding::Flags::SYNC_CREATE,
+ [](auto n) { return std::vformat(_(lang::priority_number), std::make_format_args(n)); });
+ }
}
-
auto participant_row::handle_delete() -> void
{
auto index = Glib::Variant<int>::create(get_index());
diff --git a/app/src/widgets/turn_order_view.cpp b/app/src/widgets/turn_order_view.cpp
new file mode 100644
index 0000000..9d49ad8
--- /dev/null
+++ b/app/src/widgets/turn_order_view.cpp
@@ -0,0 +1,66 @@
+#include "turns/app/widgets/turn_order_view.hpp"
+
+#include "turns/app/widgets/participant_row.hpp"
+#include "turns/domain/participant.hpp"
+#include "turns/lang/messages.hpp"
+
+#include <format>
+
+#include <sigc++/functors/mem_fun.h>
+
+namespace turns::app::widgets
+{
+ namespace
+ {
+ auto constexpr static TYPE_NAME = "turn_order_view";
+ auto constexpr static TEMPLATE = "/ch/arknet/Turns/widgets/turn_order_view.ui";
+ } // namespace
+
+ turn_order_view::turn_order_view()
+ : Glib::ObjectBase(TYPE_NAME)
+ , template_widget<turn_order_view, Gtk::ScrolledWindow>{TEMPLATE}
+ , m_model{domain::turn_order::create()}
+ , m_view{get_widget<Gtk::ListBox>("view")}
+ , m_n_items{m_model.get(), "n_items"}
+ {
+ m_view->bind_model(m_model, sigc::mem_fun(*this, &turn_order_view::handle_create_row));
+ }
+
+ auto turn_order_view::append(Glib::ustring name, float priority, domain::disposition disposition) -> void
+ {
+ auto participant = domain::participant::create(name, priority, disposition);
+ m_model->append(participant);
+ }
+
+ auto turn_order_view::clear() -> void
+ {
+ m_model->remove_all();
+ }
+
+ auto turn_order_view::get(std::size_t index) -> Glib::RefPtr<domain::participant>
+ {
+ return m_model->get_item(index);
+ }
+
+ auto turn_order_view::remove(std::size_t index) -> void
+ {
+ m_model->remove(index);
+ }
+
+ auto turn_order_view::get_n_items() const noexcept -> unsigned int
+ {
+ return m_n_items;
+ }
+
+ auto turn_order_view::property_n_items() const -> Glib::PropertyProxy_ReadOnly<unsigned int>
+ {
+ return m_n_items;
+ }
+
+ auto turn_order_view::handle_create_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *
+ {
+ auto participant = std::dynamic_pointer_cast<domain::participant>(item);
+ return Gtk::make_managed<widgets::participant_row>(participant);
+ }
+
+} // namespace turns::app::widgets \ No newline at end of file
diff --git a/app/src/windows/main.cpp b/app/src/windows/main.cpp
index 68d2c5f..04d7329 100644
--- a/app/src/windows/main.cpp
+++ b/app/src/windows/main.cpp
@@ -27,60 +27,50 @@ namespace turns::app::windows
: Gtk::ApplicationWindow{base}
, m_adw{ADW_APPLICATION_WINDOW(gobj())}
, m_empty(builder->get_widget<Gtk::Widget>("empty"))
- , m_participant_list{builder->get_widget<Gtk::ListBox>("participant_list")}
, m_stack{builder->get_widget<Gtk::Stack>("stack")}
, m_title(ADW_WINDOW_TITLE(builder->get_widget<Gtk::Widget>("title")->gobj()))
- , m_turn_order{builder->get_widget<Gtk::ScrolledWindow>("turn_order")}
- , m_participant_list_data{domain::turn_order::create()}
+ , m_turn_order{Gtk::make_managed<widgets::turn_order_view>()}
, m_subtitle{Glib::wrap(GTK_WIDGET(m_title)), "subtitle"}
- , m_clear_action{add_action("clear", sigc::mem_fun(*this, &main::handle_clear))}
+ , m_clear_action{add_action("clear", sigc::mem_fun(*m_turn_order, &widgets::turn_order_view::clear))}
{
- m_clear_action_enabled = Glib::Binding::bind_property(m_participant_list_data->property_n_items(),
+ m_stack->add(*m_turn_order);
+
+ // clang-format off
+ m_clear_action_enabled = Glib::Binding::bind_property(m_turn_order->property_n_items(),
m_clear_action->property_enabled(),
Glib::Binding::Flags::SYNC_CREATE);
- m_visible_child_widget = Glib::Binding::bind_property(m_participant_list_data->property_n_items(),
+ m_visible_child_widget = Glib::Binding::bind_property(m_turn_order->property_n_items(),
m_stack->property_visible_child(),
Glib::Binding::Flags::SYNC_CREATE,
[this](auto count) { return count ? m_turn_order : m_empty; });
- m_subtitle_text = Glib::Binding::bind_property(m_participant_list_data->property_n_items(),
+ m_subtitle_text = Glib::Binding::bind_property(m_turn_order->property_n_items(),
m_subtitle,
Glib::Binding::Flags::SYNC_CREATE,
[](auto count) { return count ? "" : _(lang::no_active_turn_order); });
-
- m_participant_list->bind_model(m_participant_list_data, sigc::mem_fun(*this, &main::handle_create_list_row));
+ // clang-format on
add_action("add_participant", sigc::mem_fun(*this, &main::handle_add_participant));
add_action_with_parameter("delete", Glib::VARIANT_TYPE_INT32, [this](auto param) {
auto index = Glib::VariantBase::cast_dynamic<Glib::Variant<int>>(param);
- m_participant_list_data->remove(index.get());
+ m_turn_order->remove(index.get());
});
add_action_with_parameter("edit", Glib::VARIANT_TYPE_INT32, sigc::mem_fun(*this, &main::handle_edit_participant));
}
- auto main::handle_create_list_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *
- {
- auto participant = std::dynamic_pointer_cast<domain::participant>(item);
- return Gtk::make_managed<widgets::participant_row>(participant);
- }
-
auto main::handle_add_participant() -> void
{
auto [lifeline, dialog] = editor_for(nullptr);
dialog->present(this);
- dialog->signal_finished().connect([this](auto name, auto priority, auto disposition) { m_participant_list_data->append(name, priority, disposition); });
- }
-
- auto main::handle_clear() -> void
- {
- m_participant_list_data->remove_all();
+ dialog->signal_finished().connect(sigc::mem_fun(*m_turn_order, &widgets::turn_order_view::append));
}
auto main::handle_edit_participant(Glib::VariantBase param) -> void
{
+ static_cast<void>(param);
auto index = Glib::VariantBase::cast_dynamic<Glib::Variant<int>>(param);
- auto participant = m_participant_list_data->get_item(index.get());
+ auto participant = m_turn_order->get(index.get());
auto [lifeline, dialog] = editor_for(participant);
dialog->present(this);
}
diff --git a/domain/src/turn_order.cpp b/domain/src/turn_order.cpp
index 4f1ed3b..7216239 100644
--- a/domain/src/turn_order.cpp
+++ b/domain/src/turn_order.cpp
@@ -39,13 +39,15 @@ namespace turns::domain
if (auto [found, index] = find(item, equal_comparator); !found)
{
insert_sorted(item, comparator);
+ item->property_priority().signal_changed().connect([this] {
+ sort(comparator);
+ });
}
}
auto turn_order::append(Glib::ustring const & name, float priority, disposition disposition) -> void
{
auto participant = participant::create(name, priority, disposition);
- participant->property_priority().signal_changed().connect([this] { sort(comparator); });
append(participant);
}
diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt
index 64ec023..fda52b8 100644
--- a/res/CMakeLists.txt
+++ b/res/CMakeLists.txt
@@ -6,6 +6,7 @@ target_add_glib_resources("res"
PREFIX "ch/arknet/Turns"
UI_FILES
"widgets/participant_row.ui"
+ "widgets/turn_order_view.ui"
"windows/main.ui"
"windows/participant_editor.ui"
CSS_FILES
diff --git a/res/windows/windows.cmb b/res/ui.cmb
index 60370d8..119c828 100644
--- a/res/windows/windows.cmb
+++ b/res/ui.cmb
@@ -2,14 +2,17 @@
<!DOCTYPE cambalache-project SYSTEM "cambalache-project.dtd">
<cambalache-project version="0.17.3" target_tk="gtk-4.0">
<ui>
- (1,None,"main_window.ui","main.ui",None,None,None,None,None,None,None),
- (2,None,None,"participant_editor.ui",None,None,None,None,None,None,None)
+ (1,None,None,"windows/main.ui",None,None,None,None,None,None,None),
+ (2,None,None,"windows/participant_editor.ui",None,None,None,None,None,None,None),
+ (3,1,None,"widgets/participant_row.ui",None,None,None,None,None,None,None),
+ (4,1,None,"widgets/turn_order_view.ui",None,None,None,None,None,None,None)
</ui>
<ui_library>
(1,"gtk","4.14",None),
(1,"libadwaita","1.5",None),
(2,"gtk","4.14",None),
- (2,"libadwaita","1.5",None)
+ (2,"libadwaita","1.5",None),
+ (3,"gtk","4.14",None)
</ui_library>
<object>
(1,1,"AdwApplicationWindow","main",None,None,None,None,-1,None,None),
@@ -21,9 +24,6 @@
(1,9,"(menu)","main_menu",None,None,None,None,-1,None,None),
(1,10,"(item)",None,9,None,None,None,1,None,None),
(1,11,"GtkStack","stack",2,None,None,None,-1,None,None),
- (1,13,"GtkScrolledWindow","turn_order",11,None,None,None,1,None,None),
- (1,14,"AdwClamp",None,13,None,None,None,None,None,None),
- (1,15,"GtkListBox","participant_list",14,None,None,None,None,None,None),
(1,16,"AdwStatusPage","empty",11,None,None,None,-1,None,None),
(1,17,"GtkButton",None,16,None,None,None,-1,None,None),
(1,18,"GtkButton","start",3,None,"start",None,2,None,None),
@@ -38,7 +38,20 @@
(2,9,"GtkButton","finish",5,None,None,None,1,None,None),
(2,10,"AdwSpinRow","priority",6,None,None,None,1,None,None),
(2,11,"AdwComboRow","disposition",6,None,None,None,2,None,None),
- (2,12,"GtkAdjustment",None,10,None,None,None,-1,None,None)
+ (2,12,"GtkAdjustment",None,10,None,None,None,-1,None,None),
+ (3,1,"GtkListBoxRow","gtkmm__CustomObject_participant_row",None,None,None,None,-1,None,None),
+ (3,2,"GtkBox",None,1,None,None,None,-1,None,None),
+ (3,3,"GtkBox",None,2,None,None,None,-1,None,None),
+ (3,4,"GtkBox",None,2,None,None,None,-1,None,None),
+ (3,5,"GtkBox",None,2,None,None,None,-1,None,None),
+ (3,6,"GtkToggleButton","toggle_defeated",3,None,None,None,-1,None,None),
+ (3,7,"GtkLabel","title",4,None,None,None,-1,None,None),
+ (3,8,"GtkLabel","subtitle",4,None,None,None,-1,None,None),
+ (3,9,"GtkButton","delete",5,None,None,None,-1,None,None),
+ (3,10,"GtkButton","edit",5,None,None,None,-1,None,None),
+ (4,1,"GtkScrolledWindow","gtkmm__CustomObject_turn_order_view",None,None,None,None,-1,None,None),
+ (4,2,"AdwClamp",None,1,None,None,None,-1,None,None),
+ (4,3,"GtkListBox","view",2,None,None,None,-1,None,None)
</object>
<object_property>
(1,1,"AdwApplicationWindow","content",None,None,None,None,None,2,None,None,None,None),
@@ -59,14 +72,6 @@
(1,10,"(item)","action","app.quit",None,None,None,None,None,None,None,None,None),
(1,10,"(item)","label","_Quit",1,None,None,None,None,None,None,None,None),
(1,11,"GtkStack","transition-type","crossfade",None,None,None,None,None,None,None,None,None),
- (1,13,"GtkScrolledWindow","child",None,None,None,None,None,14,None,None,None,None),
- (1,14,"AdwClamp","child",None,None,None,None,None,15,None,None,None,None),
- (1,14,"GtkWidget","margin-bottom","18",None,None,None,None,None,None,None,None,None),
- (1,14,"GtkWidget","margin-end","12",None,None,None,None,None,None,None,None,None),
- (1,14,"GtkWidget","margin-start","12",None,None,None,None,None,None,None,None,None),
- (1,14,"GtkWidget","margin-top","18",None,None,None,None,None,None,None,None,None),
- (1,14,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
- (1,15,"GtkListBox","selection-mode","none",None,None,None,None,None,None,None,None,None),
(1,16,"AdwStatusPage","child",None,None,None,None,None,17,None,None,None,None),
(1,16,"AdwStatusPage","icon-name","contact-new-symbolic",None,None,None,None,None,None,None,None,None),
(1,17,"GtkActionable","action-name","win.add_participant",None,None,None,None,None,None,None,None,None),
@@ -100,7 +105,32 @@
(2,11,"AdwPreferencesRow","title","Disposition",1,None,None,None,None,None,None,None,None),
(2,12,"GtkAdjustment","lower","-1000.0",None,None,None,None,None,None,None,None,None),
(2,12,"GtkAdjustment","step-increment","1.0",None,None,None,None,None,None,None,None,None),
- (2,12,"GtkAdjustment","upper","1000.0",None,None,None,None,None,None,None,None,None)
+ (2,12,"GtkAdjustment","upper","1000.0",None,None,None,None,None,None,None,None,None),
+ (3,1,"GtkListBoxRow","activatable","False",None,None,None,None,None,None,None,None,None),
+ (3,1,"GtkListBoxRow","child",None,None,None,None,None,2,None,None,None,None),
+ (3,1,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
+ (3,4,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
+ (3,4,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
+ (3,4,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
+ (3,5,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
+ (3,6,"GtkButton","icon-name","face-smile-symbolic",None,None,None,None,None,None,None,None,None),
+ (3,6,"GtkWidget","halign","center",None,None,None,None,None,None,None,None,None),
+ (3,6,"GtkWidget","tooltip-text","Mark as defeated",1,None,None,None,None,None,None,None,None),
+ (3,6,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
+ (3,7,"GtkLabel","wrap-mode","word-char",None,None,None,None,None,None,None,None,None),
+ (3,7,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
+ (3,8,"GtkLabel","wrap-mode","word-char",None,None,None,None,None,None,None,None,None),
+ (3,8,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
+ (3,9,"GtkButton","icon-name","edit-delete-symbolic",None,None,None,None,None,None,None,None,None),
+ (3,9,"GtkWidget","tooltip-text","Delete participant",1,None,None,None,None,None,None,None,None),
+ (3,10,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None),
+ (4,1,"GtkScrolledWindow","child",None,None,None,None,None,2,None,None,None,None),
+ (4,2,"AdwClamp","child",None,None,None,None,None,3,None,None,None,None),
+ (4,2,"GtkWidget","margin-bottom","18",None,None,None,None,None,None,None,None,None),
+ (4,2,"GtkWidget","margin-end","12",None,None,None,None,None,None,None,None,None),
+ (4,2,"GtkWidget","margin-start","12",None,None,None,None,None,None,None,None,None),
+ (4,2,"GtkWidget","margin-top","12",None,None,None,None,None,None,None,None,None),
+ (4,3,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None)
</object_property>
<object_data>
(1,1,"GtkWidget",2,2,None,1,None,None,None,None),
@@ -111,19 +141,47 @@
(2,9,"GtkWidget",1,1,None,None,None,None,None,None),
(2,9,"GtkWidget",2,2,None,1,None,None,None,None),
(2,9,"GtkWidget",2,3,None,1,None,None,None,None),
- (1,15,"GtkWidget",1,1,None,None,None,None,None,None),
- (1,15,"GtkWidget",2,2,None,1,None,None,None,None),
(1,17,"GtkWidget",1,1,None,None,None,None,None,None),
(1,17,"GtkWidget",2,2,None,1,None,None,None,None),
- (1,17,"GtkWidget",2,3,None,1,None,None,None,None)
+ (1,17,"GtkWidget",2,3,None,1,None,None,None,None),
+ (3,6,"GtkWidget",1,1,None,None,None,None,None,None),
+ (3,6,"GtkWidget",2,2,None,1,None,None,None,None),
+ (3,2,"GtkWidget",1,1,None,None,None,None,None,None),
+ (3,2,"GtkWidget",2,2,None,1,None,None,None,None),
+ (3,7,"GtkWidget",1,1,None,None,None,None,None,None),
+ (3,7,"GtkWidget",2,2,None,1,None,None,None,None),
+ (3,8,"GtkWidget",1,1,None,None,None,None,None,None),
+ (3,8,"GtkWidget",2,2,None,1,None,None,None,None),
+ (3,9,"GtkWidget",1,1,None,None,None,None,None,None),
+ (3,9,"GtkWidget",2,2,None,1,None,None,None,None),
+ (3,10,"GtkWidget",1,1,None,None,None,None,None,None),
+ (3,10,"GtkWidget",2,2,None,1,None,None,None,None),
+ (3,9,"GtkWidget",2,3,None,1,None,None,None,None),
+ (3,10,"GtkWidget",2,3,None,1,None,None,None,None),
+ (3,5,"GtkWidget",1,1,None,None,None,None,None,None),
+ (3,5,"GtkWidget",2,2,None,1,None,None,None,None),
+ (3,3,"GtkWidget",1,1,None,None,None,None,None,None),
+ (3,3,"GtkWidget",2,2,None,1,None,None,None,None),
+ (4,3,"GtkWidget",1,1,None,None,None,None,None,None),
+ (4,3,"GtkWidget",2,2,None,1,None,None,None,None)
</object_data>
<object_data_arg>
(1,1,"GtkWidget",2,2,"name","background"),
(2,6,"GtkWidget",2,2,"name","boxed-list"),
(2,9,"GtkWidget",2,2,"name","pill"),
(2,9,"GtkWidget",2,3,"name","suggested-action"),
- (1,15,"GtkWidget",2,2,"name","boxed-list"),
(1,17,"GtkWidget",2,2,"name","pill"),
- (1,17,"GtkWidget",2,3,"name","suggested-action")
+ (1,17,"GtkWidget",2,3,"name","suggested-action"),
+ (3,6,"GtkWidget",2,2,"name","circular"),
+ (3,2,"GtkWidget",2,2,"name","header"),
+ (3,7,"GtkWidget",2,2,"name","title"),
+ (3,8,"GtkWidget",2,2,"name","subtitle"),
+ (3,9,"GtkWidget",2,2,"name","circular"),
+ (3,10,"GtkWidget",2,2,"name","circular"),
+ (3,9,"GtkWidget",2,3,"name","destructive-action"),
+ (3,10,"GtkWidget",2,3,"name","suggested-action"),
+ (3,5,"GtkWidget",2,2,"name","suffixes"),
+ (3,3,"GtkWidget",2,2,"name","prefixes"),
+ (4,3,"GtkWidget",2,2,"name","boxed-list")
</object_data_arg>
</cambalache-project>
diff --git a/res/widgets/participant_row.ui b/res/widgets/participant_row.ui
index 683fbb6..7948eab 100644
--- a/res/widgets/participant_row.ui
+++ b/res/widgets/participant_row.ui
@@ -1,13 +1,11 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.90.4 -->
<interface>
- <!-- interface-name participant_list_item.ui -->
<requires lib="gtk" version="4.14"/>
<template class="gtkmm__CustomObject_participant_row" parent="GtkListBoxRow">
<property name="activatable">False</property>
<property name="child">
<object class="GtkBox">
- <property name="css-classes">header</property>
<child>
<object class="GtkBox">
<child>
@@ -33,7 +31,7 @@
<property name="valign">center</property>
<child>
<object class="GtkLabel" id="title">
- <property name="visible">False</property>
+ <property name="wrap-mode">word-char</property>
<property name="xalign">0.0</property>
<style>
<class name="title"/>
@@ -42,21 +40,13 @@
</child>
<child>
<object class="GtkLabel" id="subtitle">
- <property name="lines">0</property>
- <property name="visible">False</property>
- <property name="wrap">True</property>
<property name="wrap-mode">word-char</property>
<property name="xalign">0.0</property>
<style>
<class name="subtitle"/>
</style>
- <!-- Custom object fragments -->
- <property name="sensitive" bind-source="toggle_defeated" bind-property="active" bind-flags="sync-create|invert-boolean"/>
</object>
</child>
- <style>
- <class name="title"/>
- </style>
</object>
</child>
<child>
@@ -65,8 +55,6 @@
<child>
<object class="GtkButton" id="delete">
<property name="icon-name">edit-delete-symbolic</property>
- <!-- Custom object fragments -->
- <property name="sensitive" bind-source="toggle_defeated" bind-property="active" bind-flags="sync-create|invert-boolean"/>
<property name="tooltip-text" translatable="yes">Delete participant</property>
<style>
<class name="circular"/>
@@ -77,13 +65,10 @@
<child>
<object class="GtkButton" id="edit">
<property name="icon-name">document-edit-symbolic</property>
- <property name="tooltip-text" translatable="yes">Edit participant</property>
<style>
<class name="circular"/>
<class name="suggested-action"/>
</style>
- <!-- Custom object fragments -->
- <property name="sensitive" bind-source="toggle_defeated" bind-property="active" bind-flags="sync-create|invert-boolean"/>
</object>
</child>
<style>
@@ -91,9 +76,11 @@
</style>
</object>
</child>
+ <style>
+ <class name="header"/>
+ </style>
</object>
</property>
<property name="valign">center</property>
- <style/>
</template>
</interface>
diff --git a/res/widgets/turn_order_view.ui b/res/widgets/turn_order_view.ui
new file mode 100644
index 0000000..d00c3c8
--- /dev/null
+++ b/res/widgets/turn_order_view.ui
@@ -0,0 +1,24 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Created with Cambalache 0.90.4 -->
+<interface>
+ <requires lib="gtk" version="4.0"/>
+ <requires lib="libadwaita" version="1.4"/>
+ <template class="gtkmm__CustomObject_turn_order_view" parent="GtkScrolledWindow">
+ <property name="child">
+ <object class="AdwClamp">
+ <property name="child">
+ <object class="GtkListBox" id="view">
+ <property name="valign">start</property>
+ <style>
+ <class name="boxed-list"/>
+ </style>
+ </object>
+ </property>
+ <property name="margin-bottom">18</property>
+ <property name="margin-end">12</property>
+ <property name="margin-start">12</property>
+ <property name="margin-top">12</property>
+ </object>
+ </property>
+ </template>
+</interface>
diff --git a/res/widgets/widgets.cmb b/res/widgets/widgets.cmb
deleted file mode 100644
index 983dbea..0000000
--- a/res/widgets/widgets.cmb
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<!DOCTYPE cambalache-project SYSTEM "cambalache-project.dtd">
-<cambalache-project version="0.17.3" target_tk="gtk-4.0">
- <ui>
- (1,1,"participant_list_item.ui","participant_row.ui",None,None,None,None,None,None,None)
- </ui>
- <ui_library>
- (1,"gtk","4.14",None)
- </ui_library>
- <object>
- (1,1,"GtkListBoxRow","gtkmm__CustomObject_participant_row",None,None,None,None,-1,None,None),
- (1,2,"GtkBox",None,1,None,None,None,-1,None,None),
- (1,3,"GtkBox",None,2,None,None,None,-1,None,None),
- (1,5,"GtkBox",None,2,None,None,None,-1,None,None),
- (1,7,"GtkLabel","subtitle",5,None,None,None,1,"&lt;property name=\"sensitive\"\n bind-source=\"toggle_defeated\"\n bind-property=\"active\"\n bind-flags=\"sync-create|invert-boolean\" /&gt;",None),
- (1,8,"GtkBox",None,2,None,None,None,-1,None,None),
- (1,12,"GtkToggleButton","toggle_defeated",3,None,None,None,-1,None,None),
- (1,13,"GtkButton","edit",8,None,None,None,1,"&lt;property name=\"sensitive\"\n bind-source=\"toggle_defeated\"\n bind-property=\"active\"\n bind-flags=\"sync-create|invert-boolean\" /&gt;",None),
- (1,14,"GtkButton","delete",8,None,None,None,None,None,None),
- (1,15,"GtkLabel","title",5,None,None,None,None,None,None)
- </object>
- <object_property>
- (1,1,"GtkListBoxRow","activatable","False",None,None,None,None,None,None,None,None,None),
- (1,1,"GtkListBoxRow","child",None,None,None,None,None,2,None,None,None,None),
- (1,1,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
- (1,2,"GtkWidget","css-classes","header",None,None,None,None,None,None,None,None,None),
- (1,5,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
- (1,5,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
- (1,5,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
- (1,7,"GtkLabel","lines","0",None,None,None,None,None,None,None,None,None),
- (1,7,"GtkLabel","wrap","True",None,None,None,None,None,None,None,None,None),
- (1,7,"GtkLabel","wrap-mode","word-char",None,None,None,None,None,None,None,None,None),
- (1,7,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
- (1,7,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None),
- (1,8,"GtkWidget","valig