9
votes

Comment fermer une vision dans Eclipse?

J'ai une vue dans Eclipse (implémentées par une classe qui étend org.evlipse.ui.part.viewpart ) que j'ai besoin de fermer. Je veux dire complètement près, pas seulement cacher. Je veux que une nouvelle instance de visualisation soit créée lorsque l'utilisateur (ou mon code) demande à ouvrir la vue à nouveau.

La seule méthode que j'ai trouvée était iworkbenchpage.hideview qui cache la vue, mais ne le dispose pas complètement. Invoquant Dispose sur la vue n'a aucun effet non plus.

BTW, ma vue est définie comme allowMultiple = "false" mais j'ai essayé avec true et qui n'a pas fait de différence.

Toute aide sera appréciée.


1 commentaires

Ouvert un défaut de cacao / SWT: bugs.eclipse.org/bugs/show_bug. CGI? ID = 286373


6 Réponses :


0
votes

L'org.eclipse.ui.internal.ViewFactory a une méthode appelée releseview que je pense ferme complètement la vue (bien que je ne suis pas certain). Il faut une iviewreference.

Vous pouvez accéder à la visiteuse en appelant perspective.geviewfactory et vous pouvez accéder au point de vue, vous pouvez ensuite transmettre une iviewreference pour publier la vue. P>

IWorkbenchPage page = 
Workbench.getInstance().getActiveWorkbenchWindow().getActivePage()

Perspective perspective = page.getPerspective();

String viewId = "myViewId"; //defined by you

//get the reference for your viewId
IViewReference ref = page.findViewReference(viewId);

//release the view
perspective.getViewFactory.releaseView(ref);


1 commentaires

La méthode releview est appelée à partir de la Hideview's One. Ainsi, je pense que cela n'est pas obligé de l'appeler.



3
votes

Je pense que le iworkbenchPage.hideview () code> La méthode que vous avez mentionnée est le seul disponible pour programmaticaly fermer une vue. Je pense aussi que ce nom de méthode devrait être étroiteview () Beacause, il fermera vraiment la vue.

J'ai utilisé cette méthode pendant un moment (avec allowMultiple = true code> vues) et après le débogage, il semble que mon vue.Dispose () code> est invoqué chaque fois que j'invoque maskeview () code>. p>

prochaine fois que j'ouvre cette vue (je veux dire à partir de mon code et non à partir de l'interface utilisateur), une nouvelle est créée par Eclipse et la méthode CreeEpartControl () Code> est invoquée à nouveau. P>

En outre, la hiérarchie de l'appel m'a dit que le HideView () Code> doit appeler la méthode Dispose () CODE> .... P>

hideView() >> releaseView() >> partRemoved() >> disposePart() >> dispose() >> doDisposePart() >> doDisposePart() >> dispose()


1 commentaires

Mon problème n'était pas avec la disposition de la vue, mais plutôt de sa création. À un moment donné, je devais fermer complètement la vue et ouvrir une nouvelle instance. Mon indication était simplement un point d'arrêt dans la méthode de la vue CreeEpartControl. Il semble s'agir d'un nouveau problème qui a commencé à Eclipse 3.5 (je suis sur OS X, pas sûr d'autres plates-formes). Travaillé juste bien avant. Le dispositif ne se passe pas non plus. Je me demandais simplement s'il y a une autre façon avant d'ouvrir un bogue.



9
votes

J'ai finalement trouvé le problème. Si la vue est ouverte sur plusieurs perspectives, la masquez-la sur une perspective ne le fermera pas. Il est possible de parcourir toute la perspective ouverte et de rechercher la vue. La cacher sur toutes les perspectives le fermera.


1 commentaires

Comment est-il possible de itérer sur toutes les vues ouvertes dans toutes les perspectives?



0
votes

i Disposition de la méthode d'IworkBenchPart et qui a fonctionné. J'ai eu quelque chose comme ça dans ma méthode de jettement remplacée: xxx


0 commentaires

0
votes

Pour pouvoir disposer de la vue sur la perspective de clôture, nous avons utilisé le code suivant:

IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (workbenchWindow != null) {
    workbenchWindow.addPerspectiveListener(new PerspectiveAdapter() {
        @Override
        public void perspectiveActivated(IWorkbenchPage page,
                IPerspectiveDescriptor perspectiveDescriptor) {
            super.perspectiveActivated(page, perspectiveDescriptor);
        }
        @Override
        public void perspectiveDeactivated(IWorkbenchPage page,
                IPerspectiveDescriptor perspective) {
            super.perspectiveDeactivated(page, perspective);
            page.closePerspective(perspective, false, true);
        }
    });
}


0 commentaires

0
votes

Pour fermer les vues, ouverte dans une perspective différente, j'ai remplacé PerspectiveDeactivé () d'org.eclipse.ui.perspectiveadapter. XXX

Mon exigence était de fermer la vue "Journal d'erreur". Le code ci-dessus peut être modifié pour fermer n'importe quelle vue.


0 commentaires