2016-10-10 10 views
0

現在、Eclipse Heliosで書かれた非常に古いコードをEclipse Marsに移行しています。コードは、、EditorStackPartStackLayoutPartなどorg.eclipse.ui.internalパッケージの特定のapisを利用しています。これらのapiはe4互換レイヤーではもはや利用できませんか?または、プラグインをいくつかインポートする必要がありますか?最小限のコード変更を伴う可能性のあるコードを移行するための最良の方法は何でしょうか。これらのAPIを使用して基本的にエディタをこぼして、ワークブックのような外観にします。Eclipse Migrationとorg.eclipse.ui.internal apis

ありがとうございます!

答えて

0

ここでは、E4環境でのエディタの分割方法を説明します。

これは私が実行する方法である:splitEditor(0.5f, 3, currentEditor, newEditor)

@Override 
public void splitEditor(float ratio, int where, IEditorPart containerEditor, IEditorPart editorToInsert) { 
    MPart container = containerEditor.getSite().getService(MPart.class); 
    if (container == null) { 
     return; 
    } 
    MPart toInsert = editorToInsert.getSite().getService(MPart.class); 
    if (toInsert == null) { 
     return; 
    } 

    insertEditor(ratio, where, container, toInsert); 
} 

/** 
* Inserts the editor into the container editor. 
* 
* @param ratio the ratio 
* @param where where to insert ({@link EModelService#LEFT_OF}, {@link EModelService#RIGHT_OF}, {@link EModelService#ABOVE} or 
* {@link EModelService#BELOW}) 
* @param containerEditor the container editor 
* @param editorToInsert the editor to insert 
*/ 
public void insertEditor(float ratio, int where, MPart containerEditor, MPart editorToInsert) { 
    IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); 
    EModelService service = window.getService(EModelService.class); 
    MPartStack toInsert = getPartStack(editorToInsert); 

    MArea area = getArea(containerEditor); 
    MPartSashContainerElement relToElement = area.getChildren().get(0); 
    service.insert(toInsert, relToElement, where, ratio); 
} 

@SuppressWarnings("restriction") 
private MPartStack getPartStack(MPart childPart) { 
    MStackElement stackElement = childPart; 
    MPartStack newStack = org.eclipse.e4.ui.model.application.ui.basic.impl.BasicFactoryImpl.eINSTANCE.createPartStack(); 
    newStack.getChildren().add(stackElement); 
    newStack.setSelectedElement(stackElement); 
    return newStack; 
} 

private MArea getArea(MPart containerPart) { 
    MUIElement targetParent = containerPart.getParent(); 
    while (!(targetParent instanceof MArea)) { 
     targetParent = targetParent.getParent(); 
    } 
    MArea area = (MArea) targetParent; 
    return area; 
} 
0

あなたが使用されるべきではない内部API Eclipse API Rules of Engagement

のEclipseの内部は完全にエクリプス4のために書き直され、多くの内部インターフェイスは、変更または削除されました。すべてが、GUIのオブジェクトを表すEMFモデルに基づいています。互換性レイヤーは古いスタイルのAPIを提供しますが、公式APIのみをサポートします。

内部APIの変更を簡単に処理する方法はありません。 Eclipseが物事を行う新しい方法を理解しなければなりません。

パーツスタックなどのほとんどのコンポーネントの「レンダラー」をオーバーライドすることができます。これは、必要な操作を行う方法である可能性があります。