summaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
Diffstat (limited to 'gui')
-rw-r--r--gui/include/turn_order_view.hpp20
-rw-r--r--gui/src/turn_order_view.cpp53
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 <turnsmm/turn-order.hpp>
#include <glibmm/object.h>
+#include <glibmm/property.h>
+#include <glibmm/propertyproxy.h>
#include <glibmm/refptr.h>
#include <gtkmm/box.h>
#include <gtkmm/listbox.h>
@@ -23,21 +25,27 @@ namespace Turns::gui
{
struct TurnOrderView : template_widget<TurnOrderView, Gtk::Box>
{
- using model_type = TurnOrder;
-
auto constexpr inline static children = std::array{
"progress",
"view",
};
- explicit TurnOrderView(Glib::RefPtr<model_type> model = {});
+ TurnOrderView();
+ explicit TurnOrderView(Glib::RefPtr<TurnOrder> const & turn_order);
+
+ [[nodiscard]] auto get_turn_order() const -> Glib::RefPtr<TurnOrder>;
+
+ auto set_turn_order(Glib::RefPtr<TurnOrder> const & turn_order) -> void;
+
+ auto property_turn_order() -> Glib::PropertyProxy<Glib::RefPtr<TurnOrder>>;
+ auto property_turn_order() const -> Glib::PropertyProxy_ReadOnly<Glib::RefPtr<TurnOrder>>;
private:
auto handle_create_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *;
- Glib::RefPtr<model_type> m_model;
- Gtk::ProgressBar * m_progress;
- Gtk::ListBox * m_view;
+ Glib::Property<Glib::RefPtr<TurnOrder>> m_turn_order{*this, "turn-order", nullptr};
+ Gtk::ProgressBar * m_progress{get_widget<Gtk::ProgressBar>("progress")};
+ Gtk::ListBox * m_view{get_widget<Gtk::ListBox>("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 <turnsmm/participant.hpp>
+#include <turnsmm/turn-order.hpp>
#include <sigc++/functors/mem_fun.h>
#include <glibmm/binding.h>
#include <glibmm/object.h>
#include <glibmm/objectbase.h>
+#include <glibmm/propertyproxy.h>
#include <glibmm/refptr.h>
#include <gtkmm/enums.h>
#include <gtkmm/listbox.h>
@@ -33,23 +35,42 @@ namespace Turns::gui
auto constexpr static TEMPLATE = resource::turn_order_view_ui;
} // namespace
- TurnOrderView::TurnOrderView(Glib::RefPtr<model_type> model)
- : Glib::ObjectBase(TYPE_NAME)
+ TurnOrderView::TurnOrderView()
+ : Glib::ObjectBase{TYPE_NAME}
, template_widget{TEMPLATE}
- , m_model{model}
- , m_progress{get_widget<Gtk::ProgressBar>("progress")}
- , m_view{get_widget<Gtk::ListBox>("view")}
{
- if (!model)
- {
- return;
- }
-
set_orientation(Gtk::Orientation::VERTICAL);
+ }
+
+ TurnOrderView::TurnOrderView(Glib::RefPtr<TurnOrder> const & turn_order)
+ : TurnOrderView{}
+ {
+ set_turn_order(turn_order);
+ }
+
+ auto TurnOrderView::get_turn_order() const -> Glib::RefPtr<TurnOrder>
+ {
+ 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<TurnOrder> 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<Glib::RefPtr<TurnOrder>>
+ {
+ return m_turn_order.get_proxy();
+ }
+
+ auto TurnOrderView::property_turn_order() const -> Glib::PropertyProxy_ReadOnly<Glib::RefPtr<TurnOrder>>
+ {
+ return m_turn_order.get_proxy();
}
auto TurnOrderView::handle_create_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *
@@ -57,15 +78,15 @@ namespace Turns::gui
auto participant = std::dynamic_pointer_cast<Participant>(item);
auto row = Gtk::make_managed<ParticipantRow>(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