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

Eclipse Platform Discussion :

[RCP] Remplir un TableViewer d'une Vue depuis une Action


Sujet :

Eclipse Platform

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut [RCP] Remplir un TableViewer d'une Vue depuis une Action
    Bonjour,

    Développant toujours mon application RCP (voir mes autres posts de détresse ), je dois afficher un tableau (TableViewer) rempli de noms de fichiers (TableItem) , de dates, etc...
    J'ai donc créé le tableau vide dans une vue (ContenuView.java), avec les colonnes nommées, puis je m'attaque à l'action qui permettra de remplir ce tableau (DisplaySpaceAction.java).
    L'action et la vue étant séparées, je ne sais pas comment accéder au tableau, pour ajouter des items.

    Voici un extrait de 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
    public void createPartControl(Composite parent) {
            FillLayout layout = new FillLayout();
            layout.marginHeight = 0;
            layout.marginWidth = 0;
            parent.setLayout(layout);
     
            tableViewer = new TableViewer(parent, SWT.FULL_SELECTION);
            tableViewer.setUseHashlookup(true);
     
            String[] column = new String[] {"Nom","Date de création","Propriétaire","Aperçu"};
     
            for (int i = 0; i < column.length; i++) {
                TableColumn c = new TableColumn(tableViewer.getTable(), SWT.LEFT);
                c.setText(column[i]);
                c.setWidth(100);
            }
    }
    Par contre pour l'action, je ne sais pas comment m'y prendre pour ajouter les items que je veux à ce tableViewer.
    J'avais également pensé réunir le tout (déclaration du TableViewer et des colonnes, ainsi que le remplissage du table) dans l'action, mais la vue deviendrait alors quasiment inutile.

    J'espère avoir été assez clair, merci de votre aide.

  2. #2
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    Tu peux coder des actions qui seront reliées directement aux menus de ta vue à l'intérieur de la classe qui contient ta 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
    
    protected List actionList = null;
    
    public void createPartControl(Composite parent)
    {
     
    
    
    windowCanvas =
    new SWTWindowCanvas(parent);
    makeActions(); contributeToActionBars(); registerPartListener(); loadSpecificProgram();
    }
    private void contributeToActionBars() {
    IActionBars bars = getViewSite().getActionBars(); fillLocalPullDown(bars.getMenuManager()); fillLocalToolBar(bars.getToolBarManager());
    } private void fillLocalToolBar(IToolBarManager menuManager) {
    Iterator iter = actionList.iterator(); while (iter.hasNext())
    menuManager.add((IAction)iter.next());
    }
    private void fillLocalPullDown(IMenuManager menuManager) {
    Iterator iter = actionList.iterator(); while (iter.hasNext())
    menuManager.add((IAction)iter.next());
    }
    La fonction addAction ne fait qu'ajouter une action à la liste de ta vue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    addAction(new OpenGenericAppAction(this, "Open Generic App", "Open Generic App"));
    
    Par la suite, ton action reçoit un objet de ta vue en paramètre et peut alors générer des actions conséquentes à cette vue dans sa fonction run().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import org.eclipse.jface.action.Action;
    
    public class OpenGenericAppAction extends Action
    {
     
    
    
    public OpenGenericAppAction(AbstractViewPart inView, String inText, String inToolTipText)
    }
    J'espère que ça peut t'aider.
    RCP rulez!

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Hmm, je comprends pas tellement...
    Tu peux coder des actions qui seront reliées directement aux menus de ta vue à l'intérieur de la classe qui contient ta vue.
    De quels menu parle-tu ?

    En fait, je veux juste remplir un tableau. Mon problème est de trouver comment accéder à ce tableau depuis une action extérieure à la vue pour ajouter des Items.

    EDIT: Hum, je me demande pourquoi j'ai mis ce topic dans Eclipse... ça n'a pas réellement de rapport... Il aurait plus sa place dans Interface Graphique ou Général...

  4. #4
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    Chaque vue possède deux menus, un qui se situe à côté de l'onglet et un "dropdown" accessible par une flèche vers le bas (toujours à côté de l'onglet). Ces menus, tu peux les coder (ajouter des actions) à l'intérieur de la classe qui définit ta vue. Ces actions pourront donc avoir accès à ta vue sans diffiicultés.

    Moi je crois comprendre ce que tu veux faire: avoir une action dans le workbench qui change l'état de ta vue. Mais ça c'est pas une bonne idée. Parce que t'as aucun lien entre ton action et ta vue. Faut que tu revois ton concept.

    Bonne chance.
    RCP rulez!

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je développe une application qui permet à un utilisateur identifié d'accéder à une sorte de plate forme de fichiers, qui permet de mettre à disposition des fichiers entre les utilisateurs.
    J'ai donc une arborescence dans une vue, et un tableau dans une autre (et d'autres vues bien sûr). Je voulais que lorsque l'utilisateur clique sur un répertoire dans l'arborescence, que le contenu du répertoire soit affiché dans le tableau.
    En gros, je ne passe pas par les menus dont tu parles. Mais le fait de cliquer sur un répertoire dans l'arborescence, enclencherait une action, qui remplirait alors le tableau.

  6. #6
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    Ah, ben là c'est pas pareil. Maintenant je vois clair. Ce que je comprends maintenant c'est que tu as besoin du service de SelectionProvider/SelectionListener de la plateforme d'Eclipse pour réaliser ce que tu désires. Tu n'as pas besoin d'une action pour exécuter ça.

    Regarde cet article: http://www.eclipse.org/articles/Arti...s/article.html (très bon).
    RCP rulez!

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Merci, c'est bien ça qu'il me faut.

    Maintenant, je vais essayer de comprendre comment ça fonctionne.

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Mon problème a pas mal avancé, j'arrive à récupérer le nom et l'adresse du répertoire (représenté par un TreeParent dans mon TreeViewer). Maintenant, quand je clique, ca devrait ouvrir une vue avec le contenu du répertoire... mais ça ne marche pas...
    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
            viewer.addDoubleClickListener(new IDoubleClickListener(){
            public void doubleClick(org.eclipse.jface.viewers.DoubleClickEvent event){
                try {
                    TreeParent s = null;
                    Space sp = null;
                    try {                
                        s = (TreeParent)((StructuredSelection)event.getSelection()).getFirstElement();
                        sp = new Space(s.getID(),s.getName());
                    } catch(Exception e){
                        e.printStackTrace();
                        s = null;
                    }
                    Global.getInstance().setPosition(s.getID());
                    IEditorInput input = new DisplaySpaceInput(sp);
                    getViewSite().getWorkbenchWindow().getActivePage().openEditor(input,ContenuView.ID);
                    MessageDialog.openInformation(getSite().getShell(),"Ouverture","Normalement, ça ouvre la vue principale avec le contenu du rep sélectionné");
                }catch (Throwable e){
                    System.out.println("Erreur: "+e);
                }    
            }
        });
    Ce code est inspiré du sample d'Eclipse, qui affiche des nom de contact dans une table à gauche, et lorsque l'ont double clique dessus, ça ouvre un éditeur dans une nouvelle 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
    viewer.addDoubleClickListener(new IDoubleClickListener(){
                public void doubleClick(org.eclipse.jface.viewers.DoubleClickEvent event){
                    try {
                        Contact c = null;
                        try {
                            c = (Contact)((StructuredSelection)event.getSelection()).getFirstElement();
                        } catch(Exception e){
                            e.printStackTrace();
                            c = null;
                        }
                        IEditorInput input = new ContactEditorInput(c);
                        getViewSite().getWorkbenchWindow().getActivePage().openEditor(input,ContactsEditor.ID);
                    }catch (Throwable e){
                        e.printStackTrace();
                    }
     
                }
            });
    Dans le sample, ça fonctionne bien évidemment, mais pas dans mon programme. Lorsque je double clique, la variable input se remplit bien avec un object de type Space, qui correspond au nom et à l'adresse du répertoire, le Dialog s'ouvre bien, mais la vue en revanche ne s'ouvre pas ...
    Je ne comprends donc pas trop le problème...

  9. #9
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    Citation Envoyé par DarkHope
    Dans le sample, ça fonctionne bien évidemment, mais pas dans mon programme. Lorsque je double clique, la variable input se remplit bien avec un object de type Space, qui correspond au nom et à l'adresse du répertoire, le Dialog s'ouvre bien, mais la vue en revanche ne s'ouvre pas ...
    Je ne comprends donc pas trop le problème...
    Si l'éditeur ne s'ouvre pas tu dois sûrement catcher une erreur de type PartInitException comme ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    
    try {
    page.openEditor(input, GEFPlayEditorPart.
    EDITOR_ID, true);
    } catch (PartInitException error) {
    error.printStackTrace();
    }
    Rajoutes ce catch avant ton catch (Throwable e) pour voir. Si tu l'attrappes, c'est bel et bien l'ouverture de l'éditeur qui pause problème.
    RCP rulez!

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Honte à moi, en fait j'essayais d'ouvrir un editor... alors que c'est une view...
    J'ai donc remplacé par:
    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
    viewer.addDoubleClickListener(new IDoubleClickListener(){
            public void doubleClick(org.eclipse.jface.viewers.DoubleClickEvent event){
                try {
                    if ( ((StructuredSelection)event.getSelection()).getFirstElement().getClass() == TreeParent.class){
                        TreeParent s = null;
                        try {                
                            s = (TreeParent)((StructuredSelection)event.getSelection()).getFirstElement();
                        } catch(Exception e){
                            e.printStackTrace();
                            s = null;
                        }
                        Global.getInstance().setPosition(s.getID());
                        IViewPart viewPart = getViewSite().getWorkbenchWindow().getActivePage().findView(ContenuView.ID);
                        getViewSite().getWorkbenchWindow().getActivePage().hideView(viewPart);
                        getViewSite().getWorkbenchWindow().getActivePage().showView(ContenuView.ID);
     
                    }else{
                         MessageDialog.openInformation(getSite().getShell(),"Ouverture","Ouvre le fichier");
                    }
                }catch (Throwable e){
                    System.out.println("Erreur: "+e);
                }    
            }
        });
    Qui fonctionne à merveillel.
    Seul bémole (de taille): pour rafrachir ma vue (quand je change les items, au changement de répertoire), je n'ai pas trouvé d'autres moyen fonctionnel que de la cacher puis la rouvrir... D'une part je pense que c'est moins bien au niveau performance, d'autre part c'est moche de voir la vue se fermer et se rouvrir...

    Comment puis-je appeler la méthode refresh pour ma table au lieu de devoir la fermer puis l'ouvrir ?

  11. #11
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    C'est juste une idée, mais tu peux peut-être mettre le refresh de ta table dans la fonction setFocus() de ta vue. Cette fonction devrait être appelée lorsque tu l'ouvres.
    RCP rulez!

  12. #12
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Ca ne fonctionne pas. Ca semble normal, puisque si la fonction setFocus est appelée à l'ouverture de la vue, elle l'est avant que je sélectionne un répertoire dans mon arborescence.

  13. #13
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    Avant de faire ton refresh, tu n'as qu'à vérifier si une nouvelle sélection a été faite.
    RCP rulez!

  14. #14
    Futur Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je peux essayer de vérifier si une variable globale, qui représente le répertoire où est situé l'utilisateur, est différente de la variable à la création de la vue.
    Faut que je vois comment organiser ça. Merci des conseils.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 26
    Points
    26
    Par défaut RCP TableViewer
    Salut,
    je suis un peu dans le meme cas que toi, je dois ajouter une vue qui afficherais des icones contenues dans des dossiers, je listerais chaque dossier dans un onglet (grace a un TabFolder). Je ne sais pas trop comment utiliser tout celà, j'avoue que je mélange un peu tout...Reprendre le code de qqun d'autres est pas toujours évident...En gros j'ai des morceaux de codes que je dois integrer...

    Voici une methode qui me permet de créer une table d'icones a partir d'un UIIconGroup en paramètre (Vector d'objets UIIconItem: Image icon & String nom), ça retourne un Composite:

    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
     
    private Composite createTable(TabFolder folder, UIIconGroup oIconGroup) {
     
    		ScrolledComposite scroller = new ScrolledComposite(folder, SWT.V_SCROLL | SWT.H_SCROLL);
     
    		final Composite composite = new Composite(scroller, SWT.NONE);
    		composite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));    
     
    		GridLayout gridLayout = new GridLayout();
    		gridLayout.numColumns = 3;
    		gridLayout.makeColumnsEqualWidth = false;
    		gridLayout.verticalSpacing = 0;
     
    		composite.setLayout(gridLayout);
     
    		Vector vtItems = oIconGroup.getItems();
    		//final String sFolderName = oIconGroup.getFolderName();
    		//vtItems = UIUtilities.sortList(vtItems);
    		int count = vtItems.size();
    		//UIIconItem oItem = null;
    		for (int i=0; i<count; i++) {
    			final UIIconItem oItem = (UIIconItem)vtItems.elementAt(i);
    			final Label label1 = new Label(composite, SWT.LEFT);
    			label1.setImage(oItem.getImage());
    			label1.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
     
    				final DragSource dragSource = new DragSource(label1, DND.DROP_COPY);
    				Transfer[] formats = new Transfer[] { TextTransfer.getInstance()};
    				dragSource.setTransfer(formats);
    				dragSource.addDragListener(new DragSourceListener() {
    					public void dragStart(DragSourceEvent event) {
    						event.doit = true;
    					}
     
    					public void dragSetData(DragSourceEvent event) {
    						if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
    							String sData = oItem.getImageString();
    							String sTemplate = oItem.getImageString();
    							if (!sTemplate.equals("")) {
    								sData += "&&"+sTemplate;
    							}
    							event.data = sData;        
    						}
    					}
    					public void dragFinished(DragSourceEvent event) {}
    				});
     
    			label1.addDisposeListener(new DisposeListener() {
    				public void widgetDisposed(DisposeEvent e) {
    					dragSource.dispose();
    				}
    			});
    			Label S1 = new Label(composite, SWT.SEPARATOR|SWT.VERTICAL);
    			GridData data = new GridData(GridData.VERTICAL_ALIGN_FILL);
    			data.verticalSpan = 1;
    			S1.setLayoutData(data);
    			Label label2 = new Label(composite, SWT.LEFT);
    			label2.setText(oItem.getName());
    			label2.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
    			Label S2 = new Label(composite, SWT.SEPARATOR|SWT.HORIZONTAL);
    			GridData data2 = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
    			data2.horizontalSpan = 3;
    			S2.setLayoutData(data2);
    		}
     
    		scroller.setContent(composite);    
    		scroller.setExpandHorizontal(true);
    	    scroller.setExpandVertical(true);
    	    scroller.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
     
    	return scroller;
    	}
    Cette methode n'est pas de moi et je ne sais pas comment relier tu ça (Composite, TableFolder) dans ma vue...

    Que dois-je ecrire dans la methode CreatePartControl pour qu'un Composite créé par la methode précédente s'affiche en onglet ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void createPartControl(Composite parent) {
     
            //    ???
     
            makeActions();
    	contributeToActionBars();		
    }

    Merci

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 18
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Jean-Philippe Shields
    Moi je crois comprendre ce que tu veux faire: avoir une action dans le workbench qui change l'état de ta vue. Mais ça c'est pas une bonne idée. Parce que t'as aucun lien entre ton action et ta vue. Faut que tu revois ton concept.

    Bonne chance.
    Juste pour mon information personnelle , n'aurait-il pas été possible de mettre le TableViewer en attribut static à la vue pour qu'il soit accessible par n'importe quelle classe ?

  17. #17
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    Citation Envoyé par Cyrion
    Juste pour mon information personnelle , n'aurait-il pas été possible de mettre le TableViewer en attribut static à la vue
    Oui bien sûr

    Citation Envoyé par Cyrion
    pour qu'il soit accessible par n'importe quelle classe ?
    Le problème ici est de récupérer l'instance de la classe qui possède le TableViewer. J'ai vu dernièrement un bout de code qui récupère cette référence grâce à l'interface IPartListener2. L'utilisation de cette technique aurait pu "hacker" le problème pour obtenir un fonctionnement immédiat. Mais du point de vue de la programmation OO, cette technique est définitivement peu extensible et conduira certainement à d'autres problèmes dans l'avenir.
    RCP rulez!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2015, 17h16
  2. [Plug-in] Ecrire dans une vue depuis une class Handler
    Par bulldo dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 05/03/2011, 00h45
  3. [RCP] Une vue dans une vue ?
    Par holypraal dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 28/04/2010, 12h40
  4. Ecrire du texte depuis une variable dans une vue
    Par Vlad_Oliv dans le forum MFC
    Réponses: 1
    Dernier message: 09/01/2007, 17h28
  5. Réponses: 3
    Dernier message: 16/01/2006, 16h02

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