/* * This file is a basic example of how a .gob file would be constructed, * how to add data members, properties and methods */ requires 2.0.0 %{ #include #include "my-person.h" #include "my-person-private.h" %} class My:Person from G:Object { /* the name of the person */ private char *name = {g_strdup("Nobody")} destroywith g_free; property STRING name (nick = "Name", blurb = "Name of the person", default_value = "Nobody", /* Export get/set functions for this property */ export, /* link to the data memeber 'name' */ link); /* date of birth as a time_t */ private long dob = 0; property LONG dob (nick = "Date of birth", blurb = "Date of birth of the person", minimum = 0, maximum = LONG_MAX, default_value = 0, export) /* We could use 'link' as above, but the code below * shows how to do this without linking */ set { self->_priv->dob = g_value_get_long (VAL); } get { g_value_set_long (VAL, self->_priv->dob); }; /* date of death as a time_t */ private long dod = 0; property LONG dod (nick = "Date of death", blurb = "Date of death of the person", minimum = 0, maximum = LONG_MAX, default_value = 0, export, link); /* number of rounds in our shotgun */ private int rounds_in_shotgun = 0; /* when the person gets born, sends out a signal, the caller of the signal should provide the date of birth */ signal last NONE (LONG) void birth (self, long dob) { g_object_set (G_OBJECT (self), "dob", dob, NULL); } /* when the person dies, sends out a signal, the caller of the signal should provide the date of death */ signal last NONE (LONG) void death (self, long dod) { g_object_set (G_OBJECT (self), "dod", dod, NULL); } public void load_shotgun (self) { /* add a round to our shotgun */ self->_priv->rounds_in_shotgun++; } public void shoot_oneself_in_the_head (self) { if (self->_priv->rounds_in_shotgun == 0) { g_warning ("No rounds in the shotgun!"); return; } /* one round was fired */ self->_priv->rounds_in_shotgun--; /* death is imminent if we shoot oneself in the head */ self_death (self, (long)time (NULL)); } public GObject * new (void) { return (GObject *)GET_NEW; } }