IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Comment mettre à jour ma TreeView !


Sujet :

GTK+ avec C & C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut Comment mettre à jour ma TreeView !
    Salutation à tous !
    Je commence par préciser que je suis débutant (que ce soit en c ou gtk), et vous remercie d'avance pour votre aide.

    Donc voilà mon problème:

    Je souhaite afficher dans une TreeView un ensemble de donné que j'ai au préalablement stocker dans une liste (je n'ai pas utilisé les listes de la Glib, mais une structure personnel que j'ai crée). Je précise que je charge et sauvegarde cette liste à l'aide d'un fichier text.

    Donc j'arrive à créer mon model à l'aide de boucles qui parcourt ma list, j'affiche correctement mes données, mais je ne vois pas comment faire pour rafraichir l'affichage une fois que j'ai modifié ma liste (je suis obligé de relancer mon programme pour avoir l'affichage à jour).

    Cela fait plusieurs jours que je bute sur ce problème, j'ai cru comprendre que le TreeView était censé se rafraichir tout seul. J'ai donc probablement du mal définir mon model. Comment pourrais-je faire autrement ? Ou sinon comment pourrais-je forcer mon programme à recréer le model après une modification sur ma liste ?

    merci d'avance !

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Si tu rajoutes des données dans le modèle associé à ton GtkTreeView, l'affichage graphique sera rafraichi automatiquement. Tu utilises des threads peut être ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut
    Non je ne pense pas que j'utilise des threads, je ne sais même pas ce que je c'est :s

    En fait je créer mon model à partir d'une liste de valeur ... Et ce que je voudrais réussir à faire, c'est rafraichir l'affichage quand je modifie ma liste, ce qui n'est actuellement pas le cas :s
    Peut être que j'ai mal défini mon model :

    Voilà la partie création model de ma fonction qui me créer ma vue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    GtkTreeModel*
        creer_view_film(void)
        {
     
        GtkTreeViewColumn *pColumn;
        GtkTreeStore *pTreeStore;
        GtkWidget *pTreeView;
        GtkCellRenderer *pCellRenderer;
        gint i;
        gint j;
     
        /* Chargement de la list */
     
        Noeud* ListFilm = (Noeud*)malloc(sizeof(Noeud)); // je declare ici mes liste
        Noeud* ListCategorie = (Noeud*)malloc(sizeof(Noeud));
        strcpy(ListCategorie->nom, "0"); 
        ListCategorie->suivant = NULL;
     
        ChargerListFilm(ListFilm); // j'initialise ma list à partir d'un fichier text
     
        DefinirCategorie(ListFilm, ListCategorie); 
        trierfilms(ListFilm,ListCategorie); // je subdivise par categorie mes films dans une autre liste
     
     
        /* Creation du modele */
        pTreeStore = gtk_tree_store_new(N_COLUMN2, G_TYPE_STRING, G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING);
     
        gchar *sTexte2;
        sTexte2 = g_malloc(16);
     
        gchar* idfilm;
        idfilm = g_malloc(16);
     
        gchar* stock;
        stock = g_malloc(16);
     
        gchar* prix;
        prix = g_malloc(16);
     
        Noeud* cat = ListCategorie->suivant; // premier element non desiré, j'le zap
     
     
        /* Insertion des elements */
     
            GtkTreeIter pIter;
            GtkTreeIter pIter2;
        for(i = 1 ; i < tailleL(ListCategorie); i++)
        {
            // je recupere les differents categories de films.
            sprintf(sTexte2, "<b><span foreground=\"#B8860B\" >  -> %s   </span></b>", cat->nom); 
     
            /* Creation de la nouvelle ligne */
            gtk_tree_store_append(pTreeStore, &pIter, NULL);
     
     
            /* Mise a jour des donnees */
            gtk_tree_store_set(pTreeStore, &pIter,
                ID_COLUMN2, "",
                NAME_COLUMN, sTexte2 ,
                PRIX_COLUMN, "",
                STOCK_COLUMN, "99", // pour reperer les lignes parents, et les afficher en couleur.
                -1);
     
     
            Noeud* ListFilm = cat->valeur; // recupere l'ensemble des films contenu dans la categorie
            ListFilm = ListFilm->suivant; // le premier element de ma liste est non desiré, j'le zap.
     
            int k = tailleL(ListFilm);
     
            for(j = 0 ; j < k ; j++)
            {
                Film* f = ListFilm->valeur;   // je charge les données à partir de mes structures de données
                sprintf(sTexte2, "%s", f->titre); 
                sprintf(idfilm, "%d", f->id);
                sprintf(stock, " %d", f->stock);
                sprintf(prix, "%d", f->prix);
     
     
                /* Creation de la nouvelle ligne enfant */
                gtk_tree_store_append(pTreeStore, &pIter2, &pIter);
     
                /* Mise a jour des donnees */
                gtk_tree_store_set(pTreeStore, &pIter2,
                    ID_COLUMN2, idfilm,
                    NAME_COLUMN, sTexte2,
                    PRIX_COLUMN, prix,
                    STOCK_COLUMN, stock,
                    -1);
                    ListFilm = ListFilm->suivant;
            }
            cat = cat->suivant; // je passe à la categorie suivante
        }
    L'affichage est conforme à ce que je voulais, seulement j'ai du merdé quelque par pour qu'il ne se mette pas à jour quand je modifie mes list :s



    (j'ai posté la partie du code qui génère le model de l'affichage de droite).

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Je t'invite à remplacer tes appels à malloc + sprintf par des g_strdup_printf qui feront tout seul une allocation à la bonne taille. Pour être certain qu'on parle de la même chose, c'est dans pTreeStore que tu dois ajouter tes nouvelles données pour que l'affichage du TreeView soit automatiquement mis à jour.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut
    Merci pour le tuyau pour les malloc.

    En fait je pensais que si je modifiais les données dans ma liste, elles le seraient automatiquement aussi dans le pTreeStore ... :s

    Si j'ai bien compris je dois donc modifier manuellement les données du pTreeStore ? (le parcourir, trouver la ligne à modifier ou supprimer, etc ? ...)

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Oui, voilà. Si c'est plus pratique pour toi, tu peux rajouter des colonnes "cachées" dans ton modèle, avec par exemple le pointeur qui va bien dans ta liste, ou autre chose.

Discussions similaires

  1. [ADO.NET][VB.NET]Comment mettre à jour BDD avec DataSet?
    Par fuhraih dans le forum Accès aux données
    Réponses: 1
    Dernier message: 17/01/2006, 16h35
  2. Comment mettre à jour le CD de Delphi 6 ?
    Par Hell dans le forum EDI
    Réponses: 1
    Dernier message: 01/08/2005, 16h39
  3. [Rave Report] Comment mettre à jour le produit
    Par Leesox dans le forum Rave
    Réponses: 2
    Dernier message: 11/04/2005, 21h00
  4. Comment mettre à jour un exécutable ?
    Par rvzip64 dans le forum Langage
    Réponses: 10
    Dernier message: 09/12/2004, 18h43
  5. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo