mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-08 17:50:10 +00:00
Drop GtkRadioButton
This commit is contained in:
parent
bb6045f02d
commit
17c4838569
@ -201,7 +201,6 @@
|
||||
<title>Buttons and Toggles</title>
|
||||
<xi:include href="xml/gtkbutton.xml" />
|
||||
<xi:include href="xml/gtkcheckbutton.xml" />
|
||||
<xi:include href="xml/gtkradiobutton.xml" />
|
||||
<xi:include href="xml/gtktogglebutton.xml" />
|
||||
<xi:include href="xml/gtklinkbutton.xml" />
|
||||
<xi:include href="xml/gtkmenubutton.xml" />
|
||||
|
@ -2290,31 +2290,6 @@ GtkProgressBarPrivate
|
||||
gtk_progress_bar_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkradiobutton</FILE>
|
||||
<TITLE>GtkRadioButton</TITLE>
|
||||
GtkRadioButton
|
||||
gtk_radio_button_new
|
||||
gtk_radio_button_new_from_widget
|
||||
gtk_radio_button_new_with_label
|
||||
gtk_radio_button_new_with_label_from_widget
|
||||
gtk_radio_button_new_with_mnemonic
|
||||
gtk_radio_button_new_with_mnemonic_from_widget
|
||||
gtk_radio_button_set_group
|
||||
gtk_radio_button_get_group
|
||||
gtk_radio_button_join_group
|
||||
<SUBSECTION Standard>
|
||||
GTK_RADIO_BUTTON
|
||||
GTK_IS_RADIO_BUTTON
|
||||
GTK_TYPE_RADIO_BUTTON
|
||||
GTK_RADIO_BUTTON_CLASS
|
||||
GTK_IS_RADIO_BUTTON_CLASS
|
||||
GTK_RADIO_BUTTON_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
GtkRadioButtonPrivate
|
||||
gtk_radio_button_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkrange</FILE>
|
||||
<TITLE>GtkRange</TITLE>
|
||||
|
@ -179,7 +179,6 @@ gtk_print_settings_get_type
|
||||
@DISABLE_ON_W32@gtk_print_unix_dialog_get_type
|
||||
gtk_progress_bar_get_type
|
||||
gtk_property_expression_get_type
|
||||
gtk_radio_button_get_type
|
||||
gtk_range_get_type
|
||||
gtk_recent_manager_get_type
|
||||
gtk_revealer_get_type
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 5.5 KiB |
@ -340,7 +340,6 @@ images = [
|
||||
'images/popup-slide.png',
|
||||
'images/printdialog.png',
|
||||
'images/progressbar.png',
|
||||
'images/radio-group.png',
|
||||
'images/right-center.png',
|
||||
'images/right-end.png',
|
||||
'images/right-start.png',
|
||||
|
@ -53,7 +53,7 @@ Each role name is part of the #GtkAccessibleRole enumeration.
|
||||
| `LABEL` | A visible name or caption for a user interface component | #GtkLabel |
|
||||
| `METER` | Represents a value within a known range | #GtkLevelBar |
|
||||
| `PROGRESS_BAR` | An element that display progress | #GtkProgressBar |
|
||||
| `RADIO` | A checkable input in a group of radio roles | #GtkRadioButton |
|
||||
| `RADIO` | A checkable input in a group of radio roles | #GtkCheckButton |
|
||||
| `SCROLLBAR` | A graphical object controlling the scrolling of content | #GtkScrollbar |
|
||||
| `SEARCH_BOX` | A text box for entering search criteria | #GtkSearchEntry |
|
||||
| `SEPARATOR` | A divider that separates sections of content or groups of items | #GtkSeparator |
|
||||
|
@ -102,9 +102,6 @@
|
||||
<link linkend="GtkVolumeButton">
|
||||
<inlinegraphic fileref="volumebutton.png" format="PNG"></inlinegraphic>
|
||||
</link>
|
||||
<link linkend="GtkRadioButton">
|
||||
<inlinegraphic fileref="radio-group.png" format="PNG"></inlinegraphic>
|
||||
</link>
|
||||
<link linkend="GtkFileChooserButton">
|
||||
<inlinegraphic fileref="file-button.png" format="PNG"></inlinegraphic>
|
||||
</link>
|
||||
|
@ -120,7 +120,6 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkPrintOperation, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkPrintOperationPreview, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkPrintSettings, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkProgressBar, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRadioButton, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRange, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRecentManager, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRevealer, g_object_unref)
|
||||
|
@ -201,7 +201,6 @@
|
||||
#include <gtk/gtkprintoperationpreview.h>
|
||||
#include <gtk/gtkprintsettings.h>
|
||||
#include <gtk/gtkprogressbar.h>
|
||||
#include <gtk/gtkradiobutton.h>
|
||||
#include <gtk/gtkrange.h>
|
||||
#include <gtk/gtkrecentmanager.h>
|
||||
#include <gtk/gtkrender.h>
|
||||
|
@ -1,670 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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 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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team. See the ChangeLog
|
||||
* files for a list of changes. These files are distributed with
|
||||
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gtkradiobutton.h"
|
||||
|
||||
#include "gtkwidgetprivate.h"
|
||||
#include "gtklabel.h"
|
||||
#include "gtkmarshalers.h"
|
||||
#include "gtkprivate.h"
|
||||
#include "gtkintl.h"
|
||||
#include "gtkstylecontextprivate.h"
|
||||
|
||||
/**
|
||||
* SECTION:gtkradiobutton
|
||||
* @Short_description: A choice from multiple check buttons
|
||||
* @Title: GtkRadioButton
|
||||
* @See_also: #GtkComboBox
|
||||
*
|
||||
* A single radio button performs the same basic function as a #GtkToggleButton,
|
||||
* as its position in the object hierarchy reflects. It is only when multiple
|
||||
* radio buttons are grouped together that they become a different user
|
||||
* interface component in their own right.
|
||||
*
|
||||
* Every radio button is a member of some group of radio buttons. When one is
|
||||
* selected, all other radio buttons in the same group are deselected. A
|
||||
* #GtkRadioButton is one way of giving the user a choice from many options.
|
||||
*
|
||||
* Radio button widgets are created with gtk_radio_button_new(), passing %NULL
|
||||
* as the argument if this is the first radio button in a group. In subsequent
|
||||
* calls, the group you wish to add this button to should be passed as an
|
||||
* argument. Optionally, gtk_radio_button_new_with_label() can be used if you
|
||||
* want a text label on the radio button.
|
||||
*
|
||||
* Alternatively, when adding widgets to an existing group of radio buttons,
|
||||
* use gtk_radio_button_new_from_widget() with a #GtkRadioButton that already
|
||||
* has a group assigned to it. The convenience function
|
||||
* gtk_radio_button_new_with_label_from_widget() is also provided.
|
||||
*
|
||||
* To retrieve the group a #GtkRadioButton is assigned to, use
|
||||
* gtk_radio_button_get_group().
|
||||
*
|
||||
* To remove a #GtkRadioButton from one group and make it part of a new one,
|
||||
* use gtk_radio_button_set_group().
|
||||
*
|
||||
* The group list does not need to be freed, as each #GtkRadioButton will remove
|
||||
* itself and its list item when it is destroyed.
|
||||
*
|
||||
* ## How to create a group of two radio buttons.
|
||||
*
|
||||
* |[<!-- language="C" -->
|
||||
* void create_radio_buttons (void) {
|
||||
*
|
||||
* GtkWidget *window, *radio1, *radio2, *box, *entry;
|
||||
* window = gtk_window_new ();
|
||||
* box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
|
||||
* gtk_box_set_homogeneous (GTK_BOX (box), TRUE);
|
||||
*
|
||||
* // Create a radio button with a GtkEntry widget
|
||||
* radio1 = gtk_radio_button_new (NULL);
|
||||
* entry = gtk_entry_new ();
|
||||
* gtk_box_append (GTK_BOX (radio1), entry);
|
||||
*
|
||||
*
|
||||
* // Create a radio button with a label
|
||||
* radio2 = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio1),
|
||||
* "I’m the second radio button.");
|
||||
*
|
||||
* // Pack them into a box, then show all the widgets
|
||||
* gtk_box_append (GTK_BOX (box), radio1);
|
||||
* gtk_box_append (GTK_BOX (box), radio2);
|
||||
gtk_window_set_child (GTK_WINDOW (window),box);
|
||||
* gtk_widget_show (window);
|
||||
* return;
|
||||
* }
|
||||
* ]|
|
||||
*
|
||||
* When an unselected button in the group is clicked the clicked button
|
||||
* receives the #GtkToggleButton::toggled signal, as does the previously
|
||||
* selected button.
|
||||
* Inside the #GtkToggleButton::toggled handler, gtk_toggle_button_get_active()
|
||||
* can be used to determine if the button has been selected or deselected.
|
||||
*
|
||||
* # CSS nodes
|
||||
*
|
||||
* |[<!-- language="plain" -->
|
||||
* radiobutton
|
||||
* ├── radio
|
||||
* ╰── <child>
|
||||
* ]|
|
||||
*
|
||||
* A GtkRadioButton with indicator (see gtk_check_button_set_draw_indicator())) has a
|
||||
* main CSS node with name radiobutton and a subnode with name radio.
|
||||
*
|
||||
* |[<!-- language="plain" -->
|
||||
* button.radio
|
||||
* ├── radio
|
||||
* ╰── <child>
|
||||
* ]|
|
||||
*
|
||||
* A GtkRadioButton without indicator changes the name of its main node
|
||||
* to button and adds a .radio style class to it. The subnode is invisible
|
||||
* in this case.
|
||||
*
|
||||
* # Accessibility
|
||||
*
|
||||
* GtkRadioButton uses the #GTK_ACCESSIBLE_ROLE_RADIO role.
|
||||
*/
|
||||
|
||||
typedef struct _GtkRadioButtonClass GtkRadioButtonClass;
|
||||
|
||||
struct _GtkRadioButton
|
||||
{
|
||||
GtkToggleButton parent_instance;
|
||||
};
|
||||
|
||||
struct _GtkRadioButtonClass
|
||||
{
|
||||
GtkToggleButtonClass parent_class;
|
||||
|
||||
void (*group_changed) (GtkRadioButton *radio_button);
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GSList *group;
|
||||
} GtkRadioButtonPrivate;
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_GROUP,
|
||||
LAST_PROP
|
||||
};
|
||||
|
||||
enum {
|
||||
GROUP_CHANGED,
|
||||
N_SIGNALS
|
||||
};
|
||||
|
||||
static GParamSpec *radio_button_props[LAST_PROP] = { NULL, };
|
||||
static guint signals[N_SIGNALS] = { 0 };
|
||||
|
||||
static void gtk_radio_button_dispose (GObject *object);
|
||||
static void gtk_radio_button_clicked (GtkButton *button);
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (GtkRadioButton, gtk_radio_button, GTK_TYPE_TOGGLE_BUTTON)
|
||||
|
||||
static void
|
||||
gtk_radio_button_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GtkRadioButton *radio_button;
|
||||
|
||||
radio_button = GTK_RADIO_BUTTON (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
GSList *slist;
|
||||
GtkRadioButton *button;
|
||||
|
||||
case PROP_GROUP:
|
||||
button = g_value_get_object (value);
|
||||
|
||||
if (button)
|
||||
slist = gtk_radio_button_get_group (button);
|
||||
else
|
||||
slist = NULL;
|
||||
gtk_radio_button_set_group (radio_button, slist);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_radio_button_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
switch (prop_id)
|
||||
{
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_radio_button_class_init (GtkRadioButtonClass *class)
|
||||
{
|
||||
GObjectClass *gobject_class;
|
||||
GtkButtonClass *button_class;
|
||||
GtkWidgetClass *widget_class;
|
||||
|
||||
gobject_class = G_OBJECT_CLASS (class);
|
||||
widget_class = (GtkWidgetClass*) class;
|
||||
button_class = (GtkButtonClass*) class;
|
||||
|
||||
gobject_class->dispose = gtk_radio_button_dispose;
|
||||
gobject_class->set_property = gtk_radio_button_set_property;
|
||||
gobject_class->get_property = gtk_radio_button_get_property;
|
||||
|
||||
/**
|
||||
* GtkRadioButton:group:
|
||||
*
|
||||
* Sets a new group for a radio button.
|
||||
*/
|
||||
radio_button_props[PROP_GROUP] =
|
||||
g_param_spec_object ("group",
|
||||
P_("Group"),
|
||||
P_("The radio button whose group this widget belongs to."),
|
||||
GTK_TYPE_RADIO_BUTTON,
|
||||
GTK_PARAM_WRITABLE);
|
||||
|
||||
g_object_class_install_properties (gobject_class, LAST_PROP, radio_button_props);
|
||||
|
||||
button_class->clicked = gtk_radio_button_clicked;
|
||||
|
||||
class->group_changed = NULL;
|
||||
|
||||
/**
|
||||
* GtkRadioButton::group-changed:
|
||||
* @button: the object which received the signal
|
||||
*
|
||||
* Emitted when the group of radio buttons that a radio button belongs
|
||||
* to changes. This is emitted when a radio button switches from
|
||||
* being alone to being part of a group of 2 or more buttons, or
|
||||
* vice-versa, and when a button is moved from one group of 2 or
|
||||
* more buttons to a different one, but not when the composition
|
||||
* of the group that a button belongs to changes.
|
||||
*/
|
||||
signals[GROUP_CHANGED] = g_signal_new (I_("group-changed"),
|
||||
G_OBJECT_CLASS_TYPE (gobject_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
G_STRUCT_OFFSET (GtkRadioButtonClass, group_changed),
|
||||
NULL, NULL,
|
||||
NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_RADIO);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_radio_button_init (GtkRadioButton *self)
|
||||
{
|
||||
GtkRadioButtonPrivate *priv = gtk_radio_button_get_instance_private (self);
|
||||
GtkWidget *widget = GTK_WIDGET (self);
|
||||
|
||||
gtk_widget_set_receives_default (widget, FALSE);
|
||||
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self), TRUE);
|
||||
|
||||
priv->group = g_slist_prepend (NULL, self);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_radio_button_set_group:
|
||||
* @radio_button: a #GtkRadioButton.
|
||||
* @group: (element-type GtkRadioButton) (allow-none): an existing radio
|
||||
* button group, such as one returned from gtk_radio_button_get_group(), or %NULL.
|
||||
*
|
||||
* Sets a #GtkRadioButton’s group. It should be noted that this does not change
|
||||
* the layout of your interface in any way, so if you are changing the group,
|
||||
* it is likely you will need to re-arrange the user interface to reflect these
|
||||
* changes.
|
||||
*/
|
||||
void
|
||||
gtk_radio_button_set_group (GtkRadioButton *radio_button,
|
||||
GSList *group)
|
||||
{
|
||||
GtkRadioButtonPrivate *priv = gtk_radio_button_get_instance_private (radio_button);
|
||||
GtkWidget *old_group_singleton = NULL;
|
||||
GtkWidget *new_group_singleton = NULL;
|
||||
|
||||
g_return_if_fail (GTK_IS_RADIO_BUTTON (radio_button));
|
||||
|
||||
if (g_slist_find (group, radio_button))
|
||||
return;
|
||||
|
||||
if (priv->group)
|
||||
{
|
||||
GSList *slist;
|
||||
|
||||
priv->group = g_slist_remove (priv->group, radio_button);
|
||||
|
||||
if (priv->group && !priv->group->next)
|
||||
old_group_singleton = g_object_ref (priv->group->data);
|
||||
|
||||
for (slist = priv->group; slist; slist = slist->next)
|
||||
{
|
||||
GtkRadioButton *tmp_button = slist->data;
|
||||
GtkRadioButtonPrivate *tmp_priv = gtk_radio_button_get_instance_private (tmp_button);
|
||||
|
||||
tmp_priv->group = priv->group;
|
||||
}
|
||||
}
|
||||
|
||||
if (group && !group->next)
|
||||
new_group_singleton = g_object_ref (group->data);
|
||||
|
||||
priv->group = g_slist_prepend (group, radio_button);
|
||||
|
||||
if (group)
|
||||
{
|
||||
GSList *slist;
|
||||
|
||||
for (slist = group; slist; slist = slist->next)
|
||||
{
|
||||
GtkRadioButton *tmp_button = slist->data;
|
||||
GtkRadioButtonPrivate *tmp_priv = gtk_radio_button_get_instance_private (tmp_button);
|
||||
|
||||
tmp_priv->group = priv->group;
|
||||
}
|
||||
}
|
||||
|
||||
g_object_ref (radio_button);
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (radio_button), radio_button_props[PROP_GROUP]);
|
||||
g_signal_emit (radio_button, signals[GROUP_CHANGED], 0);
|
||||
if (old_group_singleton)
|
||||
{
|
||||
g_signal_emit (old_group_singleton, signals[GROUP_CHANGED], 0);
|
||||
g_object_unref (old_group_singleton);
|
||||
}
|
||||
if (new_group_singleton)
|
||||
{
|
||||
g_signal_emit (new_group_singleton, signals[GROUP_CHANGED], 0);
|
||||
g_object_unref (new_group_singleton);
|
||||
}
|
||||
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), group == NULL);
|
||||
|
||||
g_object_unref (radio_button);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_radio_button_join_group:
|
||||
* @radio_button: the #GtkRadioButton object
|
||||
* @group_source: (allow-none): a radio button object whose group we are
|
||||
* joining, or %NULL to remove the radio button from its group
|
||||
*
|
||||
* Joins a #GtkRadioButton object to the group of another #GtkRadioButton object
|
||||
*
|
||||
* Use this in language bindings instead of the gtk_radio_button_get_group()
|
||||
* and gtk_radio_button_set_group() methods
|
||||
*
|
||||
* A common way to set up a group of radio buttons is the following:
|
||||
* |[<!-- language="C" -->
|
||||
* GtkRadioButton *radio_button;
|
||||
* GtkRadioButton *last_button;
|
||||
*
|
||||
* while (some_condition)
|
||||
* {
|
||||
* radio_button = GTK_RADIO_BUTTON (gtk_radio_button_new (NULL));
|
||||
*
|
||||
* gtk_radio_button_join_group (radio_button, last_button);
|
||||
* last_button = radio_button;
|
||||
* }
|
||||
* ]|
|
||||
*/
|
||||
void
|
||||
gtk_radio_button_join_group (GtkRadioButton *radio_button,
|
||||
GtkRadioButton *group_source)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_RADIO_BUTTON (radio_button));
|
||||
g_return_if_fail (group_source == NULL || GTK_IS_RADIO_BUTTON (group_source));
|
||||
|
||||
if (group_source)
|
||||
{
|
||||
GSList *group;
|
||||
group = gtk_radio_button_get_group (group_source);
|
||||
|
||||
if (!group)
|
||||
{
|
||||
/* if we are not already part of a group we need to set up a new one
|
||||
and then get the newly created group */
|
||||
gtk_radio_button_set_group (group_source, NULL);
|
||||
group = gtk_radio_button_get_group (group_source);
|
||||
}
|
||||
|
||||
gtk_radio_button_set_group (radio_button, group);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_radio_button_set_group (radio_button, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_radio_button_new:
|
||||
* @group: (element-type GtkRadioButton) (allow-none): an existing
|
||||
* radio button group, or %NULL if you are creating a new group.
|
||||
*
|
||||
* Creates a new #GtkRadioButton. To be of any practical value, a widget should
|
||||
* then be packed into the radio button.
|
||||
*
|
||||
* Returns: a new radio button
|
||||
*/
|
||||
GtkWidget*
|
||||
gtk_radio_button_new (GSList *group)
|
||||
{
|
||||
GtkRadioButton *radio_button;
|
||||
|
||||
radio_button = g_object_new (GTK_TYPE_RADIO_BUTTON, NULL);
|
||||
|
||||
if (group)
|
||||
gtk_radio_button_set_group (radio_button, group);
|
||||
|
||||
return GTK_WIDGET (radio_button);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_radio_button_new_with_label:
|
||||
* @group: (element-type GtkRadioButton) (allow-none): an existing
|
||||
* radio button group, or %NULL if you are creating a new group.
|
||||
* @label: the text label to display next to the radio button.
|
||||
*
|
||||
* Creates a new #GtkRadioButton with a text label.
|
||||
*
|
||||
* Returns: a new radio button.
|
||||
*/
|
||||
GtkWidget*
|
||||
gtk_radio_button_new_with_label (GSList *group,
|
||||
const char *label)
|
||||
{
|
||||
GtkWidget *radio_button;
|
||||
|
||||
radio_button = g_object_new (GTK_TYPE_RADIO_BUTTON, "label", label, NULL) ;
|
||||
|
||||
if (group)
|
||||
gtk_radio_button_set_group (GTK_RADIO_BUTTON (radio_button), group);
|
||||
|
||||
return radio_button;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gtk_radio_button_new_with_mnemonic:
|
||||
* @group: (element-type GtkRadioButton) (allow-none): the radio button
|
||||
* group, or %NULL
|
||||
* @label: the text of the button, with an underscore in front of the
|
||||
* mnemonic character
|
||||
*
|
||||
* Creates a new #GtkRadioButton containing a label, adding it to the same
|
||||
* group as @group. The label will be created using
|
||||
* gtk_label_new_with_mnemonic(), so underscores in @label indicate the
|
||||
* mnemonic for the button.
|
||||
*
|
||||
* Returns: a new #GtkRadioButton
|
||||
*/
|
||||
GtkWidget*
|
||||
gtk_radio_button_new_with_mnemonic (GSList *group,
|
||||
const char *label)
|
||||
{
|
||||
GtkWidget *radio_button;
|
||||
|
||||
radio_button = g_object_new (GTK_TYPE_RADIO_BUTTON,
|
||||
"label", label,
|
||||
"use-underline", TRUE,
|
||||
NULL);
|
||||
|
||||
if (group)
|
||||
gtk_radio_button_set_group (GTK_RADIO_BUTTON (radio_button), group);
|
||||
|
||||
return radio_button;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_radio_button_new_from_widget: (constructor)
|
||||
* @radio_group_member: (allow-none): an existing #GtkRadioButton.
|
||||
*
|
||||
* Creates a new #GtkRadioButton, adding it to the same group as
|
||||
* @radio_group_member. As with gtk_radio_button_new(), a widget
|
||||
* should be packed into the radio button.
|
||||
*
|
||||
* Returns: (transfer none): a new radio button.
|
||||
*/
|
||||
GtkWidget*
|
||||
gtk_radio_button_new_from_widget (GtkRadioButton *radio_group_member)
|
||||
{
|
||||
GSList *l = NULL;
|
||||
if (radio_group_member)
|
||||
l = gtk_radio_button_get_group (radio_group_member);
|
||||
return gtk_radio_button_new (l);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_radio_button_new_with_label_from_widget: (constructor)
|
||||
* @radio_group_member: (allow-none): widget to get radio group from or %NULL
|
||||
* @label: a text string to display next to the radio button.
|
||||
*
|
||||
* Creates a new #GtkRadioButton with a text label, adding it to
|
||||
* the same group as @radio_group_member.
|
||||
*
|
||||
* Returns: (transfer none): a new radio button.
|
||||
*/
|
||||
GtkWidget*
|
||||
gtk_radio_button_new_with_label_from_widget (GtkRadioButton *radio_group_member,
|
||||
const char *label)
|
||||
{
|
||||
GSList *l = NULL;
|
||||
if (radio_group_member)
|
||||
l = gtk_radio_button_get_group (radio_group_member);
|
||||
return gtk_radio_button_new_with_label (l, label);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_radio_button_new_with_mnemonic_from_widget: (constructor)
|
||||
* @radio_group_member: (allow-none): widget to get radio group from or %NULL
|
||||
* @label: the text of the button, with an underscore in front of the
|
||||
* mnemonic character
|
||||
*
|
||||
* Creates a new #GtkRadioButton containing a label. The label
|
||||
* will be created using gtk_label_new_with_mnemonic(), so underscores
|
||||
* in @label indicate the mnemonic for the button.
|
||||
*
|
||||
* Returns: (transfer none): a new #GtkRadioButton
|
||||
**/
|
||||
GtkWidget*
|
||||
gtk_radio_button_new_with_mnemonic_from_widget (GtkRadioButton *radio_group_member,
|
||||
const char *label)
|
||||
{
|
||||
GSList *l = NULL;
|
||||
if (radio_group_member)
|
||||
l = gtk_radio_button_get_group (radio_group_member);
|
||||
return gtk_radio_button_new_with_mnemonic (l, label);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gtk_radio_button_get_group:
|
||||
* @radio_button: a #GtkRadioButton.
|
||||
*
|
||||
* Retrieves the group assigned to a radio button.
|
||||
*
|
||||
* Returns: (element-type GtkRadioButton) (transfer none): a linked list
|
||||
* containing all the radio buttons in the same group
|
||||
* as @radio_button. The returned list is owned by the radio button
|
||||
* and must not be modified or freed.
|
||||
*/
|
||||
GSList*
|
||||
gtk_radio_button_get_group (GtkRadioButton *radio_button)
|
||||
{
|
||||
GtkRadioButtonPrivate *priv = gtk_radio_button_get_instance_private (radio_button);
|
||||
|
||||
g_return_val_if_fail (GTK_IS_RADIO_BUTTON (radio_button), NULL);
|
||||
|
||||
return priv->group;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gtk_radio_button_dispose (GObject *object)
|
||||
{
|
||||
GtkWidget *old_group_singleton = NULL;
|
||||
GtkRadioButton *radio_button = GTK_RADIO_BUTTON (object);
|
||||
GtkRadioButtonPrivate *priv = gtk_radio_button_get_instance_private (radio_button);
|
||||
GSList *tmp_list;
|
||||
gboolean was_in_group;
|
||||
|
||||
was_in_group = priv->group && priv->group->next;
|
||||
|
||||
priv->group = g_slist_remove (priv->group, radio_button);
|
||||
if (priv->group && !priv->group->next)
|
||||
old_group_singleton = priv->group->data;
|
||||
|
||||
tmp_list = priv->group;
|
||||
|
||||
while (tmp_list)
|
||||
{
|
||||
GtkRadioButton *tmp_button = tmp_list->data;
|
||||
GtkRadioButtonPrivate *tmp_priv = gtk_radio_button_get_instance_private (tmp_button);
|
||||
|
||||
tmp_list = tmp_list->next;
|
||||
|
||||
tmp_priv->group = priv->group;
|
||||
}
|
||||
|
||||
/* this button is no longer in the group */
|
||||
priv->group = NULL;
|
||||
|
||||
if (old_group_singleton)
|
||||
g_signal_emit (old_group_singleton, signals[GROUP_CHANGED], 0);
|
||||
if (was_in_group)
|
||||
g_signal_emit (radio_button, signals[GROUP_CHANGED], 0);
|
||||
|
||||
G_OBJECT_CLASS (gtk_radio_button_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_radio_button_clicked (GtkButton *button)
|
||||
{
|
||||
GtkRadioButton *radio_button = GTK_RADIO_BUTTON (button);
|
||||
GtkRadioButtonPrivate *priv = gtk_radio_button_get_instance_private (radio_button);
|
||||
GtkToggleButton *toggle_button = GTK_TOGGLE_BUTTON (button);
|
||||
GtkToggleButton *tmp_button;
|
||||
GSList *tmp_list;
|
||||
|
||||
g_object_ref (GTK_WIDGET (button));
|
||||
|
||||
if (gtk_toggle_button_get_active (toggle_button))
|
||||
{
|
||||
tmp_button = NULL;
|
||||
tmp_list = priv->group;
|
||||
|
||||
while (tmp_list)
|
||||
{
|
||||
tmp_button = tmp_list->data;
|
||||
tmp_list = tmp_list->next;
|
||||
|
||||
if (tmp_button != toggle_button &&
|
||||
gtk_toggle_button_get_active (tmp_button))
|
||||
break;
|
||||
|
||||
tmp_button = NULL;
|
||||
}
|
||||
|
||||
if (tmp_button)
|
||||
gtk_toggle_button_set_active (toggle_button,
|
||||
!gtk_toggle_button_get_active (toggle_button));
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_toggle_button_set_active (toggle_button,
|
||||
!gtk_toggle_button_get_active (toggle_button));
|
||||
|
||||
tmp_list = priv->group;
|
||||
while (tmp_list)
|
||||
{
|
||||
tmp_button = tmp_list->data;
|
||||
tmp_list = tmp_list->next;
|
||||
|
||||
if (gtk_toggle_button_get_active (tmp_button) && (tmp_button != toggle_button))
|
||||
{
|
||||
g_signal_emit_by_name (tmp_button, "clicked");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (button));
|
||||
|
||||
g_object_unref (button);
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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 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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team. See the ChangeLog
|
||||
* files for a list of changes. These files are distributed with
|
||||
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
|
||||
*/
|
||||
|
||||
#ifndef __GTK_RADIO_BUTTON_H__
|
||||
#define __GTK_RADIO_BUTTON_H__
|
||||
|
||||
|
||||
#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
|
||||
#error "Only <gtk/gtk.h> can be included directly."
|
||||
#endif
|
||||
|
||||
#include <gtk/gtkcheckbutton.h>
|
||||
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GTK_TYPE_RADIO_BUTTON (gtk_radio_button_get_type ())
|
||||
#define GTK_RADIO_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_RADIO_BUTTON, GtkRadioButton))
|
||||
#define GTK_IS_RADIO_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_RADIO_BUTTON))
|
||||
|
||||
|
||||
typedef struct _GtkRadioButton GtkRadioButton;
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gtk_radio_button_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkWidget* gtk_radio_button_new (GSList *group);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkWidget* gtk_radio_button_new_from_widget (GtkRadioButton *radio_group_member);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkWidget* gtk_radio_button_new_with_label (GSList *group,
|
||||
const char *label);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkWidget* gtk_radio_button_new_with_label_from_widget (GtkRadioButton *radio_group_member,
|
||||
const char *label);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkWidget* gtk_radio_button_new_with_mnemonic (GSList *group,
|
||||
const char *label);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkWidget* gtk_radio_button_new_with_mnemonic_from_widget (GtkRadioButton *radio_group_member,
|
||||
const char *label);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GSList* gtk_radio_button_get_group (GtkRadioButton *radio_button);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gtk_radio_button_set_group (GtkRadioButton *radio_button,
|
||||
GSList *group);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gtk_radio_button_join_group (GtkRadioButton *radio_button,
|
||||
GtkRadioButton *group_source);
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_RADIO_BUTTON_H__ */
|
@ -331,7 +331,6 @@ gtk_public_sources = files([
|
||||
'gtkprintsettings.c',
|
||||
'gtkprogressbar.c',
|
||||
'gtkpropertylookuplistmodel.c',
|
||||
'gtkradiobutton.c',
|
||||
'gtkrange.c',
|
||||
'gtktreerbtree.c',
|
||||
'gtkrecentmanager.c',
|
||||
@ -610,7 +609,6 @@ gtk_public_headers = files([
|
||||
'gtkprintoperationpreview.h',
|
||||
'gtkprintsettings.h',
|
||||
'gtkprogressbar.h',
|
||||
'gtkradiobutton.h',
|
||||
'gtkrange.h',
|
||||
'gtkrecentmanager.h',
|
||||
'gtkrender.h',
|
||||
|
Loading…
Reference in New Issue
Block a user