在eclipse 3.x中,我们可以通过提供不同的辅助ID来打开多个视图部分实例。如何在eclipse 4中实现相同的行为,我无法找到支持此行为的部分属性。
其他问题是我使用compat层将3.x应用程序迁移到4.x,我在应用程序模型中导入了3.x视图,并使用占位符在透视图中添加它们。我的问题是,如果我打开相同视图的第一个实例,它会在应用程序模型中定义的适当的partsashcontainer中打开,但之后如果我打开另一个视图实例,它会在透视图的任何区域打开而不是定义的布局?
那么如果我同时打开多个视图实例,我如何强制eclipse 4在一个布局区域中打开一个视图呢?
答案 0 :(得分:1)
解决方案是@ greg-449所建议的,我必须使用EpartService创建零件,然后将零件附加到partstack。因为我正在使用comapt层,所以它不是直接的,必须写一些脏代码来实现:
IEclipseContext serviceContext = E4Workbench
.getServiceContext();
final IEclipseContext appContext = (IEclipseContext) serviceContext
.getActiveChild();
EModelService modelService = appContext
.get(EModelService.class);
MApplication app = serviceContext.get(MApplication.class);
EPartService partService = serviceContext
.get(EPartService.class);
MPartStack stack = (MPartStack) modelService.find(
"partstack.2", app);
MPart part = modelService.createModelElement(MPart.class);
part.setElementId("viewID");
part.setContributionURI("bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView");
part.setCloseable(true);
part.getTags().add(EPartService.REMOVE_ON_HIDE_TAG);
stack.getChildren().add(part); // Add part to stack
MPart viewPart = partService.showPart(part,
PartState.ACTIVATE); // Show part
ViewReference ref = ((WorkbenchPage) PlatformUI
.getWorkbench().getActiveWorkbenchWindow()
.getActivePage()).getViewReference(part);
IViewPart viewRef = ref.getView(true);
使用这个我们可以使用E4打开视图并获取IViewpart的实例来执行3.X的其他操作