From 4466f721192844fe542d02aced2c8b3860e1433c Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sun, 8 Jun 2025 22:03:14 +0200 Subject: gui: make TurnOrderView default constructible --- gui/include/turn_order_view.hpp | 20 +++++++++++----- gui/src/turn_order_view.cpp | 53 ++++++++++++++++++++++++++++------------- 2 files changed, 51 insertions(+), 22 deletions(-) diff --git a/gui/include/turn_order_view.hpp b/gui/include/turn_order_view.hpp index eaa8501..603c6c5 100644 --- a/gui/include/turn_order_view.hpp +++ b/gui/include/turn_order_view.hpp @@ -11,6 +11,8 @@ #include #include +#include +#include #include #include #include @@ -23,21 +25,27 @@ namespace Turns::gui { struct TurnOrderView : template_widget { - using model_type = TurnOrder; - auto constexpr inline static children = std::array{ "progress", "view", }; - explicit TurnOrderView(Glib::RefPtr model = {}); + TurnOrderView(); + explicit TurnOrderView(Glib::RefPtr const & turn_order); + + [[nodiscard]] auto get_turn_order() const -> Glib::RefPtr; + + auto set_turn_order(Glib::RefPtr const & turn_order) -> void; + + auto property_turn_order() -> Glib::PropertyProxy>; + auto property_turn_order() const -> Glib::PropertyProxy_ReadOnly>; private: auto handle_create_row(Glib::RefPtr const item) -> Gtk::Widget *; - Glib::RefPtr m_model; - Gtk::ProgressBar * m_progress; - Gtk::ListBox * m_view; + Glib::Property> m_turn_order{*this, "turn-order", nullptr}; + Gtk::ProgressBar * m_progress{get_widget("progress")}; + Gtk::ListBox * m_view{get_widget("view")}; }; } // namespace Turns::gui diff --git a/gui/src/turn_order_view.cpp b/gui/src/turn_order_view.cpp index 5239269..0398351 100644 --- a/gui/src/turn_order_view.cpp +++ b/gui/src/turn_order_view.cpp @@ -10,12 +10,14 @@ #include "template_widget.hpp" #include +#include #include #include #include #include +#include #include #include #include @@ -33,23 +35,42 @@ namespace Turns::gui auto constexpr static TEMPLATE = resource::turn_order_view_ui; } // namespace - TurnOrderView::TurnOrderView(Glib::RefPtr model) - : Glib::ObjectBase(TYPE_NAME) + TurnOrderView::TurnOrderView() + : Glib::ObjectBase{TYPE_NAME} , template_widget{TEMPLATE} - , m_model{model} - , m_progress{get_widget("progress")} - , m_view{get_widget("view")} { - if (!model) - { - return; - } - set_orientation(Gtk::Orientation::VERTICAL); + } + + TurnOrderView::TurnOrderView(Glib::RefPtr const & turn_order) + : TurnOrderView{} + { + set_turn_order(turn_order); + } + + auto TurnOrderView::get_turn_order() const -> Glib::RefPtr + { + return m_turn_order.get_value(); + } - m_view->bind_model(m_model, sigc::mem_fun(*this, &TurnOrderView::handle_create_row)); - Glib::Binding::bind_property(m_model->property_round_progress(), m_progress->property_fraction(), Glib::Binding::Flags::SYNC_CREATE); - Glib::Binding::bind_property(m_model->property_running(), m_progress->property_visible(), Glib::Binding::Flags::SYNC_CREATE); + auto TurnOrderView::set_turn_order(Glib::RefPtr const & turn_order) -> void + { + m_turn_order.set_value(turn_order); + m_view->bind_model(get_turn_order(), sigc::mem_fun(*this, &TurnOrderView::handle_create_row)); + Glib::Binding::bind_property(get_turn_order()->property_round_progress(), + m_progress->property_fraction(), + Glib::Binding::Flags::SYNC_CREATE); + Glib::Binding::bind_property(get_turn_order()->property_running(), m_progress->property_visible(), Glib::Binding::Flags::SYNC_CREATE); + } + + auto TurnOrderView::property_turn_order() -> Glib::PropertyProxy> + { + return m_turn_order.get_proxy(); + } + + auto TurnOrderView::property_turn_order() const -> Glib::PropertyProxy_ReadOnly> + { + return m_turn_order.get_proxy(); } auto TurnOrderView::handle_create_row(Glib::RefPtr const item) -> Gtk::Widget * @@ -57,15 +78,15 @@ namespace Turns::gui auto participant = std::dynamic_pointer_cast(item); auto row = Gtk::make_managed(participant); - Glib::Binding::bind_property(m_model->property_running(), + Glib::Binding::bind_property(get_turn_order()->property_running(), row->delete_enabled(), Glib::Binding::Flags::SYNC_CREATE | Glib::Binding::Flags::INVERT_BOOLEAN); - Glib::Binding::bind_property(m_model->property_running(), + Glib::Binding::bind_property(get_turn_order()->property_running(), row->edit_enabled(), Glib::Binding::Flags::SYNC_CREATE | Glib::Binding::Flags::INVERT_BOOLEAN); return row; } -} // namespace Turns::gui \ No newline at end of file +} // namespace Turns::gui -- cgit v1.2.3