static void gimp_enum_store_insert_value_after (GimpEnumStore *store, gint after, gint insert_value) { GtkTreeIter iter; g_return_if_fail (GIMP_IS_ENUM_STORE (store)); if (gimp_int_store_lookup_by_value (GTK_TREE_MODEL (store), after, &iter)) { GEnumValue *enum_value; enum_value = g_enum_get_value (store->enum_class, insert_value); if (enum_value) { GtkTreeIter value_iter; const gchar *desc; gtk_list_store_insert_after (GTK_LIST_STORE (store), &value_iter, &iter); desc = gimp_enum_value_get_desc (store->enum_class, enum_value); gtk_list_store_set (GTK_LIST_STORE (store), &value_iter, GIMP_INT_STORE_VALUE, enum_value->value, GIMP_INT_STORE_LABEL, desc, -1); } } }
/** * gimp_enum_radio_box_new_with_range: * @minimum: the minimum enum value * @maximum: the maximum enum value * @enum_type: the #GType of an enum. * @callback: a callback to connect to the "toggled" signal of each * #GtkRadioButton that is created. * @callback_data: data to pass to the @callback. * @first_button: returns the first button in the created group. * * Just like gimp_enum_radio_box_new(), this function creates a group * of radio buttons, but additionally it supports limiting the range * of available enum values. * * Return value: a new #GtkVBox holding a group of #GtkRadioButtons. * * Since: GIMP 2.4 **/ GtkWidget * gimp_enum_radio_box_new_with_range (GType enum_type, gint minimum, gint maximum, GCallback callback, gpointer callback_data, GtkWidget **first_button) { GtkWidget *vbox; GtkWidget *button; GEnumClass *enum_class; GEnumValue *value; GSList *group = NULL; g_return_val_if_fail (G_TYPE_IS_ENUM (enum_type), NULL); enum_class = g_type_class_ref (enum_type); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1); g_object_weak_ref (G_OBJECT (vbox), (GWeakNotify) g_type_class_unref, enum_class); if (first_button) *first_button = NULL; for (value = enum_class->values; value->value_name; value++) { const gchar *desc; if (value->value < minimum || value->value > maximum) continue; desc = gimp_enum_value_get_desc (enum_class, value); button = gtk_radio_button_new_with_mnemonic (group, desc); if (first_button && *first_button == NULL) *first_button = button; group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); gtk_widget_show (button); g_object_set_data (G_OBJECT (button), "gimp-item-data", GINT_TO_POINTER (value->value)); if (callback) g_signal_connect (button, "toggled", callback, callback_data); } return vbox; }
static void gimp_component_editor_create_components (GimpComponentEditor *editor) { GimpImage *image = GIMP_IMAGE_EDITOR (editor)->image; gint n_components = 0; GimpChannelType components[MAX_CHANNELS]; GEnumClass *enum_class; gint i; switch (gimp_image_base_type (image)) { case GIMP_RGB: n_components = 3; components[0] = GIMP_RED_CHANNEL; components[1] = GIMP_GREEN_CHANNEL; components[2] = GIMP_BLUE_CHANNEL; break; case GIMP_GRAY: n_components = 1; components[0] = GIMP_GRAY_CHANNEL; break; case GIMP_INDEXED: n_components = 1; components[0] = GIMP_INDEXED_CHANNEL; break; } if (gimp_image_has_alpha (image)) components[n_components++] = GIMP_ALPHA_CHANNEL; enum_class = g_type_class_ref (GIMP_TYPE_CHANNEL_TYPE); for (i = 0; i < n_components; i++) { GimpViewRenderer *renderer; GtkTreeIter iter; GEnumValue *enum_value; const gchar *desc; gboolean visible; visible = gimp_image_get_component_visible (image, components[i]); renderer = gimp_view_renderer_new (GIMP_IMAGE_EDITOR (editor)->context, G_TYPE_FROM_INSTANCE (image), editor->view_size, 1, FALSE); gimp_view_renderer_set_viewable (renderer, GIMP_VIEWABLE (image)); gimp_view_renderer_remove_idle (renderer); GIMP_VIEW_RENDERER_IMAGE (renderer)->channel = components[i]; g_signal_connect (renderer, "update", G_CALLBACK (gimp_component_editor_renderer_update), editor); enum_value = g_enum_get_value (enum_class, components[i]); desc = gimp_enum_value_get_desc (enum_class, enum_value); gtk_list_store_append (GTK_LIST_STORE (editor->model), &iter); gtk_list_store_set (GTK_LIST_STORE (editor->model), &iter, COLUMN_CHANNEL, components[i], COLUMN_VISIBLE, visible, COLUMN_RENDERER, renderer, COLUMN_NAME, desc, -1); g_object_unref (renderer); if (gimp_image_get_component_active (image, components[i])) gtk_tree_selection_select_iter (editor->selection, &iter); } g_type_class_unref (enum_class); }
/** * gimp_enum_icon_box_new_with_range: * @enum_type: the #GType of an enum. * @minimum: the minumim enum value * @maximum: the maximum enum value * @icon_prefix: the prefix of the group of icon names to use. * @icon_size: the icon size for the icons * @callback: a callback to connect to the "toggled" signal of each * #GtkRadioButton that is created. * @callback_data: data to pass to the @callback. * @first_button: returns the first button in the created group. * * Just like gimp_enum_icon_box_new(), this function creates a group * of radio buttons, but additionally it supports limiting the range * of available enum values. * * Return value: a new #GtkHBox holding a group of #GtkRadioButtons. * * Since: GIMP 2.10 **/ GtkWidget * gimp_enum_icon_box_new_with_range (GType enum_type, gint minimum, gint maximum, const gchar *icon_prefix, GtkIconSize icon_size, GCallback callback, gpointer callback_data, GtkWidget **first_button) { GtkWidget *hbox; GtkWidget *button; GtkWidget *image; GEnumClass *enum_class; GEnumValue *value; gchar *icon_name; GSList *group = NULL; g_return_val_if_fail (G_TYPE_IS_ENUM (enum_type), NULL); g_return_val_if_fail (icon_prefix != NULL, NULL); enum_class = g_type_class_ref (enum_type); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); g_object_weak_ref (G_OBJECT (hbox), (GWeakNotify) g_type_class_unref, enum_class); if (first_button) *first_button = NULL; for (value = enum_class->values; value->value_name; value++) { if (value->value < minimum || value->value > maximum) continue; button = gtk_radio_button_new (group); gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE); if (first_button && *first_button == NULL) *first_button = button; icon_name = g_strconcat (icon_prefix, "-", value->value_nick, NULL); image = gtk_image_new_from_icon_name (icon_name, icon_size); g_free (icon_name); if (image) { gtk_container_add (GTK_CONTAINER (button), image); gtk_widget_show (image); } gimp_help_set_help_data (button, gimp_enum_value_get_desc (enum_class, value), NULL); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); gtk_widget_show (button); g_object_set_data (G_OBJECT (button), "gimp-item-data", GINT_TO_POINTER (value->value)); if (callback) g_signal_connect (button, "toggled", callback, callback_data); } return hbox; }