Skip to content
Snippets Groups Projects
Commit 042cc2c1 authored by Bruce Cowan's avatar Bruce Cowan
Browse files

Use notify::score, and other minor fixes

Closes #11
parent 7fc33f9d
No related branches found
No related tags found
No related merge requests found
...@@ -46,6 +46,8 @@ enum ...@@ -46,6 +46,8 @@ enum
static GParamSpec *properties [N_PROPS]; static GParamSpec *properties [N_PROPS];
// Helper functions
static gint static gint
sort_func (gconstpointer a, sort_func (gconstpointer a,
gconstpointer b) gconstpointer b)
...@@ -71,9 +73,15 @@ sort_func (gconstpointer a, ...@@ -71,9 +73,15 @@ sort_func (gconstpointer a,
return atries - btries; return atries - btries;
} }
// Callbacks
static void static void
store_populate (RugbyListStore *self) notify_score_cb (GObject *gobject,
GParamSpec *pspec,
gpointer user_data)
{ {
RugbyListStore *self = RUGBY_LIST_STORE (user_data);
gint max_tries = self->score / TRY_POINTS; gint max_tries = self->score / TRY_POINTS;
gint max_utries = self->score / UTRY_POINTS; gint max_utries = self->score / UTRY_POINTS;
...@@ -105,6 +113,43 @@ store_populate (RugbyListStore *self) ...@@ -105,6 +113,43 @@ store_populate (RugbyListStore *self)
g_list_model_items_changed (G_LIST_MODEL (self), 0, old_length, self->items->len); g_list_model_items_changed (G_LIST_MODEL (self), 0, old_length, self->items->len);
} }
// GListModel implementation
static GType
rugby_list_store_get_item_type (GListModel *list)
{
return RUGBY_TYPE_POSSIBILITY;
}
static guint
rugby_list_store_get_n_items (GListModel *list)
{
RugbyListStore *self = RUGBY_LIST_STORE (list);
return self->items->len;
}
static gpointer
rugby_list_store_get_item (GListModel *list,
guint position)
{
RugbyListStore *self = RUGBY_LIST_STORE (list);
g_return_val_if_fail (position < self->items->len, NULL);
return g_object_ref (g_ptr_array_index (self->items, position));
}
static void
rugby_list_store_iface_init (GListModelInterface *iface)
{
iface->get_item_type = rugby_list_store_get_item_type;
iface->get_n_items = rugby_list_store_get_n_items;
iface->get_item = rugby_list_store_get_item;
}
// Class functions
static void static void
rugby_list_store_finalize (GObject *object) rugby_list_store_finalize (GObject *object)
{ {
...@@ -126,7 +171,7 @@ rugby_list_store_get_property (GObject *object, ...@@ -126,7 +171,7 @@ rugby_list_store_get_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_SCORE: case PROP_SCORE:
g_value_set_int (value, rugby_list_store_get_score (self)); g_value_set_uint (value, rugby_list_store_get_score (self));
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
...@@ -144,47 +189,13 @@ rugby_list_store_set_property (GObject *object, ...@@ -144,47 +189,13 @@ rugby_list_store_set_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_SCORE: case PROP_SCORE:
rugby_list_store_set_score (self, g_value_get_int (value)); rugby_list_store_set_score (self, g_value_get_uint (value));
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
} }
} }
static GType
rugby_list_store_get_item_type (GListModel *list)
{
return RUGBY_TYPE_POSSIBILITY;
}
static guint
rugby_list_store_get_n_items (GListModel *list)
{
RugbyListStore *self = RUGBY_LIST_STORE (list);
return self->items->len;
}
static gpointer
rugby_list_store_get_item (GListModel *list,
guint position)
{
RugbyListStore *self = RUGBY_LIST_STORE (list);
if (position < self->items->len)
return g_object_ref (g_ptr_array_index (self->items, position));
else
return NULL;
}
static void
rugby_list_store_iface_init (GListModelInterface *iface)
{
iface->get_item_type = rugby_list_store_get_item_type;
iface->get_n_items = rugby_list_store_get_n_items;
iface->get_item = rugby_list_store_get_item;
}
static void static void
rugby_list_store_class_init (RugbyListStoreClass *klass) rugby_list_store_class_init (RugbyListStoreClass *klass)
{ {
...@@ -210,8 +221,13 @@ rugby_list_store_init (RugbyListStore *self) ...@@ -210,8 +221,13 @@ rugby_list_store_init (RugbyListStore *self)
{ {
self->score = 0; self->score = 0;
self->items = g_ptr_array_new_with_free_func (g_object_unref); self->items = g_ptr_array_new_with_free_func (g_object_unref);
g_signal_connect (self, "notify::score",
G_CALLBACK (notify_score_cb), self);
} }
// Public functions
guint guint
rugby_list_store_get_score (RugbyListStore *self) rugby_list_store_get_score (RugbyListStore *self)
{ {
...@@ -229,7 +245,6 @@ rugby_list_store_set_score (RugbyListStore *self, ...@@ -229,7 +245,6 @@ rugby_list_store_set_score (RugbyListStore *self,
if (score != self->score) if (score != self->score)
{ {
self->score = score; self->score = score;
store_populate (self);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SCORE]); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SCORE]);
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment