From: Andrea Zagli Date: Sun, 21 Feb 2010 10:15:34 +0000 (+0100) Subject: Added radio button widget. X-Git-Tag: 0.1.0~4 X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=152442a93cc3ff74d459100692e5ed07b1c6b771;p=libgtkform Added radio button widget. --- diff --git a/data/gtkform.dtd b/data/gtkform.dtd index f2de6e0..7d94ff5 100644 --- a/data/gtkform.dtd +++ b/data/gtkform.dtd @@ -4,16 +4,18 @@ - + + + +
+widgetradio +TYPE_GTK_FORM_WIDGET_RADIO +GTK_FORM_WIDGET_RADIO +GTK_FORM_WIDGET_RADIO_CLASS +IS_GTK_FORM_WIDGET_RADIO +IS_GTK_FORM_WIDGET_RADIO_CLASS +GTK_FORM_WIDGET_RADIO_GET_CLASS +GtkFormWidgetRadio +GtkFormWidgetRadio +gtk_form_widget_radio_get_type +gtk_form_widget_radio_new +gtk_form_widget_radio_get_value_stringify +gtk_form_widget_radio_set_value_stringify +gtk_form_widget_radio_set_editable +gtk_form_widget_radio_set_return_value +gtk_form_widget_radio_get_return_value +
+
fieldinteger TYPE_GTK_FORM_FIELD_INTEGER diff --git a/docs/reference/libgtkform-decl.txt b/docs/reference/libgtkform-decl.txt index 24aeb33..3705d6c 100644 --- a/docs/reference/libgtkform-decl.txt +++ b/docs/reference/libgtkform-decl.txt @@ -1093,6 +1093,16 @@ GtkForm *form, const gchar *field_name GtkForm *form, const gchar *widget_name +gtk_form_get_form_field_from_widget +GtkFormField * +GtkForm *form, GtkWidget *widget + + +gtk_form_get_form_widget_from_widget +GtkFormWidget * +GtkForm *form, GtkWidget *widget + + gtk_form_get_widgets GtkWidget ** GtkForm *form @@ -1296,6 +1306,85 @@ GtkFormWidget *fwidget, const gchar *value GtkFormWidget *fwidget, gboolean editable +TYPE_GTK_FORM_WIDGET_RADIO +#define TYPE_GTK_FORM_WIDGET_RADIO (gtk_form_widget_radio_get_type ()) + + +GTK_FORM_WIDGET_RADIO +#define GTK_FORM_WIDGET_RADIO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GTK_FORM_WIDGET_RADIO, GtkFormWidgetRadio)) + + +GTK_FORM_WIDGET_RADIO_CLASS +#define GTK_FORM_WIDGET_RADIO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GTK_FORM_WIDGET_RADIO, GtkFormWidgetRadioClass)) + + +IS_GTK_FORM_WIDGET_RADIO +#define IS_GTK_FORM_WIDGET_RADIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GTK_FORM_WIDGET_RADIO)) + + +IS_GTK_FORM_WIDGET_RADIO_CLASS +#define IS_GTK_FORM_WIDGET_RADIO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GTK_FORM_WIDGET_RADIO)) + + +GTK_FORM_WIDGET_RADIO_GET_CLASS +#define GTK_FORM_WIDGET_RADIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_GTK_FORM_WIDGET_RADIO, GtkFormWidgetRadioClass)) + + +GtkFormWidgetRadio + + +GtkFormWidgetRadioClass + + +GtkFormWidgetRadio +struct _GtkFormWidgetRadio + { + GtkFormWidget parent; + }; + + +GtkFormWidgetRadioClass +struct _GtkFormWidgetRadioClass + { + GtkFormWidgetClass parent_class; + }; + + +gtk_form_widget_radio_get_type +GType +void + + +gtk_form_widget_radio_new +GtkFormWidget * +void + + +gtk_form_widget_radio_get_value_stringify +gchar * +GtkFormWidget *widget + + +gtk_form_widget_radio_set_value_stringify +gboolean +GtkFormWidget *fwidget, const gchar *value + + +gtk_form_widget_radio_set_editable +void +GtkFormWidget *fwidget, gboolean editable + + +gtk_form_widget_radio_set_return_value +void +GtkFormWidgetRadio *fwidget, const gchar *value + + +gtk_form_widget_radio_get_return_value +gchar * +GtkFormWidgetRadio *fwidget + + TYPE_GTK_FORM_FIELD_INTEGER #define TYPE_GTK_FORM_FIELD_INTEGER (gtk_form_field_integer_get_type ()) diff --git a/docs/reference/libgtkform-undocumented.txt b/docs/reference/libgtkform-undocumented.txt index 6141135..5872155 100644 --- a/docs/reference/libgtkform-undocumented.txt +++ b/docs/reference/libgtkform-undocumented.txt @@ -1,7 +1,7 @@ 7% symbol docs coverage. 22 symbols documented. 1 symbols incomplete. -277 not documented. +285 not documented. GTK_FORM @@ -187,7 +187,9 @@ gtk_form_filed_boolean_is_changed gtk_form_fill_from_datamodel gtk_form_get_field_from_name gtk_form_get_form_field_from_name +gtk_form_get_form_field_from_widget gtk_form_get_form_widget_from_name +gtk_form_get_form_widget_from_widget gtk_form_get_gtkbuilder gtk_form_get_key gtk_form_get_objects @@ -239,6 +241,12 @@ gtk_form_widget_label_get_value_stringify gtk_form_widget_label_new gtk_form_widget_label_set_value_stringify gtk_form_widget_new +gtk_form_widget_radio_get_return_value +gtk_form_widget_radio_get_value_stringify +gtk_form_widget_radio_new +gtk_form_widget_radio_set_editable +gtk_form_widget_radio_set_return_value +gtk_form_widget_radio_set_value_stringify gtk_form_widget_set_editable gtk_form_widget_set_from_gtkbuilder gtk_form_widget_set_label diff --git a/docs/reference/libgtkform-unused.txt b/docs/reference/libgtkform-unused.txt index d4a9e2d..22253c2 100644 --- a/docs/reference/libgtkform-unused.txt +++ b/docs/reference/libgtkform-unused.txt @@ -1,3 +1,6 @@ +GTK_FORM_WIDGET_RADIO +GTK_FORM_WIDGET_RADIO_CLASS +GTK_FORM_WIDGET_RADIO_GET_CLASS GtkFormClass GtkFormFieldBooleanClass GtkFormFieldClass @@ -11,8 +14,13 @@ GtkFormWidgetClass GtkFormWidgetComboBoxClass GtkFormWidgetEntryClass GtkFormWidgetLabelClass +GtkFormWidgetRadio +GtkFormWidgetRadioClass GtkFormWidgetSpinClass GtkFormWidgetTextviewClass +IS_GTK_FORM_WIDGET_RADIO +IS_GTK_FORM_WIDGET_RADIO_CLASS +TYPE_GTK_FORM_WIDGET_RADIO gtk_form_field_boolean_set_as_origin gtk_form_field_boolean_str_to_boolean gtk_form_field_datetime_get_gdate_from_tm @@ -33,7 +41,9 @@ gtk_form_field_text_is_changed gtk_form_field_text_set_as_origin gtk_form_filed_boolean_is_changed gtk_form_get_form_field_from_name +gtk_form_get_form_field_from_widget gtk_form_get_form_widget_from_name +gtk_form_get_form_widget_from_widget gtk_form_get_gtkbuilder gtk_form_get_key gtk_form_get_objects_by_name @@ -47,4 +57,11 @@ gtk_form_set_key gtk_form_set_sensitive_by_name gtk_form_set_table gtk_form_widget_get_label +gtk_form_widget_radio_get_return_value +gtk_form_widget_radio_get_type +gtk_form_widget_radio_get_value_stringify +gtk_form_widget_radio_new +gtk_form_widget_radio_set_editable +gtk_form_widget_radio_set_return_value +gtk_form_widget_radio_set_value_stringify gtk_form_widget_set_label diff --git a/docs/reference/libgtkform.types b/docs/reference/libgtkform.types index a45c49b..9d91c41 100644 --- a/docs/reference/libgtkform.types +++ b/docs/reference/libgtkform.types @@ -1,15 +1,17 @@ -gtk_form_widget_spin_get_type -gtk_form_widget_check_get_type +gtk_form_get_type +gtk_form_field_get_type gtk_form_field_boolean_get_type -gtk_form_widget_get_type -gtk_form_field_text_get_type gtk_form_field_datetime_get_type -gtk_form_widget_label_get_type gtk_form_field_float_get_type +gtk_form_field_integer_get_type +gtk_form_field_text_get_type gtk_form_key_get_type +gtk_form_widget_get_type +gtk_form_widget_check_get_type +gtk_form_widget_entry_get_type +gtk_form_widget_label_get_type +gtk_form_widget_radio_get_type +gtk_form_widget_spin_get_type gtk_form_widget_textview_get_type -gtk_form_field_get_type -gtk_form_get_type gtk_form_widget_combo_box_get_type -gtk_form_widget_entry_get_type -gtk_form_field_integer_get_type + diff --git a/src/Makefile.am b/src/Makefile.am index d60344a..6b39fa3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -18,6 +18,7 @@ libgtkform_la_SOURCES = form.c \ widgetcombobox.c \ widgetentry.c \ widgetlabel.c \ + widgetradio.c \ widgetspin.c \ widgettextview.c @@ -36,6 +37,7 @@ libgtkform_include_HEADERS = form.h \ widgetcombobox.h \ widgetentry.h \ widgetlabel.h \ + widgetradio.h \ widgetspin.h \ widgettextview.h diff --git a/src/form.c b/src/form.c index f698a11..a1f5151 100644 --- a/src/form.c +++ b/src/form.c @@ -40,6 +40,7 @@ #include "widgetcombobox.h" #include "widgetentry.h" #include "widgetlabel.h" +#include "widgetradio.h" #include "widgetspin.h" #include "widgettextview.h" @@ -246,6 +247,10 @@ GtkForm { widget = gtk_form_widget_label_new (); } + else if (g_strcmp0 (type, "radio") == 0) + { + widget = gtk_form_widget_radio_new (); + } else if (g_strcmp0 (type, "spin") == 0) { widget = gtk_form_widget_spin_new (); @@ -254,6 +259,10 @@ GtkForm { widget = gtk_form_widget_textview_new (); } + else + { + g_warning (_("Unknown type «%s»."), type); + } if (widget != NULL) { @@ -272,7 +281,8 @@ GtkForm { gtk_form_widget_set_label (widget, wlabel); } - else if (g_strcmp0 (type, "checkbox") == 0 + else if ((g_strcmp0 (type, "checkbox") == 0 + || g_strcmp0 (type, "radio") == 0) && g_strcmp0 (label, name) == 0) { gtk_form_widget_set_label (widget, wlabel); @@ -293,6 +303,12 @@ GtkForm g_object_set (G_OBJECT (widget), "column-field", strtol ((gchar *)xmlNodeGetContent (node_widget), NULL, 10), NULL); } + else if (xmlStrcmp (node_widget->name, (const xmlChar *)"return-value") == 0 + && IS_GTK_FORM_WIDGET_RADIO (widget)) + { + g_object_set (G_OBJECT (widget), "return-value", + xmlNodeGetContent (node_widget), NULL); + } else if (xmlStrcmp (node_widget->name, (const xmlChar *)"field") == 0) { field = NULL; @@ -669,6 +685,7 @@ GtkFormField GtkFormPrivate *priv; g_return_val_if_fail (IS_GTK_FORM (form), NULL); + g_return_val_if_fail (field_name != NULL, NULL); priv = GTK_FORM_GET_PRIVATE (form); @@ -725,6 +742,77 @@ GtkFormWidget return widget_ret; } +/** + * gtk_form_get_form_field_from_widget: + * @form: a #GtkForm object. + * @widget: a #GtkWidget object. + * + */ +GtkFormField +*gtk_form_get_form_field_from_widget (GtkForm *form, GtkWidget *widget) +{ + GtkFormWidget *fwidget = NULL; + GtkFormField *field = NULL; + GtkFormWidget *widget_ret = NULL; + GtkFormPrivate *priv; + + g_return_val_if_fail (IS_GTK_FORM (form), NULL); + g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); + + priv = GTK_FORM_GET_PRIVATE (form); + + GSList *fields = priv->fields; + while (fields != NULL) + { + fwidget = gtk_form_field_get_form_widget ((GtkFormField *)fields->data); + + if (gtk_form_widget_get_widget (fwidget) == widget) + { + field = (GtkFormField *)fields->data; + break; + } + + fields = g_slist_next (fields); + } + + return field; +} + +/** + * gtk_form_get_form_widget_from_widget: + * @form: a #GtkForm object. + * @widget: a #GtkWidget object. + * + */ +GtkFormWidget +*gtk_form_get_form_widget_from_widget (GtkForm *form, GtkWidget *widget) +{ + GtkFormWidget *fwidget = NULL; + GtkFormWidget *widget_ret = NULL; + GtkFormPrivate *priv; + + g_return_val_if_fail (IS_GTK_FORM (form), NULL); + g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); + + priv = GTK_FORM_GET_PRIVATE (form); + + GSList *fields = priv->fields; + while (fields != NULL) + { + fwidget = gtk_form_field_get_form_widget ((GtkFormField *)fields->data); + + if (gtk_form_widget_get_widget (fwidget) == widget) + { + widget_ret = fwidget; + break; + } + + fields = g_slist_next (fields); + } + + return widget_ret; +} + /** * gtk_form_get_objects: * @form: a #GtkForm object. diff --git a/src/form.h b/src/form.h index 2101497..6a3c305 100644 --- a/src/form.h +++ b/src/form.h @@ -74,6 +74,9 @@ gboolean gtk_form_add_fields (GtkForm *form, ...); GtkFormField *gtk_form_get_form_field_from_name (GtkForm *form, const gchar *field_name); GtkFormWidget *gtk_form_get_form_widget_from_name (GtkForm *form, const gchar *widget_name); +GtkFormField *gtk_form_get_form_field_from_widget (GtkForm *form, GtkWidget *widget); +GtkFormWidget *gtk_form_get_form_widget_from_widget (GtkForm *form, GtkWidget *widget); + GtkWidget **gtk_form_get_widgets (GtkForm *form); GObject **gtk_form_get_objects_by_name (GtkForm *form, ...); diff --git a/src/widgetradio.c b/src/widgetradio.c new file mode 100644 index 0000000..6fd4352 --- /dev/null +++ b/src/widgetradio.c @@ -0,0 +1,308 @@ +/* + * Copyright (C) 2005-2010 Andrea Zagli + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#include + +#include "widgetradio.h" + +enum +{ + PROP_0, + PROP_RETURN_VALUE +}; + +static void gtk_form_widget_radio_class_init (GtkFormWidgetRadioClass *klass); +static void gtk_form_widget_radio_init (GtkFormWidgetRadio *gtk_form_widget_radio); + +static void gtk_form_widget_radio_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void gtk_form_widget_radio_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +static gboolean check_value (const gchar *value); + +#define GTK_FORM_WIDGET_RADIO_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_GTK_FORM_WIDGET_RADIO, GtkFormWidgetRadioPrivate)) + +typedef struct _GtkFormWidgetRadioPrivate GtkFormWidgetRadioPrivate; +struct _GtkFormWidgetRadioPrivate + { + gchar *value; + }; + + +G_DEFINE_TYPE (GtkFormWidgetRadio, gtk_form_widget_radio, TYPE_GTK_FORM_WIDGET) + +static void +gtk_form_widget_radio_class_init (GtkFormWidgetRadioClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkFormWidgetClass *widget_class = GTK_FORM_WIDGET_CLASS (klass); + + object_class->set_property = gtk_form_widget_radio_set_property; + object_class->get_property = gtk_form_widget_radio_get_property; + + widget_class->get_value_stringify = gtk_form_widget_radio_get_value_stringify; + widget_class->set_value_stringify = gtk_form_widget_radio_set_value_stringify; + widget_class->set_editable = gtk_form_widget_radio_set_editable; + + g_object_class_install_property (object_class, PROP_RETURN_VALUE, + g_param_spec_string ("return-value", + "Return value", + "Return value", + "", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_type_class_add_private (object_class, sizeof (GtkFormWidgetRadioPrivate)); +} + +static void +gtk_form_widget_radio_init (GtkFormWidgetRadio *gtk_form_widget_radio) +{ +} + +/** + * gtk_form_widget_radio_new: + * + * Returns: the newly created #GtkFormWidgetRadio. + */ +GtkFormWidget +*gtk_form_widget_radio_new () +{ + return g_object_new (TYPE_GTK_FORM_WIDGET_RADIO, NULL); +} + +/** + * gtk_form_widget_radio_get_value_stringify: + * @widget: + * + */ +gchar +*gtk_form_widget_radio_get_value_stringify (GtkFormWidget *fwidget) +{ + GSList *group; + GtkWidget *w; + gchar *ret; + GtkFormWidgetRadioPrivate *priv; + + g_return_val_if_fail (IS_GTK_FORM_WIDGET_RADIO (fwidget), ""); + + priv = GTK_FORM_WIDGET_RADIO_GET_PRIVATE (fwidget); + + w = gtk_form_widget_get_widget (fwidget); + + ret = g_strdup (""); + + /* always returns the value of the group's active radio button */ + group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (w)); + while (group != NULL) + { + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (group->data))) + { + ret = g_strdup ((const gchar*)g_object_get_data (G_OBJECT (group->data), "return-value")); + if (ret == NULL) + { + ret = g_strdup (""); + } + break; + } + + group = g_slist_next (group); + } + + return ret; +} + +/** + * gtk_form_widget_radio_set_value_stringify: + * @fwidget: + * @value: + * + */ +gboolean +gtk_form_widget_radio_set_value_stringify (GtkFormWidget *fwidget, const gchar *value) +{ + gboolean ret = FALSE; + GtkWidget *w; + gboolean active; + + g_return_val_if_fail (IS_GTK_FORM_WIDGET_RADIO (fwidget), FALSE); + + active = FALSE; + + g_object_get (G_OBJECT (fwidget), + "widget", &w, + NULL); + + active = check_value (value); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), active); + + ret = TRUE; + + return ret; +} + +/** + * gtk_form_widget_radio_set_editable: + * @fwidget: a #GtkFormWidget object. + * @editable: + * + */ +void +gtk_form_widget_radio_set_editable (GtkFormWidget *fwidget, gboolean editable) +{ + GtkWidget *w; + + g_return_if_fail (IS_GTK_FORM_WIDGET_RADIO (fwidget)); + + g_object_get (G_OBJECT (fwidget), + "widget", &w, + NULL); + + gtk_widget_set_sensitive (w, editable); +} + +/** + * gtk_form_widget_radio_set_return_value: + * @fwidget: a #GtkFormWidgetRadio object. + * @value: + * + */ +void +gtk_form_widget_radio_set_return_value (GtkFormWidgetRadio *fwidget, const gchar *value) +{ + GtkFormWidgetRadioPrivate *priv; + GtkWidget *widget; + + g_return_if_fail (IS_GTK_FORM_WIDGET_RADIO (fwidget)); + + priv = GTK_FORM_WIDGET_RADIO_GET_PRIVATE (fwidget); + + if (value == NULL) + { + priv->value = g_strdup (""); + } + else + { + priv->value = g_strdup (value); + } + + widget = gtk_form_widget_get_widget (GTK_FORM_WIDGET (fwidget)); + if (GTK_IS_WIDGET (widget)) + { + g_object_set_data (G_OBJECT (widget), "return-value", (gpointer)priv->value); + } +} + +/** + * gtk_form_widget_radio_get_return_value: + * @fwidget: a #GtkFormWidgetRadio object. + * + */ +gchar +*gtk_form_widget_radio_get_return_value (GtkFormWidgetRadio *fwidget) +{ + GtkFormWidgetRadioPrivate *priv; + + g_return_val_if_fail (IS_GTK_FORM_WIDGET_RADIO (fwidget), NULL); + + priv = GTK_FORM_WIDGET_RADIO_GET_PRIVATE (fwidget); + + return g_strdup (priv->value); +} + +/* PRIVATE */ +static void +gtk_form_widget_radio_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + GtkFormWidgetRadio *widget_radio = (GtkFormWidgetRadio *)object; + + GtkFormWidgetRadioPrivate *priv = GTK_FORM_WIDGET_RADIO_GET_PRIVATE (widget_radio); + + switch (property_id) + { + case PROP_RETURN_VALUE: + gtk_form_widget_radio_set_return_value (widget_radio, g_value_get_string (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gtk_form_widget_radio_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GtkFormWidgetRadio *widget_radio = (GtkFormWidgetRadio *)object; + + GtkFormWidgetRadioPrivate *priv = GTK_FORM_WIDGET_RADIO_GET_PRIVATE (widget_radio); + + switch (property_id) + { + case PROP_RETURN_VALUE: + g_value_set_string (value, gtk_form_widget_radio_get_return_value (widget_radio)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static gboolean +check_value (const gchar *value) +{ + gchar *str_value; + gboolean active; + + active = FALSE; + + str_value = g_strstrip (g_strdup (value)); + + if (strcmp (str_value, "0") == 0 + || strcasecmp (str_value, "f") == 0 + || strcasecmp (str_value, "false") == 0 + || strcasecmp (str_value, "n") == 0 + || strcasecmp (str_value, "no") == 0) + { + active = FALSE; + } + else if (strcmp (str_value, "1") == 0 + || strcasecmp (str_value, "t") == 0 + || strcasecmp (str_value, "true") == 0 + || strcasecmp (str_value, "y") == 0 + || strcasecmp (str_value, "yes") == 0) + { + active = TRUE; + } + + return active; +} diff --git a/src/widgetradio.h b/src/widgetradio.h new file mode 100644 index 0000000..19d0fba --- /dev/null +++ b/src/widgetradio.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2005-2010 Andrea Zagli + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __LIBGTK_FORM_WIDGET_RADIO_H__ +#define __LIBGTK_FORM_WIDGET_RADIO_H__ + +#include "widget.h" + + +G_BEGIN_DECLS + + +#define TYPE_GTK_FORM_WIDGET_RADIO (gtk_form_widget_radio_get_type ()) +#define GTK_FORM_WIDGET_RADIO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GTK_FORM_WIDGET_RADIO, GtkFormWidgetRadio)) +#define GTK_FORM_WIDGET_RADIO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GTK_FORM_WIDGET_RADIO, GtkFormWidgetRadioClass)) +#define IS_GTK_FORM_WIDGET_RADIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GTK_FORM_WIDGET_RADIO)) +#define IS_GTK_FORM_WIDGET_RADIO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GTK_FORM_WIDGET_RADIO)) +#define GTK_FORM_WIDGET_RADIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_GTK_FORM_WIDGET_RADIO, GtkFormWidgetRadioClass)) + + +typedef struct _GtkFormWidgetRadio GtkFormWidgetRadio; +typedef struct _GtkFormWidgetRadioClass GtkFormWidgetRadioClass; + +struct _GtkFormWidgetRadio + { + GtkFormWidget parent; + }; + +struct _GtkFormWidgetRadioClass + { + GtkFormWidgetClass parent_class; + }; + +GType gtk_form_widget_radio_get_type (void) G_GNUC_CONST; + +GtkFormWidget *gtk_form_widget_radio_new (void); + +gchar *gtk_form_widget_radio_get_value_stringify (GtkFormWidget *widget); + +gboolean gtk_form_widget_radio_set_value_stringify (GtkFormWidget *fwidget, const gchar *value); + +void gtk_form_widget_radio_set_editable (GtkFormWidget *fwidget, gboolean editable); + +void gtk_form_widget_radio_set_return_value (GtkFormWidgetRadio *fwidget, const gchar *value); +gchar *gtk_form_widget_radio_get_return_value (GtkFormWidgetRadio *fwidget); + + +G_END_DECLS + + +#endif /* __LIBGTK_FORM_WIDGET_RADIO_H__ */ diff --git a/test/test.gui b/test/test.gui index 7b33d21..f566558 100644 --- a/test/test.gui +++ b/test/test.gui @@ -12,6 +12,7 @@ True 3 + vertical True @@ -213,6 +214,7 @@ True True + etched-in True @@ -270,10 +272,67 @@ - + + True + 0 + Radio (sex) + + + 9 + 10 + - + + True + + + None + True + True + False + True + True + + + 0 + + + + + Male + True + True + False + True + True + rbtnNone + + + 1 + + + + + Female + True + True + False + True + True + rbtnNone + + + 2 + + + + + 1 + 2 + 9 + 10 + @@ -444,7 +503,7 @@ True True - in + etched-in True diff --git a/test/test.xml b/test/test.xml index 40c1dca..1325c1a 100644 --- a/test/test.xml +++ b/test/test.xml @@ -63,4 +63,22 @@ and t a b + + + + + + + + M + + + + + + F + + + +