|
|
|
|
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);
}
Configuration: Linux Firefox 2.0.0.17
J'ai trouvé la solution mais ce n'est pas aussi simple que pour le bouton descendre.
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);
}
}
} |