[GTK/C]Monter un élément de gtk_list_store
Résolu
drazx974
Messages postés
48
Date d'inscription
Statut
Membre
Dernière intervention
-
drazx974 Messages postés 48 Date d'inscription Statut Membre Dernière intervention -
drazx974 Messages postés 48 Date d'inscription Statut Membre Dernière intervention -
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:
logiquement en remplacent after par before ça devrait être bon mais c'est pas le cas.
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.
A voir également:
- [GTK/C]Monter un élément de gtk_list_store
- Open element - Télécharger - HTML
- Élément introuvable impossible à supprimer - Guide
- Monter fichier bin - Guide
- Monter iso - Guide
- Impossible d'ajouter un élément au modèle instagram ✓ - Forum Samsung
3 réponses
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 :
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); } } }