Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
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;
    }
}
Exemplo n.º 6
0
static void
remap_reverse_callback (GtkAction    *action,
                        GtkListStore *store)
{
  gtk_list_store_reorder (store, reverse_order);
}