Ich habe ein paar Editoren mit einigen Detailansichten jeder, die nicht relevant für die anderen Editoren sind. Tatsächlich will der Kunde sie nicht dort, weil sie sie verwirren.Geben Sie jedem Editor seine eigene Perspektive
Also ich möchte die Sichtbarkeit der Ansichten ändern und dachte, die integrierten Perspektiven in Eclipse könnten den Trick tun. Ich habe ein IPartListener
wie folgt aus:
public class ToEachTheirOwnPartListener implements IPartListener {
private final Map<IWorkbenchPart, String> partToPerspectiveId = new IdentityHashMap<>(5);
@Override
public void partOpened(IWorkbenchPart part) {
if (hasOwnPerspective(part)) {
String perspectiveId = cloneEditorPerspective(part);
this.partToPerspectiveId.put(part, perspectiveId);
}
}
private static boolean hasOwnPerspective(IWorkbenchPart part) {
return part instanceof IEditorPart;
}
String cloneEditorPerspective(IWorkbenchPart part) {
final IPerspectiveRegistry registry = PlatformUI.getWorkbench().getPerspectiveRegistry();
IWorkbenchPage page = part.getSite().getPage();
// more later
}
@Override
public void partBroughtToTop(IWorkbenchPart part) {
if (hasOwnPerspective(part)) {
final IPerspectiveRegistry registry = PlatformUI.getWorkbench().getPerspectiveRegistry();
part.getSite().getPage().setPerspective(registry.findPerspectiveWithId(this.partToPerspectiveId.get(part)));
}
}
@Override
public void partClosed(IWorkbenchPart part) {
if (hasOwnPerspective(part)) {
final IPerspectiveRegistry registry = PlatformUI.getWorkbench().getPerspectiveRegistry();
registry.deletePerspective(registry.findPerspectiveWithId(this.partToPerspectiveId.get(part)));
this.partToPerspectiveId.remove(part);
}
}
}
ich mit dem cloneEditorPerspective()
Methode bin struggeling weil allmost alle Methoden nicht in E4 oder schlicht Buggy umgesetzt werden.
Was ich tun mag, ist nur eine vorhandene Perspektive wie diese zu klonen (okay ehrlich würde ich eher IPerspectiveRegistry#clonePerspective verwenden, aber ... E4):
page.savePerspectiveAs(page.getPerspective());
String defaultPerspectiveId = PlatformUI.getWorkbench().getPerspectiveRegistry().getDefaultPerspective();
final IPerspectiveDescriptor defaultPerspective = registry.findPerspectiveWithId(defaultPerspectiveId);
IPerspectiveDescriptor clone = ((PerspectiveRegistry) registry).createPerspective(UUID.randomUUID().toString(),
(PerspectiveDescriptor) defaultPerspective);
Aber das wirft die folgende Ausnahme (offenbar das Feld PerspectiveDescriptor.configElement
ist null für die geklonten Perspektive):
java.lang.NullPointerException bei org.eclipse.ui.internal.registry.PerspectiveDescriptor.createFactory (PerspectiveDescriptor.java:74) bei org.eclipse. ui.internal.WorkbenchPage.setPerspective (WorkbenchPage.java:4053) bei ToEachTheirOwnPartListener.partBroughtToTop (ToEachTheirOwnPartListener.java:65)
ich page.savePerspectiveAs(clone)
hinzufügen könnte die Ausnahme zu entfernen, aber dann aus Gründen, die vollständig über mich sind Nicht die Standardperspektive wird geklont, sondern die aktuell aktive.
Also noch ein Versuch; setzen wir die Anwendung auf eine leere Perspektive, dann ist diese klonen ein:
IPerspectiveDescriptor perspective = registry.findPerspectiveWithId("org.acme.plugin.perspective");
window.getActivePage().setPerspective(perspective);
IPerspectiveDescriptor clone = ((PerspectiveRegistry) registry).createPerspective(UUID.randomUUID().toString(),
(PerspectiveDescriptor) page.getPerspective());
page.savePerspectiveAs(clone);
Dieser Code funktioniert, aber clones all views.
Wenn ich die Ansichten manuell alle Pausen verlieren Hölle schließen mit etwas wie folgt aus:
java.lang.NullPointerException bei org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.canExecuteItem (HandledContributionItem.java:808) bei org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.access $ 1 (HandledContributionItem.java:802) bei org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem $ 3.run (HandledContributionItem.java:167) bei org.eclipse.core.runtime.SafeRunner.run (SafeRunner.java:42)
Alle Varianten, die ich versucht habe, scheinen auf diese drei zu kommen: NPE, Klonen der falschen Perspektive oder Duplizieren der Ansichten.
Gibt es eine Möglichkeit, jedem Redakteur eine eigene Perspektive zu geben? Wenn das so ist, wie?