2016-10-10 5 views
0

В настоящее время я переношу очень старый фрагмент кода, написанный в Eclipse Helios на Eclipse Mars. Код использует определенный apis от org.eclipse.ui.internal, такой как EditorSashContainer, , PartStack, LayoutPart и т. Д. Неужели эти apis больше не доступны в слое совместимости с e4? Или мне нужно импортировать несколько плагинов? Каким будет наилучший подход для переноса кода, который может включать минимальные изменения кода. Мы используем этот apis, чтобы в основном проливать редактор, чтобы он выглядел как рабочая книга.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

Вы не должны использовать внутренние интерфейсы Eclipse API Rules of Engagement

Внутренности Затмения были полностью переписаны для Eclipse, 4 и многие внутренний интерфейс были изменены или удалены. Все теперь основано на модели EMF, представляющей объекты в графическом интерфейсе. Уровень совместимости предоставляет API старого стиля, но это поддерживает только официальные API.

Существует нет простого способа справиться с изменениями во внутренних API. Вам нужно будет понять новый способ, которым Eclipse это делает.

Вы можете переопределить «средства рендеринга» для большинства компонентов, таких как стеки компонентов, которые могут быть способом делать то, что вы хотите.

 Смежные вопросы

  • Нет связанных вопросов^_^