Закрыть редактор, используя IEditorreference? (затмение RCP) - PullRequest
3 голосов
/ 10 августа 2011

У меня есть интерфейс, в котором, когда я выбираю элемент (в дереве), а затем нажимаю кнопку «Добавить», я получаю новый редактор. С каждым пунктом я могу получить редактор. (но все имеют одинаковый идентификатор) Моя цель - закрыть только редактор item1, например, когда я нажимаю «сохранить». Я могу закрыть все редакторы с помощью: getSite().getWorkbenchWindow().getActivePage().closeAllEditors(true);

Но не только тот, который мне нужно закрыть.

Я думаю, эта проблема может быть решена с помощью IEditorreferences, но я не знаю точно, как это сделать! :( пожалуйста помогите:)

List<IEditorReference> editors = new ArrayList<IEditorReference>();               
for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) {
    for (IWorkbenchPage page : window.getPages()) {
        for (IEditorReference editor : page.getEditorReferences()) {
           editors.add(editor);
         }
    }
}

getSite().getWorkbenchWindow().getActivePage().closeEditor(editors.get(index)????,true);

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Редактор можно отслеживать с помощью редактора-ввода.Объект, представляющий item1, должен быть частью вашего ввода-ввода редактора ...

Что-то вроде:

// Creating and opening
MyObject item1 = ... //create item1
// open editor
myInput = new MyEditorInput(item1)
IDE.openEditor(workbenchPage, myInput, MY_EDITOR_ID);

// Closing
tmpInput = new MyEditorInput(item1)
IEditorReference[] editorReferences = PlatformUI.getWorkbench()
                .getActiveWorkbenchWindow().getActivePage()
                .getEditorReferences();
        List<IEditorReference> relevantEditors = new ArrayList<IEditorReference>();
        for (IEditorReference iEditorReference : editorReferences) {
            if (iEditorReference.getEditorInput().equals(tmpInput)) {
                relevantEditors.add(iEditorReference);
            }
        }
        PlatformUI
                .getWorkbench()
                .getActiveWorkbenchWindow()
                .getActivePage()
                .closeEditors(
                        (IEditorReference[]) relevantEditors.toArray(new IEditorReference[relevantEditors
                                .size()]), true);

Убедитесь, что вы переопределили equals и hashCode вашего EditorInput, чтобы проверить равенствообернутого MyObject экземпляра

0 голосов
/ 04 сентября 2013

спасибо Тому, ваш ответ очень помогает.

Так как каждый IEditorInput может иметь свое имя, которое может быть установлено, мы также можем использовать следующее:

// String str =.....
// str, could be an editor's property

if (iEditorReference.getEditorInput().getName().equals(str))

Кроме того, он генерирует исключение PartInitException, например:

//....................

    try {
        for (IEditorReference iEditorReference : editorReferences) {
            if (iEditorReference.getEditorInput().getName().equals(str)) {
                relevantEditors.add(iEditorReference);
            }
        }
    } catch (PartInitException e) {
        e.printStackTrace();
    }
//...................
0 голосов
/ 10 августа 2011

При открытии редактора вы должны отслеживать соответствие между вашими элементами и связанными открытыми IEditorReference Это можно сделать, например, с помощью простого HashMap объекта.

...