From: Kouhei S. <ko...@co...> - 2008-05-11 21:53:30
|
須藤です。 In <E1J...@sc...> "[ruby-gnome2-cvs] SF.net SVN: ruby-gnome2: [3190] ruby-gnome2/trunk/gtk" on Sun, 11 May 2008 12:12:39 -0700, hna...@us... wrote: > Revision: 3190 > http://ruby-gnome2.svn.sourceforge.net/ruby-gnome2/?rev=3190&view=rev > Author: hnakagawa > Date: 2008-05-11 12:12:39 -0700 (Sun, 11 May 2008) > > Log Message: > ----------- > *src/rbgtkliststore.c: added Gtk::ListStore#set_valuesv() > Modified: ruby-gnome2/trunk/gtk/src/rbgtkliststore.c > =================================================================== > --- ruby-gnome2/trunk/gtk/src/rbgtkliststore.c 2008-05-08 12:26:30 UTC (rev 3189) > +++ ruby-gnome2/trunk/gtk/src/rbgtkliststore.c 2008-05-11 19:12:39 UTC (rev 3190) > @@ -80,6 +80,34 @@ > return self; > } > > +#if GTK_CHECK_VERSION(2, 12, 0) > +static VALUE > +lstore_set_valuesv(VALUE self, VALUE iter, VALUE columns, VALUE value, VALUE n_values) > +{ > + GType gtype = gtk_tree_model_get_column_type(GTK_TREE_MODEL(RVAL2GOBJ(self)), NUM2INT(columns)); > + GValue gval = {0,}; > + gint i,len = RARRAY(columns)->len; > + gint* gcolumns = g_new(gint, len); > + > + for (i = 0; i < len; i++) { > + gcolumns[i] = NUM2INT(RARRAY(columns)->ptr[i]); > + } > + > + g_value_init(&gval, gtype); > + > + rbgobj_rvalue_to_gvalue(value, &gval); > + > + G_CHILD_ADD(self, iter); > + G_CHILD_ADD(iter, value); > + > + gtk_list_store_set_valuesv(_SELF(self), RVAL2ITR(iter), gcolumns, &gval, NUM2INT(n_values)); > + > + g_value_unset(&gval); > + g_free(gcolumns); > + return self; > +} > +#endif > + > /* > void gtk_tree_store_set (GtkTreeStore *tree_store, > GtkTreeIter *iter, > @@ -307,6 +335,9 @@ > rb_define_method(ls, "move_before", lstore_move_before, 2); > rb_define_method(ls, "move_after", lstore_move_after, 2); > #endif > +#if GTK_CHECK_VERSION(2, 12, 0) > + rb_define_method(ls, "set_valuesv", lstore_set_valuesv, 4); > +#endif 気になる点がそこそこあります。 * Rubyに公開するAPIとしてはvaluesvのvはつけない方がいいの ではないか * n_valuesはvaluesから取得できるはずなので、引数としては必 要ないのではないか * gvalはGValueの配列なので、n_valuesが2以上のときは落ちる のではないか * gint i,lenにはスペースを入れてgint i, lenにした方がよい のではないか * 変数宣言のところでこんなに頑張らないで gtk_tree_model_get_column_type(GTK_TREE_MODEL(RVAL2GOBJ(self)), NUM2INT(columns)) gint i,len = RARRAY(columns)->len; gint* gcolumns = g_new(gint, len); 普通に変数宣言の後でやった方がよいのではないか * というかそもそも落ちるのではないか。columnsはint?array? NUM2INT(columns) RARRAY(columns)->len * できればテストも書いてほしい。 |