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 :

Récupération de données et inclusion dans un prog C


Sujet :

GTK+ avec C & C++

  1. #21
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Je n'ai pas dit que ca résoudrait tous les problèmes. Je signalais seulement les premières coquilles.
    Au fur et à mesure que tu les supprimes ca affine voir supprime d'autres erreurs qui peuvent paraître bizarres.

  2. #22
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    C'est sur que corriger les warnings apparaissant en compilant avec gcc -Wall, ce serait la première étape avant de re-soumettre du code ici...

    Ensuite, coder "en dur" des valeurs pour construire l'interface à coup de copier coller, c'est pas spécialement super propre... Un boucle ajoutant le nombre de contrôles nécessaires serait tout de même plus propre...

  3. #23
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    "Une boucle ajoutant le nombre de contrôles nécessaires serait tout de même plus propre... "

    Désolé mais je ne comprend pas.

  4. #24
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    En gros, tu as 3 fois le même code copié/collé...
    Fais une fonction qui crée tes briques d'éléments graphiques, et appelle la dans une boucle...

    Un truc de ce genre... C'est pour donner l'idée, ça ne compilera pas tel quel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    static const int n_panels = 3;
    int i;
    GtkWidget *panel;
    for (i = 0; i < n_panels; i++)
    {
    	panel = panel_create_with_index (i);
    	gtk_box_pack_start (GTK_BOX (vbox), panel);
    }
    Et ton code copié/collé, tu le rends un peu plus générique pour créer la fonction panel_create_with_index. Bref, factorise ton code. Quand tu as une tâche effectuée plusieurs fois quasiment de la même manière, crée une fonction plutôt que de faire du copier/coller.

  5. #25
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    ok merci beaucoup, je vais tester! ^^

  6. #26
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    J'ain un petit problème avec les variables...

    La X est en static double, y-as-t-il une autre déclaration possible car j'obtien: "assignment of read-only variable'X' " Ca pose problème car quand je fais un static X=une_valeur mon programme marche mais en récupérant cette valeur depuis une gtk_entry ca marche pas.... Quelqun peut-il m'aider en me donant la déclaration de variable adapté au changement de valeur. Merci

    Voici une partie de mon code, celle qui est concernée:


    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
     
    static const double X=2;
     
    const gchar *nbr;
    gdouble number;
     
     
    pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
     
     
    /// Creation de la fenêtre ///
    /* On ajoute un espace de 5 sur les bords de la fenetre */
    gtk_container_set_border_width(GTK_CONTAINER(pWindow), 5);
    gtk_window_set_title(GTK_WINDOW(pWindow), "Regression Lineaire Mesures");
    gtk_window_set_default_size(GTK_WINDOW(pWindow), 70, 250);
    g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit),
    NULL);
     
    /* Creation et insertion de la table 10 lignes 4 colonnes */
    pTable=gtk_table_new(10,4,FALSE);
    gtk_container_add(GTK_CONTAINER(pWindow), GTK_WIDGET(pTable));
     
     
    /// Nb de mesures ///
    /* Creation et insertion des elements contenus dans le premier GtkFrame */
    pLabel1 = gtk_label_new("Nombre de mesures :");
    pEntry0 = gtk_entry_new();
    /* Recuperation du texte contenu dans le GtkEntry */
    nbr = gtk_entry_get_text(GTK_ENTRY(pEntry0));
    /* Conversion chaine -> valeur numérique */
    number = g_strtod (nbr, NULL);
    /* Modification du nombre */
    X=number;

  7. #27
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Tu ne peux pas la déclarer en const (ce qui signifie qu'on ne peut que lire la valeur, plus écrire dedans), et tenter d'écrire ensuite dans cette variable...

  8. #28
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    Je sait merci, mais justement je demandais si quelqun connait une autre fascon de déclarer une variable pour que e puisse modif sa valeur au cours du programme.

  9. #29
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Hé bien non, tu ne sais pas...
    Sinon tu aurais compris qu'il faut enlever le mot clé "const" pour pouvoir la modifier par la suite.

  10. #30
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    Merci de vos conseil j'ai réussi a comprendre pas mal de truc et a faire marcher la plupart des modules de mon programme.

    J'ai compris l'utilité de la Liste et du passage d'un élément a un autre dans des "VBox" ou "HBox" simples ou emboîtés les unes dans les autres mais je n'y arrive pas avec les "pVBoxFrame" ... Je vous joins mon module de test simplifié si vous voulez bien m'aider dans ce problème. Merci.

    Ps: Vous remarquerez sans doute ma tentative de récupération du contenu de la première entry: pEntry0 pour la mètre dans number2 et l'affichage dans la fenêtre de console. J'ai pourtant mis cet affichage dans la fenêtre et dans la fonction on_copier_boutton. Si quelqu'un peut aussi m'expliquer cela ca serais super. Merci.

    PS2: Je vous ai joints une capture d'écran quand j'ai remplis les cases et cliqué sur le Bouton. On peut voir qu'il y a une erreur mais je n'ai pas l'expérience pour comprendre exactement la signification.
    Images attachées Images attachées  
    Images attachées Images attachées
    Fichiers attachés Fichiers attachés

  11. #31
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Le problème ce situe ici dans la fonction void on_copier_button2(GtkWidget *pButton_valeur, gpointer data):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      /* Passage a l element suivant : le Label */
     
      pList = g_list_next(pList);
     
      /* Le premier element est le GtkEntry */
     
      pTempEntry0 = GTK_WIDGET(pList->data);
     
     
     
      /* Cet element est le GtkLabel */
     
      pTempLabel = GTK_WIDGET(pList->data);
    Tout d'abord tu prends tes widgets dans le désordre. L'ajout dans la VBox est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    pFrame2
     |-pLabel3
     |-pEntry
     |-...
    Ensuite tu commences par incrémenter le pointeur de ta liste avant de prendre les éléments. Tu commences donc par le deuxième élément. C'est normal que Gtk+ ne retrouve pas ses petits .

    Donc, si on remet tout dans l'ordre cela donne :
    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
      /* Recuperation de la liste des elements que contient la GtkVBox */
     
      pList = gtk_container_get_children(GTK_CONTAINER((GtkWidget*)data));
     
     
     
      /* Le premier element est le GtkLabel */
     
      pTempLabel = GTK_WIDGET(pList->data);
     
     
      /* On passe au pointeur suivant */
      pList = g_list_next(pList);
     
     
      /* Cet element est le GtkEntry */
     
      pTempEntry0 = GTK_WIDGET(pList->data);
    pour finir si tu veux un affichage en console il faut terminer tes lignes par un retour chariot "\n". Utilise aussi en priorité la fonction g_printf();.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_print ("number :%lf\n", number2);

  12. #32
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    Super! Merci je vais tester ca cet apres-midi.

    L'ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    pFrame2
     |-pLabel    (contiens le texte: X3)
     |-pEntry    (l'entry a copier)
     |-pLabel    (Celui qui affiche la valeur)
    Et j'ai compris mon erreur, quand on recup un élément de la liste, on ne passe pas au suivant mais on reste dans le même... Donc il faut passer à l'élément suivant! Je vais compléter mon code ce soir et j'uplaud demain. Comme ca ceux qui cherchent a faire pareil auront un exemple pour chercher

  13. #33
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    Je met en ligne une version simplifié qui consiste en une seulle fonction pour recopier les X et Y.





    Cependant j'ai une question, je voudrais savoir comment faire une seule et unique fonction que l'on active une fois qui s'occupe de récupérer les données de chaque box et la recopier dans le label en dessous. J'ai besoin de mètre une seule fonction de récupération de box dans mon programme car il me faut associer chaque contenu de box a une variable dan un de mes programmes (une fois les box et variables associées correctement la fonction lancerais le calcul). Mais je n'ai pas réussi a trouver seul comment faire en sorte qu'une fonction aille créer une liste pour chaque pFrame utilisé pour y récupérer le contenu des box.... Pouvez vous m'aider s'il vous plait? Merci.

    Quand cela marcheras je pourrais poster dans ce topic la version avec une unique fonction pour que d'autres qui sont bloqués sur ce problème puissent avancer. En ésperant que tout mes problèmes que vous m'avez grandement aidé a résoudre puissent servir a des fins éducatifs.


    La forme que j'imagine pour la fonction unique qui recopie chaque donnée:

    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
    94
    95
     
    void on_copier_button(GtkWidget *pButton_valeur, gpointer data)
    {
    GtkWidget *pTempEntry0;
    GtkWidget *pTempLabel;
    GtkWidget *pTempLabel0;
    GList *pList;
    const gchar *sText;
    gchar *modified_text;
    gdouble number;
    float number2;
     
      /* Recuperation de la liste des elements que contient la GtkVBox */
     
      pList = gtk_container_get_children(GTK_CONTAINER(pVBoxFrame1));
     
    /// X
     
      /* Le premier element est le GtkLabel */
     
      pTempLabel0 = GTK_WIDGET(pList->data);
     
     
      /* On passe au pointeur suivant */
      pList = g_list_next(pList);
     
     
      /* Cet element est le GtkEntry */
     
      pTempEntry0 = GTK_WIDGET(pList->data);
     
     /* On passe au pointeur suivant */
      pList = g_list_next(pList);
     
        /* Le premier element est le GtkLabel */
     
      pTempLabel = GTK_WIDGET(pList->data);
     
     
     
     
    /* Recuperation du texte contenu dans le GtkEntry */
    sText = gtk_entry_get_text(GTK_ENTRY(pTempEntry0));
     
    /* Conversion chaine -> valeur numérique */
    number = g_strtod (sText, NULL);
     
    /* Liberation de la memoire utilisee par la liste */
    g_list_free(pList);
     
    /// Passage au pFrame 2 dans la List
     
    /* Recuperation de la liste des elements que contient la GtkVBox */
     
      pList = gtk_container_get_children(GTK_CONTAINER(pVBoxFrame2));
     
    /// X
     
      /* Le premier element est le GtkLabel */
     
      pTempLabel0 = GTK_WIDGET(pList->data);
     
     
      /* On passe au pointeur suivant */
      pList = g_list_next(pList);
     
     
      /* Cet element est le GtkEntry */
     
      pTempEntry0 = GTK_WIDGET(pList->data);
     
     /* On passe au pointeur suivant */
      pList = g_list_next(pList);
     
        /* Le premier element est le GtkLabel */
     
      pTempLabel = GTK_WIDGET(pList->data);
     
     
     
     
    /* Recuperation du texte contenu dans le GtkEntry */
    sText = gtk_entry_get_text(GTK_ENTRY(pTempEntry0));
     
    /* Conversion chaine -> valeur numérique */
    number = g_strtod (sText, NULL);
     
    /* Liberation de la memoire utilisee par la liste */
    g_list_free(pList);
     
     
    /// etc ...  Les autres pFrame
     
     
    }
    Fichiers attachés Fichiers attachés

  14. #34
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Idée la plus simple:
    • Créer une structure qui va contenir tous les widgets utilisés dans l'interface.
    • Déclarer un variable du type de cette structure et initialiser chaque pointeur.
    • Transmettre en tant que données utilisateur cette variable à tous les Callback et fonctions qui ont besoin d'accéder à un widget de l'interface.

  15. #35
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    Etant novice, je vais poser quelques questions...

    * Créer une structure qui va contenir tous les widgets utilisés dans l'interface.
    Quel genre de structure svp?
    est-ce ?:
    int nomdestructure (int argc, char **argv)
    {
    }

    * Déclarer un variable du type de cette structure et initialiser chaque pointeur.
    Une Glist adapté à la structure en question?
    Admettons que ce que j'ai écris juste au dessus soit une structure, comment puis-je déclarer une Glist qui copie un pFrame déterminé dans une autre structure au-dessus? Car j'ai remarqué que l'erreur est que le pFrame en question ne se trouve pas dans la même structure. Est ce que je peut faire appel au contenu d'un widget extérieur à ma structure???? Si oui, quel est la syntaxe adapté pour le faire svp?

    * Transmettre en tant que données utilisateur cette variable à tous les Callback et fonctions qui ont besoin d'accéder à un widget de l'interface.
    Comment peut on faire cela?

    Si quelqu'un a de la documentation à partager svp ca ne serais pas de refus... Car à la bibliothèque universitaire il n'y a pas de documentation sur GTK

  16. #36
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Citation Envoyé par zaku22 Voir le message
    Quel genre de structure svp?
    est-ce ?:
    int nomdestructure (int argc, char **argv)
    {
    }
    Non, ça c'est une fonction.

    Citation Envoyé par zaku22 Voir le message
    Si quelqu'un a de la documentation à partager svp ca ne serais pas de refus... Car à la bibliothèque universitaire il n'y a pas de documentation sur GTK
    Toute la documentation nécessaire est sur http://library.gnome.org
    Tu y trouveras entre autre la doc GTK+ et GLib.

  17. #37
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    ok merci je vais plancher desus!

    sinon j'ai trouvé un site sympa mais assez compliqué (en Anglais): http://asis.epfl.ch/GNU.MISC/gtk-1.2...oc.html#TOC416

    Faut avouer que les cours que j'ai eu en C était plutôt minimalistes... :/
    Mais je vais rattraper ce retard! ^^

  18. #38
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par zaku22 Voir le message
    sinon j'ai trouvé un site sympa mais assez compliqué (en Anglais): http://asis.epfl.ch/GNU.MISC/gtk-1.2...oc.html#TOC416
    La librairie Gtk+ a été conçue au départ pour la création de The Gimp. Elle a ensuite pris son essor grâce à son utilisation pour l'environnement Gnome.

    Le lien que tu donnes fait partie du développement de The Gimp. Attention tout de même en titre. Il est écrit l'année 1998. Donc sûrement plus qu'obsolète.

  19. #39
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Oublie, ce lien c'est pour GTK 1.2, sorti en 1999. Depuis, GTK 2 est sorti en 2002, et GTK 3 sortira normalement en avril 2011. Plus personne n'utilise GTK1 pour de nouveaux programmes. Le plus simple actuellement est de coder en GTK2...

  20. #40
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Télescopages de posts Liberforce

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/05/2008, 09h53
  2. Récupération de données pour mettre dans un fichier .txt
    Par lince102 dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 24/01/2008, 11h29
  3. Récupération de données de formulaire dans une fenetre fille
    Par xave dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/01/2008, 16h22
  4. [SQL] Récupération de données et Insert dans une table
    Par heteroclite dans le forum PHP & Base de données
    Réponses: 32
    Dernier message: 12/07/2006, 16h17
  5. Réponses: 2
    Dernier message: 04/06/2006, 20h11

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