diff options
Diffstat (limited to 'app/src')
| -rw-r--r-- | app/src/widgets/turn_order_view.cpp | 17 | ||||
| -rw-r--r-- | app/src/windows/tracker.cpp | 55 |
2 files changed, 32 insertions, 40 deletions
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 |
