static void on_reorder (void) { GArray *new_contents; gint *shuffle_array; gint i; shuffle_array = g_new (int, contents->len); for (i = 0; i < contents->len; i++) shuffle_array[i] = i; for (i = 0; i + 1 < contents->len; i++) { gint pos = g_random_int_range (i, contents->len); gint tmp; tmp = shuffle_array[i]; shuffle_array[i] = shuffle_array[pos]; shuffle_array[pos] = tmp; } gtk_list_store_reorder (model, shuffle_array); new_contents = g_array_new (FALSE, FALSE, sizeof (char)); for (i = 0; i < contents->len; i++) g_array_append_val (new_contents, g_array_index (contents, char, shuffle_array[i])); g_array_free (contents, TRUE); contents = new_contents; combochange_log ("Reordered array"); g_free (shuffle_array); }
int clip_GTK_LISTSTOREREORDER(ClipMachine * cm) { C_object *cslist = _fetch_co_arg(cm); ClipArrVar *arr = (ClipArrVar *)_clip_vptr(_clip_spar(cm, 2)); gint n ; CHECKARG2(1, MAP_t, NUMERIC_t); CHECKCOBJ(cslist, GTK_IS_LIST_STORE(cslist->object)); CHECKARG(2, ARRAY_t); n = arr->count; if (arr) { gint *order, i; order = malloc(n*sizeof(gint)); for (i=0; i<n; i++) order[i] = arr->items[i].n.d; gtk_list_store_reorder(GTK_LIST_STORE(cslist->object), order); free(order); } return 0; err: return 1; }
static VALUE rg_reorder(VALUE self, VALUE rbnew_order) { GtkListStore *store = _SELF(self); long n; gint *new_order = RVAL2GINTS(rbnew_order, n); gtk_list_store_reorder(store, new_order); g_free(new_order); return self; }
static gboolean gth_metadata_chooser_reorder_list (GthMetadataChooser *self) { gboolean changed = FALSE; GtkTreeModel *model; GtkTreeIter iter; GList *list; int pos; int *new_order; GList *scan; model = gtk_tree_view_get_model (GTK_TREE_VIEW (self)); if (! gtk_tree_model_get_iter_first (model, &iter)) return FALSE; list = NULL; pos = 0; do { ItemData *item_data; item_data = g_new0 (ItemData, 1); item_data->pos = pos; gtk_tree_model_get (model, &iter, NAME_COLUMN, &item_data->name, ID_COLUMN, &item_data->id, SORT_ORDER_COLUMN, &item_data->sort_order, USED_COLUMN, &item_data->used, SEPARATOR_COLUMN, &item_data->separator, -1); list = g_list_prepend (list, item_data); pos++; } while (gtk_tree_model_iter_next (model, &iter)); list = g_list_sort (list, item_data_compare_func); new_order = g_new (int, g_list_length (list)); for (pos = 0, scan = list; scan; pos++, scan = scan->next) { ItemData *item_data = scan->data; if (pos != item_data->pos) changed = TRUE; new_order[pos] = item_data->pos; } gtk_list_store_reorder (GTK_LIST_STORE (model), new_order); g_free (new_order); g_list_foreach (list, (GFunc) item_data_free, NULL); g_list_free (list); return changed; }
static void rc_gui_list2_dnd_data_received(GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *seldata, guint info, guint time, gpointer data) { guint length = 0; gint i, j, k; gint *reorder_array = NULL; gint *indices = NULL; gint *index = NULL; gint target = 0; guint insert_num = 0; GList *path_list_foreach = NULL; GtkTreeViewDropPosition pos; GtkTreePath *path_start = NULL; GtkTreePath *path_drop = NULL; gint list_length = 0; gboolean insert_flag = FALSE; GList *path_list = NULL; gchar *uris = NULL; gchar **uri_array = NULL; gchar *uri = NULL; guint count = 0; gboolean flag = FALSE; gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW( rc_ui->list2_tree_view), x,y, &path_drop, &pos); if(path_drop!=NULL) { index = gtk_tree_path_get_indices(path_drop); target = index[0]; gtk_tree_path_free(path_drop); } else target = -2; switch(info) { case 1: { memcpy(&path_list, gtk_selection_data_get_data(seldata), sizeof(path_list)); if(path_list==NULL) break; length = g_list_length(path_list); indices = g_new(gint, length); for(path_list_foreach=path_list;path_list_foreach!=NULL; path_list_foreach=g_list_next(path_list_foreach)) { path_start = path_list_foreach->data; index = gtk_tree_path_get_indices(path_start); indices[count] = index[0]; count++; } g_qsort_with_data(indices, length, sizeof(gint), (GCompareDataFunc)rc_gui_list2_comp_func, NULL); if(pos==GTK_TREE_VIEW_DROP_AFTER || pos==GTK_TREE_VIEW_DROP_INTO_OR_AFTER) target++; list_length = gtk_tree_model_iter_n_children( rc_ui->list2_tree_model, NULL); if(target<0) target = list_length; reorder_array = g_new0(gint, list_length); i = 0; j = 0; count = 0; while(i<list_length) { if((j>=length || count!=indices[j]) && count!=target) { reorder_array[i] = count; count++; i++; } else if(count==target && !insert_flag) { for(k=0;k<length;k++) { if(target==indices[k]) { target++; count++; } reorder_array[i] = indices[k]; i++; } reorder_array[i] = target; i++; count++; insert_flag = TRUE; } else if(j<length && count==indices[j]) { count++; j++; } else break; } gtk_list_store_reorder(GTK_LIST_STORE(rc_ui->list2_tree_model), reorder_array); g_free(reorder_array); g_free(indices); break; } case 6: { uris = (gchar *)gtk_selection_data_get_data(seldata); if(uris==NULL) break; if(pos==GTK_TREE_VIEW_DROP_AFTER || pos==GTK_TREE_VIEW_DROP_INTO_OR_AFTER) target++; list_length = gtk_tree_model_iter_n_children( rc_ui->list2_tree_model, NULL); if(target<0) target = list_length; uri_array = g_uri_list_extract_uris(uris); insert_num = 0; for(count=0;uri_array[count]!=NULL;count++) { uri = uri_array[count]; if(rc_player_check_supported_format(uri)) { flag = rc_plist_insert_music(uri, rc_gui_list1_get_selected_index(), target); target++; insert_num++; } } g_strfreev(uri_array); if(insert_num>0) rc_gui_status_task_set(1, insert_num); break; } case 7: { rc_debug_module_perror(module_name, "Unknown dnd data in list2: %s", gtk_selection_data_get_data(seldata)); } default: break; } }
static void remap_reverse_callback (GtkAction *action, GtkListStore *store) { gtk_list_store_reorder (store, reverse_order); }