Закрыть редактор, если нажата кнопка внутри этого редактора ?? (RCP затмение) - PullRequest
1 голос
/ 14 августа 2011

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

// 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);

… .но у меня все еще есть некоторые проблемы ... Поскольку я могу открыть много редакторов одновременно, и у всех них есть та же самая кнопка "сохранить", случается, что я нажимаю "сохранить" в редакторе1, но закрываю редактор3 ... На самом деле, я сохраняю последний редактор, который будет открыт (благодаря его "элементу") ... в этом проблема ... Поэтому мне интересно, есть ли способ идентифицировать редактор, в котором существует кнопка, так что я закрываю это .. Большое спасибо, я ценю любую помощь или подсказку (извините, если мои вопросы выглядят легкими и не стоят того, чтобы их задавать, но я все еще новичок ...)

Ответы [ 2 ]

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

если кнопка отображается в вашей реализации IEditorPart, вы можете закрыть редактор непосредственно в своей EditorPart.

button.addListener(SWT.Selection, new Listener() {

    @Override
    public void handleEvent(Event event) {

        PlatformUI.getWorkbench().getActiveWorkbenchWindow()
                .getActivePage().closeEditor(this, true);

    }

});
0 голосов
/ 01 февраля 2017

Выбранный редактор открыт или другой редактор может быть закрыт с помощью RCP eclipse.

Несколько редакторов, открытых одновременно, выбранный редактор может быть открыт или закрыт с помощью RCP eclipse.

    IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
    IWorkbenchPage page = window.getActivePage();
    EmployeeEditorInput input = new EmployeeEditorInput();

    //List out all the editors open
    IEditorReference[] editors = page.getEditorReferences();

    for (int i=0; i<editors.length; i++) {

        //class : EmployeeEditor 
        //public static final String Id="rcp_demo.Editor.emp";  

          if (editors[i].getId().equals(EmployeeEditor.Id)) {
            page.activate(editors[i].getEditor(true));

            //or
            //page.closeEditor(page.getActiveEditor(),true);
            System.out.println("Employee Editor Exist");
            return null;
          } 
          else
          {
             page.closeEditor(page.getActiveEditor(), true);
             System.out.println("Close other Editor");  
          }
    }
...