Как определить источник события выделения текста, поступающего из CompareEditorInput в Eclipse? - PullRequest
4 голосов
/ 24 марта 2010

В моем плагине Eclipse у меня есть следующий код:

public class MyHandler extends AbstractHandler {
    @Override
    public Object execute( ExecutionEvent event ) throws ExecutionException {
        ISelection sel = HandlerUtil
            .getActiveWorkbenchWindowChecked( event )
            .getSelectionService()
            .getSelection();

        if( sel instanceof TextSelection ) {
            IEditorPart activeEditor = PlatformUI
                    .getWorkbench()
                    .getActiveWorkbenchWindow()
                    .getActivePage()
                    .getActiveEditor();
            IEditorInput editorInput = activeEditor.getEditorInput();

            if( editorInput instanceof CompareEditorInput ) {
                // here are two possible sources of the text selection, the
                // left or the right side of the compare editor.

                // How can I find out, which side it is from?
            }
        }
        return null;
    }
}

Здесь я обрабатываю событие выделения текста, полученное из CompareEditorInput, то есть результат сравнения двух удаленных ревизий файла с подклипсом.

Теперь я хочу правильно обработать выделение текста. Для этого я должен знать, выделяет ли он какой-либо текст в редакторе левой стороны или в редакторе правой стороны.

Как я могу это выяснить?

РЕДАКТИРОВАТЬ 2010-04-10:

Конкретный экземпляр CompareEditorInput - это org.tigris.subversion.subclipse.ui.compare.SVNCompareEditorInput.

1 Ответ

1 голос
/ 10 апреля 2010

Проблема в том, что org.eclipse.compare.CompareEditorInput (у которого здесь источники Java ) - это абстрактный класс , который не всегда имеет "левую" или "правую" панель:

/**
 * The most important part of this implementation is the setup 
 *  of the compare/merge UI.
 * The UI uses a simple browser metaphor to present compare results.
 * The top half of the layout shows the structural compare results 
 *  (e.g. added, deleted, and changed files),
 * The bottom half the content compare results  
 *  (e.g. textual differences between two files).
 * A selection in the top pane is fed to the bottom pane. 
 * If a content viewer is registered for the type of the selected object, 
 *  this viewer is installed in the pane.
 * In addition if a structure viewer is registered for the selection type,
 *  the top pane is split horizontally to make room for another pane 
 *  and the structure viewer is installed in it. 
 * When comparing Java files this second structure viewer would show 
 *  the structural differences within a Java file, 
 *  e.g. added, deleted or changed methods and fields.
 */

Вопрос: знаете ли вы точный тип реализации этого CompareEditorInput объекта?

I.e: Интересно посмотреть, как конкретные классы справляются с выбором:
Например, org.eclipse.compare.internal.ResourceCompareInput имеет дело с org.eclipse.jface.viewers.IStructuredSelection и поставляется с утилитой для перемещения влево и вправо IResource в зависимости от выбора .

...