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 :

Comment créer une vue avec des paramètres (objets) ?


Sujet :

Eclipse Platform

  1. #1
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut Comment créer une vue avec des paramètres (objets) ?
    Bonjour,

    Je débute dans le développement d'application RCP et j'ai une question sans doute simple, mais qui me pause beaucoup de problèmes.

    Pour faire simple :
    A gauche j'ai un TreeViewer, à droite j'ai des onglets (ViewPart).
    Depuis l’arbre, l'utilisateur peut créer un nouvel onglet, lequel a besoin d'informations qui lui seront données par la sélection de l'utilisateur.

    Le TreeViewer est créé avec des TreeObject qui représentent des fichiers et des TreeParent qui représentent des dossiers.
    L'utilisateur peur sélectionner un TreeParent dans le TreeViewer et créer un onglet grâce aux informations contenues dans ce TreeParent.

    J'ai une classe Dialog qui étend ViewPart, c'est la vue de l'onglet.

    J'ai une classe NouvelOngletAction qui étend Action et me permet de créer un onglet, là je crée une instance de NouvelOngletAction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
    IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    ongletAction = new NouvelOngletAction(window, label, Detail.ID);
    //
    // Quand je veux créer un nouvel onglet :
    //
    ongletAction.setTreeParent(treeParent);
    ongletAction.run();
    La méthode run de NouvelOngletAction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void run() {
        if(window != null) {    
            try {
                IViewPart part = window.getActivePage().showView(Detail.ID, Integer.toString(instanceNum++), IWorkbenchPage.VIEW_ACTIVATE);
                ((Detail)part).setTreeParent(treeParent);
                ((Detail)part).setInput();
            } catch (PartInitException e) {
                MessageDialog.openError(window.getShell(), "Error", "Error opening view:" + e.getMessage());
            }
        }
    }
    Donc j'envoie à mon action un objet TreeParent, quand j’exécute l'action une View est créé avec l'objet TreeParent.

    Dans ma classe qui étend ViewPart (la vue de l'onglet) dans createPartControl, je ne fais pas de treeViewer.setInput.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    treeViewer = new TreeViewer(composite, SWT.BORDER);
    treeViewer.setContentProvider(new ViewContentProvider());
    treeViewer.setLabelProvider(new ViewLabelProvider());
    Ensuite en récupérant le IViewPart que retourne le showView, j'appelle la méthode setTreeParent en envoyant le TreeParent nécessaire pour créer l'onglet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setTreeParent(TreeParent treeParent){
        setPartName(treeParent.getName());
        this.treeParent = treeParent;
    }
    Et ensuite j'appelle la méthode setInput :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void setInput(){
        treeViewer.setInput(treeParent);
    }
    Ça fonctionne bien.
    Le problème intervient quand je quitte puis redémarre l'application.

    Les onglets sont vides.
    Ils ont pourtant gardé le nom qui leur avait été donné dans setTreeParent.
    Bien que le nom change quand je clique sur un onglet.

    Quelqu'un saurait-il me dire si ma méthode est bonne pour créer une vue avec un Object ?
    Et comment puis-je faire pour que le TreeParent de chaque instance de la classe qui étend ViewPart soit sauvegardé et que les onglets puissent être recréés lors du démarrage ?

    Merci d'avance pour votre aide.
    Keith Flint 1969 - 2019

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Citation Envoyé par thierrybenji Voir le message
    Le problème intervient quand je quitte puis redémarre l'application.

    Les onglets sont vides.
    Ils ont pourtant gardé le nom qui leur avait été donné dans setTreeParent.
    Bien que le nom change quand je clique sur un onglet.

    Quelqu'un saurait-il me dire si ma méthode est bonne pour créer une vue avec un Object ?
    Et comment puis-je faire pour que le TreeParent de chaque instance de la classe qui étend ViewPart soit sauvegardé et que les onglets puissent être recréés lors du démarrage ?

    Merci d'avance pour votre aide.
    Ce ne sont pas des vues qu'il te faut utiliser. Ce sont des IEditorPart. La différence majeure entre une vue et un éditeur, c'est qu'un éditeur va permettre de faire la sauvegarde et la récupération de tes objets (une vue peut le faire aussi, mais je trouve ça plus déplacé). Tu peux jeter un œil sur la FAQ Eclipse.
    Tu vas donc pouvoir ouvrir un éditeur avec ses objets d'entrées directement sans passer par une méthode que tu auras explicitement créer dans ta classe.
    En pratique, un éditeur se déclare comme une vue dans le plugin.xml (avec une extension du point d'extension org.eclipse.ui.editors). Dans la partie "class" tu vas renseigner ta classe qui étend IEditorPart (ou qui hérite de EditorPart). Puis tu vas définir une classe qui hérite de IEditorInput.
    Ils s'ouvrent à peu-prêt de la même façon que les vues:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PlaftormUI.getWorkbench().getActiveWorkbenchWindow()
        .getActivePage().openEditor(new MyEditorInput(), "my.editor.id");
    Dans la méthode createPartControl() de ton éditeur, tu auras accès à son IEditorInput grâce à la méthode getEditorInput().

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    J'ai le même problème mais dans un cas plus simple.
    J'ai une classe qui étend également ViewPart.
    Avec à l'intérieur un Browser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import org.eclipse.ui.part.ViewPart;
    import org.eclipse.swt.browser.Browser;
    J'ai besoin d'une String contenant le chemin vers un fichier HTML.
    Mais je n'y arrive pas, dans le run de mon Action j'ai quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IViewPart part = window.getActivePage().showView(viewId, viewId+instanceNum++, IWorkbenchPage.VIEW_ACTIVATE);
    Ça créer bien un nouvel onglet, mais je ne lui ai pas passé le path du fichier.

    J'imagine que c'est vraiment un problème de débutant, je veux juste que la méthode createPartControl ait accès à des objets que je lui aurai transmis auparavant.

    Ici je ne peux pas utiliser mon bricolage en décalant les setInput.
    Comment dois-je procéder pour donner une String à une instance de ma classe qui étend ViewPart avant l’exécution de createPartControl ?

    Merci d'avoir lu ce post.

    ======================================================================
    Edit :
    Merci Gueritarish je vais voir ça tout de suite.
    Keith Flint 1969 - 2019

  4. #4
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    Ok alors j'essaie d'utiliser l'exemple de ce tutoriel : http://www.vogella.com/articles/Ecli...s/article.html

    Donc j'ai une classe qui étend EditorPart et une classe qui implémente IEditorInput.

    Pour l'instant je n'arrive encore à rien, mais je vais continuer d'essayer.
    J'ai du mal à démarrer en Java RCP.
    Keith Flint 1969 - 2019

  5. #5
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut Les onglets ne sont pas créé là où il faut
    Bonsoir.

    Maintenant j'arrive à créer un onglet (ViewPart avec un Brower à l'intérieur) avec un objet que je donne dans le constructeur de ma classe qui implémente IEditorInput.

    Par contre quand je redémarre l'application, les onglets ne sont plus là.

    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
    public class TestInput implements IEditorInput {
     
    	private TreeObject treeObject;
     
    	public TestInput(TreeObject treeObject){
    		this.treeObject = treeObject;
    	}
     
    	public TreeObject getTreeObject(){
    		return treeObject;
    	}
     
    	@Override
    	public Object getAdapter(Class adapter) {
    		return null;
    	}
     
    	@Override
    	public boolean exists() {
    		return true;
    	}
     
    	@Override
    	public ImageDescriptor getImageDescriptor() {
    		return null;
    	}
     
    	@Override
    	public String getName() {
    		return null;
    	}
     
    	@Override
    	public IPersistableElement getPersistable() {
    		return null;
    	}
     
    	@Override
    	public String getToolTipText() {
    		return null;
    	}
     
    }
    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
    public class TestEditorPart extends EditorPart {
    	public static final String ID = "ProjetRCP.testEditorPart";
    	private String path;	
    	private TestInput input;
     
    	@Override
    	public void doSave(IProgressMonitor monitor) {
    	}
     
    	@Override
    	public void doSaveAs() {
    	}
     
    	@Override
    	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
    		this.input = (TestInput) input;
    		TreeObject obj = this.input.getTreeObject();
     
    	    setSite(site);
    	    setInput(input);
     
    	   path = obj.getPath();
    	   setPartName("Person ID: " + obj.getName() );
     
    	}
     
    	@Override
    	public boolean isDirty() {
    		return false;
    	}
     
    	@Override
    	public boolean isSaveAsAllowed() {
    		return false;
    	}
     
    	@Override
    	public void createPartControl(Composite parent) {
    		Browser browser = new Browser(parent, SWT.NONE);
    		File file = new File(path);
     
     
    	    String buffer = "";
    	    String html = "";
    	    System.out.println("filepath : "+path);
    		try {
    			FileInputStream nomLogique;
    			nomLogique = new FileInputStream (file);
    			InputStreamReader ligne = new InputStreamReader (nomLogique);
    		    BufferedReader bufferLigne = new BufferedReader (ligne);
     
    		    while ((buffer = bufferLigne.readLine()) != null)   {
    		    	  html += buffer;
    		    }
    		    buffer += bufferLigne.readLine();
     
    		    bufferLigne.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
     
    		browser.setText(html);
    	}
     
    	@Override
    	public void setFocus() {
    	}
     
    }
    J'image que je dois utiliser les méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public void doSave(IProgressMonitor monitor) 
    public boolean isSaveAsAllowed()
    Ou quelque chose dans le genre, mais pour l'instant j'ai rien trouvé.
    En tout cas c'est chouette, la méthode init est appelé avant createPartControl.

    S'il vous plait, pourriez-vous me donner quelques indications ?
    Merci d'avance.
    Au revoir.

    ========== EDIT ==========
    Avant je faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.getActivePage().showView(viewId, viewId+instanceNum++, IWorkbenchPage.VIEW_ACTIVATE);
    Et les onglets apparaissaient à l'endroit prévu.
    Maintenant je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.getActivePage().openEditor(input, TestEditorPart.ID);
    Et les onglets sont au mauvais endroit.

    Dans Perspective :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    folder.addPlaceholder(DetailEditorPart.ID + ":*");
    folder.addPlaceholder(TestEditorPart.ID + ":*");
    J'ai également fais des views :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <view
    	name=""
    	allowMultiple="true"
    	icon="icons/sample2.gif"
    	class="projetrcp.DetailEditorPart"
    	id="ProjetRCP.detailEditorPart">
    </view>
    <view
    	name="HTML"
    	allowMultiple="true"
    	icon="icons/html.png"
    	class="projetrcp.TestEditorPart"
    	id="ProjetRCP.testEditorPart">
    </view>
    Mais je sais pas showView et openEditor ne font pas la même chose.
    Keith Flint 1969 - 2019

  6. #6
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Pour ton premier problème (la réouverture des éditeurs), c'est dû à ton implémentation de IEditorInput. En effet, pour pouvoir sauvegarder l'état de l'éditeur, la plateforme a besoin de:
    • une implémentation d'IEditorInput qui ne renvoie pas null dans sa méthode getPersistableElement(). C'est ce IPersistableElement qui va permettre la sauvegarde et la récupération du contenu de l'éditeur. Deux méthodes sont à noter dans ce IPersistableElement:
      • la première, getFactoryId(), sert à donner l'identifiant de la factory IElementFactory qui va être responsable de la récupération de ton IEditorInput (à la réouverture de l'éditeur). J'aborde l'IElementFactory dans la suite.
      • la seconde, saveState(final IMemento memento), va te permettre de sauvegarder ton input dans un IMemento. Il faut voir un memento comme un objet DOM dans lequel on ajoute les éléments nécessaire à la reconstruction de ton input.
    • créer une IElementFactory. Pour ce faire, il faut ajouter une extension factory au point d'extension org.eclipse.ui.elementFactories. Cette extension va demander un id (le fameux qu'il faut indiquer dans le IPersistableElement) et une classe à implémenter. Cette classe doit implémenter IElemetnFactory. Cette interface ne définit qu'une méthode qui créé un élément IAdaptable (donc, dans ton cas un IEditorInput) à partir d'un IMemento.

    Tout ça paraît un peu long, mais c'est relativement facile à mettre en place
    Pour ce qui est du partName, il te suffit de le mettre en place dans la méthode getName() de ton IEditorInput (plus pratique et appelé automatiquement).

    Pour ton second problème, les éditeurs ne peuvent s'ouvrir que dans la zone d'édition (sauf à partir d'Eclipse 4.X)
    Du coup, ta customisation de la perspective ne sert à rien (le ":*" ne servant que pour les vues multiples)

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  7. #7
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    Merci Gueritarish.

    Je vais essayer d'implémenter ça dans mon IEditorInput, cela dit, je crois que je n'ai pas besoin de sauvegarder les onglets finalement.

    Ok alors qu'il est impossible que les views et les editors soit affiché au même endroit.
    Mais je n'arrive pas à me débarrasser des vues.

    Dans ma classe Perspective :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void createInitialLayout(IPageLayout layout) {
    	String editorArea = layout.getEditorArea();
    	layout.setEditorAreaVisible(false);
     
     
    	layout.addStandaloneView(NavigationView.ID,  false, IPageLayout.LEFT, 0.25f, editorArea);
     
    	IFolderLayout folder = layout.createFolder("messages", IPageLayout.TOP, 0.5f, editorArea);
    	folder.addPlaceholder(View.ID + ":*");
    	folder.addPlaceholder(DetailEditorPart.ID + ":*");
    	folder.addPlaceholder(TestEditorPart.ID + ":*");
     
    	layout.getViewLayout(NavigationView.ID).setCloseable(false);
    }
    Donc là vous venez de me dire que ces 2 lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    folder.addPlaceholder(DetailEditorPart.ID + ":*");
    folder.addPlaceholder(TestEditorPart.ID + ":*");
    ne servent à rien.
    J'ai essayé d'enlever le IFolderLayout, mais il s'affiche toujours lors de l’exécution.
    J'ai mal enlevé ça de plugin.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <view
    	name="Message"
    	allowMultiple="true"
    	icon="icons/sample2.gif"
    	class="projetrcp.View"
    	id="ProjetRCP.view">
    </view>
    Dois-je mettre :layout.setEditorAreaVisible(true);?

    Merci pour ces éclaircissements.
    Je comprend certaines choses grâce à vous et ça m'aide énormément.

    ========== EDIT ==========
    En image ça donne ça :




    Je n'arrive pas à virer la barre en haut, elle attend des onglets views, mais je ne sais pas où je lui ai dit de s'afficher.
    Keith Flint 1969 - 2019

  8. #8
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    J'ai fini par trouver la source du problème.
    Dans Eclipse j'ai supprimé le dossier runtime de mon projet et maintenant l'affichage fonctionne comme je le souhaitais.
    Keith Flint 1969 - 2019

  9. #9
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    Mon problème n'est pas encore totalement résolu, j'ai pu avancer et corriger des erreurs que j'avais réalisé, mais il me reste encore des questions au sujet du passage de paramètres.

    Je me base sur un nouveau Plugin Project avec la template "RCP mail template" d'Eclipse.

    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
    public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
        private OpenViewAction openViewAction;
     
        public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
            super(configurer);
        }
     
        protected void makeActions(final IWorkbenchWindow window) {
            openViewAction = new OpenViewAction(window, "Open Another Message View", View.ID);
            register(openViewAction);
        }
     
        protected void fillMenuBar(IMenuManager menuBar) {
            MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE);
     
            menuBar.add(fileMenu);
     
            fileMenu.add(openViewAction);
        }
     
        protected void fillCoolBar(ICoolBarManager coolBar) {
            IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
            coolBar.add(new ToolBarContributionItem(toolbar, "main"));   
            toolbar.add(openViewAction);
        }
    }
     
    public interface ICommandIds {
        public static final String CMD_OPEN_MESSAGE = "package.openMessage";
    }
     
    // plugin.xml
    <command
        name="Open Message Dialog"
        description="Open a message dialog"
        categoryId="package.category"
        id="package.openMessage">
    </command>
    Depuis le menu File et depuis la barre d'outils je peux ouvrir un onglet.

    Pour l'instant j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FileInput input = new FileInput(objet);
    IWorkbenchPage page = window.getActivePage();
    page.openEditor(input, viewId);
    Dans la méthode run de OpenViewAction.

    Ma technique actuel est d'avoir une instance de la classe OpenViewAction, avant d’appeler run j'envoie un objet via une méthode setObjet(Objet obj).

    Mais j'aimerais savoir comment devrais-je m'y prendre pour, par exemple, créer un onglet selon la sélection qu'a fait l'utilisateur dans un treeViewer.

    Je dois probablement mal utilisé IEditorInput.
    Je vais rechercher de ce côté là.
    Keith Flint 1969 - 2019

  10. #10
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Attention quand même aux amalgames (dangereux) que tu fais. Quand tu parles d'onglet il serait plus pertinent de parler de vue ou d'éditeur spécifiquement.

    Sinon, pour ce qui est du passage de sélection depuis une vue vers une action, tu peux utiliser le service de sélection.
    Pour ce faire, dans ta vue, il te faut enregistrer ton Viewer comme fournisseur de sélection: getViewSite().setSelectionProvider(myViewer); dans ta méthode createPartControl().
    Ensuite, tu peux récupérer la sélection courante, dans ton action, en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ISelectionService service = (ISelectionService) PlatformUI.getWorkbench().getService(ISelectionService.class);
    ISelection selection = service.getSelection("my.view.id");
    if (selection instanceof IStructuredSelection) {
        ((IStructuredSelection) selection).getFirstElement();
    }
    Par contre, je te conseille fortement de t'intéresser aux Commands et Handler plutôt qu'aux Action (qui sont historique et gardées pour des raisons de rétrocompatibilité). Tu as une très bonne série d'articles sur le sujet.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  11. #11
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    Merci beaucoup.
    Je vais tacher de mettre en place des Commands et des Handlers.
    En réalité j'ai beaucoup de mal à trouver des exemples de Java RCP, il y a peu d'exemple dans Eclipse et aucun utilise de command et de handler apparemment.

    On dirait qu'il n'existe que http://www.vogella.com/.

    Edit :
    Je viens de recevoir un gigantesque coup de pouce de la part d'un collègue.
    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
    <extension
             point="org.eclipse.ui.commands">
          <command
                id="projetrcp.commandOpenView"
                name="name">
          </command>
       </extension>
       <extension
             point="org.eclipse.ui.handlers">
          <handler
                class="projetrcp.OpenViewHandler"
                commandId="projetrcp.commandOpenView">
          </handler>
       </extension>
       <extension
             point="org.eclipse.ui.menus">
          <menuContribution
                allPopups="false"
                locationURI="toolbar:org.eclipse.ui.main.toolbar">
             <toolbar
                   id="projetrcp.toolbar1">
                <command
                      commandId="projetrcp.commandOpenView"
                      style="push">
                </command>
             </toolbar>
          </menuContribution>
       </extension>
       <extension
             point="org.eclipse.ui.commandImages">
          <image
                commandId="projetrcp.commandOpenView"
                icon="icons/check.png">
          </image>
       </extension>
    J'ai un bouton avec une icône dans la toolbar et quand j'appuie dessus, la methode public Object execute(ExecutionEvent event) de mon Handler s’exécute.
    J'ai fais getSite().setSelectionProvider(viewer); dans ma NavigationView et getSite().setSelectionProvider(tableViewer); dans ma DetailEditorPart.

    Je peux récupérer la sélection dans la méthode execute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HandlerUtil.getCurrentSelection(event);
    Donc là je devrais sans doute être capable d'ouvrir un onglet selon la sélection.
    Bon pour l'instant c'est depuis la toolbar, mais ensuite je ferais la popup du clique droit.
    Keith Flint 1969 - 2019

  12. #12
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Citation Envoyé par thierrybenji Voir le message
    Merci beaucoup.
    Je vais tacher de mettre en place des Commands et des Handlers.
    En réalité j'ai beaucoup de mal à trouver des exemples de Java RCP, il y a peu d'exemple dans Eclipse et aucun utilise de command et de handler apparemment.
    Laisse moi corriger ça.
    Tu utilises en ce moment même le meilleur exemple de RCP qui puisse exister... Tu développes dessus. Il te suffit de te procurer la version SDK d'Eclipse et tu auras accès à toutes les sources Eclipse.
    En programmation RCP, selon moi, il faut mettre les mains dans le cambouis et aller voir comment font ceux qui en ont déjà fait
    Citation Envoyé par thierrybenji Voir le message
    Je peux récupérer la sélection dans la méthode execute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HandlerUtil.getCurrentSelection(event);
    En effet, je ne t'ai pas proposé cette solution comme tu n'utilisais pas encore de Commande + Handlers

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  13. #13
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    Oui je recherche dans le code source d'application RPC déjà fait.
    Et en ce moment je recherche un exemple pour que lorsque je fais un clique droit une popup s'affiche.

    J'ai peut être trouvé ici :
    http://wiki.bioclipse.net/index.php?...es_the_Command

    J'ai l'impression que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    locationURI="popup:org.eclipse.ui.examples.contributions.view?after=additions"
    Revient souvent.

    Pour l'instant je n'arrive pas à exécuté un handler ou afficher une popup lors d'un clique droit.

    Voyez-vous une erreur là dedans :
    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
       <extension
             point="org.eclipse.ui.commands">
          <command
                id="projetrcp.showSelected"
                name="Show">
          </command>
       </extension>
     
       <extension
             point="org.eclipse.ui.handlers">
          <handler
                class="projetrcp.ShowSelected"
                commandId="projetrcp.showSelected">
          </handler>
       </extension>
     
       <extension
             point="org.eclipse.ui.menus">
     
          <menuContribution
                locationURI="popup:org.eclipse.ui.popup.any?after=additions">
             <command
                   commandId="projetrcp.showSelected"
                   label="action"
                   style="push">
             </command>
          </menuContribution>
       </extension>
    J'ai une classe projetrcp.ShowSelected mais la méthode execute n'a encore jamais été appelé.
    Keith Flint 1969 - 2019

  14. #14
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    Le problème doit venir de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    locationURI="popup:org.eclipse.ui.popup.any?after=additions"
    .

    Je fais des clique droits partout et rien ne se passe.
    Je veux pouvoir faire un clique droit dans ma SelectionView et dans mes Editor.
    Mais la popup ne s'est jamais affiché.

    Edit :
    J'ai créé des commandes que j'ai ajouté à une toolbar, tout fonctionne, je n'ai plus qu'a affiché ses commandes lors d'un clique droit, normalement c'est simple, mais ça ne fonctionne pas chez moi...
    Keith Flint 1969 - 2019

  15. #15
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Quelques point de recherches:
    • est-ce que les méthodes isEnabled() et isHandled() de ta classe projetrcp.ShowSelected renvoie bien true?
    • est-ce que tu as fait un clean de ton répertoire de runtime? (ça peut aider). Pour cela, tu vas dans Run > Run Configurations... Là, tu sélectionnes ta configuration de lancement, puis, dans l'onglet Configuration tu as une case à cocher "Clear the configuration area before launching" (ça fera le ménage à chaque lancement de la commande).
    • Si tu n'as qu'un seul handler pour cette commande, tu peux passer par l'argument defaultHandler de ta commande plutôt que par un handler spécifique. Ex:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      <extension
           point="org.eclipse.ui.commands">
        <command
              defaultHandler="org.eclipse.my.handlers.MyCommandHandler"
              id="my.command.id1"
              name="My Command">
        </command>
      </extension>
    • As-tu définit une popup pour ta vue?
    Attention aux locationURI, j'ai l'impression que tu n'as pas tout à fait saisi à quoi ça correspond. Un locationURI, c'est:
    <scheme>:<id>?<placement>=<id_menu_item>
    Avec:
    - <scheme> qui est à choisir parmi: menu, popup ou toolbar.
    - <id> l'identifiant de ta vue / menu / toolbar (ou des identifiants spéciaux comme le popupAny).
    - <placement> qui est à choisir parmi: before, after ou endof.
    - <id_menu_item> correspond à l'identifiant d'un menu item (une commande, un menu, ...).

    Voilà, +
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  16. #16
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    Bonjour, merci pour cette réponse.

    Citation Envoyé par Gueritarish Voir le message
    est-ce que les méthodes isEnabled() et isHandled() de ta classe projetrcp.ShowSelected renvoie bien true?
    Je viens d'ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Override
    public boolean isEnabled(){
    	return true;
    }
     
    @Override
    public boolean isHandled(){
    	return true;
    }
    Dans tout mes Handlers.

    Citation Envoyé par Gueritarish Voir le message
    est-ce que tu as fait un clean de ton répertoire de runtime? (ça peut aider). Pour cela, tu vas dans Run > Run Configurations... Là, tu sélectionnes ta configuration de lancement, puis, dans l'onglet Configuration tu as une case à cocher "Clear the configuration area before launching" (ça fera le ménage à chaque lancement de la commande).
    Je viens de cocher la case "Clear the configuration area before launching".

    Citation Envoyé par Gueritarish Voir le message
    Si tu n'as qu'un seul handler pour cette commande, tu peux passer par l'argument defaultHandler de ta commande plutôt que par un handler spécifique. Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <extension
         point="org.eclipse.ui.commands">
      <command
            defaultHandler="org.eclipse.my.handlers.MyCommandHandler"
            id="my.command.id1"
            name="My Command">
      </command>
    </extension>
    Là par contre je n'ai pas compris, apparemment org.eclipse.my.handlers.MyCommandHandler n'existe pas.

    Citation Envoyé par Gueritarish Voir le message
    As-tu définit une popup pour ta vue?
    Je ne crois pas.

    Citation Envoyé par Gueritarish Voir le message
    Attention aux locationURI, j'ai l'impression que tu n'as pas tout à fait saisi à quoi ça correspond. Un locationURI, c'est:
    <scheme>:<id>?<placement>=<id_menu_item>
    Avec:
    - <scheme> qui est à choisir parmi: menu, popup ou toolbar.
    - <id> l'identifiant de ta vue / menu / toolbar (ou des identifiants spéciaux comme le popupAny).
    - <placement> qui est à choisir parmi: before, after ou endof.
    - <id_menu_item> correspond à l'identifiant d'un menu item (une commande, un menu, ...).
    Donc scheme et id était correct déjà.
    Je dois bien utiliser popup:org.eclipse.ui.popup.any.

    J'aimerais avoir la popup dans le clique droit dans ma NavigationView et dans l'editor area.
    Mais je ne sais pas quel est le placement et le id_menu_item à donner.

    Edit : je n'ai pas définit de popup dans la vue ça doit être ça le problème.
    Est-ce quelque chose comme ça :
    http://www.vogella.com/articles/Ecli...commands_popup
    Keith Flint 1969 - 2019

  17. #17
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Citation Envoyé par thierrybenji Voir le message
    Là par contre je n'ai pas compris, apparemment org.eclipse.my.handlers.MyCommandHandler n'existe pas.
    Euh. C'est une classe exemple. Bien sûr qu'il faut mettre ton handler.
    Citation Envoyé par thierrybenji Voir le message
    Je ne crois pas.
    Dans ce cas, il te faut la créer... Ex dans une 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
        final MenuManager menuManager = new MenuManager("#popup");
        final Menu iContextMenu =
          menuManager.createContextMenu(myViewer.getControl());
        myViewer.getControl().setMenu(iContextMenu);
        menuManager
            .add(new ContributionItem(IWorkbenchActionConstants.MB_ADDITIONS) {
              @Override
              public boolean isSeparator() {
                return true;
              }
     
              @Override
              public boolean isVisible() {
                return false;
              }
            });
        menuManager.setRemoveAllWhenShown(true);
        getViewSite().registerContextMenu(menuManager, viewer);
    myViewer est un Viewer JFace.
    Citation Envoyé par thierrybenji Voir le message
    Donc scheme et id était correct déjà.
    Je dois bien utiliser popup:org.eclipse.ui.popup.any.

    J'aimerais avoir la popup dans le clique droit dans ma NavigationView et dans l'editor area.
    Mais je ne sais pas quel est le placement et le id_menu_item à donner
    C'est pas forcément les bons non... Étant donné que tu es dans une application RCP, et non juste dans un plug-in, tu maîtrises l'affichage de toutes les vues ou éditeurs. Donc, tu peux donner explicitement l'identifiant que tu souhaites.
    Après, le placement dépend de ton besoin. La variable <id_menu_item> que j'ai mis, correspond à l'identifiant d'un item de ta popup auprès duquel tu souhaites placé ta commande.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  18. #18
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    Merci !

    J'ai enfin réussi à afficher une popup avec le clic droit !

    Par contre j'ai du mal placé le code parce que le clic droit ne fonctionne que dans ma NavigationView et pas dans les editors.
    Je n'aurai peut être pas du utiliser un TreeViewer de NavigationView.

    Je vais rechercher ça, en tout cas j'ai presque réussi a faire tout ce que je voulais.

    Edit :
    J'ai utilisé le même code à deux endroits différents, une fois avec un TreeViewer dans une ViewPart et une fois avec un TableViewer dans un EditorPart et maintenant ça fonctionne, c'est propre de faire comme ça ?
    Keith Flint 1969 - 2019

  19. #19
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Rien ne t'empêche de le rendre générique... Tu crées une méthode createContextualMenu():
    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
    public void createContextualMenu(final Control aControl, final IWorkbenchPartSite aSite, final ISelectionProvider aSelectionProvider) {
        final MenuManager menuManager = new MenuManager("#popup");
        final Menu iContextMenu =
          menuManager.createContextMenu(aControl);
        aControl.setMenu(iContextMenu);
        menuManager
            .add(new ContributionItem(IWorkbenchActionConstants.MB_ADDITIONS) {
              @Override
              public boolean isSeparator() {
                return true;
              }
     
              @Override
              public boolean isVisible() {
                return false;
              }
            });
        menuManager.setRemoveAllWhenShown(true);
        aSite.registerContextMenu(menuManager, aSelectionProvider);
    }
    Et il ne te reste plus qu'à l'appeler en faisant:createContextualMenu(myTreeViewer.getControl(), getViewSite(), myTreeViewer); dans ta vue et createContextualMenu(myTableViewer.getControl(), getEditorSite(), myTableViewer); dans ton éditeur.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  20. #20
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    D'accord, merci.

    Par contre j'ai un problème avec getCurrentSelection et setSelectionProvider.
    Comme je l'ai déjà dis, dans la méthode createPartControl de ma classe EditorPart j'appelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getSite().setSelectionProvider(tableViewer);
    Et dans la méthode createPartControl de ma classe ViewPart j'appelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getSite().setSelectionProvider(treeViewer);
    Dans les Handlers je récupère la Selection et la Part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ISelection selection = HandlerUtil.getCurrentSelection(event);
    IWorkbenchPart part = HandlerUtil.getActivePart(event);
    Le problème est le suivant : après avoir créer un onglet EditorPart si je sélectionne a nouveau ma ViewPart la sélection ne change pas, quand j’exécute un handler depuis ma ViewPart la Selection reste sur l'EditorPart.

    Pour être plus précis, depuis le TreeViewer de ma ViewPart je fais un clic droit et appuie sur "ouvrir dans un nouvel onglet" là tout fonctionne.
    Mais la sélection va automatiquement sur le nouvel onglet (le TableViewer de l'EditorPart) et ne peux pas revenir sur la ViewPart tant que je ne sélectionne pas l'EditorPart puis la ViewPart à nouveau.
    Keith Flint 1969 - 2019

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/10/2008, 00h37
  2. comment créer une application avec des switchs
    Par abderrahim_05 dans le forum Débuter
    Réponses: 5
    Dernier message: 28/12/2007, 19h07
  3. Créer une vue avec des onglets
    Par Flackou dans le forum MFC
    Réponses: 2
    Dernier message: 14/06/2007, 11h43
  4. [PHP-JS] Comment créer une boucle avec des headers
    Par djinnwatcher dans le forum Langage
    Réponses: 10
    Dernier message: 17/07/2006, 15h48
  5. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 12h37

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