summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/include/turns/app/widgets/turn_order_view.hpp10
-rw-r--r--app/include/turns/app/windows/tracker.hpp8
-rw-r--r--app/src/widgets/turn_order_view.cpp17
-rw-r--r--app/src/windows/tracker.cpp55
4 files changed, 38 insertions, 52 deletions
diff --git a/app/include/turns/app/widgets/turn_order_view.hpp b/app/include/turns/app/widgets/turn_order_view.hpp
index 022b51c..7b7556f 100644
--- a/app/include/turns/app/widgets/turn_order_view.hpp
+++ b/app/include/turns/app/widgets/turn_order_view.hpp
@@ -9,9 +9,7 @@
#include <array>
#include <glibmm/object.h>
-#include <glibmm/propertyproxy.h>
#include <glibmm/refptr.h>
-#include <glibmm/ustring.h>
#include <gtkmm/listbox.h>
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/widget.h>
@@ -20,19 +18,19 @@ namespace turns::app::widgets
{
struct turn_order_view : template_widget<turn_order_view, Gtk::ScrolledWindow>
{
+ using model_type = domain::turn_order;
+
auto constexpr inline static children = std::array{
"view",
};
- turn_order_view();
-
- auto get_model() const noexcept -> Glib::RefPtr<domain::turn_order>;
+ explicit turn_order_view(Glib::RefPtr<model_type> model = {});
private:
auto handle_active_participant_changed() -> void;
auto handle_create_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *;
- Glib::RefPtr<domain::turn_order> m_model;
+ Glib::RefPtr<model_type> m_model;
Gtk::ListBox * m_view;
};
} // namespace turns::app::widgets
diff --git a/app/include/turns/app/windows/tracker.hpp b/app/include/turns/app/windows/tracker.hpp
index 4b1f89b..e1349f8 100644
--- a/app/include/turns/app/windows/tracker.hpp
+++ b/app/include/turns/app/windows/tracker.hpp
@@ -5,18 +5,13 @@
#include "turns/domain/turn_order.hpp"
#include <adwaita.h>
-#include <giomm/simpleaction.h>
-#include <glibmm/binding.h>
-#include <glibmm/object.h>
#include <glibmm/refptr.h>
#include <glibmm/ustring.h>
#include <glibmm/variant.h>
#include <gtkmm/applicationwindow.h>
#include <gtkmm/builder.h>
#include <gtkmm/button.h>
-#include <gtkmm/listbox.h>
#include <gtkmm/revealer.h>
-#include <gtkmm/scrolledwindow.h>
#include <gtkmm/stack.h>
#include <gtkmm/widget.h>
@@ -41,7 +36,8 @@ namespace turns::app::windows
Gtk::Stack * m_stack;
Gtk::Button * m_start;
AdwWindowTitle * m_title;
- widgets::turn_order_view * m_turn_order;
+ Glib::RefPtr<domain::turn_order> m_turn_order;
+ widgets::turn_order_view * m_turn_order_view;
Glib::PropertyProxy<Glib::ustring> m_subtitle;
};
diff --git a/app/src/widgets/turn_order_view.cpp b/app/src/widgets/turn_order_view.cpp
index ae46cd7..ccc6d25 100644
--- a/app/src/widgets/turn_order_view.cpp
+++ b/app/src/widgets/turn_order_view.cpp
@@ -17,19 +17,18 @@ namespace turns::app::widgets
auto constexpr static TEMPLATE = "/ch/arknet/Turns/widgets/turn_order_view.ui";
} // namespace
- turn_order_view::turn_order_view()
+ turn_order_view::turn_order_view(Glib::RefPtr<model_type> model)
: Glib::ObjectBase(TYPE_NAME)
, template_widget<turn_order_view, Gtk::ScrolledWindow>{TEMPLATE}
- , m_model{domain::turn_order::create()}
+ , m_model{model}
, m_view{get_widget<Gtk::ListBox>("view")}
{
- m_view->bind_model(m_model->list_model(), sigc::mem_fun(*this, &turn_order_view::handle_create_row));
- m_model->property_active_participant().signal_changed().connect(sigc::mem_fun(*this, &turn_order_view::handle_active_participant_changed));
- }
-
- auto turn_order_view::get_model() const noexcept -> Glib::RefPtr<domain::turn_order>
- {
- return m_model;
+ if (model)
+ {
+ m_view->bind_model(m_model->list_model(), sigc::mem_fun(*this, &turn_order_view::handle_create_row));
+ m_model->property_active_participant().signal_changed().connect(
+ sigc::mem_fun(*this, &turn_order_view::handle_active_participant_changed));
+ }
}
auto turn_order_view::handle_active_participant_changed() -> void
diff --git a/app/src/windows/tracker.cpp b/app/src/windows/tracker.cpp
index 0fb508d..b7520dd 100644
--- a/app/src/windows/tracker.cpp
+++ b/app/src/windows/tracker.cpp
@@ -42,29 +42,28 @@ namespace turns::app::windows
, m_stack{builder->get_widget<Gtk::Stack>("stack")}
, m_start{builder->get_widget<Gtk::Button>("start")}
, m_title(ADW_WINDOW_TITLE(builder->get_widget<Gtk::Widget>("title")->gobj()))
- , m_turn_order{Gtk::make_managed<widgets::turn_order_view>()}
+ , m_turn_order{domain::turn_order::create()}
+ , m_turn_order_view{Gtk::make_managed<widgets::turn_order_view>(m_turn_order)}
, m_subtitle{Glib::wrap(GTK_WIDGET(m_title)), "subtitle"}
{
setup_actions();
- m_stack->add(*m_turn_order);
+ m_stack->add(*m_turn_order_view);
- Glib::Binding::bind_property(m_turn_order->get_model()->property_empty(),
+ // clang-format off
+ Glib::Binding::bind_property(m_turn_order->property_empty(),
m_stack->property_visible_child(),
Glib::Binding::Flags::SYNC_CREATE,
- [this](auto empty) { return empty ? m_empty : m_turn_order; });
+ [this](auto empty) { return empty ? m_empty : m_turn_order_view; });
- Glib::Binding::bind_property(m_turn_order->get_model()->property_running(),
+ Glib::Binding::bind_property(m_turn_order->property_running(),
m_controls->property_reveal_child(),
Glib::Binding::Flags::SYNC_CREATE);
- // clang-format off
- Glib::Binding::bind_property(m_turn_order->get_model()->property_empty(),
+ Glib::Binding::bind_property(m_turn_order->property_empty(),
m_subtitle,
Glib::Binding::Flags::SYNC_CREATE,
- [](auto empty) {
- return empty ? _(lang::no_active_turn_order) : "";
- });
+ [](auto empty) { return empty ? _(lang::no_active_turn_order) : ""; });
// clang-format on
}
@@ -72,20 +71,20 @@ namespace turns::app::windows
{
auto [lifeline, dialog] = editor_for(nullptr);
dialog->present(this);
- dialog->signal_finished().connect([this](auto n, auto p, auto d) { m_turn_order->get_model()->add(n, p, d); });
+ dialog->signal_finished().connect([this](auto n, auto p, auto d) { m_turn_order->add(n, p, d); });
}
auto tracker::handle_delete_participant(Glib::VariantBase param) -> void
{
auto index = Glib::VariantBase::cast_dynamic<Glib::Variant<int>>(param);
- m_turn_order->get_model()->remove(index.get());
+ m_turn_order->remove(index.get());
}
auto tracker::handle_edit_participant(Glib::VariantBase param) -> void
{
static_cast<void>(param);
auto index = Glib::VariantBase::cast_dynamic<Glib::Variant<int>>(param);
- auto participant = m_turn_order->get_model()->get(index.get());
+ auto participant = m_turn_order->get(index.get());
auto [lifeline, dialog] = editor_for(participant);
dialog->present(this);
}
@@ -103,7 +102,7 @@ namespace turns::app::windows
GTK_WIDGET(this->gobj()),
NULL,
reinterpret_cast<GAsyncReadyCallback>(stop_dialog_callback),
- m_turn_order->get_model().get());
+ m_turn_order.get());
}
auto tracker::setup_actions() -> void
@@ -113,7 +112,7 @@ namespace turns::app::windows
{
auto action = add_action("add_participant", sigc::mem_fun(*this, &tracker::handle_add_participant));
- Glib::Binding::bind_property(m_turn_order->get_model()->property_running(),
+ Glib::Binding::bind_property(m_turn_order->property_running(),
action->property_enabled(),
Glib::Binding::Flags::SYNC_CREATE | Glib::Binding::Flags::INVERT_BOOLEAN);
}
@@ -121,9 +120,9 @@ namespace turns::app::windows
// win.clear
// depends-on: turn_order:empty == false
{
- auto action = add_action("clear", sigc::mem_fun(*m_turn_order->get_model(), &domain::turn_order::clear));
+ auto action = add_action("clear", sigc::mem_fun(*m_turn_order, &domain::turn_order::clear));
- Glib::Binding::bind_property(m_turn_order->get_model()->property_empty(),
+ Glib::Binding::bind_property(m_turn_order->property_empty(),
action->property_enabled(),
Glib::Binding::Flags::SYNC_CREATE | Glib::Binding::Flags::INVERT_BOOLEAN);
}
@@ -131,33 +130,29 @@ namespace turns::app::windows
// win.next
// depends-on: turn_order:state == running
{
- auto action = add_action("next", sigc::mem_fun(*m_turn_order->get_model(), &domain::turn_order::next));
+ auto action = add_action("next", sigc::mem_fun(*m_turn_order, &domain::turn_order::next));
- Glib::Binding::bind_property(m_turn_order->get_model()->property_running(),
- action->property_enabled(),
- Glib::Binding::Flags::SYNC_CREATE);
+ Glib::Binding::bind_property(m_turn_order->property_running(), action->property_enabled(), Glib::Binding::Flags::SYNC_CREATE);
}
// win.previous
// depends-on: turn_order:has_previous == true
{
- auto action = add_action("previous", sigc::mem_fun(*m_turn_order->get_model(), &domain::turn_order::previous));
+ auto action = add_action("previous", sigc::mem_fun(*m_turn_order, &domain::turn_order::previous));
- Glib::Binding::bind_property(m_turn_order->get_model()->property_has_previous(),
- action->property_enabled(),
- Glib::Binding::Flags::SYNC_CREATE);
+ Glib::Binding::bind_property(m_turn_order->property_has_previous(), action->property_enabled(), Glib::Binding::Flags::SYNC_CREATE);
}
// win.start
// depends-on: turn_order:empty == false
{
- auto action = add_action("start", sigc::mem_fun(*m_turn_order->get_model(), &domain::turn_order::start));
+ auto action = add_action("start", sigc::mem_fun(*m_turn_order, &domain::turn_order::start));
- Glib::Binding::bind_property(m_turn_order->get_model()->property_empty(),
+ Glib::Binding::bind_property(m_turn_order->property_empty(),
action->property_enabled(),
Glib::Binding::Flags::SYNC_CREATE | Glib::Binding::Flags::INVERT_BOOLEAN);
- Glib::Binding::bind_property(m_turn_order->get_model()->property_running(),
+ Glib::Binding::bind_property(m_turn_order->property_running(),
m_start->property_visible(),
Glib::Binding::Flags::SYNC_CREATE | Glib::Binding::Flags::INVERT_BOOLEAN);
}
@@ -167,9 +162,7 @@ namespace turns::app::windows
{
auto action = add_action("stop", sigc::mem_fun(*this, &tracker::handle_stop));
- Glib::Binding::bind_property(m_turn_order->get_model()->property_running(),
- action->property_enabled(),
- Glib::Binding::Flags::SYNC_CREATE);
+ Glib::Binding::bind_property(m_turn_order->property_running(), action->property_enabled(), Glib::Binding::Flags::SYNC_CREATE);
}
// win.delete