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 :
La méthode run 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();
Donc j'envoie à mon action un objet TreeParent, quand j’exécute l'action une View est créé avec l'objet TreeParent.
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()); } } }
Dans ma classe qui étend ViewPart (la vue de l'onglet) dans createPartControl, je ne fais pas de treeViewer.setInput.
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 treeViewer = new TreeViewer(composite, SWT.BORDER); treeViewer.setContentProvider(new ViewContentProvider()); treeViewer.setLabelProvider(new ViewLabelProvider());
Et ensuite j'appelle la méthode setInput :
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; }
Ça fonctionne bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public void setInput(){ treeViewer.setInput(treeParent); }
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.
Partager