2017-08-30 6 views
0

の外:私のRCPでオープンDialectEditorはプログラムで私が何をしたいのか、メインエディタ領域(E3/E4ハイブリッド)

E3/E4ハイブリッドIはシリウスツリーに基づいたプロジェクトやライブラリを持っています。ユーザは、ライブラリツリーからプロジェクトツリーにドロップ項目をドラッグできます。これはうまく動作し、ビルドに大きな問題はありませんでした。だから、私は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にその場所を直接開くように指示する方法はありますか?または、プログラム的にそれをどのように動かすことができますか?

私はGoogleの研究をたくさんしていますが、解決策が見つかりません。私が見つけた唯一のことは、あなたが必要な場合のEclipse 4.2(E4は本当に を扱っていないので、これが可能で、メインエディタ エリアの外でエディタを表示するには、単純であるヒントピエール・シャルル・デビッドhttps:// www. eclipse.org/forums/index.php?t=msg&th=998476&goto=1631138&#msg_1631138

ましたメインエディタ領域を特別なものとして)、あなたのエディタを他のエディタの真ん中に「周りに」置くことができます。

しかし、この段階で私はついた。シリウス・フォーラムでも質問しますが、Eclipse E4の問題があります。

マニュアルの一部を修正するためのヘルプ、コードスニペットまたはリンクをありがとう。

+0

私は 'DialectUIManager'はあるが、おそらく、エディタを開くには、3.xのAPIを使用しているかわからない - これらのAPIは、エディタが開かれた場所というのが方法はありません。 –

+0

'DialectUIManager'はSirius APIの一部であり、あなたが正しいです、それは3.x APIを使います。エディタのタイプは「IEditorPart」です。 エディタを他の部分で直接開くことができない場合、プログラムでライブラリ部分に移動することは可能ですか? – Fry123

答えて

0

解決策を見つけました。それはあまりいいことではありませんが、うまくいきます。エディタが開いたら、ここでこれらのコードを実行します。

コードは何:ORG:彼はIDを持っているMPlaceholderを探している

。日食。 ui。編集者。そこに彼は部品があるまで下降する。これらは互換性のあるエディタモードです。次に、私たちが移動したい部分を選択し、それらを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); 
    } 
    } 
関連する問題