Skip to content
Snippets Groups Projects
rugby-app-window.c 2.19 KiB
Newer Older
Bruce Cowan's avatar
Bruce Cowan committed
/*
 * SPDX-FileCopyrightText: 2017-2021 Bruce Cowan <bruce@bcowan.me.uk>
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
Bruce Cowan's avatar
Bruce Cowan committed
#include "rugby-app-window.h"
Bruce Cowan's avatar
Bruce Cowan committed

Bruce Cowan's avatar
Bruce Cowan committed
#include "rugby-list-store.h"
#include "rugby-possibility.h"
#include "rugby-possibility-row.h"
Bruce Cowan's avatar
Bruce Cowan committed

struct _RugbyAppWindow
{
    GtkApplicationWindow parent;

Bruce Cowan's avatar
Bruce Cowan committed
    RugbyListStore *store;
Bruce Cowan's avatar
Bruce Cowan committed
    GtkWidget *scorespin;
    GtkWidget *listbox;
Bruce Cowan's avatar
Bruce Cowan committed
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);
Bruce Cowan's avatar
Bruce Cowan committed
}

static void
rugby_app_window_init (RugbyAppWindow *self)
{
    gtk_widget_init_template (GTK_WIDGET (self));

Bruce Cowan's avatar
Bruce Cowan committed
    self->store = rugby_list_store_new ();
    gtk_list_box_bind_model (GTK_LIST_BOX (self->listbox),
                             G_LIST_MODEL (self->store),
                             listbox_widget_func,
Bruce Cowan's avatar
Bruce Cowan committed
                             NULL,
                             NULL);
Bruce Cowan's avatar
Bruce Cowan committed

  g_object_bind_property (self->scorespin, "value",
                          self->store, "score",
                          G_BINDING_DEFAULT);
Bruce Cowan's avatar
Bruce Cowan committed
}

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");

Bruce Cowan's avatar
Bruce Cowan committed
    gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, scorespin);
Bruce Cowan's avatar
Bruce Cowan committed
    gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, listbox);
Bruce Cowan's avatar
Bruce Cowan committed
}

RugbyAppWindow *
Bruce Cowan's avatar
Bruce Cowan committed
rugby_app_window_new (GtkApplication *app)
Bruce Cowan's avatar
Bruce Cowan committed
    return g_object_new (RUGBY_TYPE_APP_WINDOW,
                         "application", app,
                         NULL);