int clip_GTK_TREESTOREREORDER(ClipMachine * ClipMachineMemory) { C_object *cstree = _fetch_co_arg(ClipMachineMemory); C_object *citer = _fetch_cobject(ClipMachineMemory, _clip_spar(ClipMachineMemory, 2)); ClipArrVar *arr = (ClipArrVar *) _clip_vptr(_clip_spar(ClipMachineMemory, 3)); gint n; CHECKARG2(1, MAP_type_of_ClipVarType, NUMERIC_type_of_ClipVarType); CHECKCOBJ(cstree, GTK_IS_TREE_STORE(cstree->object)); CHECKCOBJ(citer, GTK_IS_TREE_ITER(citer->object)); CHECKARG(3, ARRAY_type_of_ClipVarType); n = arr->count_of_ClipArrVar; if (arr) { gint *order, i; order = malloc(n * sizeof(gint)); for (i = 0; i < n; i++) order[i] = arr->ClipVar_items_of_ClipArrVar[i].ClipNumVar_n_of_ClipVar.double_of_ClipNumVar; gtk_tree_store_reorder(GTK_TREE_STORE(cstree->object), GTK_TREE_ITER(citer->object), order); free(order); } return 0; err: return 1; }
static VALUE tstore_reorder(VALUE self, VALUE parent, VALUE new_order) { gint i; gint len = RARRAY_LEN(new_order); gint* gnew_order = g_new(gint, len); for (i = 0; i < len; i++){ gnew_order[i] = NUM2INT(RARRAY_PTR(new_order)[i]); } gtk_tree_store_reorder(_SELF(self), RVAL2GTKTREEITER(parent), gnew_order); g_free(gnew_order); return self; }
static VALUE rg_reorder(VALUE self, VALUE rbparent, VALUE rbnew_order) { GtkTreeStore *store = _SELF(self); GtkTreeIter *parent = RVAL2GTKTREEITER(rbparent); gint columns = gtk_tree_model_get_n_columns(GTK_TREE_MODEL(store)); long n; gint *new_order = RVAL2GINTS(rbnew_order, n); if (n != columns) { g_free(new_order); rb_raise(rb_eArgError, "new order array must contain same number of elements as the number of columns in the store: %ld != %d", n, columns); } gtk_tree_store_reorder(store, parent, new_order); g_free(new_order); return self; }