Хорошо, мне удалось найти решение самостоятельно.
Прежде всего, мне пришлось реализовать метод 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
для данного объекта, как это показано в различных руководствах.