[gimp] libgimpwidgets: add gimp_prop_int_radio_frame,box_new()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] libgimpwidgets: add gimp_prop_int_radio_frame,box_new()
- Date: Thu, 3 Oct 2019 14:01:00 +0000 (UTC)
commit d02d97e310862c3f81509ac95a78b3dc2306a992
Author: Michael Natterer <mitch gimp org>
Date: Thu Oct 3 15:59:09 2019 +0200
libgimpwidgets: add gimp_prop_int_radio_frame,box_new()
libgimpwidgets/gimppropwidgets.c | 138 ++++++++++++++++++++++++++++++++++++++-
libgimpwidgets/gimppropwidgets.h | 7 ++
libgimpwidgets/gimpwidgets.def | 2 +
3 files changed, 146 insertions(+), 1 deletion(-)
---
diff --git a/libgimpwidgets/gimppropwidgets.c b/libgimpwidgets/gimppropwidgets.c
index 3543ee43f1..cb7f11a40b 100644
--- a/libgimpwidgets/gimppropwidgets.c
+++ b/libgimpwidgets/gimppropwidgets.c
@@ -895,7 +895,7 @@ gimp_prop_enum_radio_frame_new (GObject *config,
* If you want to assign a label to the group of radio buttons, use
* gimp_prop_enum_radio_frame_new() instead of this function.
*
- * Returns: (transfer full): A #GtkVBox containing the radio buttons.
+ * Returns: (transfer full): A #GtkBox containing the radio buttons.
*
* Since: 2.4
*/
@@ -953,6 +953,142 @@ gimp_prop_enum_radio_box_new (GObject *config,
return vbox;
}
+/**
+ * gimp_prop_int_radio_frame_new:
+ * @config: Object to which property is attached.
+ * @property_name: Name of enum property controlled by the radio buttons.
+ * @title: Label for the frame holding the buttons
+ * @store: #GimpIntStore holding list of labels, values, etc.
+ *
+ * Creates a group of radio buttons which function to set and display
+ * the specified int property. If @title is %NULL, the
+ * @property_name's nick will be used as label of the returned frame.
+ *
+ * Returns: (transfer full): A #GimpFrame containing the radio buttons.
+ *
+ * Since: 3.0
+ */
+GtkWidget *
+gimp_prop_int_radio_frame_new (GObject *config,
+ const gchar *property_name,
+ const gchar *title,
+ GimpIntStore *store)
+{
+ GParamSpec *param_spec;
+ GtkWidget *frame;
+ GtkWidget *box;
+
+ g_return_val_if_fail (G_IS_OBJECT (config), NULL);
+ g_return_val_if_fail (G_IS_OBJECT (config), NULL);
+ g_return_val_if_fail (GIMP_IS_INT_STORE (store), NULL);
+
+ param_spec = check_param_spec_w (config, property_name,
+ G_TYPE_PARAM_INT, G_STRFUNC);
+ if (! param_spec)
+ return NULL;
+
+ if (! title)
+ title = g_param_spec_get_nick (param_spec);
+
+ frame = gimp_frame_new (title);
+
+ box = gimp_prop_int_radio_box_new (config, property_name, store);
+ gtk_container_add (GTK_CONTAINER (frame), box);
+ gtk_widget_show (box);
+
+ gtk_widget_show (frame);
+
+ return frame;
+}
+
+/**
+ * gimp_prop_int_radio_box_new:
+ * @config: Object to which property is attached.
+ * @property_name: Name of enum property controlled by the radio buttons.
+ * @store: #GimpIntStore holding list of labels, values, etc.
+ *
+ * Creates a group of radio buttons which function to set and display
+ * the specified int property. If you want to assign a label to the
+ * group of radio buttons, use gimp_prop_int_radio_frame_new()
+ * instead of this function.
+ *
+ * Returns: (transfer full): A #GtkBox containing the radio buttons.
+ *
+ * Since: 3.0
+ */
+GtkWidget *
+gimp_prop_int_radio_box_new (GObject *config,
+ const gchar *property_name,
+ GimpIntStore *store)
+{
+ GParamSpec *param_spec;
+ GtkWidget *vbox;
+ GtkWidget *button = NULL;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean iter_valid;
+ GSList *group = NULL;
+ gint value;
+
+ g_return_val_if_fail (G_IS_OBJECT (config), NULL);
+ g_return_val_if_fail (property_name != NULL, NULL);
+ g_return_val_if_fail (GIMP_IS_INT_STORE (store), NULL);
+
+ param_spec = check_param_spec_w (config, property_name,
+ G_TYPE_PARAM_INT, G_STRFUNC);
+ if (! param_spec)
+ return NULL;
+
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
+
+ model = GTK_TREE_MODEL (store);
+
+ for (iter_valid = gtk_tree_model_get_iter_first (model, &iter);
+ iter_valid;
+ iter_valid = gtk_tree_model_iter_next (model, &iter))
+ {
+ gchar *label;
+
+ gtk_tree_model_get (model, &iter,
+ GIMP_INT_STORE_LABEL, &label,
+ GIMP_INT_STORE_VALUE, &value,
+ -1);
+
+ button = gtk_radio_button_new_with_mnemonic (group, label);
+ gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+ gtk_widget_show (button);
+
+ g_free (label);
+
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
+
+ g_object_set_data (G_OBJECT (button), "gimp-item-data",
+ GINT_TO_POINTER (value));
+
+ g_signal_connect (button, "toggled",
+ G_CALLBACK (gimp_prop_radio_button_callback),
+ config);
+ }
+
+ g_object_get (config,
+ property_name, &value,
+ NULL);
+
+ gimp_int_radio_group_set_active (GTK_RADIO_BUTTON (button), value);
+
+ set_radio_spec (G_OBJECT (button), param_spec);
+
+ connect_notify (config, property_name,
+ G_CALLBACK (gimp_prop_radio_button_notify),
+ button);
+
+ g_object_set_data (G_OBJECT (vbox), "radio-button", button);
+
+ gtk_widget_show (vbox);
+
+ return vbox;
+}
+
/***********/
/* label */
diff --git a/libgimpwidgets/gimppropwidgets.h b/libgimpwidgets/gimppropwidgets.h
index c94bca2ef2..321b79be40 100644
--- a/libgimpwidgets/gimppropwidgets.h
+++ b/libgimpwidgets/gimppropwidgets.h
@@ -54,6 +54,13 @@ GtkWidget * gimp_prop_expander_new (GObject *config,
GtkWidget * gimp_prop_int_combo_box_new (GObject *config,
const gchar *property_name,
GimpIntStore *store);
+GtkWidget * gimp_prop_int_radio_frame_new (GObject *config,
+ const gchar *property_name,
+ const gchar *title,
+ GimpIntStore *store);
+GtkWidget * gimp_prop_int_radio_box_new (GObject *config,
+ const gchar *property_name,
+ GimpIntStore *store);
/* GParamGType */
diff --git a/libgimpwidgets/gimpwidgets.def b/libgimpwidgets/gimpwidgets.def
index 0ae65fbdc6..6fde040c39 100644
--- a/libgimpwidgets/gimpwidgets.def
+++ b/libgimpwidgets/gimpwidgets.def
@@ -331,6 +331,8 @@ EXPORTS
gimp_prop_hscale_new
gimp_prop_icon_image_new
gimp_prop_int_combo_box_new
+ gimp_prop_int_radio_box_new
+ gimp_prop_int_radio_frame_new
gimp_prop_label_new
gimp_prop_memsize_entry_new
gimp_prop_opacity_entry_new
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]