diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/include/turns/app/widgets/turn_order_view.hpp | 10 | ||||
| -rw-r--r-- | app/include/turns/app/windows/tracker.hpp | 8 | ||||
| -rw-r--r-- | app/src/widgets/turn_order_view.cpp | 17 | ||||
| -rw-r--r-- | app/src/windows/tracker.cpp | 55 |
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 |
