/* gtkradiotoolbutton.c
*
- * Copyright (C) 2002 Anders Carlsson <andersca@codefactory.se>
+ * Copyright (C) 2002 Anders Carlsson <andersca@gnome.og>
* Copyright (C) 2002 James Henstridge <james@daa.com.au>
* Copyright (C) 2003 Soeren Sandmann <sandmann@daimi.au.dk>
*
* 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "config.h"
#include "gtkradiotoolbutton.h"
#include "gtkradiobutton.h"
#include "gtkintl.h"
+#include "gtkprivate.h"
-static void gtk_radio_tool_button_init (GtkRadioToolButton *button);
-static void gtk_radio_tool_button_class_init (GtkRadioToolButtonClass *klass);
-GType
-gtk_radio_tool_button_get_type (void)
-{
- static GType type = 0;
+/**
+ * SECTION:gtkradiotoolbutton
+ * @Short_description: A toolbar item that contains a radio button
+ * @Title: GtkRadioToolButton
+ * @See_also: #GtkToolbar, #GtkToolButton
+ *
+ * A #GtkRadioToolButton is a #GtkToolItem that contains a radio button,
+ * that is, a button that is part of a group of toggle buttons where only
+ * one button can be active at a time.
+ *
+ * Use gtk_radio_tool_button_new() to create a new
+ * #GtkRadioToolButton. Use gtk_radio_tool_button_new_from_widget() to
+ * create a new #GtkRadioToolButton that is part of the same group as an
+ * existing #GtkRadioToolButton. Use
+ * gtk_radio_tool_button_new_from_stock() or
+ * gtk_radio_tool_button_new_with_stock_from_widget() create a new
+ * #GtkRadioToolButton containing a stock item.
+ */
- if (!type)
- {
- static const GTypeInfo type_info =
- {
- sizeof (GtkRadioToolButtonClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gtk_radio_tool_button_class_init,
- (GClassFinalizeFunc) NULL,
- NULL,
- sizeof (GtkRadioToolButton),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gtk_radio_tool_button_init
- };
-
- type = g_type_register_static (GTK_TYPE_TOGGLE_TOOL_BUTTON,
- "GtkRadioToolButton", &type_info, 0);
- }
- return type;
-}
-
+enum {
+ PROP_0,
+ PROP_GROUP
+};
+
+static void gtk_radio_tool_button_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+
+G_DEFINE_TYPE (GtkRadioToolButton, gtk_radio_tool_button, GTK_TYPE_TOGGLE_TOOL_BUTTON)
+
static void
gtk_radio_tool_button_class_init (GtkRadioToolButtonClass *klass)
{
+ GObjectClass *object_class;
GtkToolButtonClass *toolbutton_class;
+ object_class = (GObjectClass *)klass;
toolbutton_class = (GtkToolButtonClass *)klass;
+
+ object_class->set_property = gtk_radio_tool_button_set_property;
toolbutton_class->button_type = GTK_TYPE_RADIO_BUTTON;
+
+ /**
+ * GtkRadioToolButton:group:
+ *
+ * Sets a new group for a radio tool button.
+ *
+ * Since: 2.4
+ */
+ g_object_class_install_property (object_class,
+ PROP_GROUP,
+ g_param_spec_object ("group",
+ P_("Group"),
+ P_("The radio tool button whose group this button belongs to."),
+ GTK_TYPE_RADIO_TOOL_BUTTON,
+ GTK_PARAM_WRITABLE));
+
}
static void
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (_gtk_tool_button_get_button (tool_button)), FALSE);
}
+static void
+gtk_radio_tool_button_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GtkRadioToolButton *button;
+
+ button = GTK_RADIO_TOOL_BUTTON (object);
+
+ switch (prop_id)
+ {
+ case PROP_GROUP:
+ {
+ GtkRadioToolButton *arg;
+ GSList *slist = NULL;
+ if (G_VALUE_HOLDS_OBJECT (value))
+ {
+ arg = GTK_RADIO_TOOL_BUTTON (g_value_get_object (value));
+ if (arg)
+ slist = gtk_radio_tool_button_get_group (arg);
+ gtk_radio_tool_button_set_group (button, slist);
+ }
+ }
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+/**
+ * gtk_radio_tool_button_new:
+ * @group: (allow-none) (transfer none) (element-type GtkRadioButton): An
+ * existing radio button group, or %NULL if you are creating a new group
+ *
+ * Creates a new #GtkRadioToolButton, adding it to @group.
+ *
+ * Return value: The new #GtkRadioToolButton
+ *
+ * Since: 2.4
+ **/
GtkToolItem *
gtk_radio_tool_button_new (GSList *group)
{
return GTK_TOOL_ITEM (button);
}
+/**
+ * gtk_radio_tool_button_new_from_stock:
+ * @group: (allow-none) (element-type GtkRadioButton): an existing radio button
+ * group, or %NULL if you are creating a new group
+ * @stock_id: the name of a stock item
+ *
+ * Creates a new #GtkRadioToolButton, adding it to @group.
+ * The new #GtkRadioToolButton will contain an icon and label from the
+ * stock item indicated by @stock_id.
+ *
+ * Return value: The new #GtkRadioToolButton
+ *
+ * Since: 2.4
+ **/
GtkToolItem *
gtk_radio_tool_button_new_from_stock (GSList *group,
const gchar *stock_id)
g_return_val_if_fail (stock_id != NULL, NULL);
button = g_object_new (GTK_TYPE_RADIO_TOOL_BUTTON,
- "stock_id", stock_id,
+ "stock-id", stock_id,
NULL);
return GTK_TOOL_ITEM (button);
}
+/**
+ * gtk_radio_tool_button_new_from_widget: (constructor)
+ * @group: (allow-none): An existing #GtkRadioToolButton, or %NULL
+ *
+ * Creates a new #GtkRadioToolButton adding it to the same group as @gruup
+ *
+ * Return value: (transfer none): The new #GtkRadioToolButton
+ *
+ * Since: 2.4
+ **/
GtkToolItem *
-gtk_radio_tool_button_new_from_widget (GtkWidget *group,
- const gchar *stock_id)
+gtk_radio_tool_button_new_from_widget (GtkRadioToolButton *group)
{
GSList *list = NULL;
- g_return_val_if_fail (GTK_IS_RADIO_TOOL_BUTTON (group), NULL);
+ g_return_val_if_fail (group == NULL || GTK_IS_RADIO_TOOL_BUTTON (group), NULL);
- if (group)
+ if (group != NULL)
list = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (group));
- return gtk_radio_tool_button_new_from_stock (list, stock_id);
+ return gtk_radio_tool_button_new (list);
}
+/**
+ * gtk_radio_tool_button_new_with_stock_from_widget: (constructor)
+ * @group: (allow-none): An existing #GtkRadioToolButton.
+ * @stock_id: the name of a stock item
+ *
+ * Creates a new #GtkRadioToolButton adding it to the same group as @group.
+ * The new #GtkRadioToolButton will contain an icon and label from the
+ * stock item indicated by @stock_id.
+ *
+ * Return value: (transfer none): A new #GtkRadioToolButton
+ *
+ * Since: 2.4
+ **/
GtkToolItem *
-gtk_radio_tool_button_new_with_stock_from_widget (GtkWidget *group)
+gtk_radio_tool_button_new_with_stock_from_widget (GtkRadioToolButton *group,
+ const gchar *stock_id)
{
GSList *list = NULL;
- g_return_val_if_fail (GTK_IS_RADIO_TOOL_BUTTON (group), NULL);
+ g_return_val_if_fail (group == NULL || GTK_IS_RADIO_TOOL_BUTTON (group), NULL);
- if (group)
- list = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (group));
+ if (group != NULL)
+ list = gtk_radio_tool_button_get_group (group);
- return gtk_radio_tool_button_new (list);
+ return gtk_radio_tool_button_new_from_stock (list, stock_id);
}
static GtkRadioButton *
return GTK_RADIO_BUTTON (_gtk_tool_button_get_button (GTK_TOOL_BUTTON (button)));
}
+/**
+ * gtk_radio_tool_button_get_group:
+ * @button: a #GtkRadioToolButton
+ *
+ * Returns the radio button group @button belongs to.
+ *
+ * Return value: (transfer none) (element-type GtkRadioButton): The group @button belongs to.
+ *
+ * Since: 2.4
+ */
GSList *
gtk_radio_tool_button_get_group (GtkRadioToolButton *button)
{
return gtk_radio_button_get_group (get_radio_button (button));
}
+/**
+ * gtk_radio_tool_button_set_group:
+ * @button: a #GtkRadioToolButton
+ * @group: (transfer none) (element-type GtkRadioButton): an existing radio button group
+ *
+ * Adds @button to @group, removing it from the group it belonged to before.
+ *
+ * Since: 2.4
+ **/
void
gtk_radio_tool_button_set_group (GtkRadioToolButton *button,
GSList *group)
gtk_radio_button_set_group (get_radio_button (button), group);
}
-