とみたです。

At Fri, 03 Dec 1999 02:28:24 -0500,
Yasushi Shoji <yashi / yashi.com> wrote:

> Gtk::Button objectを labelなしで作った後で、labelを付けたくなったらどうしま
> すか?
> 
> 1) objectを一度こわしてから、Gtk::Button.new('...')
> 2) obj.child = Gtk::Label.new('...')
> 3) obj.child.nil? => trueはありえなくする

4) Gtk::Button#label=(), Gtk::Button#label() を Ruby/Gtk に実装する :p

すいません冗談です。

でも、Gtk で gtk_object_setv(), gtk_object_getv() でできることは、やっぱ
りRuby/Gtk でもできた方がいいと思います。どういう API にするかという議論
はあるでしょうけど…。

--
とみたまさひろ <tommy / tmtm.org>

う、冗談のつもりが…。 *** rbgtkbutton.c.orig Wed Aug 25 12:21:41 1999 --- rbgtkbutton.c Fri Dec 3 17:32:45 1999 *************** *** 79,84 **** --- 79,111 ---- return INT2FIX(style); } + static VALUE + button_set_label(self, label) + VALUE self; + VALUE label; + { + GtkArg arg; + arg.type = GTK_TYPE_STRING; + arg.name = "label"; + arg.d.string_data = STR2CSTR(label); + gtk_object_setv(GTK_OBJECT(get_widget(self)), 1, &arg); + return Qnil; + } + + static VALUE + button_get_label(self) + VALUE self; + { + VALUE label; + GtkArg arg = {GTK_TYPE_STRING, "label", 0}; + gtk_object_getv(GTK_OBJECT(get_widget(self)), 1, &arg); + if (GTK_VALUE_STRING(arg) == NULL) + return Qnil; + label = rb_str_new2(GTK_VALUE_STRING(arg)); + g_free(GTK_VALUE_STRING(arg)); + return label; + } + void Init_gtk_button() { gButton = rb_define_class_under(mGtk, "Button", gBin); *************** *** 97,102 **** --- 124,131 ---- rb_define_method(gButton, "leave", button_leave, 0); rb_define_method(gButton, "set_relief", button_set_relief, 1); rb_define_method(gButton, "get_relief", button_get_relief, 0); + rb_define_method(gButton, "label=", button_set_label, 1); + rb_define_method(gButton, "label", button_get_label, 0); }