/*
 * This is an example button widget which counts the number of clicks
 *
 * It is also showing how you can use inline gtk-doc like documentation
 * which will be correctly translated and put into the resulting source
 * file
 */
requires 2.0.0

class Gtk:Button:Count from Gtk:Button {
        public int count = 0;
        property INT count
                (nick = _("Count of clicks"),
                 blurb = _("How many times was the button clicked"),
                 minimum = 0,
                 maximum = INT_MAX,
                 /* initially set to 0, even though we have already
                  * set the default above */
                 default_value = 0,
                 /* links the count property to the count data member */
                 link);

        init (self)
        {
                /* Although we have specified the default in two places
                 * already, this is an example of where else you can put
                 * initialization */
                self->count = 0;
        }

        /**
         * new:
         *
         * Makes a new #GtkButtonCount widget
         *
         * Returns: a new widget
         **/
        public
        GtkWidget *
        new (void)
        {
                /* It's ok to use a normal cast here, as we are sure that we
                 * have gotten the right type */
                return (GtkWidget *)GET_NEW;
        }

        /**
         * new_with_label:
         * @label: the label text
         *
         * Makes a new #GtkButtonCount widget with a label
         *
         * Returns: a new widget
         **/
        public
        GtkWidget *
        new_with_label (char *label (check null)) onerror NULL
        {
                /* It's ok to use a normal cast here, as we are sure that we
                 * have gotten the right type */
                GtkWidget *widget = (GtkWidget *)GET_NEW;
                GtkWidget *label_widget = gtk_label_new (label);
                gtk_container_add (GTK_CONTAINER (widget), label_widget);
                gtk_widget_show (label_widget);
                return widget;
        }

        override (Gtk:Button)
        void
        clicked (Gtk:Button *self (check null type))
        {
                GtkButtonCount *bc = GTK_BUTTON_COUNT (self);
                /* increase count */
                bc->count++;
                /* runt he parent class handler for clicked */
                PARENT_HANDLER (self);
        }
}