From 05da3897f944f5775d25de2136ea985d4b0078eb Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sun, 14 Jul 2024 21:30:56 +0200 Subject: app/ui: show status view when turn order is empty --- .vscode/settings.json | 3 +- app/include/turns/app/windows/main.hpp | 9 ++++-- app/src/windows/main.cpp | 23 ++++++++++---- domain/include/turns/domain/turn_order.hpp | 1 + domain/src/turn_order.cpp | 8 +++++ res/windows/main.ui | 50 +++++++++++++++++++++-------- res/windows/windows.cmb | 51 +++++++++++++++++++----------- 7 files changed, 102 insertions(+), 43 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index ebe447b..16e5da3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,7 +8,8 @@ "arknet", "gobj", "refptr", - "sigc" + "sigc", + "ustring" ], "editor.tabSize": 2, diff --git a/app/include/turns/app/windows/main.hpp b/app/include/turns/app/windows/main.hpp index d98e1a8..00844ac 100644 --- a/app/include/turns/app/windows/main.hpp +++ b/app/include/turns/app/windows/main.hpp @@ -13,6 +13,8 @@ #include #include #include +#include +#include namespace turns::app::windows { @@ -23,13 +25,14 @@ namespace turns::app::windows private: auto handle_create_list_row(Glib::RefPtr const item) -> Gtk::Widget *; - auto handle_create_participant() -> void; + auto handle_add_participant() -> void; - Gtk::Button * m_add_participant; AdwApplicationWindow * m_adw; - Gtk::MenuButton * m_open_main_menu; + Gtk::Widget * m_empty; Gtk::ListBox * m_participant_list; + Gtk::Stack * m_stack; AdwWindowTitle * m_title; + Gtk::ScrolledWindow * m_turn_order; Glib::RefPtr m_participants; }; diff --git a/app/src/windows/main.cpp b/app/src/windows/main.cpp index f378fc7..314b8cc 100644 --- a/app/src/windows/main.cpp +++ b/app/src/windows/main.cpp @@ -16,19 +16,30 @@ namespace turns::app::windows main::main(BaseObjectType * base, Glib::RefPtr const builder) : Gtk::ApplicationWindow{base} - , m_add_participant{builder->get_widget("add_participant")} , m_adw{ADW_APPLICATION_WINDOW(gobj())} - , m_open_main_menu{builder->get_widget("open_main_menu")} + , m_empty(builder->get_widget("empty")) , m_participant_list{builder->get_widget("participant_list")} + , m_stack{builder->get_widget("stack")} , m_title(ADW_WINDOW_TITLE(builder->get_widget("title")->gobj())) + , m_turn_order{builder->get_widget("turn_order")} , m_participants{domain::turn_order::create()} { - m_add_participant->set_tooltip_text(_(lang::add_participant)); - m_open_main_menu->set_tooltip_text(_(lang::main_menu)); adw_window_title_set_subtitle(m_title, _(lang::no_active_turn_order)); - m_add_participant->signal_clicked().connect(sigc::mem_fun(*this, &main::handle_create_participant)); + m_stack->set_visible_child(*m_empty); + m_participants->property_n_items().signal_changed().connect([this] { + if (m_participants->get_n_items()) + { + m_stack->set_visible_child(*m_turn_order); + } + else + { + m_stack->set_visible_child(*m_empty); + } + }); m_participant_list->bind_model(m_participants, sigc::mem_fun(*this, &main::handle_create_list_row)); + + add_action("add_participant", sigc::mem_fun(*this, &main::handle_add_participant)); } auto main::handle_create_list_row(Glib::RefPtr const item) -> Gtk::Widget * @@ -39,7 +50,7 @@ namespace turns::app::windows return widget; } - auto main::handle_create_participant() -> void + auto main::handle_add_participant() -> void { auto builder = Gtk::Builder::create_from_resource("/ch/arknet/Turns/windows/create_participant.ui"); auto dialog = Gtk::Builder::get_widget_derived(builder, "create_participant_dialog"); diff --git a/domain/include/turns/domain/turn_order.hpp b/domain/include/turns/domain/turn_order.hpp index a82e331..de7ac8a 100644 --- a/domain/include/turns/domain/turn_order.hpp +++ b/domain/include/turns/domain/turn_order.hpp @@ -18,6 +18,7 @@ namespace turns::domain auto static create() -> Glib::RefPtr; auto append(Glib::ustring const & name, float order_value) -> void; + auto remove(Glib::RefPtr item) -> void; auto sort() -> void; }; diff --git a/domain/src/turn_order.cpp b/domain/src/turn_order.cpp index 81b7fe7..677e993 100644 --- a/domain/src/turn_order.cpp +++ b/domain/src/turn_order.cpp @@ -31,6 +31,14 @@ namespace turns::domain insert_sorted(participant, comparator); } + auto turn_order::remove(Glib::RefPtr item) -> void + { + if (auto [was_found, index] = find(item); was_found) + { + super::remove(index); + } + } + auto turn_order::sort() -> void { super::sort(comparator); diff --git a/res/windows/main.ui b/res/windows/main.ui index 56ffc40..4732022 100644 --- a/res/windows/main.ui +++ b/res/windows/main.ui @@ -9,26 +9,45 @@ - - - + + crossfade + + - - none + + win.add_participant + center + Add participant - 18 - 12 - 12 - 18 - start - + + + 18 + 12 + 12 + 18 + start + + + + @@ -42,11 +61,14 @@ open-menu main_menu + Main Menu + win.add_participant contact-new + Add participant