/* * SPDX-FileCopyrightText: 2017-2021 Bruce Cowan <bruce@bcowan.me.uk> * * SPDX-License-Identifier: GPL-3.0-or-later */ #include "config.h" #include "rugby-app-window.h" #include "rugby-list-store.h" #include "rugby-possibility.h" #include "rugby-possibility-row.h" struct _RugbyAppWindow { GtkApplicationWindow parent; RugbyListStore *store; GtkWidget *scorespin; GtkWidget *listbox; }; G_DEFINE_TYPE (RugbyAppWindow, rugby_app_window, GTK_TYPE_APPLICATION_WINDOW) static GtkWidget * listbox_widget_func ( gpointer item, G_GNUC_UNUSED gpointer user_data) { RugbyPossibility *possibility = RUGBY_POSSIBILITY (item); return rugby_possibility_row_new (possibility); } static void rugby_app_window_init (RugbyAppWindow *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->store = rugby_list_store_new (); gtk_list_box_bind_model (GTK_LIST_BOX (self->listbox), G_LIST_MODEL (self->store), listbox_widget_func, NULL, NULL); g_object_bind_property (self->scorespin, "value", self->store, "score", G_BINDING_DEFAULT); } static void rugby_app_window_dispose (GObject *object) { RugbyAppWindow *self = RUGBY_APP_WINDOW (object); g_clear_object (&self->store); G_OBJECT_CLASS (rugby_app_window_parent_class)->dispose (object); } static void rugby_app_window_class_init (RugbyAppWindowClass *klass) { GObjectClass *obj_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); obj_class->dispose = rugby_app_window_dispose; gtk_widget_class_set_template_from_resource (widget_class, "/uk/me/bcowan/rugby/interface.ui"); gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, scorespin); gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, listbox); } RugbyAppWindow * rugby_app_window_new (GtkApplication *app) { return g_object_new (RUGBY_TYPE_APP_WINDOW, "application", app, NULL); }