]> git.draconx.ca Git - gob-dx.git/blobdiff - examples/my-person.gob
Release 2.0.0
[gob-dx.git] / examples / my-person.gob
index d895a629562f12c40b0c9a3b4625f13dfdc8ad5e..7f4e9b3bf8db4580570ff80d8cadb547f1921b94 100644 (file)
@@ -1,8 +1,8 @@
-requires 0.92.1
-
-/* This will work with an older version (0.92.1 specifically), if you want
- * to see a version with automatic argument<->datamember linking, automatic
- * initialization and destruction, look at my-person2.gob */
+/*
+ * 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 <time.h>
@@ -10,58 +10,74 @@ requires 0.92.1
 #include "my-person-private.h"
 %}
 
-class My:Person from Gtk:Object {
-       public char *name;
-       public long dob; /* date of birth as a time_t */
-       public long dod; /* date of death as a time_t */
+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);
 
-       private int rounds_in_shotgun; /* number of rounds in our shotgun */
-       
-       argument POINTER (type char *) name
-       get {
-               /* note that g_strdup handles NULL correctly */
-               ARG = g_strdup(self->name);
-       }
-       set {
-               /* note that g_free and g_strdup handles NULL correctly */
-               g_free(self->name);
-               self->name = g_strdup(ARG);
-       };
+       /* 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);
+               };
 
-       argument LONG dob get { ARG = self->dob; } set { self->dob = ARG; };
-       argument LONG dod get { ARG = self->dod; } set { self->dod = ARG; };
+       /* 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);
 
-       init(self)
-       {
-               self->name = g_strdup("Nobody");
-               self->dob = 0;
-               self->dod = 0;
-               
-               /* initially we have no rounds in the shotgun */
-               self->_priv->rounds_in_shotgun = 0;
-       }
+       /* 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)
+       birth (self, long dob)
        {
-               self->dob = dob;
+               g_object_set (G_OBJECT (self),
+                             "dob", dob);
        }
        
        /* 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)
+       death (self, long dod)
        {
-               self->dod = dod;
+               g_object_set (G_OBJECT (self),
+                             "dod", dod);
        }
 
        public
        void
-       load_shotgun(self)
+       load_shotgun (self)
        {
                /* add a round to our shotgun */
                self->_priv->rounds_in_shotgun++;
@@ -69,10 +85,10 @@ class My:Person from Gtk:Object {
 
        public
        void
-       shoot_oneself_in_the_head(self)
+       shoot_oneself_in_the_head (self)
        {
-               if(self->_priv->rounds_in_shotgun==0) {
-                       g_warning("No rounds in the shotgun!");
+               if (self->_priv->rounds_in_shotgun == 0) {
+                       g_warning (_("No rounds in the shotgun!"));
                        return;
                }
                
@@ -80,21 +96,12 @@ class My:Person from Gtk:Object {
                self->_priv->rounds_in_shotgun--;
 
                /* death is imminent if we shoot oneself in the head */
-               death(self, (long)time(NULL));
-       }
-
-       /* override the destroy signal where we destroy data we need to free */
-       override (Gtk:Object)
-       void
-       destroy (Gtk:Object *self (check null type))
-       {
-               g_free(MY_PERSON(self)->name);
-               PARENT_HANDLER(self);
+               death (self, (long)time (NULL));
        }
 
-       public GtkObject *
-       new(void)
+       public GObject *
+       new (void)
        {
-               return (GtkObject *)GET_NEW;
+               return (GObject *)GET_NEW;
        }
 }