- Eclipse Plug-in Development:Beginner's Guide(Second Edition)
- Dr Alex Blewitt
- 465字
- 2021-07-14 10:36:34
Time for action – propagating selection
When the user selects an item in a viewer component, any registered selection listeners will be notified. In order to forward changes to the E4 selection service, a listener needs to be created to forward the selection to the ESelectionService
.
- Add the required packages to the bundle's package imports, by right-clicking on the
com.packtpub.e4.clock.ui
project and navigating to Plug-in Tools | Open Manifest to open the bundle's manifest. On the Dependencies tab, click on Add under the Imported Packages section and enterorg.eclipse.e4.ui.workbench.modeling
as well asorg.eclipse.e4.core.di.annotations
. - In order to forward selection changes to the E4 selection service, it must be injected into the view. Add a field
ESelectionService selectionService
annotated with@Inject
and@Optional
. When the part is created, the field will be filled with a selection service instance ornull
as appropriate:@Inject @Optional private ESelectionService selectionService;
- The selection changed event needs to trigger finding the selected object, then forwarding that on to the selection service. Add an
ISelectionChangeListener
to thetreeViewer
with the following:treeViewer.addSelectionChangedListener(event -> { // forward selection Object selection = ((IStructuredSelection)event.getSelection()). getFirstElement(); if (selection != null && selectionService != null) { selectionService.setSelection(selection); } });
- Test the application by putting a breakpoint in the
stSelection
method, and launch the Eclipse application inDebug
mode. Once it is running, open the Time Zone Tree View and select a time zone, after which the debugger should be presented. Verify that the selected time zone and theselectionService
have been injected correctly.
What just happened?
To receive selection events from the tree viewer, a listener must be registered to pick up changes. In order to forward this to the E4 selection service, it must be obtained using injection. By marking the field with @Inject
, the selection service will be automatically injected when the part is created.
By marking the field as @Optional
, if the selection service is not available, then a null value will be injected instead. If the field is not marked as @Optional
and the service is not available, the part would fail to be created. Since the selection updates aren't a core part of the view's functionality, it is better to fail safely and work with reduced functionality rather than fail completely.
Finally, when the selection change event occurs, the selected object is extracted from the viewer and then forwarded onto the selection service, but only if both the selection and the selection service are not null
.
Tip
Although the selection mechanism in Eclipse 3.x uses ISelection
interfaces (almost always IStructuredSelection
), the E4 selection service permits objects to be set directly. This also allows the type of the object to be selectively filtered when received. In Eclipse 3.x, the viewer would set the selectionProvider
on the viewPart
, which would handle the selection changes automatically.
- HornetQ Messaging Developer’s Guide
- Dynamics 365 for Finance and Operations Development Cookbook(Fourth Edition)
- 區塊鏈架構與實現:Cosmos詳解
- Java:Data Science Made Easy
- 大學計算機基礎(第2版)(微課版)
- 小程序開發原理與實戰
- Visual Basic程序設計實踐教程
- Java EE企業級應用開發教程(Spring+Spring MVC+MyBatis)
- OpenCV with Python By Example
- Python語言科研繪圖與學術圖表繪制從入門到精通
- RESTful Web Clients:基于超媒體的可復用客戶端
- Android移動應用開發項目教程
- Android Game Programming by Example
- Unity Android Game Development by Example Beginner's Guide
- 面向對象程序設計及C++(第3版)