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

struct _RugbyPossibility
{
    GObject parent_instance;

    int tries;
    int utries;
    int kicks;
};

G_DEFINE_TYPE (RugbyPossibility, rugby_possibility, G_TYPE_OBJECT)

enum
{
    PROP_0,
    PROP_TRIES,
    PROP_UTRIES,
    PROP_KICKS,
    N_PROPS
};

Bruce Cowan's avatar
Bruce Cowan committed
static GParamSpec *properties[N_PROPS];

static void
rugby_possibility_get_property (GObject    *object,
                                unsigned    prop_id,
                                GValue     *value,
                                GParamSpec *pspec)
{
    RugbyPossibility *self = RUGBY_POSSIBILITY (object);

    switch (prop_id)
      {
      case PROP_TRIES:
          g_value_set_int (value, self->tries);
          break;
      case PROP_UTRIES:
          g_value_set_int (value, self->utries);
          break;
      case PROP_KICKS:
          g_value_set_int (value, self->kicks);
          break;
      default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
      }
}

static void
rugby_possibility_set_property (GObject      *object,
                                unsigned      prop_id,
                                const GValue *value,
                                GParamSpec   *pspec)
{
    RugbyPossibility *self = RUGBY_POSSIBILITY (object);

    switch (prop_id)
      {
      case PROP_TRIES:
          self->tries = g_value_get_int (value);
          break;
      case PROP_UTRIES:
          self->utries = g_value_get_int (value);
          break;
      case PROP_KICKS:
          self->kicks = g_value_get_int (value);
          break;
      default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
      }
}

static void
rugby_possibility_class_init (RugbyPossibilityClass *klass)
{
    GObjectClass *object_class = G_OBJECT_CLASS (klass);

    object_class->get_property = rugby_possibility_get_property;
    object_class->set_property = rugby_possibility_set_property;

    properties[PROP_TRIES] =
        g_param_spec_int ("tries", "Tries", "Converted tries",
                          0, 200, 0,
                          G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
    properties[PROP_UTRIES] =
        g_param_spec_int ("utries", "Utries", "Unconverted tries",
                          0, 200, 0,
                          G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
    properties[PROP_KICKS] =
        g_param_spec_int ("kicks", "Kicks", "Penalties and drop goals",
                          0, 200, 0,
                          G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);

    g_object_class_install_properties (object_class,
                                       N_PROPS,
                                       properties);

}

static void
rugby_possibility_init (G_GNUC_UNUSED RugbyPossibility *self)
{
}

RugbyPossibility *
rugby_possibility_new (int tries,
                       int utries,
                       int kicks)
{
    return g_object_new (RUGBY_TYPE_POSSIBILITY,
                         "tries", tries,
                         "utries", utries,
                         "kicks", kicks,
                         NULL);
}