我想做什么:
在我的RCP E3 / E4混合中,我有一个基于天狼星树的项目和库。用户可以将放置项从库树拖到项目树。这很好用,并没有很好的内置问题。所以现在我想让UI更有用。它应该看起来像这样的布局:
应用程序启动后,我使用DialectUIManager打开我的库演示文稿。
final DialectEditor editor = (DialectEditor)
DialectUIManager.INSTANCE.openEditor(siriusSession, description, monitor);
好的,这很有效。但它在零件市场的编辑器中以org.eclipse.ui.editorss的形式打开它。这不是我想要的
什么行不通:
我想在“图书馆部分”中展示它。我可以在打开编辑器后用鼠标手动移动它,但我怎么能告诉DialectUIManager直接在那里打开它。或者我如何以编程方式移动它。
我做了很多谷歌研究,但我没有找到解决方案。我发现的唯一一件事是提示皮埃尔 - 查尔斯大卫https:// www. eclipse.org/forums/index.php?t=msg&th=998476&goto=1631138&#msg_1631138
如果您需要,只需在主编辑器外显示编辑器即可 区域,这是可能的,因为Eclipse 4.2(e4并没有真正对待 主编辑区作为特别的东西),所以你可以拥有你的编辑器 在其他观点中间的另一位编辑“围观”。
但是在这一步我卡住了。我也在天狼星论坛上问它,但他们说它是Eclipse E4问题
感谢您的帮助,代码段或指向正确部分手册的链接。
答案 0 :(得分:0)
我找到了解决方案。它不是很好,但它的工作原理。我在编辑器打开后执行这些代码。
代码的作用:
他正在寻找具有ID:org的MPlaceholder。日食。 UI。 editorss。在那里,他下降,直到他与部分。它们处于Compatible编辑器模式。然后他选择我们要移出的部分并将它们附加到MPartStack目标。
public static void movePart(MApplication application,
EModelService modelService) {
MPart partToMove = null;
MUIElement muiElement =
modelService.find("org.eclipse.ui.editorss", application);
if (muiElement instanceof MPlaceholder) {
MPlaceholder placeholder = (MPlaceholder) muiElement;
MUIElement ref = placeholder.getRef();
if (ref instanceof MArea) {
MArea area = (MArea) ref;
List<MPartSashContainerElement> children = area.getChildren();
for (MPartSashContainerElement mPartSashContainerElement
: children) {
if (mPartSashContainerElement instanceof MPartStack) {
MPartStack partStack = (MPartStack) mPartSashContainerElement;
List<MStackElement> children2 = partStack.getChildren();
for (MStackElement mStackElement : children2) {
if (mStackElement instanceof MPart) {
MPart part = (MPart) mStackElement;
// Library is the Editor Name wiche I want to move
if (part.getLabel().equals("Library")) {
partToMove = part;
break;
}
}
}
}
}
}
}
if (partToMove != null) {
moveElement(modelService, application, partToMove);
}
}
private static void moveElement(EModelService modelService,
MApplication application, MPart part) {
// target PartStack
MUIElement find = modelService.find("de.bsg.onesps.rcp.
partstack.library", application);
if (find instanceof MPartStack) {
MPartStack mPartStack = (MPartStack) find;
mPartStack.getChildren().add(part);
mPartStack.setSelectedElement(part);
}
}