Eclipse: подключение TextEditor к представлению свойств - PullRequest
0 голосов
/ 07 ноября 2011

В настоящее время я внедряю Eclipse-Plugin, который использует стандартное представление свойств, подключенное к навигатору.Он также имеет текстовый редактор, который может соединять области в своем документе с определенными объектами, которые могут предоставлять свойства для PropertiesView (то есть с теми же объектами, которые отображаются в навигаторе).Однако найденные мной Tuturials имели дело только с представлениями, в которых использовался предварительно реализованный просмотрщик, который уже поддерживал передачу выбранного элемента в представление свойств.TextEditor этого не делает (я использую jface и подкласс класса AbstractTextEditor), потому что его SelectionProvider возвращает информацию только о смещении и длине выделения.Как я должен изменить SelectionProvider моего TextEditor так, чтобы он предоставлял информацию, используемую для представления свойств?

Заранее спасибо

1 Ответ

0 голосов
/ 07 ноября 2011

Хорошо, мне удалось найти решение самостоятельно.

Прежде всего, мне пришлось реализовать метод getAdapter() в моем подклассе TextEditor, чтобы он возвращал адаптер для IPropertySourceProvider, который может работать с типом элементов, выбранных в моем AbstractTextEditor .

Затем я реализовал ISelection, который расширил TextSelection, чтобы не мешать любому специфическому для выбора механизму, предоставляемому AbstractTextEditor, и реализует интерфейс IStructuredSelection, потому что представление свойств работает с этим интерфейсом ISelection только.

IStructuredSelection содержит базовые методы массива, однако в моем случае можно выбрать только один элемент, поэтому реализация этих методов была тривиальной.

Последний шаг - доставить мой ISelection в нужное место. Перезаписи getSelection() -метода ISelectionProvider в AbstractTextEditor недостаточно, поскольку очевидно, что методы стрельбы SelectionChangedEvents не используют этот метод.

Таким образом, вместо использования стандартного SourceViewer, я использовал свою собственную реализацию, в которой я в основном переопределил методы fireSelectionChanged(int offset, int length) и firePostSelectionChanged(int offset, int lenght), так что они используют события, содержащие мой ISelection.

Остальное реализует обработку моих объектов в адаптере для IPropertySourceProvider таким образом, чтобы он возвращал IPropertySource для данного объекта, как это показано в различных руководствах.

...