diff --git a/data/gtk/window.blp b/data/gtk/window.blp index 50fbd63febeeda30e37c0b3fa4c751765361dc5a..be6e32ab939f54c5b3cc742d08dd079c2e2cebee 100644 --- a/data/gtk/window.blp +++ b/data/gtk/window.blp @@ -34,19 +34,31 @@ template RugbyAppWindow : Adw.ApplicationWindow { Adw.Clamp { maximum-size: 600; - ScrolledWindow { - vexpand: true; + Stack stack { + StackPage { + child: Adw.StatusPage empty_page { + title: "No possibilities"; + }; + } - ListView listview { - styles ["rich-list"] + StackPage { + child: ScrolledWindow list_page { + vexpand: true; - model: NoSelection { - model: .RugbyListStore { - score: bind scorespin.value; - }; - }; - factory: BuilderListItemFactory { - resource: "/uk/me/bcowan/Rugby/gtk/score-item.ui"; + ListView listview { + styles ["rich-list"] + + model: NoSelection { + model: .RugbyListStore { + score: bind scorespin.value; + + items-changed => list_store_items_changed_cb(); + }; + }; + factory: BuilderListItemFactory { + resource: "/uk/me/bcowan/Rugby/gtk/score-item.ui"; + }; + } }; } } diff --git a/src/rugby-app-window.c b/src/rugby-app-window.c index a1bf283a640525e8a9c9bc03a35322067b903614..956cdf8effe175fa84d930f754b52a59f724e47b 100644 --- a/src/rugby-app-window.c +++ b/src/rugby-app-window.c @@ -19,10 +19,27 @@ struct _RugbyAppWindow GtkWidget *scorespin; GtkWidget *menu_button; + GtkWidget *stack; + GtkWidget *empty_page; + GtkWidget *list_page; }; G_DEFINE_TYPE (RugbyAppWindow, rugby_app_window, ADW_TYPE_APPLICATION_WINDOW) +static void +list_store_items_changed_cb ( GListModel *model, + G_GNUC_UNUSED unsigned position, + G_GNUC_UNUSED unsigned removed, + G_GNUC_UNUSED unsigned added, + RugbyAppWindow *self) +{ + unsigned n_items = g_list_model_get_n_items (model); + if (n_items == 0) + gtk_stack_set_visible_child (GTK_STACK (self->stack), self->empty_page); + else + gtk_stack_set_visible_child (GTK_STACK (self->stack), self->list_page); +} + static char * item_tooltip_cb (GtkListItem *item) { @@ -141,8 +158,12 @@ rugby_app_window_class_init (RugbyAppWindowClass *klass) gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, scorespin); gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, menu_button); + gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, stack); + gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, empty_page); + gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, list_page); gtk_widget_class_bind_template_callback (widget_class, item_tooltip_cb); + gtk_widget_class_bind_template_callback (widget_class, list_store_items_changed_cb); } RugbyAppWindow * diff --git a/src/rugby-list-store.c b/src/rugby-list-store.c index 88426425ed45e79a22f9e1c66c0ce3cb79f47a93..4e296bef3ea44940763a5630da848585ce426ee3 100644 --- a/src/rugby-list-store.c +++ b/src/rugby-list-store.c @@ -72,6 +72,12 @@ process_data (RugbyListStore *self) unsigned old_length = g_list_model_get_n_items (G_LIST_MODEL (self->items)); g_list_store_remove_all (self->items); + if (self->score == 0) + { + g_list_model_items_changed (G_LIST_MODEL (self), 0, old_length, 0); + return; + } + int max_tries = self->score / try_points; int max_utries = self->score / utry_points;