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 :

Gestion des GLists


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut Gestion des GLists
    Et une deuxieme fois, bonjour à tous, en éspérant avoir un peu plus de succes que sur l'autre topic

    J'ai besoin de listes chainées dans mon programme GTK, et en regardant la doc, je me dis : CHOUETTE, il existe une librairie qui me simplifie la vie.

    En effet les fonctions ont l'air simples à souhait, je me lance donc avec les GList (doublement chainées) ...

    Bah c'est raté pour la facilité, ca fait 3 heures que je me casse la tête la dessus


    Pour être précis, je veux faire une liste chainée de structures, que je passe dans mes callbacks pour modifier mes widgets.
    Bref plutot qu'un grand discours, voici de quoi je parle :

    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
    typedef struct page{
    	gint index;
    	GtkWidget *HugeHbox;
    	GtkWidget *FiltresVbox, *PicVbox, *ResultVbox;
    	GtkWidget *OriginalPic, *ResultPic;
    	GtkWidget *TabLabel;
    }page;
    
    GList *pages = NULL;
    
    // Fonction de création de nouvel onglet :
    void cb_new (GtkWidget *p_widget, gpointer user_data)
    {
    	// Déclaration des variables :
    	page *newp = NULL;
    	apli *app = NULL;
    
    	// On récupére l'application :
    	app = (apli*)malloc(sizeof(apli));
    	app = user_data;
    
    	// On crée une nouvelle page :
    	newp = (page*)malloc(sizeof(page));
    	newp->index = 0;
    	newp->HugeHbox = gtk_hbox_new(TRUE,0);
    	newp->FiltresVbox = gtk_vbox_new(TRUE,0);
    	newp->PicVbox = gtk_vbox_new(TRUE,0);
    	newp->ResultVbox = gtk_vbox_new(TRUE,0);
    	newp->OriginalPic = gtk_image_new_from_file("Pics/test_image13.jpg");
    	newp->ResultPic = gtk_image_new_from_file("Pics/test_image13.jpg");;
    	newp->TabLabel = create_label(g_strdup_printf("Doc %d", app->index));
    	app->index ++;
    
    	// On place les éléments dans les box correspondantes :
    	gtk_box_pack_start(GTK_BOX(newp->PicVbox), newp->OriginalPic, FALSE, FALSE, 0);
    	gtk_box_pack_start(GTK_BOX(newp->ResultVbox), newp->ResultPic, FALSE, FALSE, 0);
    
    	// On empile les boxs :
    	gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->FiltresVbox, FALSE, FALSE, 0);
    	gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->PicVbox, FALSE, FALSE, 0);
    	gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->ResultVbox, FALSE, FALSE, 0);
    	
    	// On met la hugeHbox dans l'onglet :
    	newp->index = gtk_notebook_append_page(GTK_NOTEBOOK(app->notebook), newp->HugeHbox, newp->TabLabel);
    	
    	// On affiche le tout :
    	gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook), newp->index - 1);
    	gtk_widget_show_all(GTK_WIDGET(app->notebook));
    
    	// Ajout de la page au document :
    	g_list_append(app->pages, newp);
    
    	printf("page : %d\n", newp->index);
    	free(newp);
    	newp = NULL;
    	Pause(2);
    	newp = g_list_nth_data(app->pages, 0);
    // C'est la que ca plante (erreur acces memoire)
    	printf("page : %d\n", newp->index);
    }

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    app->pages = g_list_append(app->pages, newp);

  3. #3
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    OMG ca serait sick

  4. #4
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    WoW ...
    C'est ARCHI sick ...
    Serieux c'est chaud d'être aussi teubé.
    On va passer ca sur le compte de la fatigue

    Merci en tout cas
    comme quoi on peut passer à coté des trucs les plus évidents ! un avis exterieur est toujours salvateur

  5. #5
    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
    Ah, et sinon, utiliser g_list_nth_element sur une liste chaînée, ça n'est pas une très bonne idée d'un point de vue performance. Une liste chaînée se prête très bien à des traitements itératifs (tu traites les éléments un par un à partir du 1er), par contre les accés aléatoires (accés direct au Nème élément) sont très peu performants.

  6. #6
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Oki, c'est ce que je m'étais dit aussi au début, mais comme ca marchait pas j'ai repris avec les fonctions les plus simples

    Merci encore en tout cas Teuf

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01
  2. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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