static VALUE tvc_set_attributes(VALUE self, VALUE renderer, VALUE attributes) { GtkTreeViewColumn *tvc; GtkCellRenderer *grenderer; const gchar *name; int i, col; VALUE ary, val; Check_Type(attributes, T_HASH); tvc = _SELF(self); grenderer = RVAL2CELLRENDERER(renderer); gtk_tree_view_column_clear_attributes(tvc, grenderer); ary = rb_funcall(attributes, rb_intern("to_a"), 0); for (i = 0; i < RARRAY_LEN(ary); i++) { val = RARRAY_PTR(RARRAY_PTR(ary)[i])[0]; if (SYMBOL_P(val)) { name = rb_id2name(SYM2ID(val)); } else { name = RVAL2CSTR(val); } col = NUM2INT(RARRAY_PTR(RARRAY_PTR(ary)[i])[1]); gtk_tree_view_column_add_attribute(tvc, grenderer, name, col); } return self; }
static VALUE tvc_pack_end(VALUE self, VALUE cell, VALUE expand) { G_CHILD_ADD(self, cell); gtk_tree_view_column_pack_end(_SELF(self), RVAL2CELLRENDERER(cell), RVAL2CBOOL(expand)); return self; }
static VALUE tvc_focus_cell(VALUE self, VALUE renderer) { gtk_tree_view_column_focus_cell(_SELF(self), RVAL2CELLRENDERER(renderer)); return self; }
static VALUE tvc_set_cell_data_func(VALUE self, VALUE renderer) { volatile VALUE func = rb_block_proc(); G_RELATIVE(self, func); G_RELATIVE(renderer, func); gtk_tree_view_column_set_cell_data_func(_SELF(self), RVAL2CELLRENDERER(renderer), (GtkTreeCellDataFunc)cell_data_func, (gpointer)func, NULL); return self; }
static VALUE tvc_add_attribute(VALUE self, VALUE cell, VALUE attribute, VALUE column) { const gchar *name; if (SYMBOL_P(attribute)) { name = rb_id2name(SYM2ID(attribute)); } else { name = RVAL2CSTR(attribute); } gtk_tree_view_column_add_attribute(_SELF(self), RVAL2CELLRENDERER(cell), name, NUM2INT(column)); return self; }
static VALUE tvc_initialize(int argc, VALUE *argv, VALUE self) { int i; int col; GtkTreeViewColumn *tvc; GtkCellRenderer *renderer; const gchar *name; VALUE ary, val; tvc = gtk_tree_view_column_new(); if (argc > 0){ gtk_tree_view_column_set_title(tvc, RVAL2CSTR(argv[0])); if (argc > 1) { gtk_tree_view_column_pack_start(tvc, RVAL2CELLRENDERER(argv[1]), TRUE); G_CHILD_ADD(self, argv[1]); } } RBGTK_INITIALIZE(self, tvc); if (argc == 3){ ary = rb_funcall(argv[2], rb_intern("to_a"), 0); renderer = RVAL2CELLRENDERER(argv[1]); for (i = 0; i < RARRAY_LEN(ary); i++) { val = RARRAY_PTR(RARRAY_PTR(ary)[i])[0]; if (SYMBOL_P(val)) { name = rb_id2name(SYM2ID(val)); } else { name = RVAL2CSTR(val); } col = NUM2INT(RARRAY_PTR(RARRAY_PTR(ary)[i])[1]); gtk_tree_view_column_add_attribute(_SELF(self), renderer, name, col); } } return Qnil; }
static VALUE tvc_clear_attributes(VALUE self, VALUE cell) { gtk_tree_view_column_clear_attributes(_SELF(self), RVAL2CELLRENDERER(cell)); return self; }
static VALUE rg_insert_column(int argc, VALUE *argv, VALUE self) { VALUE args[4]; rb_scan_args(argc, argv, "22", /* NORMAL ATTRIBUTES DATA_FUNC */ &args[0], /* column position position */ &args[1], /* position title title */ &args[2], /* renderer renderer */ &args[3]); /* attributes */ if (argc == 2) { G_CHILD_ADD(self, args[0]); return INT2NUM(gtk_tree_view_insert_column(_SELF(self), TREEVIEW_COL(args[0]), NUM2INT(args[1]))); } else if (argc == 3) { int ret; VALUE func = rb_block_proc(); G_RELATIVE(self, func); ret = gtk_tree_view_insert_column_with_data_func(_SELF(self), NUM2INT(args[0]), RVAL2CSTR(args[1]), RVAL2CELLRENDERER(args[2]), (GtkTreeCellDataFunc)cell_data_func, (gpointer)func, NULL); return INT2NUM(ret); } else if (argc == 4) { int i; int col; int ret; const gchar *name; VALUE ary; GtkCellRenderer* renderer = RVAL2CELLRENDERER(args[2]); GtkTreeViewColumn* column = gtk_tree_view_column_new(); Check_Type(args[3], T_HASH); /* TODO: Should this really be done before we know that everything * below worked without error? */ G_CHILD_ADD(self, args[2]); G_CHILD_ADD(self, args[3]); gtk_tree_view_column_set_title(column, RVAL2CSTR(args[1])); gtk_tree_view_column_pack_start(column, renderer, TRUE); ret = gtk_tree_view_insert_column(_SELF(self), column, NUM2INT(args[0])); ary = rb_funcall(args[3], rb_intern("to_a"), 0); for (i = 0; i < RARRAY_LEN(ary); i++) { VALUE val = RARRAY_PTR(RARRAY_PTR(ary)[i])[0]; if (SYMBOL_P(val)) { name = rb_id2name(SYM2ID(val)); } else { name = RVAL2CSTR(val); } col = NUM2INT(RARRAY_PTR(RARRAY_PTR(ary)[i])[1]); gtk_tree_view_column_add_attribute(column, renderer, name, col); } return INT2NUM(ret); } else { rb_raise(rb_eArgError, "Wrong number of arguments: %d", argc); } return Qnil; }