以编程方式在主编辑区域外打开DialectEditor(E3 / E4混合)

时间:2017-08-30 05:21:34

标签: eclipse-rcp e4 eclipse-pde pde eclipse-sirius

我想做什么:

在我的RCP E3 / E4混合中,我有一个基于天狼星树的项目和库。用户可以将放置项从库树拖到项目树。这很好用,并没有很好的内置问题。所以现在我想让UI更有用。它应该看起来像这样的布局:

enter image description here 什么有效:

应用程序启动后,我使用DialectUIManager打开我的库演示文稿。

final DialectEditor editor = (DialectEditor) 
DialectUIManager.INSTANCE.openEditor(siriusSession, description, monitor);

好的,这很有效。但它在零件市场的编辑器中以org.eclipse.ui.editorss的形式打开它。这不是我想要的

enter image description here

什么行不通:

我想在“图书馆部分”中展示它。我可以在打开编辑器后用鼠标手动移动它,但我怎么能告诉DialectUIManager直接在那里打开它。或者我如何以编程方式移动它。

我做了很多谷歌研究,但我没有找到解决方案。我发现的唯一一件事是提示皮埃尔 - 查尔斯大卫https:// www. eclipse.org/forums/index.php?t=msg&th=998476&goto=1631138&#msg_1631138

  

如果您需要,只需在主编辑器外显示编辑器即可   区域,这是可能的,因为Eclipse 4.2(e4并没有真正对待   主编辑区作为特别的东西),所以你可以拥有你的编辑器   在其他观点中间的另一位编辑“围观”。

但是在这一步我卡住了。我也在天狼星论坛上问它,但他们说它是Eclipse E4问题

感谢您的帮助,代码段或指向正确部分手册的链接。

1 个答案:

答案 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);
    }
  }