- switch (G_PARAM_SPEC_TYPE (spec))
- {
- case G_TYPE_PARAM_INT:
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- adj = GTK_ADJUSTMENT (gtk_adjustment_new (G_PARAM_SPEC_INT (spec)->default_value,
- G_PARAM_SPEC_INT (spec)->minimum,
- G_PARAM_SPEC_INT (spec)->maximum,
- 1,
- MAX ((G_PARAM_SPEC_INT (spec)->maximum -
- G_PARAM_SPEC_INT (spec)->minimum) / 10, 1),
- 0.0));
-
- prop_edit = gtk_spin_button_new (adj, 1.0, 0);
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (int_changed),
- adj, G_OBJECT (adj));
-
- if (can_modify)
- connect_controller (G_OBJECT (adj), "value_changed",
- object, spec->name, (GtkSignalFunc) int_modified);
- break;
-
- case G_TYPE_PARAM_FLOAT:
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- adj = GTK_ADJUSTMENT (gtk_adjustment_new (G_PARAM_SPEC_FLOAT (spec)->default_value,
- G_PARAM_SPEC_FLOAT (spec)->minimum,
- G_PARAM_SPEC_FLOAT (spec)->maximum,
- 0.1,
- MAX ((G_PARAM_SPEC_FLOAT (spec)->maximum -
- G_PARAM_SPEC_FLOAT (spec)->minimum) / 10, 0.1),
- 0.0));
-
- prop_edit = gtk_spin_button_new (adj, 0.1, 2);
-
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (float_changed),
- adj, G_OBJECT (adj));
-
- if (can_modify)
- connect_controller (G_OBJECT (adj), "value_changed",
- object, spec->name, (GtkSignalFunc) float_modified);
- break;
-
- case G_TYPE_PARAM_STRING:
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
- prop_edit = gtk_entry_new ();
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (string_changed),
- prop_edit, G_OBJECT (prop_edit));
-
- if (can_modify)
- connect_controller (G_OBJECT (prop_edit), "changed",
- object, spec->name, (GtkSignalFunc) string_modified);
- break;
-
- case G_TYPE_PARAM_BOOLEAN:
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
- prop_edit = gtk_toggle_button_new_with_label ("");
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (bool_changed),
- prop_edit, G_OBJECT (prop_edit));
-
- if (can_modify)
- connect_controller (G_OBJECT (prop_edit), "toggled",
- object, spec->name, (GtkSignalFunc) bool_modified);
- break;
-
- case G_TYPE_PARAM_ENUM:
- {
- GtkWidget *menu;
- GEnumClass *eclass;
- gint i;
-
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
- prop_edit = gtk_option_menu_new ();
-
- menu = gtk_menu_new ();
-
- eclass = G_ENUM_CLASS (g_type_class_ref (spec->value_type));
-
- i = 0;
- while (i < eclass->n_values)
- {
- GtkWidget *mi;
-
- mi = gtk_menu_item_new_with_label (eclass->values[i].value_name);
-
- gtk_widget_show (mi);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
-
- ++i;
- }
-
- g_type_class_unref (eclass);
-
- gtk_option_menu_set_menu (GTK_OPTION_MENU (prop_edit), menu);
-
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (enum_changed),
- prop_edit, G_OBJECT (prop_edit));
-
- if (can_modify)
- connect_controller (G_OBJECT (prop_edit), "changed",
- object, spec->name, (GtkSignalFunc) enum_modified);
- }
-
- case G_TYPE_PARAM_UNICHAR:
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
- prop_edit = gtk_entry_new ();
- gtk_entry_set_max_length (GTK_ENTRY (prop_edit), 1);
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (unichar_changed),
- prop_edit, G_OBJECT (prop_edit));
-
- if (can_modify)
- connect_controller (G_OBJECT (prop_edit), "changed",
- object, spec->name, (GtkSignalFunc) unichar_modified);
- break;
-
- default:
- {
- gchar *msg = g_strdup_printf ("%s: don't know how to edit property type %s",
- spec->nick, g_type_name (G_PARAM_SPEC_TYPE (spec)));
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (msg);
- g_free (msg);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
- }
- }