[gimp] libgimpwidgets: add gimp_prop_int_radio_frame,box_new()



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]