Rechercher : dans
Par :

[GTK/C]Monter un élément de gtk_list_store

Dernière réponse le 6 mar 2009 à 11:48:36 drazx974, le 23 fév 2009 à 08:27:09 
 Signaler ce message aux modérateurs

Bonjour,
J'ai une interface GTK+ avec une liste et des boutons qui déplacent les éléments de cette liste.
J'ai réussi à faire les boutons monter en haut de liste, descendre en bas de liste, descendre d'une ligne mais j'ai du mal avec le monter d'une ligne.

voilà le code pour descendre d'une ligne:

GtkTreeSelection* selection;

	Datas *n = (Datas *)datas;
	
	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(n->tree));
	
    gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);

    GtkTreeIter pIter;
    GtkTreeIter position;
    GtkTreeModel *treeView;
    treeView = GTK_TREE_MODEL(n->tree);

	
     if(gtk_tree_selection_get_selected (selection, &treeView, &pIter))
     {
		 position = pIter;
		 gtk_tree_model_iter_next(treeView, &position);
		 gtk_list_store_move_after(n->store, &pIter, &position);
     }


logiquement en remplacent after par before ça devrait être bon mais c'est pas le cas.
Configuration: Linux
Firefox 2.0.0.17

Meilleures réponses pour « [GTK/C]Monter un élément de gtk_list_store » dans :
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Définir une hauteur verticale et relative à un élément VoirParfois, on voudrait définir une hauteur verticale à un élément. C'est simple en utilisant des valeurs fixes (en pixels pas exemple), mais c'est plus compliqué en utilisant des hauteurs relatives (en pourcentages). Ce problème est souvent...
Langage C - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...

1

drazx974, le 25 fév 2009 à 13:06:35

Up please

Répondre à drazx974

2

drazx974, le 27 fév 2009 à 07:41:09

Personne ne sais faire monter des éléments en GTK ? :'(

Répondre à drazx974

3

 drazx974, le 6 mar 2009 à 11:48:36

J'ai trouvé la solution mais ce n'est pas aussi simple que pour le bouton descendre.

le principe c'est d'avoir 2 iterateurs un qui va se déplacer pour compter et l'autre pour comparer et descendre jusqu'à sa nouvelle place (pMove, pOrig).

on met pMove en haut de liste puis on le descend jusqu'a trouver celui d'origine en incrémentant un compteur à chaque boucle.

ensuite on déplace pOrig en haut de liste et si l'itérateur d'origine est en seconde place on le laisse en haut de liste sinon on le descend autant de fois qu'à donné le compteur en comparant avec un second compteur pour savoir ou on en est.

le code :

    GtkTreeSelection* selection;
    GtkTreeIter position;
    GtkTreeIter pMove;
    GtkTreeIter pOrig;
    GtkTreeModel *treeView;
	
	int compteur;
	int compteurbis;
	
	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(n->tree)); //recupère la selection, n est un struct de mon programme
	gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); //mode de selection
    
	treeView = GTK_TREE_MODEL(n->tree);
	
	if(gtk_tree_selection_get_selected (selection, &treeView, &pOrig)) //si il y a une selection
	{
		gtk_tree_model_get_iter_first(GTK_TREE_MODEL(n->store), &pMove); //placer l'iterateur déplaceant en haut de liste
		
		compteur = 0;
		while(pMove.user_data != pOrig.user_data)
		{
			gtk_tree_model_iter_next(treeView, &pMove);
			compteur++;
		}
		
		gtk_list_store_move_after(n->store, &pOrig, NULL); //placer l'iterateur original en haut de liste
		
		position = pOrig;
		compteurbis = 0;
		
		if(compteur > 1) //si l'original n'est pas en seconde position
		{
			while(compteurbis < compteur) //le faire descendre autant de fois que compteur - 1
			{
				compteurbis++;
				gtk_tree_model_iter_next(treeView, &position);
				gtk_list_store_move_before(n->store, &pOrig, &position);
			}
		}
		
		
	}

Répondre à drazx974
Collection CommentÇaMarche.net